emacs - 在自定义 emacs 小模式中轻松显示有用信息 -- 模式行问题

标签 emacs modeline

背景:

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

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

<小时/>

问题:

在启用/禁用我的次要模式时,从模式行插入/删除文本的干净、不引人注目的方式是什么?我不希望用户必须修改他们的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,但我是来学习的。

最佳答案

查看变量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)))

关于emacs - 在自定义 emacs 小模式中轻松显示有用信息 -- 模式行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672251/

相关文章:

emacs - 如何自动(重新)编译 ELPA 包?

emacs - 根据主要模式更改Emacs模式行颜色

bash - Vim:打开文件后读取模式行?

emacs - emacs 的底部栏传达什么信息?

emacs - Clojure 1.2 发布了!如何让 swank-clojure 使用它?

emacs - 从 emacs 菜单栏中的 "Buffers"项更改菜单的大小

emacs - 如何定义参数数量可变的函数?

perl - 如何在 emacs 中使用 cscope 导航 perl 代码?

emacs - 如何将值固定在模型线的右侧?

emacs - 更改模型线的位置