Один emacs.d/init.el для не-x сессии и x-сессии
Когда я запускаю emacs без запущенного x-сервера, некоторые вещи в моем init.el
потерпеть неудачу, например:
(require 'sr-speedbar)
не подходит без графического сервера, где мне лучше начать
(require 'speedbar)
Что эксперты Emacs рекомендуют как соответствующие init.el
конфигурация в тех случаях, когда emacs можно вызывать так же часто из режимов no-x, как и режимы на основе x? Существует ли установленный способ обеспечить общий параллельный опыт в режиме или изящном отступлении?
1 ответ
Многое зависит от того, в каких средах вы обычно работаете и какой уровень контроля вам нужен. Например, если вы просто хотите провести различие между работой в среде с полной графической поддержкой, вы можете использовать display-graphic-p, например:
(when (display-graphic-p)
;; do stuff which needs a graphic display)
Однако, если вам нужно различать разные платформы, например, при работе под OSX, вам нужно что-то вроде
(when (eq system-type 'darwin)
;; do stuff which should only run when on OSX'))
Наконец, для ситуаций, когда вам нужно что-то настроить только при работе под определенной оконной системой, вы можете использовать что-то вроде
(when (eq window-system 'x)
;; only under X window frame))
Однако есть некоторые тонкости, о которых нужно знать. Некоторые из этих переменных, такие как window-system, являются тестом текущего кадра. Итак, вам нужно подумать о том, когда код выполняется. Например, если вы запустите emacs как демон, каково будет значение window-system во время загрузки вашего init? Аналогично, если вы используете emacs в качестве демона или emacsclient, чтобы открыть новый "фрейм", он может быть открыт как в графическом, так и в текстовом фреймах. Иногда вам может понадобиться создать новую команду, которая оборачивается вокруг того, что вы хотите сделать, и выполняет тест в тот момент, когда вы выполняете команду, чтобы она могла реагировать на конкретный кадр, в котором вы находитесь, когда вы выполняете команду.