Andreas Kohlbach <
a...@spamfence.net>:
>On Thu, 17 Jun 2021 09:36:20 +0200, Wolfgang Bauer wrote:
>> Das habe ich mir nochmal angesehen. In
>>
https://de.comp.text.tex.narkive.com/vRvYSVxW/automatischer-umbruch-mit-emacs
>> gibt es einen Hinweis
>> (add-hook 'text-mode-hook 'turn-on-auto-fill)
>> (setq-default fill-column 72)
>> in ~/.emacs einzutragen.
>>
>> Oder/und in emacs selbst
>> M-x customize-variable [RET] fill-column [RET]
>> da /ist/ 72 eingetragen.
>> Trotzdem macht emacs keinen automatischen Zeilenumbruch.
>> Händisch geht es mit M+q
>
>Ich habe hier (allerdings in der ~/.gnus, weil ich das bei Emacs nicht
>default haben will):
>
>(add-hook 'message-mode-hook
> (lambda ()
> (setq fill-column 72)
> (turn-on-auto-fill)
>))
>
>Nicht dass ich Ahnung von LISP hätte. Aber vielleicht fehlt die
>Zeile mit "lamda".
Tipp: Zähl mal die Anzahl der öffnenden und schließenden Klammern
in der Zeile mit «lambda». Was geschieht demnach, wenn Wolfgang
diese Zeile in seine Emacs‐ oder Gnus‐Startup‐Datei einfügt?
Zunächst könnte der Lisp‐Ausdruck eine hilfreiche Einrückung und
Zeilenumbruch vertragen, um besser lesbar zu sein:
(add-hook 'message-mode-hook
(lambda ()
(setq fill-column 72)
(turn-on-auto-fill)
)
)
Ein bisschen Lisp‐Ahnung: Du rufst hier die Lisp‐Funktion
«add-hook» auf. Die Tastenfolge
C-h f add-hook
verrät, dass die Funktion zwei Parameter zwingend (und weitere
optional) übergeben haben möchte. Der erste Parameter ist eine
Variable, der «hook», zu Deutsch Haken, in Deinem Beispiel
«message-mode-hook». Sein Wert ist eine Liste von Funktionen, die
nacheinander (in der Reihenfolge von der ersten bis zur letzten)
aufgerufen werden, wenn man beginnt, eine Nachricht zu verfassen.
Dein Aufruf der Funktion «add-hook» bewirkt, dass an die in der
Variablen «message-mode-hook» enthaltene Liste von Funktionen eine
Funktion vorne dran gehängt wird, wenn die anzuhängende Funktion
bisher noch nicht in der Liste steht. In Deinem Fall ist das die
Funktion
(lambda ()
(setq fill-column 72)
(turn-on-auto-fill)
)
Das ist eine namenlose Funktion, die (keine Parameter entgegennimmt
und) die zwei Lisp‐Ausdrücke
(setq fill-column 72)
(turn-on-auto-fill)
nacheinander ausführt: Sie belegt die Variable «fill-column» mit
dem Wert 72 und ruft die Funktion «turn-on-auto-fill» auf.
Die Tastenkombination
C-h f turn-on-auto-fill
verrät, was diese Funktion tut: Sie schaltet in dem Puffer, aus dem
heraus sie aufgerufen wird, automatischen Zeilenumbruch ein. Das
bedeutet, dass beim Tippen Zeilen automatisch umbrochen werden, wenn
sie länger als die Anzahl von Zeichen, die in der Variablen
«fill-column» vermerkt ist, werden. Lies dazu auch die
Dokumentation zur Variablen «fill-column», erhältlich mit der
folgenden Tastenfolge:
C-h v fill-column
Zusammengenommen bedeutet das, dass immer, wenn ein Puffer in die
Betriebsart «Message Mode» geschaltet wird (man also beginnt, eine
Nachricht zu verfassen), in eben dem Puffer die Lisp‐Ausdrücke
(setq fill-column 72)
(turn-on-auto-fill)
ausgeführt werden: Die Zeilenlänge, bei deren Überschreitung
Zeilenumbruch stattfindet, wird in diesem Puffer auf 72 gestellt,
und der automatische Zeilenumbruch in diesem Puffer eingeschaltet.
>Werfe Deines mal raus und ersetze es durch Obiges.
>
Wolfgang, wirf Deines nicht hinaus und ersetze es nicht durch
Andreas'. Obiges passt für Deinen Fall so eher nicht.
Andreas, Du spielst mit dem Feuer und stiftest Wolfgang dazu an, das
ebenfalls zu tun: Du hattest keine Ahnung, was der Lisp‐Code tut.
Trotzdem rätst Du Wolfgang (der das eher nicht besser beurteilen
kann), ihn einfach zu verwenden. Dabei hätte der Lisp‐Code
prinzipiell alles Mögliche tun können, auch Schaden anrichten.
>Natürlich muss eine neue Instanz von Emacs danach gestartet werden.
>
Ja. Wenn Wolfgang seinen Emacs dann beendet und einen neuen
startet, hat er gegebenenfalls einen, der nicht mehr funktioniert,
und kann dann nicht einmal mehr mit seinem Emacs die Startup‐Datei
korrigieren.