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

#emacs #line-numbers

#emacs #номера строк

Вопрос:

Я хотел бы отключить номера строк в Emacs, потому что их наличие в Org-mode, terminal, 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))))
  

Ответ №1:

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

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

Аналогично вы можете сделать это для text-mode — это позволит для text-mode файлов на основе всех:

 (add-hook 'text-mode-hook 'my-display-numbers-hook)
  

Комментарии:

1. text-hook должно быть text-mode-hook , и, как org-mode вытекает из text-mode этого, будут включены номера строк для org-mode. Вы можете отключить их снова в org-mode-hook , или же добавить условную логику в функцию для их включения (вы можете протестировать major-mode ).

2. Да, спасибо @phils — я не копировал код, а ввел его вручную и допустил ошибку. Я изменил это

3. @ZoltanKing (display-line-numbers-mode t) работает, но не является лучшей практикой. Для строки документа (и для любого второстепенного режима) аргументом должно быть положительное число (традиционно 1): (display-line-numbers-mode 1)

4. Я старожил, привыкший к

5. Основная проблема с использованием t для включения заключается в том, что он предполагает, что вы будете использовать nil для отключения, что неверно — nil также включает безоговорочно (и даже в прошлом он использовался для переключения, а не для отключения). Это нормально, если вы знаете, но я думаю, что предложение использовать t in S. E. ответы могут сбить с толку читателей позже.