2012-04-18 126 views
9

與Elisp一起努力,但沒有奏效 - 說錯誤的參數數量。如果你認識艾爾普斯,那麼可以毫不費力地完成這件事。但是,我包含了我的手段,讓你立即明白我想要做什麼。Elisp:將緩衝區複製到剪貼板

(defun copy-all() 
    "Copy entire buffer to clipboard" 
    (interactive) 
    (let ((pos (point))) 
     (progn 
      (mark-whole-buffer) 
      (clipboard-kill-ring-save) 
      (keyboard-quit) 
      (goto-char pos) 
      (message "Copy done.")))) 

回答

13

而不是保存點並稍後恢復它,請使用save-excursion。它更健壯,並且還會恢復緩衝區。不需要明確的progn

也就是說,在這種情況下,只需將範圍傳遞給clipboard-kill-ring-save而不是試圖混淆區域。例如:

(defun copy-all() 
    "Copy entire buffer to clipboard" 
    (interactive) 
    (clipboard-kill-ring-save (point-min) (point-max))) 

記住,elisp的幫助總是可用在Emacs與describe-functionC-H˚F)如果你不確定一個函數需要什麼樣的參數。

+0

非常感謝您的幫助。 – 2012-04-18 23:04:08

5

你正在變得比你更堅強。

(defun copy-whole-buffer() 
    "Copy entire buffer to clipboard" 
    (interactive) 
    (clipboard-kill-ring-save (point-min) (point-max)))