Post by Andreas KohlbachIch hoffte aber auch ohne Markieren von Anfang und Ende einer Zeile, sondern
durch bloßes Positionieren des Cursors auf den Zeilenanfang mit gesuchtem
Shortcut betreffende Zeile in die "Zwischenablage" zu kopieren. So wie
ich auch mit C-k und ohne vorheriges Markieren ausschneiden kann. Geht das?
In Emacs geht (fast) alles.
Du kannst Tasten und Tastenkombinationen beliebig definieren - in
einem bestimmten Puffer, in einem bestimmten major mode oder global.
So lassen sich auch Tastenkombinationen verkürzen. Beispiel:
(global-set-key "\C-cc" "\C-a\C- \C-n\M-w")
Das macht, dass C-c c in allen Puffern dasselbe bewirkt wie C-a C-SPC
C-n M-w, nämlich, dass die aktuelle Zeile in den kill ring kopiert
wird. Nachteile: Verschiebt point an den Anfang der nächsten Zeile und
funktioniert nicht, wenn es am Puffer-Ende ausgeführt wird und das
Puffer-Ende gleichzeitig ein Zeilenanfang ist.
Folgende Funktion erfüllt denselben Zweck, lässt jedoch point
unverändert und funktioniert überall im Puffer.
,----[ Abwandlung von <http://stackoverflow.com/a/3208345/4442714> ]
| (defun mw-copy-line ()
| "Copy the line at point to the kill ring, leaving point intact."
| (interactive "*")
| (save-excursion
| ;; The last line of the buffer cannot be killed if it is empty.
| (if (and (eobp) (bolp))
| (message "Current line begins at end of buffer, nothing killed.")
| ;; Otherwise kill the whole line.
| (let ((kill-read-only-ok t)
| deactivate-mark)
| (toggle-read-only 1)
| (kill-whole-line)
| (toggle-read-only 0)))))
`----
Natürlich lassen sich (interaktive) Funktionen auf eine Taste legen:
(global-set-key (kbd "C-c c") 'mw-copy-line)
Noch eine Möglichkeit: Folgender Code verändert die in Emacs
eingebauten Funktionen `kill-ring-save' und `kill-region' so, dass sie
die aktuelle Zeile kopieren bzw. killen, wenn keine region ausgewählt
ist. Evaluieren und dann M-w oder C-w tippen.
,----[ <http://stackoverflow.com/a/890279/4442714> ]
| (transient-mark-mode t)
| (defadvice kill-ring-save (before slick-copy activate compile)
| "When called interactively with no active region, copy a single line
| instead."
| (interactive
| (if mark-active (list (region-beginning) (region-end))
| (message "Copied line")
| (list (line-beginning-position)
| (line-beginning-position 2)))))
| (defadvice kill-region (before slick-cut activate compile)
| "When called interactively with no active region, kill a single line
| instead."
| (interactive
| (if mark-active (list (region-beginning) (region-end))
| (list (line-beginning-position)
| (line-beginning-position 2)))))
`----