2013-11-14 114 views
0

道歉为非常不清楚的标题。马克环的一个功能

基本上在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; 
} 
} 
+0

首先,您只需按C空间一次即可设置标记。再次按C空间应该停用该标记。 其次,我不知道我明白你想要什么。你是否只需要一个键盘绑定,如果它没有设置,将设置标记并跳转到它? – echosa

+0

我真的好奇你为什么要这样做。我所能想到的就是所有可能令人讨厌的方式:)我假设有一个与通常的设置/流行标记用法不同的特定用例。 – phils

回答

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的命令依赖和/或修改标记,而可以使用寄存器的更多或多或少如你所愿。

+0

谢谢你,这很有魅力。 – SFbay007

+1

不客气 - 我很高兴能帮上忙! – jbm

+0

jbm,我一直在使用你实现的功能,它帮了我很多。 我想知道,在设置寄存器和使用寄存器时如何查看提示信息。 我只需要一条消息来说“注册组”和另一个“注册使用”......类似的东西。 – SFbay007