在缓冲区顶部显示信息面板

时间:2013-12-09 14:54:32

标签: emacs elisp

我想在缓冲区的顶部显示几行,但不是作为实际缓冲区文本的一部分,仅用于显示。

具体来说,我想在打开文件时自动显示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中更合适的用户界面构造来做我想做的事?

2 个答案:

答案 0 :(得分:2)

如果你可以将它减少到一行,那么使用header-line-format - 它在每个缓冲区都是本地的。只需为所需的缓冲区设置变量即可。有关示例,请参阅Emacs来源,例如ruler-mode.el

你似乎已经使用标题行被驳回,说你想要一些“为缓冲区”。我不明白为什么你认为header-line-format没有给你你想要的东西(除了它只是一行)。

答案 1 :(得分:1)

是的,如果您希望在缓冲区中的特定位置放置仅显示文字,则可以使用包含after-stringbefore-string的叠加层。