2012-04-01 16 views
5

Giả sử máy chủ Emacs đang chạy, tôi muốn emacsclient <file> để tạo khung mới (như -c) khi không có khung hiện có hoặc tái sử dụng khung hiện có khi có. Nói cách khác, tôi chỉ muốn -c khi không có khung hiện có. Điều đó có thể không?Tạo hoặc sử dụng lại khung giao diện Emacs hiện có

+0

Mà không phải là những gì rời ra '-c' làm không? Có nghĩa là một 'emacsclient yourfile.ext' đơn giản sẽ mở trong một khung hiện có nếu có, và nếu không có thì nó sẽ tạo ra một khung. –

Trả lời

1

tôi giải quyết vấn đề của tôi với một tập hợp các kịch bản shell.

my_emacs

#!/bin/sh 
emacs24-x [email protected] 1> /dev/null 2> /dev/null & 

bạn có thể cần phải thay đổi emacs24-x để một cái gì đó trỏ đến emacs X11 của bạn.

my_emacsclient

#!/bin/sh 
emacsclient [email protected] 1> /dev/null 2> /dev/null || my_emacs 

Thêm cả hai tệp vào bạn PATH qua ~/bin hoặc tương tự.

Trong emacs của tôi Tôi cũng đã thêm các nội dung sau dòng

(load "server") 
(unless (server-running-p) (server-start)) 

Cũng thay đổi một số biến môi trường và tùy chọn thêm một bí danh

export ALTERNATE_EDITOR="my_emacs" 
export EDITOR="my_emacsclient -n" 
export SUDO_EDITOR="my_emacsclient" 
... 
alias e="$EDITOR" 

Khi bạn chạy e trong vỏ của nó nên tạo hoặc resuse một khung giao diện hiện có. Ngoài ra, chạy e <filename> sẽ mở tệp đó trong một khung; bạn cũng có thể chuyển các cờ khác như -n đến e.

Đối với hành vi tương tự trong các ứng dụng khác (nói trình quản lý tệp của bạn), bạn cũng nên thay đổi tệp .desktop Emacs (cho tôi là /usr/share/applications/emacs24.desktop) để chạy my_emacs. Bạn có thể thay đổi emacs thành my_emacsclient qua hệ thống thay thế trong bản phân phối Debian (dựa trên Debian).

+0

Đối với bất kỳ ai có thể sử dụng thiết lập của tôi. Nó không hoàn hảo và có một số sai sót kế thừa. Ví dụ, nếu bạn cố gắng 'sudo -e ' khi không có Emacs nào được khởi động thì nó sẽ thất bại. Cũng đơn giản gọi 'e' khi Emacs đã bắt đầu tạo một khung mới thay vì nâng khung hiện có lên. Tôi sẽ cố gắng sửa lỗi này và cho bạn biết. –

0

emacsclient <file> làm những gì bạn muốn.

Nếu bạn chỉ muốn mở một khung mà không chỉ định một tập tin, sau đó bạn cần phải sử dụng -c.

+2

Không chính xác. Khi không có khung giao diện nào tồn tại, 'emacsclient ' mở trong một khung đầu cuối. –

0

Bạn có thể muốn thử '--display emacsclient "$ DISPLAY" "để buộc tạo ra một khung giao diện nếu không có một được nêu ra.

+1

Mh, vẫn không hiệu quả với tôi. Nó mở ra một khung đầu cuối cho tôi. –

+0

@Renke: 'echo" DISPLAY = $ DISPLAY "' cho bạn biết điều gì? – Stefan

+0

'DISPLAY =: 0.0' như mong đợi. –

0

Đây là giải pháp của tôi:

Trong emacs của bạn tập tin khởi động (ví dụ: ~/emacs/init.el), đảm bảo rằng bạn có những dòng sau:

;; start emacs server, if it's not already running: 
(require 'server) 
(unless (server-running-p) (server-start)) 

Sau đó, thêm dòng sau vào tập tin ~/.bashrc của bạn:

function e() 
{ 
    emacsclient "[email protected]" -a "emacs" 
} 

để thiết lập một đường cơ sở, đảm bảo bạn thoát khỏi tất cả các trường emacs và giết emacs daemon nếu bạn đang có nó chạy.

Sau đó, từ dòng lệnh, 'nguồn' ~ /.bashrc file:

source ~/.bashrc 

Cuối cùng, sử dụng 'e' để chỉnh sửa một tập tin:

e Foobar.java & 
e notes.txt & 
Các vấn đề liên quan