2012-04-18 21 views
9

Se esforzó con Elisp, pero no funcionó - dice una cantidad incorrecta de argumentos. Si conoces a Elips, probablemente esto podría hacerse elegantemente sin ningún esfuerzo. Pero incluyo mis cosas duras para que entiendas de inmediato lo que estoy tratando de hacer.Elisp: copiar el búfer en el portapapeles

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

Respuesta

13

En lugar de guardar el punto y su restauración después, utilizar save-excursion. Es más robusto y restaurará el buffer también. Tampoco es necesario un progn explícito.

Dicho esto, en este caso simplemente pase los rangos a clipboard-kill-ring-save en lugar de tratar de perder el tiempo con la región. Por ejemplo:

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

Recuerde, ayuda elisp es siempre dentro de emacs disponibles con describe-function (C-h f) si no está seguro acerca de lo que requiere una función de argumentos.

+0

Genial, gracias por el consejo de ayuda. –

5

Lo estás haciendo más difícil de lo que debes.

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