Отключить номера строк, но разрешить их в прог-режиме и в текстовом режиме

Я хотел бы отключить номера строк в Emacs, потому что их использование в режиме Org, терминале, mu4e, elfeed и т. Д. Выглядит некрасиво.

Итак, я удалил это:

(global-display-line-numbers-mode t)

Теперь мне интересно, можно ли включить номера строк только для prog-mode и, в конечном итоге, для обычных текстовых файлов (но не для Org), я думаю, что text-mode.

Любое предложение приветствуется.

  (dolist (mode '(text-mode-hook
                  prog-mode-hook
                  conf-mode-hook))
    (add-hook mode (lambda () (display-line-numbers-mode 1))))

person Zoltan King    schedule 07.11.2020    source источник


Ответы (1)


вам нужно просто включить их для соответствующих режимов с помощью хуков. Хук должен вызвать display-line-numbers-mode с t в качестве аргумента для включения этого режима. Лично я предпочитаю помещать код для ловушки в отдельную функцию, которую можно было бы переопределить в любой момент, если необходимо, примерно так (эта ловушка будет вызываться при входе в файл в большинстве режимов программирования):

(defun my-display-numbers-hook ()
  (display-line-numbers-mode t)
  )
(add-hook 'prog-mode-hook 'my-display-numbers-hook)

Аналогичным образом вы можете сделать это для text-mode - он будет включен для всех файлов на основе text-mode:

(add-hook 'text-mode-hook 'my-display-numbers-hook)
person Alex Ott    schedule 07.11.2020
comment
text-hook должен быть text-mode-hook, и поскольку org-mode является производным от text-mode, это включит номера строк для организационного режима. Вы можете снова отключить их в org-mode-hook или добавить к функции условную логику для их включения (вы можете протестировать major-mode). - person phils; 09.11.2020
comment
Да, спасибо @phils - я не копировал код, а ввел его вручную и ошибся. Я изменил это - person Alex Ott; 09.11.2020
comment
@ZoltanKing (display-line-numbers-mode t) работает, но это не лучшая практика. В строке документации (и, как и для любого второстепенного режима) аргумент должен быть положительным числом (традиционно 1): (display-line-numbers-mode 1) - person phils; 09.11.2020
comment
Я старожил, имею привычку к т - person Alex Ott; 09.11.2020
comment
Основная проблема с использованием t для включения заключается в том, что он предлагает использовать nil для отключения, что неверно - nil также включает безоговорочно (и даже в прошлом он использовался для переключения, а не для отключения). Это нормально, если вы знаете, но я думаю, предлагая использовать t в S.E. ответы могут сбить с толку читателей позже. - person phils; 09.11.2020
comment
Alex Ott - Я обновил свой пост. Не могли бы вы взглянуть на конец сообщения. Есть блок кода. Как вы думаете, код, который я использую с dolist, подходит? Он активирует номера строк для трех режимов. - person Zoltan King; 17.11.2020
comment
это нормально, но обратите внимание на предложение, которое я написал: я лично предпочитаю помещать код для ловушки в отдельную функцию, которую можно было бы переопределить в любой момент, если это необходимо - основная причина того, что при каждом выполнении dolist новая лямбда будет будет сгенерирован, поэтому удалить эту лямбду из списка перехватчиков будет непросто по сравнению с использованием названной функции ... - person Alex Ott; 17.11.2020