Ширина поля в Emacs?

Я использую следующий фрагмент, чтобы установить 1-символьное поле для обоих краев буфера Emacs ( благодаря zev!):

(add-hook 'window-configuration-change-hook
      (lambda ()
        (set-window-margins (car (get-buffer-window-list (current-buffer) nil t)) 1 1)))

Однако я также хотел бы иметь другую конфигурацию, которая дает мне очень широкие левые и правые поля (скажем, 30 символов). Как я мог назначить горячую клавишу для переключения между этими двумя состояниями, возможно, по всем буферам?

Я попробовал следующее:

(global-set-key [(control f10)]
(add-hook 'window-configuration-change-hook
      (lambda ()
        (set-window-margins (car (get-buffer-window-list (current-buffer) nil t)) 30 30))))

Но получил эту ошибку:

Wrong type argument: commandp, ((lambda nil (set-window-margins (car (get-buffer-window-list (current-buffer) nil t)) 30 30)) (lambda nil (set-window-margins (car (get-buffer-window-list (current-buffer) nil t)) 1 1)) frame-local-variables-check)

Где я не прав? Спасибо за любые объяснения. Ура!

РЕДАКТИРОВАТЬ:

Я хорошо знаю режим темной комнаты, который обеспечивает такие широкие поля. Но, похоже, он не работает безупречно на моей XP.

1 ответ

Решение

Это должно заставить вас идти:

(global-set-key [C-f10]
     (lambda ()
     (interactive)
     (set-window-margins (car (get-buffer-window-list (current-buffer) nil t)) 30 30)))

Ваш пример не работает, так как global-set-key ожидает, что второй аргумент будет commandотсюда и ошибка. Также ваше ключевое определение немного странно.

Для вашего комментария:

(walk-windows (lambda (window) (set-window-margins window 30 30)) nil t)
Другие вопросы по тегам