2012-04-18 4 views
9

Bemühte sich mit Elisp, aber hat nicht funktioniert - sagt falsche Anzahl der Argumente. Wenn Sie Elips kennen, könnte dies wahrscheinlich elegant ohne Anstrengung erledigt werden. Aber ich nehme meine schwerfälligen Sachen mit, damit Sie sofort verstehen, was ich zu tun versuche.Elisp: Kopieren Sie den Puffer in die Zwischenablage

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

Antwort

13

Statt den Punkt zu speichern und später wiederherstellen, verwenden save-excursion. Es ist robuster und wird auch den Puffer wiederherstellen. Es gibt keine Notwendigkeit für eine explizite progn entweder.

Das heißt, in diesem Fall einfach die Bereiche clipboard-kill-ring-save übergeben, anstatt zu versuchen, mit der Region herumzualbern. Zum Beispiel:

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

Denken Sie daran, elisp Hilfe immer verfügbar innerhalb von Emacs mit describe-function (C-h f), wenn Sie sich nicht sicher sind, welche Argumente eine Funktion erfordert.

+0

Großartig, danke für den Tipp auf Hilfe. –

5

Sie machen es härter als Sie müssen.

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