4

背景:

我正在创建一个次要模式,它为用户提供有关他们正在访问的缓冲区是否使用制表符或空格进行缩进的“提示”(只需检查缓冲区中每一行的第一个字符)。我计划添加的一些功能包括模式行中的信息显示以及在使用制表符或空格、制表符宽度等之间切换的一些功能。

我并不真正关心这种次要模式的有用性。事实上,如果没有什么东西可以做同样的事情,我会感到惊讶。大多数情况下,这是编写次要模式的练习。


问题:

在启用/禁用我的次要模式时,从模式行中插入/删除文本的干净、不显眼的方式是什么?我不希望用户必须修改他们的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]”看起来很hackish 和丑陋......有没有更清洁的方法呢?

奖励积分: 对我同样谦虚的次要模式的卑微开端的任何评论: https ://github.com/mgalgs/indent-hints-mode/blob/master/indent-hints.el 我显然是一个 elisp n00b,但我是来学习的。

4

1 回答 1

5

查看 variable minor-mode-alist,它将变量与模式行中的字符串相关联。如果您更改代码以将变量设置为tab-lovingt(并将另一个变量设置为),您可以得到您想要的:space-lovingtnil

(setq minor-mode-alist (cons '(space-loving " [Space-loving]")
                             (cons '(tab-loving " [Tab-loving]")
                                   minor-mode-alist)))
于 2011-07-13T02:50:40.173 回答