突出显示Emacs中的标记环位置

时间:2012-11-02 21:54:57

标签: emacs highlight

当按 Cu C-Space 时,是否有人知道如何获取mark-ring的过去位置以及除<之外的其他内容时删除按下kbd> Cu C-Space

也许只有一段历史让我们说5不要有全屏的亮点。

3 个答案:

答案 0 :(得分:4)

我已经开始写一个小模式来做到这一点。你可以在GitHub上找到它:

https://github.com/kleiba/visual-mark-ring-mode

但是,请注意,这是一个非常初步的0.1版本 - 它可能根本不适合你。

(P.S。:如果有人愿意帮助我改进这种小模式,我将不胜感激任何贡献。)

答案 1 :(得分:2)

突出显示标记环中的位置:

(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并将dehighlight代码添加到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)

答案 2 :(得分:1)

有些elisp做你所问的 https://www.emacswiki.org/emacs/VisibleMark

Google也会在自己的网站上显示有人添加到该代码中 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)