www.mikrocontroller.net

Forum: Projekte & Code EMACS: Konfiguration und Spielereien


Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
(defvar toggle-selective-display-status nil)

(defun toggle-selective-display ()
  "Toggles selective display."
  (interactive nil)
  (cond (toggle-selective-display-status
   (setq toggle-selective-display-status nil)
   (set-selective-display nil))
  (t
   (setq toggle-selective-display-status t)
   (set-selective-display 1))))

(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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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:
(define-abbrev-table 'c-mode-abbrev-table '(
 ...
    ("fprints" "fprintf( stderr, \"\\n\" )" abbrev-korrekt-printf 0)
 ...
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...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.