有谁知道如何mark-ring
在按下时突出显示的过去位置C-u C-Space,并在按下以外 C-u C-Space的其他内容时删除?
也许只有一个让我们说 5 没有全屏亮点的历史。
我已经开始编写一个次要模式来做到这一点。你可以在 GitHub 上获得它:
https://github.com/kleiba/visual-mark-ring-mode
但是,请注意,这是一个非常初步的 0.1 版本——它可能根本不适合您。
(PS:如果有人愿意帮助我改进这个小模式,我将不胜感激。)
要突出显示标记环中的位置:
(defun highlight-ring-marks ()
(let ((markstr (char-to-string 8595)))
(put-text-property 0 1 'face '((:background "yellow") (:foreground "black"))
markstr)
(mapc (lambda (m)
(let ((ovl (make-overlay m m)))
(overlay-put ovl 'after-string markstr)
(overlay-put ovl 'mark-ring-pointer t)))
mark-ring)))
要取消突出显示它们:
(defun dehighlight-ring-marks ()
(mapc (lambda (ovl)
(and (overlay-get ovl 'mark-ring-pointer)
(delete-overlay ovl)))
(overlays-in (point-min) (point-max))))
有了这些,剩下的就是将突出显示代码连接到C-u C-SPC
并将取消突出显示代码添加到pre-command-hook
,以便在用户按下键时删除指示符:
(require 'cl) ; for lexical-let
(defun set-mark-and-highlight (pos)
(interactive "P")
(set-mark-command pos)
(when pos
(highlight-ring-marks))
;; call dehighlight-ring-marks, but only once
(lexical-let (hookfn)
(setq hookfn (lambda ()
(dehighlight-ring-marks)
(remove-hook 'pre-command-hook hookfn)))
(add-hook 'pre-command-hook hookfn)))
最后,将新命令绑定到C-SPC:
(global-set-key (kbd "C-SPC") 'set-mark-and-highlight)
一些 elisp 做你问的事情 https://www.emacswiki.org/emacs/VisibleMark
谷歌还显示有人在他们自己的网站 http://retroj.net/visible-mark上添加了该代码, 我目前正在尝试突出显示最后 3 个标记。在我的加载路径中添加了 visible-mark.el。将此添加到我的初始化文件中
(require 'visible-mark)
(defface visible-mark-face1
'((((type tty) (class mono))
(:inverse-video t))
(t (:background "gold4"))) "")
(defface visible-mark-face2
'((((type tty) (class mono)))
(t (:background "DarkOrange4"))) "")
(defface visible-mark-face3
'((((type tty) (class mono)))
(t (:background "red4"))) "")
(setq visible-mark-faces (quote (visible-mark-face1 visible-mark-face2 visible-mark-face3)))
; highlight the last 3 marks
(setq visible-mark-max 3)
; globally activate visible-mark-mode
(global-visible-mark-mode)