Ich schreibe eine elisp Funktion, um die aktuelle Zeile zu kopieren, wenn keine Region ausgewählt wurde, aber es funktioniert nicht auf Emacs 24.5. Wenn ich die "M-w" -Tastenanschläge drücke, erscheint eine Meldung "Markiere gesetzt" im Minipuffer. Habe ich etwas verpasst?Was ist los mit dieser elisp Funktion?
(defun copy-region-or-current-line (beg end)
"copy current if no region selected, copy the region otherwise"
(interactive "r")
(let ((cur-pos (point)))
(if (region-active-p)
(kill-ring-save beg end)
(progn
(kill-whole-line)
(yank)
(goto-char cur-pos)))))
(global-set-key (kbd "M-w") 'copy-region-or-current-line)
Als allgemeine Fußnote, viele interaktive Befehle werden nicht als Funktionen empfohlen in Ihrem eigenen elisp zu nennen, wegen von solchen Nebenwirkungen - es ist üblich, dass Befehle Dinge tun (wie zum Beispiel das Setzen der Markierung), die in einem interaktiven Kontext nützlich sind, aber ansonsten nicht wirklich erwünscht sind. In einigen Fällen wird der Docstring eines Befehls darauf hinweisen, was Sie stattdessen verwenden sollten, also ist es gut, sich dessen bewusst zu sein. – phils