Forum: Projekte & Code EMACS: Konfiguration und Spielereien


von Klaus W. (mfgkw)


Lesenswert?

Nachdem außer mir noch n Leute mit dem EMACS unterwegs
sind (mit n>=1), werfe ich mal meine Konfigurationsdateien
in die Runde.
Vielleicht kann ja jemand Teile davon brauchen.
Es steht auch relativ viel Kommentar für Einsteiger drin, um den EMACS 
etwas zu verstehen.

Komplett sind die beiden nur zusammen zu verwenden:
- .emacs ist die eigentliche Konfiguration und lädt .abbrev nach
- in .abbrev sind Abkürzungen enthalten, die automatisch expandiert 
werden (je nach Modus) und dabei LISP-Funktionen verwenden, die wiederum 
in .emacs definiert sind.

Die .emacs: http://mfgkw.dyndns.org/.emacs
Die .abbrev: http://mfgkw.dyndns.org/.abbrev

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wie funktionieren die Abkürzungen?  Du schreibst bspw. "fprints",
und danach steht dann komplett der ersetzte Text da?

Ich hätte hier noch ein Stück in meinem .emacs, das ich beisteuern
kann:
1
(defvar toggle-selective-display-status nil)
2
3
(defun toggle-selective-display ()
4
  "Toggles selective display."
5
  (interactive nil)
6
  (cond (toggle-selective-display-status
7
   (setq toggle-selective-display-status nil)
8
   (set-selective-display nil))
9
  (t
10
   (setq toggle-selective-display-status t)
11
   (set-selective-display 1))))
12
13
(global-set-key "\C-x$" 'toggle-selective-display)

Damit schaltet \C-x$ um, ob nur die Zeilen dargestellt werden, die
in der ersten Spalte beginnen (also in C-Code Beginn und Ende einer
Funktion) oder nicht.  In der Standardvariante muss man sonst
ständig mit einem Präfixargument für \C-x$ herumopern.  Ist zwar
noch nicht so schick, wie jede Funktion einzeln "aufklappen" zu
können, hat mir aber bislang genügt: wenn ich eine bestimmte
Funktion in der Datei suche (ohne den Namen genau zu kennen), dann
schalte ich die selektive Anzeige ein, setze den Cursor dahin, und
schalte sie wieder aus.

von Klaus W. (mfgkw)


Lesenswert?

Jörg Wunsch schrieb:
> Wie funktionieren die Abkürzungen?  Du schreibst bspw. "fprints",
> und danach steht dann komplett der ersetzte Text da?

Im Prinzip ja.

Erstens muß jeweils der Mode Abbrev an sein.
Das ist bei mir in C, C++, LaTeX etc. immer der Fall (wird in
meiner .emacs z.B. in "(defun kw-ergaenzungen-zu-c-c++-mode()..."
mit "setq abbrev-mode t" gemacht).

Wenn dann in der .abbrev für den jeweiligen Modus (C etc.)
eine Abkürzung wie diese definiert ist:
1
(define-abbrev-table 'c-mode-abbrev-table '(
2
 ...
3
    ("fprints" "fprintf( stderr, \"\\n\" )" abbrev-korrekt-printf 0)
4
 ...
dann tippe ich im Text fprints und danach z.B. ein Semikolon oder ein 
Leerzeichen. Dadurch wird dann der Ersetzungstext aus der Definition 
eingefügt (hier: fprintf( stderr, "\n" )) und danach das, was ich noch 
getippt hatte (also Semikolon oder Leerzeichen).
Außerdem wird eine angegebene LISP-Funktion ausgeführt, hier 
abbrev-korrekt-printf. Wenn man nichts ausgeführt haben will, nimmt 
dafür den Wert nil.
Die Funktion abbrev-korrekt-printf wiederum ist in der .emacs definiert.
Sie könnte z.B. den Cursor von der aktuellen Stelle (hinter dem 
eingefügten Text) nach vorne versetzen, damit man das eintippen kann, 
was das printf ausgeben soll.

Etwas aufwendiger sind bei mir die Ersetzungen für Sachen wie for oder 
class, da spart man dann beim Schreiben richtig Arbeit.
Oder switch9...

von Klaus W. (mfgkw)


Lesenswert?

Jörg Wunsch schrieb:
> Damit schaltet \C-x$ um, ob nur die Zeilen dargestellt werden, die

Auch schick!
Das werde ich mir wohl klauen :-)

von Klaus W. (mfgkw)


Lesenswert?

PS zu den Abkürzungen:
Manchmal möchte man eine Abkürzung ja auch nicht expandiert haben.
Z.B. habe ich main so definiert, daß ein komplettes kleines leeres 
C-Programm (oder C++) eingefügt wird.
Das macht natürlich nur in einer anfangs leeren Datei Sinn.
Möchte ich jetzt main schreiben, ohne zu expandieren, dann leitet man 
das folgende Zeichen (z.B. ein Leerzeichen) mit C-q ein. Dadurch wird 
nichts expandiert.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Man könnte doch auch die Funktion selbst das dann expandieren lassen,
und die macht das nur, wenn die Datei leer ist.  Sowas ähnliches
kenne ich von html-helper-mode.el: wenn man den auf einer leeren
Datei startet, dann legt er ein Grundgerüst an für die Dokumenten-
struktur.

Mal sehen, wenn ich mal Muße habe, mir das mit den Abkürzungen
anzugucken.

von Klaus W. (mfgkw)


Lesenswert?

Klar kann man das.
Aber mir reicht es so, schließlich weiß ich, wann ich es expandiert 
haben will.

Ich erhebe keinerlei Anspruch darauf, daß da drin alles toll und optimal 
ist.
Es ist mehr als Anregung gedacht, so wie ich auch überall interessante 
Sachen zusammen gesammelt habe, die mir das Leben erleichtern.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.