10

与 Elisp 一起努力,但没有奏效 - 说参数数量不正确。如果您了解 Elips,那么这可能会以零努力优雅地完成。但我包括了我的笨手笨脚的东西,所以你会立即明白我想要做什么。

(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."))))
4

2 回答 2

16

不要保存该点并稍后恢复它,而是使用save-excursion. 它更健壮,并且还将恢复缓冲区。也不需要明确progn的。

也就是说,在这种情况下,只需将范围传递给clipboard-kill-ring-save而不是试图弄乱该区域。例如:

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

请记住,如果您不确定函数需要哪些参数,则在 emacs 中始终可以使用describe-function( ) 获得 elisp 帮助。C-h f

于 2012-04-18T19:13:29.060 回答
6

你让它变得比你必须做的更难。

(defun copy-whole-buffer ()
  "Copy entire buffer to clipboard"
  (interactive)
  (clipboard-kill-ring-save (point-min) (point-max)))
于 2012-04-18T19:15:06.827 回答