在emacs中直观地添加每行信息的最佳方法?

在emacs中直观地添加每行信息的最佳方法?,emacs,elisp,Emacs,Elisp,我正在为emacs编写一个次要模式,它至少会为缓冲区中的每一行计算一个数值。我希望在每一行之前都能直观地显示出来 我知道一些次要模式会吸引边缘,我知道叠加也是一种选择(这些相关吗?),但我在任何地方都找不到我想要的好例子 基本上,我想要一些类似linum模式的行号,但是每次修改缓冲区时都需要更改(实际上,只有当它们所在的行发生更改时)。例如,每行都有一个字符计数器。如果可能的话,我希望它不破坏linum模式,但不依赖于它,等等。这里有一个简单的例子,可以在linum模式数字之后和文本行之前放置覆

我正在为emacs编写一个次要模式,它至少会为缓冲区中的每一行计算一个数值。我希望在每一行之前都能直观地显示出来

我知道一些次要模式会吸引边缘,我知道叠加也是一种选择(这些相关吗?),但我在任何地方都找不到我想要的好例子


基本上,我想要一些类似linum模式的行号,但是每次修改缓冲区时都需要更改(实际上,只有当它们所在的行发生更改时)。例如,每行都有一个字符计数器。如果可能的话,我希望它不破坏linum模式,但不依赖于它,等等。

这里有一个简单的例子,可以在
linum模式
数字之后和文本行之前放置覆盖。我需要考虑一下字符数的正确对齐

注意:此方法考虑在本例中,在后面的代码之前生成
linum模式
编号。如果使用
post命令钩子
widow滚动函数
钩子来实现此建议的方法,那么这些钩子的添加将需要及时跟进附加到这些钩子的
linum模式
函数

下面的示例可以通过
post命令钩子
窗口滚动功能
钩子来实现。有关如何在
重新显示之前确定
窗口开始
窗口结束
的示例,请参见以下链接:

编辑:增加了字符数的右对齐方式——最多考虑三位数字(即每行最多999个字符)。字符计数覆盖后的文本现在左对齐

(保存短途旅行)
(让我们*(
(窗口开始(窗口开始))
(窗端(窗端)))
(转到字符窗口结束)
(同时(向后搜索“\n”窗口开始t)
(让我们*(
(中国人民银行(bol点))
(peol(下线点))
(原始煤焦计数(abs(-peol-pbol)))
(起始列)
(属性化(字符到字符串?\uE001)
"展示,
`((空格:对齐到1)
(空格:宽度0)))
(彩色字符数)
(属性(数字到字符串原始字符计数)
“面”(:背景“灰色50”:前景“黑色”)
(t)
(一个垫片
(属性化(字符到字符串?\uE001)
"展示,
`((空格:宽度1)))
(两个垫片
(属性化(字符到字符串?\uE001)
"展示,
`((空格:宽度2)))
(最终字符数)
(续)
((及
(原始字符数9))
(concat一个间隔色字符计数)
((<原始字符数10)
(concat两个间隔色字符计数)
(t色字符数)
(套印出售(制作套印pbol pbol)
“在弦之前
(concat起始列最终字符数两个分隔符)()()())())))
代码;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; M-x字符计数模式
(defvar char-count-p nil
“当'char-count-p'为非-'nil'时,将显示叠加。”)
(将变量缓冲区设为本地“char-count-p”)
(defvar char count此命令为零
“此局部变量是在'post command hook'中设置的;并且,
也被“窗口滚动功能”钩子使用。)
(使用此命令将变量缓冲区设为本地“字符计数”)
(defvar字符计数覆盖列表nil
“用于存储覆盖层直到将其删除的列表。”)
(使变量缓冲区成为本地“字符计数覆盖列表”)
(defun char count post命令挂钩()
“文档字符串。”
(setq char count此命令此命令)
(字符计数功能)
(取消字符计数窗口滚动功能(win\u start)
“文档字符串。”
(字符计数功能)
(defun equal包括属性--删除覆盖(beg end name val)
使用'equal'而不是'eq'删除覆盖层
(何时(和beg结束名称val)
(叠加重新居中端)
(dolist(o(beg端的覆盖层))
(当(相等,包括属性(覆盖获取o名称)val)
(删除叠加o(()())))
(defun字符计数函数()
“字符计数函数的文档字符串。”
(何时)
(及
字符计数模式
使用此命令进行字符计数
(window-live-p(获取缓冲区窗口(当前缓冲区)))
(非(小型缓冲区))
(位置-visible-in-window-p(点)
(获取缓冲区窗口(当前缓冲区)(选定帧))t)
(删除字符计数覆盖)
(省去远足
(让我们*(
柜台
(选定窗口(选定窗口))
(窗口开始(窗口开始选定窗口))
(窗口结束(窗口结束选定窗口t)))
(转到字符窗口结束)
(完)
(而t
(当柜台
(向后重新搜索“\n”窗口开始t))
(何时(非计数器)
(setq计数器t)
(让我们*(
(中国人民银行(bol点))
(peol(下线点))
(原始煤焦计数(abs(-peol-pbol)))
(起始列)
(属性化(字符到字符串?\uE001)
"展示,
`((空格:对齐到1)(空格:宽度0)))
(彩色字符数)
(属性(数字到字符串原始字符计数)
“面”(:背景“灰色50”:前景“黑色”))
(一个垫片
(属性化(字符到字符串?\uE001)
"展示,
`((空格:宽度1)))
(两个垫片