[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

emacs function: backward-kill-line



Hallo Leute,

hier ist eine nützliche interaktive Funktion für
emacs, die man passend z. B. auf die
Tastenkombination C-backspace legen kann.
Vermutlich können sie auch andere Leute außer mir
brauchen.  Man kann, wenn sie definiert ist, mit
einer Tastenkombination dasselbe erreichen, wie
mit C-u 0 C-k oder M-0 C-k.  Das war der Grund,
sie zu schreiben.  Diese Funktion sollte möglichst
symmetrisch zu der Funktion kill-line sein.  Für
Dateien, die zwei Zeichen zum Trennen von Zeilen
verwenden, wie bei dos, dürfte das
Zeilenübergreifende Löschen so nicht
funktionieren, aber das brauche ich zur Zeit
nicht, deshalb habe ich mich nicht darum
gekümmert.  Wenn man das Dateiformat des aktuellen
Buffers in emacs-lisp abfragen kann, kann man das
ja auch noch mit einbauen.  Ich glaube aber, so
eine Abfrage hängt von der emacs-version ab.


;; Funktionen für Tastenkombinationen zum Editieren

;; Rückwärts löschen zum Zeilende und mit präfix Argument mehrere
;; Zeilen in beide Richtungen löschen oder auch bis zum Zeilenende,
;; wie kill-line mit C-k, aber andersherum.
(defun backward-kill-line (&optional arg)
  "Kill vor Point bis Zeilenanfang; nur nonblanks einschließlich LF.

\\[backward-kill-line]		backward-kill-line

Existiert nur Whitespace (weißer Lerraum) aus SPC und TAB am
Zeilenanfang bis vor die Cursorposition, wird der Zeilenanfang
mitgelöscht.  Steht Point am Zeilenende und enthält die
boolesche Steuervariable kill-whole-line den Wahrheitswert t (true =
wahr) oder auch nur non-nil, also etwas anderes, als nichts, wird die
gesamte Zeile einschließlich des Zeilenanfangs bis zum Ende der
vorhergehenden Zeile gelöscht.

Mit einem positiven präfix Argument ARG kille die aktuelle Zeile
bis zum Anfang und weitere ARG Zeilen rückwärts.

Negatives präfix Argument ARG killt -ARG Zeilen vorwärts, wobei
der Rest der aktuellen Zeile als eine Zeile gezählt wird.  Auch
wenn der Cursor direkt vor dem Zeilenende steht, zählt das folgende
Zeilende noch als eine Zeile.

Mit dem Argument 0 killt \\[backward-kill-line] von einschließlich
Point bis zum Zeilenende.

Um eine ganze Zeile damit zu löschen, tippe \\[end-of-line]
\\[backward-kill-line] \\[backward-kill-line], falls kill-whole-line
nil enthält, \\[end-of-line] \\[backward-kill-line], falls
kill-whole-line non-nil enthält oder auch eine sonstige
äquivalentfunktionale Tastenkombination.

Wenn du die gekillten Zeilen an den zuletzt gekillten Text im
kill-ring anfügen willst, nimm \\[append-next-kill] direkt vor
\\[backward-kill-line].

Wenn der Buffer (Puffer) auf read-only (nur-lesen) eingestellt ist,
wird Emacs piepen und vom Löschen Abstand nehmen, aber den Text
dennoch im kill-ring (Zyklisch organisierter Speicher für gekillte
Texte) speichern.  Das bedeutet, dass du dieses Kommando nutzen
kannst, um Text aus einem read-only Buffer (nur-lesen Puffer) zu
kopieren.

Siehe \\[kill-line] kill-line."
  (interactive "P")
  (if arg
      (if (zerop (prefix-numeric-value arg))
	  (kill-line nil)
	(kill-line (- (prefix-numeric-value arg))))
    (if (bobp)
	(signal 'beginning-of-buffer nil))
    (if (bolp)
	(kill-backward-chars 1)
      (if (or (and kill-whole-line (eolp))
	      (and (save-excursion 
		     (beginning-of-line)
		     (looking-at "[ \t]+"))
		   (<= (point) (match-end 0))))
	  (progn
	    (kill-line 0)
	    (kill-backward-chars 1))
	(kill-line 0)))))


Alles Gute
Helmut H. Franke

-- 
http://www.worte-des-lebens.net/Vaterworte/vaterworte.html
http://www.lorber-verlag.de/  http://firethegrid.org/
http://www.anastasia-de.com/Megre_Buecher/Megre_Buecher.htm
http://itc.napier.ac.uk/e-Petition/bundestag/
Avatar Chat Systeme:  http://www.amiculi.net  http://pgm.amoris.org
Servamus vitam terramque istam, quas amans pater noster ipse dedit nobis!



Reply to: