легко отображать полезную информацию в пользовательском второстепенном режиме Emacs - PullRequest
4 голосов
/ 13 июля 2011

Справочная информация:

Я создаю второстепенный режим, который дает пользователю «подсказки» о том, использует ли просматриваемый буфер вкладки или пробелы для отступа (просто проверяя первый символ каждой строки в буфере). Некоторые функции, которые я планирую добавить, включают информационное отображение в строке режима и несколько функций для переключения между использованием табуляции или пробелов, ширины табуляции и т. Д.

Меня не особо беспокоит полезность этого второстепенного режима. На самом деле, я был бы удивлен, если бы уже не было чего-то такого, что делает то же самое. В основном это упражнение в написании второстепенных режимов.


Вопрос:

Каким будет чистый, ненавязчивый способ вставки / удаления текста из строки режима при включении / отключении моего второстепенного режима? Я не хочу, чтобы пользователю приходилось изменять свои mode-line-format, я просто хочу неразрушающим образом вставить и удалить текст. Сейчас я использую функцию, которая выглядит примерно так:

(defun update-indent-hints-mode-line (what-this-buffer-loves)
  (let ((indent-hints-mode-line-text (concat " " "[" what-this-buffer-loves "-loving" "]"))
        (my-mode-line-buffer-identification
         (remq " [Tab-loving]" (remq " [Space-loving]" mode-line-buffer-identification))))
    (setq mode-line-buffer-identification
          (add-to-list 'my-mode-line-buffer-identification
                       indent-hints-mode-line-text
                       t))
    (force-mode-line-update)))

Работает нормально, но поиск и удаление "[Tab-loving]" и "[Space-loving]" кажется довольно хакерским и уродливым ... Есть ли более чистый способ сделать это?

Бонусные баллы: Любые комментарии о скромных началах моей столь же скромной минорной моды: https://github.com/mgalgs/indent-hints-mode/blob/master/indent-hints.el Я, очевидно, elisp n00b, но я здесь, чтобы учиться.

1 Ответ

5 голосов
/ 13 июля 2011

Проверьте переменную minor-mode-alist, которая связывает переменные со строками в строке состояния. Если вы измените свой код на переменную tab-loving на t или space-loving на t (а другую переменную на nil), вы можете получить то, что вам нужно:

(setq minor-mode-alist (cons '(space-loving " [Space-loving]")
                             (cons '(tab-loving " [Tab-loving]")
                                   minor-mode-alist)))
...