Emacsclient: Một emacs duy nhất xử lý mọi lúc từ khi khởi động & không bao giờ đóng và ẩn GUI tốt hơn


9

Vì emacsclient có thể xử lý thời gian tải gói dài trước đây, tôi thực sự muốn giữ ít nhất một quy trình emacs và hầu hết thời gian chỉ có một quy trình emacs , mở dưới dạng quy trình nền và ẩn GUI tốt hơn.

Ngay bây giờ tôi đã định nghĩa hàm sau trong .bashrc:

emc () 
{ 
    if [[ $# -eq 0 ]]; then
        emacs --eval "(suspend-frame)" &
        return
    fi
    args=($*);
    setsid emacsclient -c -e "(find-file \"${args[*]}\")"
}

Và cũng có dòng sau trong .bashrc:

emc

Vì vậy, mỗi khi tôi mở một cái vỏ, cuối cùng tôi sẽ có một quy trình emacs mới.

Vấn đề là tôi sẽ có thêm quá trình emacs không cần thiết sau khi mở nhiều shell. Tuy nhiên, tôi chỉ muốn duy trì một quá trình emacs duy nhất mọi lúc từ khi khởi động ẩn GUI tốt hơn .


5
Tôi không quen với việc thực hành emacs --eval "(suspend-frame)"hơn là emacs --daemon( emacswiki.org/emacs/EmacsAsDaemon ). Có một lý do bạn chọn không gọi emacs như một daemon? Bạn có thể sử dụng một cái gì đó như pgrep -U `whoami` emacs || emacs --daemon &để đảm bảo rằng nó đang chạy.
ebpa

Kiểm tra các tập lệnh của MJ Wall để sử dụng ứng dụng khách Emacs.
Tianxiang Xiong

Câu trả lời:


13

Tôi làm điều này bằng cách bắt đầu một daemon emacs khi tôi đăng nhập. Nơi bạn đặt lệnh này phụ thuộc vào trình quản lý máy tính để bàn của bạn. Tôi sử dụng i3, được cấu hình để chạy tập lệnh khi đăng nhập bao gồm:

emacs --daemon &

Cùng với đó, emacs luôn chạy trong nền và tôi mở một ứng dụng khách mới emacsclient -c -n, gắn với một phím bấm tiện lợi trong trình quản lý cửa sổ. Nếu bạn đang làm việc trong một thiết bị đầu cuối, bạn chỉ cần một bí danh đơn giản như alias emc='emacsclient'có thể kèm thêm -n, -choặc -tđối số, tùy thuộc vào cách bạn sử dụng nó.

Hãy kiểm tra các tùy chọn cho emacsclient trong hướng dẫn: ( (emacs) Tùy chọn emacsclient , có thể truy cập từ Emacs bởi C-h r m emacsclient options <enter>). Bạn có thể sử dụng -alá cờ tự động bắt đầu một emacs daemon nếu nó không được chạy rồi, và -chay -tđể mở một khung mới hoặc khách hàng thiết bị đầu cuối, chứ không phải là tái sử dụng hiện có (trong cùng một phiên):

'-A QUYỀN'
'--alternate-Editor = THÔNG TIN'
     Chỉ định một lệnh để chạy nếu 'emacsclient' không liên lạc được với Emacs.
     Điều này hữu ích khi chạy 'emacsclient' trong một tập lệnh.

     Như một ngoại lệ đặc biệt, nếu LỰA là chuỗi rỗng, thì
     'emacsclient' bắt đầu Emacs ở chế độ daemon (dưới dạng 'emacs --daemon') và
     sau đó thử kết nối lại.

'-C'
'- tạo khung'
     Tạo một khung hình máy khách đồ họa mới, thay vì sử dụng một đồ họa hiện có
     Khung Emacs. Xem bên dưới để biết hành vi đặc biệt của 'Cx C-c' trong
     khung khách hàng. Nếu Emacs không thể tạo khung đồ họa mới (ví dụ:
     nếu không thể kết nối với máy chủ X), nó sẽ cố gắng tạo một văn bản
     khung máy khách đầu cuối, như thể bạn đã cung cấp tùy chọn '-t'
     thay thế.

'-t'
'- tty'
'-nw'
     Tạo khung máy khách mới trên thiết bị đầu cuối văn bản hiện tại, thay vì
     sử dụng khung Emacs hiện có. Điều này hoạt động giống như '-c'
     tùy chọn, được mô tả ở trên, ngoại trừ việc nó tạo ra một thiết bị đầu cuối văn bản
     khung (* lưu ý Thiết bị đầu cuối không có cửa sổ: :).

4

Nếu bạn đang sử dụng một hệ điều hành sử dụng trình quản lý dịch vụ systemd (hiện bao gồm hầu hết các bản phân phối GNU / Linux), thì giải pháp tốt nhất có thể là sử dụng systemd để khởi động trình nền Emacs của bạn khi khởi động. Bạn có thể làm điều này bằng cách tạo một tệp $HOME/.config/systemd/user/emacs.servicecó nội dung sau:

[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/

[Service]
Type=simple
ExecStart=/usr/bin/emacs --fg-daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure

[Install]
WantedBy=default.target

Sau đó, bạn nên bắt đầu dịch vụ và đặt nó tự động bắt đầu cho tất cả các lần khởi động trong tương lai:

$ systemctl enable --user emacs
$ systemctl start --user emacs

Bây giờ bạn có thể sử dụng emacsclientnhư bình thường. Nếu bạn thường chạy nó với -n, -choặc -ttùy chọn, bạn có thể thiết lập một bí danh trong vỏ của bạn. Bạn cũng có thể muốn đặt các biến EDITORvà / hoặc VISUALbiến môi trường để chạy emacsclienttheo cách bạn muốn. Ví dụ: trong Bash, bạn có thể thêm phần sau vào .bashrctệp của mình :

alias emc="emacsclient -c"
export VISUAL="emacsclient -c"
export EDITOR="emacsclient -t"

Nếu bạn cần dừng daemon Emacs, bạn có thể làm điều này như sau:

$ systemctl stop --user emacs

Và nếu bạn muốn ngăn chặn vĩnh viễn nó chạy trên boot:

$ systemctl disable --user emacs

1
có lẽ liên kết này đến EmacsWiki nên được thừa nhận: EmacsAsDaemon
HongboZhu

0

Cách tôi thực hiện khá giống với câu trả lời trước đó, bằng cách đặt bí danh trong .bashrc của tôi cho emacs --daemon

alias ds="emacs --daemon"

Ngoài ra, tôi có một phím tắt bàn phím ctrl-alt-Eđược đặt thành emacsclient -c. Khi tôi muốn bắt đầu làm việc trên emacs, tôi mở một thiết bị đầu cuối và gõ dsvà gọi từng cá thể emacsclient bằng phím tắt của tôi.

Hy vọng điều này sẽ giúp được ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.