2012-09-28 80 views
2

我正在嘗試爲行重複編寫我的函數。我必須保持光標位置。這是.emacs文件中的代碼:emacs的行重複代碼

(defun line-duplicate 
    "line duplication." 
    (setq position (point))  ;Store the original position of cursor    
    (global-set-key "\C-d" "\C-a\C-k\C-k\C-y\C-y") 
    (goto-char position)   ;move the cursor to original position 
) 

(line-duplicate) 

但是,出現了一些錯誤。什麼是錯誤?

編輯

剛發現的命令執行功能:

(defun line-duplicate() 
    (interactive) 
    (setq position (point)) 
    (command-execute (kbd "C-a C-k C-k C-y C-y")) 
    (goto-char position) 
) 

(global-set-key (kbd "C-d") 'line-duplicate) 

而且這個工作。

回答

1

global-set-key需要兩個參數KEYCOMMANDCOMMAND不是一個關鍵序列,它是一個函數(通常它是一個符號,命名交互可調用函數,說文檔)。當函數被調用時,您可能不希望更改C-d的行爲,您想要將該函數綁定到該鍵。

+0

但當時我有這個早些時候:(全球設置鍵 「\ CD」 「\ CA \ CK \ CK \賽揚\賽揚\的Cp \ CP」 )除了重新定位部分,這工作得很好。 – sudeepdino008

1

我想你想綁定行副本到C-d

您可以編寫以下功能:

(defun my:dublicate-line() 
    (interactive) 
    (save-excursion 
    (let ((begin (line-beginning-position)) (end (line-end-position))) 
    (move-beginning-of-line 2) 
    (insert (concat (buffer-substring-no-properties begin end) "\n"))))) 

(global-set-key (kbd "C-d") 'my:dublicate-line) 
+0

謝謝。但我的目標是實現我自己的行重複以使用elisp。 – sudeepdino008

+1

@ I'llsudeepdino008看看你的代碼。現在看看這個代碼。看看有什麼不同?試圖找出原因。那麼你會「得到與elisp一起去」。 –