2013-11-14 26 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