Обычно я запускаю emacs с графическим интерфейсом и сразу запускаю сервер (server-start)
. Теперь я могу легко открывать документы в моем существующем сеансе emacs из терминала через emacsclient -n <file>
или из браузера файлов.
Однако время от времени я хочу запускать emacs внутри моего терминала, используя emacsclient -t
. Чаще всего это происходит при написании журналов git commit или выполнении других очень маленьких задач. В этих случаях тот факт, что мой файл инициализации был загружен в экземпляре emacs с графическим интерфейсом, означает, что я не получаю никаких настроек, относящихся к emacs TTY.
Я знаю, что я могу бежать
emacs -nw -q -l "some-custom-init-file.el"
но это перезагрузит все пакеты каждый раз. Могу ли я получить лучшее из обоих миров? Есть ли способ настроить «демон TTY», чтобы я мог использовать отдельные настройки для запуска внутри терминала вместо просмотра файла в существующем окне emacs?
(setq linum-format "%d ")
помощью файла настроек TTY. Кроме того, моя цветовая тема всегда выглядит странно в режиме TTY, поэтому я определенно выберу другую тему для TTY. На самом деле у меня сейчас не так много различий, но теперь, когда я знаю, что могу иметь разные серверы, список может увеличиться.M-x report-emacs-bug
и запрашиваю новые функции, такие как возможность иметь разные темы лица в TTY и в кадрах GUI (на самом деле, тема может указывать совершенно разные цвета для этих разных типов рамок, так что вы также можете настроить свою тему) , Использование нескольких демонов для этих отдельных случаев - это просто обходной путь для отсутствия соответствующей функциональности в Emacs.Ответы:
Используйте
emacs --daemon=your-server-name -l "custom-init-file"
для запуска нового сервера иemacsclient -nw -s your-server-name
подключения к нему с самого терминала. Раздел «Использование Emacs в качестве сервера» в руководстве имеет больше опций инициализации.источник
-q
переключатель, чтобы неinit.el
запускать настройки по умолчанию перед пользовательским файлом инициализации.)emacsclient -s your-server-name -e "(kill-emacs)"
что хочешь? Вышесказанное просто называет истощением и злым умыслом(kill-emacs)
. Вы могли бы заменить(kill-emacs)
с ,(save-buffers-kill-emacs)
а также.-q
В дополнение к ответу @ Vamsi, вы можете получить многие из тех же преимуществ, работая только на одном сервере, прикрепив совет
make-frame-command
.Например, во время работы в терминале я хочу, чтобы цвет фона был
black
(который отображается на#202020
), но я хочу использовать#202020
в графическом режиме. Я реализовал это с помощью:Вы можете получить много пробега из этого используя
make-variable-frame-local
(set-background-color
в вышеупомянутом уже является frame-local).Я не знаю, является ли это лучшим шаблоном, но если у вас относительно мало различий между TTY-режимом и X-режимом Emacs, это может упростить управление конфигурацией.
Приведенный выше код был взят из моего .emacs.d .
источник
(display-graphic-p)
дает,t
если текущий кадр является графическим, вnil
противном случае. Поскольку кадры нельзя перемещать между графическими и нет (afaik), добавление рекомендаций по созданию кадров гарантирует, что желаемое состояние достигнуто для данного кадра.Вам не нужен совет для изменения настроек разных фреймов, запущенных в одном и том же демоне emacs. Просто используйте крюк,
after-make-frame-functions
как такТакое определение имеет дополнительный бонус: он устанавливает желаемую конфигурацию фрейма, даже если вы не запускаете его в режиме демона.
К сожалению,
load-theme
это не локальный фрейм, поэтому другие фреймы также окрашиваются, если вы действительно используете разные темы для текста и графических фреймов.Дополнительная информация: настройте свои терминалы как минимум на 256 цветов, чтобы получить реальное ощущение выбранной вами темы. Используйте такую настройку в одном из ваших файлов запуска оболочки:
источник