EMACS: Konfiguration und Spielereien

OP #1820771
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
Moderator Persönliche Seite
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.
OP
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...
OP
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.
Moderator Persönliche Seite
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.
OP
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.