Mark环的一个功能

时间:2013-11-14 19:31:15

标签: emacs elisp

对于标题非常不明确的道歉。

基本上在emacs中你可以用C-SPC C-SPC设置标记然后C-u C-SPC回到那个标记点。 如何设置一个能够设置标记并转到该位置的功能(如果之前使用该功能设置了标记)。

意思是,我想将CM-f2绑定设置标记(如果没有设置),所以模拟C-SPC C-SPC,如果先前设置了标记,CM-f2将转到模拟Cu C的位置-spc。

在C中,这将是:

bool mark = 0;
while (1) {
 if (mark) {
  command = C-u C-SPC;
  mark = 0;
 } else {
  command = C-SPC C-SPC;
  mark = 1;
 }
}

1 个答案:

答案 0 :(得分:2)

我不认为使用该标记是正确的解决方案,但这里使用的是寄存器。

(defun register-set-or-jump ()
  (interactive)
  (let ((pos (get-register :saved-pos)))
    (if (markerp pos)
        (progn
          ;; Saved position found.
          ;; Jump there and clear the register.
          (jump-to-register :saved-pos)
          (set-register :saved-pos nil)
          (message "Jumped to saved position"))
      ;; No saved position available.
      ;; Save point to the register.
      (point-to-register :saved-pos)
      (message "Saved position to register"))))

(global-set-key (kbd "<C-M-f2>") 'register-set-or-jump)

我建议使用a register而不是the mark的原因是许多Emacs命令依赖和/或修改标记,而您可以根据需要使用或多或少的寄存器。