настроить переменные emacs для конкретной функции - PullRequest
4 голосов
/ 05 июня 2009

Я запускаю почтовый клиент в отдельном окне emacs (обычно подключается к gnuserv), например,

emacs -f wl

(почтовый клиент - Wanderlust, что, вероятно, не имеет большого значения).

Можно ли заставить Emacs запомнить мой любимый

  • макет окна,
  • размеры основного окна,
  • шрифты, цвета и т. Д.,

установить их только при вызове wl? Грубо говоря, если я хочу иметь черный фон в почтовом клиенте, а белый в противном случае?

Я особенно заинтересован в сохранении макета окна, поскольку настройку по умолчанию необходимо настраивать вручную каждый раз при загрузке wl.

Ответы [ 2 ]

3 голосов
/ 05 июня 2009

Опираясь на ответ Török Gábor , вы можете использовать любой из нескольких пакетов для хранения и восстановления конфигураций окон / фреймов, многие из которых перечислены здесь . Различные пакеты оконного макета имеют свои причуды, поэтому вам нужно будет найти, какой вам нравится (так много пакетов, так как каждый находит что-то, что им не нравится в существующих пакетах, и катит свои собственные).

Что касается шрифтов и цветов, некоторые из них могут быть настроены для каждого кадра, см. Информационную страницу для параметров кадра .

Что касается того, как подключить его к функции 'wl, вы можете использовать advice , если хотите (мне нравится его использовать), но было бы гораздо проще просто настроить 'wl или напишите обертку, которая загружает конфигурацию фрейма / окна и затем вызывает 'wl. Тогда ваш вызов может измениться на:

emacs -f wlwrapper

Способ, которым настроен ваш emacsclient (или, для более старого Emacsen, gnuclient ) может быть причиной того, что решение TG не работает. Я бы, вероятно, использовал решение 'wlwrapper, настроив emacsclient для повторного использования существующего кадра, затем внутри 'wlwrapper измените 'default-frame-parameters и , затем , вызовите 'wl. Таким образом, вы гарантируете, что создаете фрейм после установки параметров.

как-то так не проверено :

(defun wlwrapper ()
  "wrapper for 'wl which sets up window/frame configurations"
   (let ((default-frame-alist (append
                               '((width . 82) (height . 36)
                                 (cursor-color . "#ffa200")
                                 (tool-bar-lines . 0)
                                 ;; ...
                                 )
                               default-frame-alist)))
     ;; if 'wl doesn't create a frame
     (select-frame (make-frame))
     (wl)
     ;; now use which ever window saving package you want
     ))
3 голосов
/ 05 июня 2009

Существует переменная default-frame-alist, которая позволяет вам указать внешний вид и поведение по умолчанию для нового фрейма (фрейм - это то, что вы называете отдельным окном Emacs). Хотя он переопределяет настройки для всего кадра, вы можете посоветовать вашей функции замаскировать его глобальное значение и установить его как ваше. Как то так:

(defadvice wl (around wl-frame-settings activate)
  (let ((default-frame-alist (append
                              '((width . 82) (height . 36)
                                (cursor-color . "#ffa200")
                                (tool-bar-lines . 0)
                                ;; ...
                                )
                              default-frame-alist)))
    ad-do-it))

Как указал TJ, у этого решения может быть недостаток, так как оно вызывается слишком поздно. TJ's wlwrapper может быть лучше.

...