gpt4 book ai didi

emacs - 在 emacs 中可视化添加每行信息的最佳方式?

转载 作者:行者123 更新时间:2023-12-01 09:56:52 26 4
gpt4 key购买 nike

我正在为 emacs 编写一个次要模式,它至少会为缓冲区中的每一行计算一个数值。我想直观地显示它,最好在每一行之前整齐地显示。

我知道一些次要模式会被边缘化,我知道叠加层也是一种选择(它们相关吗?),但我无法在任何地方找到一个很好的例子来说明我想要什么。

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

最佳答案

这是一个简单的例子,说明了一种在 linum-mode 数字之后和文本行之前放置叠加层的方法。 我需要考虑一下字符数的右对齐问题。

注意:此方法考虑到 linum-mode 编号是在本示例中的代码之前生成的。如果使用 post-command-hookwidow-scroll-functions Hook 来实现这个提议的方法,那么这些 Hook 的添加将需要遵循随后及时到附加到这些相同 Hook 的linum-mode函数。

以下示例可以使用 post-command-hookwindow-scroll-functions Hook 来实现。有关如何在 redisplay 发生之前确定 window-startwindow-end 的示例,请参见以下链接:https://stackoverflow.com/a/24216247/2112489

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

(save-excursion
(let* (
(window-start (window-start))
(window-end (window-end)))
(goto-char window-end)
(while (re-search-backward "\n" window-start t)
(let* (
(pbol (point-at-bol))
(peol (point-at-eol))
(raw-char-count (abs (- peol pbol)))
(starting-column
(propertize (char-to-string ?\uE001)
'display
`((space :align-to 1)
(space :width 0))))
(colored-char-count
(propertize (number-to-string raw-char-count)
'face '(:background "gray50" :foreground "black")
'cursor t))
(one-spacer
(propertize (char-to-string ?\uE001)
'display
`((space :width 1))))
(two-spacers
(propertize (char-to-string ?\uE001)
'display
`((space :width 2))))
(final-char-count
(cond
((and
(< raw-char-count 100)
(> raw-char-count 9))
(concat one-spacer colored-char-count))
((< raw-char-count 10)
(concat two-spacers colored-char-count))
(t colored-char-count))) )
(overlay-put (make-overlay pbol pbol)
'before-string
(concat starting-column final-char-count two-spacers) )))))

关于emacs - 在 emacs 中可视化添加每行信息的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com