Emacsclient: Один єдиний процес emacs весь час від запуску і ніколи не закривайте та краще приховуйте графічний інтерфейс


9

Оскільки emacsclient може обробляти довгий час завантаження пакунків, я дуже хочу тримати принаймні один процес emacs, а більшу частину часу лише один процес emacs , відкритий як фоновий процес і краще приховуючи графічний інтерфейс.

Зараз я визначив наступну функцію в .bashrc:

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

А також є наступний рядок у .bashrc:

emc

Тому щоразу, коли я відкриваю оболонку, у мене з’явиться новий процес emacs.

Проблема полягає в тому, що після відкриття багатьох оболонок у мене з'явиться багато додаткових непотрібних процесів emacs. Однак я хочу лише підтримувати один процес emacs весь час від запуску, краще приховати графічний інтерфейс .


5
Я не знайомий з практикою, emacs --eval "(suspend-frame)"а не emacs --daemon( emacswiki.org/emacs/EmacsAsDaemon ). Чи є причина, по якій ви не хочете посилатися на emacs як демон? Ви можете використовувати щось на кшталт того, pgrep -U `whoami` emacs || emacs --daemon &щоб переконатися, що воно працює.
ebpa

Перевірте сценарії MJ Wall для використання клієнта Emacs.
Tianxiang Xiong

Відповіді:


13

Я роблю це, запускаючи демон emacs під час входу. Де ви поставите цю команду, залежить від вашого менеджера робочого столу. Я використовую i3, який налаштований для запуску сценарію при вході в систему, який включає в себе наступне:

emacs --daemon &

З цим, Emacs завжди працює у фоновому режимі, і я відкриваю новий клієнт emacsclient -c -n, прив’язаний до зручного введення ключів у вікні диспетчера. Якщо ви працюєте в терміналі, вам потрібно всього лише простий псевдонім , як alias emc='emacsclient', можливо , з -n, -cабо -tаргументи, в залежності від того, як ви його використовуєте.

Ознайомтеся з параметрами для emacsclient в посібнику: ( (emacs) Параметри emacsclient , доступні через Emacs від C-h r m emacsclient options <enter>). Ви можете використовувати -aпрапор для автоматичного запуску демона emacs, якщо він вже не працює, -cабо -tдля відкриття нового клієнта кадру або терміналу, а не повторного використання існуючого (у тому ж сеансі):

'-У КОМАНДІ'
'- alternate-editor = COMMAND'
     Вкажіть команду для запуску, якщо 'emacsclient' не вдається зв’язатися з Emacs.
     Це корисно при запуску "emacsclient" у сценарії.

     Як особливий виняток, якщо COMMAND - порожній рядок, то
     'emacsclient' запускає Emacs в демон-режимі (як 'emacs --daemon') і
     потім намагається знову підключитися.

'-c'
'- створити-кадр'
     Створіть новий графічний “клієнтський кадр”, а не використовуючи існуючий
     Кадр Emacs Дивіться нижче про особливості поведінки "Cx C-c" в а
     клієнтська рамка. Якщо Emacs не може створити новий графічний кадр (наприклад,
     якщо він не може підключитися до сервера X), він намагається створити текст
     термінальний клієнтський кадр, як би ви поставили опцію '-t'
     замість цього.

'-t'
'--тільки'
'-nw'
     Створіть замість: новий кадр клієнта на поточному текстовому терміналі
     використовуючи існуючий кадр Emacs. Це поводиться так само, як "-c"
     варіант, описаний вище, за винятком того, що він створює текстовий термінал
     frame (* Примітка Невіконних терміналів: :).

4

Якщо ви використовуєте операційну систему, яка використовує диспетчер служб systemd (який сьогодні включає більшість дистрибутивів GNU / Linux), то найкращим рішенням може бути використання systemd для запуску демона Emacs під час завантаження. Це можна зробити, створивши файл $HOME/.config/systemd/user/emacs.serviceіз таким вмістом:

[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

Потім слід запустити послугу і встановити її для автоматичного запуску для всіх майбутніх черевиків:

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

Тепер ви можете використовувати emacsclientяк завжди. Якщо ви зазвичай запустити його з -n, -cабо -tваріантів, ви можете встановити псевдонім у вашій оболонці. Ви також можете встановити EDITORта / або VISUALзмінні середовища для запуску emacsclientтак, як вам подобається. Наприклад, у Bash ви можете додати у свій .bashrcфайл таке:

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

Якщо вам коли-небудь потрібно зупинити демон Emacs, ви можете зробити це наступним чином:

$ systemctl stop --user emacs

І якщо ви хочете назавжди зупинити його на завантаженні:

$ systemctl disable --user emacs

1
можливо, це посилання на EmacsWiki слід визнати: EmacsAsDaemon
HongboZhu

0

Те, як я це роблю, досить схоже на попередню відповідь, маючи псевдонім, визначений у моєму .bashrc for emacs --daemon

alias ds="emacs --daemon"

Крім цього, у мене є ключ-дошка швидкого ctrl-alt-Eнабору для emacsclient -c. Коли я хочу почати працювати над emacs, я відкриваю термінал і dsнабираю і викликаю кожен екземпляр emacsclient моїм ярликом.

Сподіваюся, що це комусь допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.