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

Emacs 在缓冲区顶部显示信息面板,emacs,elisp,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

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

具体来说,我希望在打开文件时自动显示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 
(Single chars是那些日子里有承诺的人的首字母缩写。下面还会有一个图例)

听起来我想要一些类似的东西,但是作为缓冲。有类似的吗

我的一个想法是在缓冲区的开头使用一个覆盖层,并将我的文本放在那里,但我根本不确定这是“正确的事情”还是完全不合适/不合适的使用

我尝试了,并使其工作,使用字符在(点min)的覆盖,文本属性为'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中更合适的用户界面结构可以满足我的要求?

如果可以将其缩减为一行,则使用
标题行格式
——它在每个缓冲区中都是本地的。只需为所需的缓冲区设置变量。有关示例,请参见Emacs源,例如,
ruler mode.el


您似乎拒绝使用标题行,说您想要“缓冲区”中的某些内容。我不明白为什么您认为
标题行格式
不能提供您想要的内容(除了它只有一行)。

是的,如果您只想显示缓冲区中特定位置的文本,然后在字符串之后或字符串之前覆盖一些

标题行格式显示在窗口顶部,而不是缓冲区顶部。这些信息很有趣,但还没有有趣到可以一直出现在你面前。否则这可能会很有用(除了我需要三、四行,而不仅仅是一行)。(您可能还会看到
瞬时字符串显示
标尺模式
也可能会引起您的兴趣。