2012-04-18 3 views
9

Сделал попытку с помощью Elisp, но не работал - говорит неправильное количество аргументов. Если вы знаете Elips, возможно, это можно было бы сделать элегантно с нулевым усилием. Но я включаю свои тяжелые вещи, чтобы вы сразу поняли, что я пытаюсь сделать.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))) 

Remember, Elisp помощь всегда доступны внутри Emacs с describe-function (C-H F), если вы не уверены, какие аргументы функции требуется.

+0

Отлично, спасибо за подсказку о помощи. –

5

Вы делаете это сложнее, чем вам нужно.

(defun copy-whole-buffer() 
    "Copy entire buffer to clipboard" 
    (interactive) 
    (clipboard-kill-ring-save (point-min) (point-max))) 
Смежные вопросы