我想在缓冲区的顶部显示几行,但不是作为实际缓冲区文本的一部分,仅用于显示。
具体来说,我想在打开文件时自动显示Git时间线(尚未发布,对不起),这样我就可以轻松看到最近的活动了:
P DP D D
T=F=S=S=M=T=W=T=F=S=S=M=T=W=T=F=S=S=M==T==W==T==F==S==S==M==T==W==T==F==S==S==M=
11 18 25 2 9
(单个字符是当时提交的人的首字母缩写。下面还会有一个图例)
听起来我想要像header line这样的东西,但是对于缓冲区。有什么类似的吗?
我的一个想法是在缓冲区的开头使用叠加层并将我的文本放在那里,但我完全不确定这是“正确的事情”还是完全不恰当/不适合使用它。 / p>
我试过,并使用了(点 - 分)的char的叠加,使用了'before-string的文本属性和上面的字符串文字(带有换行符和尾随换行符)。这是一个概念证明:
(defun test/add-overlay ()
(interactive)
(setq test/timeline-overlay (make-overlay (point-min) (+ (point-min) 1)))
(overlay-put test/timeline-overlay 'timeline-panel t)
(overlay-put test/timeline-overlay 'before-string
(propertize " P DP D D \nT=F=S=S=M=T=W=T=F=S=S=M=T=W=T=F=S=S=M==T==W==T==F==S==S==M==T==W==T==F==S==S==M=\n 11 18 25 2 9
" 'face 'font-lock-comment-face))
)
(defun test/remove-overlay ()
(interactive)
(remove-overlays (point-min) (point-max) 'timeline-panel t)
)
这似乎工作得很好,但我不确定它是否可能与其他东西发生冲突。
这是要走的路,还是Emacs中更合适的用户界面构造来做我想做的事?
答案 0 :(得分:2)
如果你可以将它减少到一行,那么使用header-line-format
- 它在每个缓冲区都是本地的。只需为所需的缓冲区设置变量即可。有关示例,请参阅Emacs来源,例如ruler-mode.el
。
你似乎已经使用标题行被驳回,说你想要一些“为缓冲区”。我不明白为什么你认为header-line-format
没有给你你想要的东西(除了它只是一行)。
答案 1 :(得分:1)
是的,如果您希望在缓冲区中的特定位置放置仅显示文字,则可以使用包含after-string
或before-string
的叠加层。