Emacs
Notizen erstellt mit Org-Mode
Inhaltsverzeichnis
- 1. Stichworte
- 2. Einleitung
- 3. Meine permanenten Makros
- 4. Meine Belegung der F-Tasten
- 5. Meine Tastaturkürzel
- 6. Org-mode orgmode
- 6.1. Text hervorheben
- 6.2. Listen
- 6.3. Wichtige Tastaturkürzel Org Modus
- 6.4. Tabellen und Tabellenkalkulation
- 6.5. Auf andere Dateien verweisen
- 6.6. Archivierung
- 6.7. Code-Blöcke
- 6.8. Babel Pakete
- 6.9. Überschriften mit Tag headline tag
- 6.10. Von org-mode nach html
- 6.11. Von org-mode nach LaTeX und PDF
- 6.12. org-mode - tangle - Python
- 6.13. Agenda, Properties, Tags und Deadlines
- 6.14. org und imenu-list
- 6.15. org-mode Einstellungen in der .emacs Datei
- 7. Emacs Grundlagen
- 7.1. Emacs Tastaturkürzel
- 7.1.1. Wichtige Tastaturkürzel allgemein
- 7.1.2. Angezeigte Schriftgröße ändern
- 7.1.3. Visueller Zeilenumbruch
- 7.1.4. Makro aufzeichnen und ausführen
- 7.1.5. Tabulator (Einrückung)
- 7.1.6. Bookmarks
- 7.1.7. Highlight
- 7.1.8. Register
- 7.1.9. Abkürzungs-Modus
- 7.1.10. Rectangle (Rechteckauswahl und Bearbeitung)
- 7.2. Occur und gefundenes ändern
- 7.3. Abschnittsformatierung
- 7.4. Rechtschreibprüfung
- 7.5. Fenstergröße ändern
- 7.6. Leerzeichen entfernen
- 7.7. Zeilen ein- und auskommentieren
- 7.8. Dired Puffer
- 7.9. Datei verschlüsseln
- 7.1. Emacs Tastaturkürzel
- 8. Emacs unter Windows
- 9. Große Dateien
- 10. Timestamp einfügen mit Hilfe des org-mode Pakets
- 11. Tilde eingeben mit Emacs - ein Sonderzeichen
- 12. Emacs Pakete
- 12.1. undo-tree
- 12.2. Pufferliste mit ido-mode
- 12.3. ace-jump-mode
- 12.4. Multiple Cursors
- 12.5. Yasnippet
- 12.6. Icicles
- 12.7. Auto-Complete
- 12.8. register-list
- 12.9. Kill between delimiters
- 12.10. goto-chg
- 12.11. dot-mode
- 12.12. Das Programm silversearcher-ag und das Paket ag
- 12.13. Permanentes Highlight des letzten Suchstrings
- 12.14. Das helm Paket
- 12.15. Helm und Yasnippet
- 12.16. Das Projectile Paket
- 12.17. neotree
- 12.18. Mit Google Übersetzen
- 12.19. phi Pakete
- 12.20. swiper und helm
- 12.21. Zoom Window
- 12.22. Evil Numbers
- 12.23. Window switch Pakete
- 12.24. Kommentieren
- 12.25. Visible Bookmarks
- 12.26. MWIM - Move where I mean
- 12.27. smooth scrolling
- 12.28. navi-mode
- 12.29. elmacro
- 12.30. imenu-list
- 12.31. discover
- 12.32. cycbuf
- 12.33. zop-to-char
- 12.34. csv-mode
- 12.35. guide key
- 12.36. show-marks
- 12.37. clipmon
- 12.38. engine-mode
- 12.39. org Präsentation mit ox-reveal
- 12.40. bookmark+
- 12.41. sunshine forecast
- 12.42. elpa-mirror
- 12.43. highlight-thing
- 12.44. cycle-resize
- 12.45. auto-yasnippet
- 12.46. org bullets
- 12.47. yafolding
- 12.48. Org-mode Header als bookmark
- 12.49. one-time-pad-encrypt
- 12.50. helm-org-rifle
- 12.51. yankpad
- 12.52. Use-Package
- 12.53. Try
- 12.54. expand-region
- 12.55. embrace
- 12.56. emojify
- 12.57. ob-async
- 12.58. ivy-yasnippet
- 12.59. orgalist
- 12.60. fill-function-arguments
- 13. Spezielle Einstellungen in der .emacs Datei
- 14. Selbstgebaut und geklaut
- 15. Bilder
- 16. Links
1 Stichworte
ace-jump-mode auto-complete auto-yasnippet bookmark+ clipmon comment-dwim-2 csv-mode cycbuf cycle-resize dabbrev dired dot-mode epa-encrypt-file elpa-mirror embrace emojify engine-mode evil-numbers expand-region fill-function-arguments google-translation goto-chg guide-key helm-org-rifle helm-yasnippet helm highlight-thing icicles ido-mode imenu-list ivy-yasnippet kill-between-delimiters Magic-LaTeX-Buffer move-where-i-mean multiple-cursors neotree ob-async one-time-pad-encrypt orgalist org-bookmark-heading org-bullets org-mode-to-pdf org-mode ox-reveal permanentes-highlight phi-search projectile register-built-in register-list show-marks silversearcher-ag stylesheet.css-beschreibung sunshine-forecast swiper-helm try use-package visible-bookmarks window-switch undo-tree yafolding yankpad yasnippet zoom-window zop-to-char
2 Einleitung
Ich habe hier meine gewachsenen Notizen zum Editor Emacs und seinen
Paketen gemacht. Bei den Paketen nimmt der Org-mode den größten Raum
ein. Der Grund ist schlicht, dass ich Emacs und Org-mode ständig
_nutze. Daher hat der Org-mode auch ein eigenes Hauptkapitel, und ist
_kein Unterkapitel von „Emacs Pakete“. Diese Seite schreibe ich dann
auch mit Emacs im Org-mode (C-x C-s C-c C-e h h
).
3 Meine permanenten Makros
Einige nützliche Makros und/oder Funktionen, die ich dauerhaft in meiner .emacs Datei gespeichert habe, werden hier aufgelistet.
Makroname | Kürzel | Beschreibung |
---|---|---|
my/add-new-line-above | M-p | fügt neue Zeile über der aktuellen ein und setzt den Cursor dorthin |
my/add-new-line-below | M-n | fügt neue Zeile unter der aktuellen ein und setzt den Cursor dorthin |
datum | F6 | fügt das aktuelle Datum ein |
datum-uhrzeit | fügt das aktuelle Datum und die Uhrzeit ein | |
uhrzeit | fügt die aktuelle Uhrzeit ein | |
my/insert-file-name | F5 | fügt Dateinamen des aktuellen Puffers ein |
my/insert-file-path-name | S-F5 | fügt Pfad und Dateinamen des aktuellen Puffers ein |
my/move-line-up | M-up | bewegt aktuelle Zeile eine Zeile nach oben |
my/move-line-down | M-down | bewegt aktuelle Zeile eine Zeile nach unten |
3.1 Datum und Uhrzeit eingeben
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Datum und Uhrzeit eingeben ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun datum-uhrzeit () "Datum und Uhrzeit eingeben" (interactive) (insert (format-time-string "%d.%m.%Y %H:%M:%S"))) (defun datum () "Datum eingeben" (interactive) (insert (format-time-string "%d.%m.%Y"))) (defun uhrzeit () "Uhrzeit eingeben" (interactive) (insert (format-time-string "%H:%M:%S")))
3.2 Dateinamen an Punkt einfügen
(defun my/insert-file-name () "Insert filename of the current buffer at cursorpoint." (interactive) (insert (file-name-nondirectory buffer-file-name))) (defun my/insert-file-path-name () "Insert filename and its path of the current buffer at cursorpoint." (interactive) (insert (buffer-file-name))) (global-set-key (kbd "<f5>") 'my/insert-file-name) (global-set-key (kbd "<S-f5>") 'my/insert-file-path-name)
3.3 Neue Zeile erzeugen
;;;; neue Zeile unter aktueller erzeugen und Cursor dorthin setzen mit ;;;; M-n (defun my/insert-new-line-below (times) "Insert a new line below the current and set Cursor to the new line. It does not matter whether the curser is not at the end of the old line." (interactive "p") (move-end-of-line 1) (newline times)) (global-set-key (kbd "M-n") 'my/insert-new-line-below) ;;;; neue Zeile über aktueller erzeugen und Cursor dorthin setzen mit ;;;; M-p (defun my/insert-new-line-above (times) "Insert a new line above the current and set Cursor to the new line. It does not matter whether the curser is not at the end of the old line." (interactive "p") (move-beginning-of-line 1) (newline times) (move-beginning-of-line (+ (* -1 times) 1) )) (global-set-key (kbd "M-p") 'my/insert-new-line-above)
3.4 Aktuelle Zeile nach oben/unten verschieben
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; move current line up/down with M-up and M-down arrow ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun my/move-line-up () "Move up the current line. Cursor will move, too." (interactive) (transpose-lines 1) (forward-line -2) (indent-according-to-mode)) (defun my/move-line-down () "Move down the current line. Cursor will move, too." (interactive) (forward-line 1) (transpose-lines 1) (forward-line -1) (indent-according-to-mode)) (global-set-key (kbd "<M-up>") 'my/move-line-up) (global-set-key (kbd "<M-down>") 'my/move-line-down)
4 Meine Belegung der F-Tasten
Taste | Funktion |
---|---|
F5 | my/insert-file-name |
F12 | neotree-toggle |
F6 | datum |
F2 | bm-next |
F9 | imenu-list |
F8 | sunshine-forecast |
5 Meine Tastaturkürzel
Tastaturkürzel | Kommando | Modus |
---|---|---|
C-: | ac-complete-with-helm | global |
C-: | ac-complete-with-helm | ac-complete-mode-map |
C-x C-a | ace-jump-mode | global |
f2 | bm-next | global |
S-f2 | bm-previous | global |
C-f2 | bm-toggle | global |
M-; | comment-dwim-2 | global |
C-x C-r | copy-to-register | global |
C-c C-right | cycbuf-switch-to-next-buffer-no-timeout | global |
C-c C-left | cycbuf-switch-to-previous-buffer-no-timeout | global |
C-S-iso-lefttab | dabbrev-expand | global |
C-S-iso-lefttab | dabbrev-expand | minibuffer-local-map |
f6 | datum | global |
C-( | embrace-commander | global |
C-c e | engine/set-keymap-prefix | engine |
C-M-; | er/contract-region | global |
C-; | er/expand-region | global |
C-- | evil-numbers/dec-at-pt | global |
C-+ | evil-numbers/inc-at-pt | global |
M-x | helm-M-x | global |
C-h SPC | helm-all-mark-rings | global |
C-c b | helm-bm | global |
C-c h b | helm-bookmarks | global |
tab | helm-execute-persistent-action | helm-map |
C-i | helm-execute-persistent-action | helm-map |
C-x C-f | helm-find-files | global |
C-x b | helm-mini | global |
C-c h o | helm-occur | global |
C-c r r | helm-org-rifle | global |
C-c r b | helm-org-rifle-current-buffer | global |
C-c r d | helm-org-rifle-directories | global |
C-c r f | helm-org-rifle-files | global |
C-c h x | helm-register | global |
C-x C-h | helm-register | global |
C-z | helm-select-action | helm-map |
M-y | helm-show-kill-ring | global |
C-c y | helm-yas-complete | global |
f9 | imenu-list | global |
C-x C-i | insert-register | global |
C-x C-j | jump-to-register | global |
C-S-c C-S-c | mc/edit-lines | global |
C-S-c C-> | mc/mark-all-like-this | global |
C-> | mc/mark-next-like-this | global |
C-< | mc/mark-previous-like-this | global |
C-a | mwim-beginning-of-code-or-line | global |
C-e | mwim-end-of-code-or-line | global |
f5 | my/insert-file-name | global |
S-f5 | my/insert-file-path-name | global |
M-p | my/insert-new-line-above | global |
M-n | my/insert-new-line-below | global |
M-down | my/move-line-down | global |
M-up | my/move-line-up | global |
C-c f | my/org-agenda-view | global |
f12 | neotree-toggle | global |
M-% | phi-replace-query | global |
C-s | phi-search | global |
> | phi-search-again-or-next | phi-search-default-map |
< | phi-search-again-or-previous | phi-search-default-map |
C-r | phi-search-backward | global |
C-x C-p | point-to-register | global |
C-x C-l | register-list | global |
C-c m | show-marks | global |
f8 | sunshine-forecast | global |
C-c s | swiper | global |
M-s M-w | switch-window | global |
C-x C-y C-y | yankpad-insert | global |
C-x C-y C-c | yankpad-set-category | global |
C-x C-z | zoom-window-zoom | global |
6 Org-mode orgmode
Das folding kann mit TAB getoggelt werden. Dafür muss man allerdings
auf die entsprechende Überschrift liegen. Um alle Überschriften zu
öffnen/schließen tippt man S+TAB
ein.
6.1 Text hervorheben
Code | Ergebnis |
---|---|
*fett* |
fett |
/italic/ |
italic –> funktioniert nur über maximal 2 Zeilen |
_unterstrichen_ |
unterstrichen |
=Code= |
Code |
~verbatim~ |
verbatim |
+durchgestrichen+ |
6.1.1 org-mode Eigene Farben
Eigenes Highlighting durch einschließen in Sonderzeichen kann in customize
durch das Setzen neuer Einträge in org-emphasis-alist
erreicht werden.
Bei mir habe ich !overdue! für roten Hintregrund und %ready% für orangen Hintergrund eingestellt. Leider funktioniert damit unter Umständen der Export nach HTML nicht mehr, da die Exportfunktion diese Marker nicht kennt. Für den Export kann man aber entweder diese Sonderzeichen löschen, oder sie durch ein vorangestelltes \ schützen.
'(org-emphasis-alist (quote (("*" bold) ("/" italic) ("_" underline) ("=" org-verbatim verbatim) ("~" org-code verbatim) ("+" (:strike-through t)) ("!" bad-face verbatim) ("%" bm-face verbatim))))
6.2 Listen
In der Liste kann mit S-links/rechts
das Listensymbol geändert werden.
- Bindestrich - weiteres
- Bindestrich
- weiteres
Zwischen zwei Listen muss ein Nicht-Listen-Text stehen, damit die Listensymboländerung funktioniert. Ansonsten nimmt org-mode an, dass die Listen zusammen gehören.
+ Pluszeichen + weiteres
- Pluszeichen
- weiteres
Einträge innerhalb einer Liste können mit M-hoch/runter
versetzt werden.
1) Nummerierung Klammer 2) weiteres
- Nummerierung Klammer
- weiteres
Die Einrücktiefe kann mit M-links/rechts
verändert werden.
1. Nummerierung Punkt 2. weiteres
- Nummerierung Punkt
- weiteres
Für einen neuen Eintrag, wie gehabt, ist M-RET
zuständig.
Bei nummerierten Listen wird mit den oben genannten Listenkommandos die Nummerierung richtig gesetzt. Eine Alphabetische Liste wird leider nicht unterstützt. Beim Exportieren werden Bindestriche und Pluszeichen sowie die beiden Arten der Nummerierung jeweils identisch umgewandelt.
- Namensliste :: Vor den Namen ist ein Listenzeichen zu setzen. - Noch :: Ein Eintrag, diesmal etwas länger, um den Zeilenumbruch zu zeigen, der bei dieser Listenart eine Einrückung vornimmt.
- Namensliste
- Vor den Namen ist ein Listenzeichen zu setzen.
- Noch
- Ein Eintrag, diesmal etwas länger, um den Zeilenumbruch zu zeigen, der bei dieser Listenart eine Einrückung vornimmt.
Auch Listen, in denen der Anfang hervorgehoben ist, sind möglich. Dafür ist zwischen den Listenzeichen und dem Ende der Hervorhebung ein doppelter Doppelpunkt zu setzen (::). Es sind aber nur die einfachen Listenzeichen möglich, mit Nummerierung funktioniert das nicht.
6.3 Wichtige Tastaturkürzel Org Modus
Kürzel | Beschreibung |
---|---|
C-c l | ’org-store-link – speichert Verweis |
C-c c | ’org-capture – Aufgaben/Notizen notieren, egal in welchem Puffer |
C-c a | ’org-agenda – Agenda Kommando |
’org-iswitchb – zu anderen org-mode Puffern wechseln. Wurde für helm-bm überschrieben. | |
C-c C-n | springt zur nächsten Überschrift |
C-c C-p | springt zur vorherigen Überschrift |
C-c C-f | nächste Überschrift auf selber Höhe |
C-c C-b | vorherige Überschrift auf selber Höhe |
C-c C-u | zur übergeordneter Überschrift, falls vorhanden |
C-c C-j | zu Überschriften springen in einem Hilfspuffer, öffnet ein Minipuffer mit Hilfetext |
<TAB> - wie üblich, öffnet/schließt Überschriftenabschnitte | |
<down> - springt zur nächsten Überschrift / <up> - | |
<up> - springt zur vorherigen Überschrift | |
<RET> - da wo der Cursor ist bleiben | |
/ - sparse tree Suche | |
C-g - zurück zum Punkt, an dem man begann | |
S-TAB | toggelt gesamtes folding |
C-c AGr-< | Tabelle erzeugen |
TAB | toggelt folding |
M-links | Überschrift hochwertiger |
M-rechts | Überschrift niederwertiger |
M-hoch | Überschrift incl. Inhalt nach oben verschieben |
M-runter | Überschrift incl. Inhalt nach unten verschieben |
C-c C-t | toggelt todo Status |
C-c c | ermöglicht es, in irgendeinen Puffer Aufgaben zu notieren, sie landen (bei mir) dann in die Datei aufgaben.org |
C-c / | öffnet sparse Menü, mit t werden alle todos angezeigt |
S-left/right | bei todo wird durch die Stati getoggelt |
C-c . | fügt Datum (timestamp) ein |
C-u C-c . | fügt Datum inkl. Uhrzeit ein |
S-left/down | mit Cursor auf timestamp wird ein Tag abgezogen |
S-right/up | mit Cursor auf timestamp wird ein Tag hinzugefügt |
C-x n s | nur noch aktueller Überschriftenbereich ist sichtbar |
C-x n w | wieder alles sichtbar machen |
6.3.1 Überschrift
Eine neue Überschrift in der nächsten Zeile anlegen geht mit M+RET Die Überschrift und ihr Inhalt mittels M-Pfeil hoch/runter verschieben. Die Tiefe einer Überschrift mit M-linker/rechter Pfeil einstellen.
6.4 Tabellen und Tabellenkalkulation
Ein markierten Bereich kann mit C-c |
in eine Tabelle umgewandelt
werden. Dabei werden Kommas als Trenner genommen. Falls keine Kommas
vorhanden sind, werden Leerzeichen oder Tabs als Trenner erkannt. Es
ist immer nur ein Trennzeichen gültig, dabei gilt die Reihenfolge der
Gültigkeit: Komma, Leerzeichen, Tabulator.
Eine neue Linie kann mit C-c -
unter der aktuellen eingefügt werden.
Auf Tupel wird referenziert mit $Zeile$Spalte
. Relativ referenzieren zur
Spalte in der aktuellen Zeile geht mit $n
, wobei n
auch negativ sein kann.
Wenn n
gleich 0 ist, ist die momentane Spalte gemeint. $<
zeigt auf die
erste Spalte, und $>
auf die letzte. $>>>
zeigt dabei auf die drittletzte
Spalte. Bei den relativen Referenzen auf Zeilen wird ein @
statt eines $
benutzt, ansonsten ist das Verhalten gleich dem bei den Spalten. Einen Bereich
gibt man mit ..
an, bsw. Spalte 2 bis 5 mit $2..$5
. Konstanten können
mit
#+CONSTANTS: irgendeinWert=12
definiert werden. Dabei ist die Konstante nur für die aktuelle Datei gültig.
Um sie sofort zu aktivieren, muss auf ihr ein C-c C-c
ausgeführt werden.
Sobald in einem Tupel mit =
begonnen wird, folgt darauf eine Formel. Wenn
der Tupel verlassen wird, wird die Formel ausgewertet, und durch das Ergebnis
ersetzt. Unter der Tabelle wird die zuletzt genutzte Formel gesetzt. Ansehen
und anpassen der genutzten Formel ist dann über C-c =
möglich.
Um verschiedene Formeln zu nutzen, können diese unter die Tabelle geschrieben
werden. Mit einem C-c C-c
auf der Formel wird diese dann ausgeführt.
Die Summe einer Spalte kann schnell mit C-c +
errechnet werden, wobei der
Cursor in der letzten (leeren) Zeile in der entsprechenden Spalte stehen muss.
Hinter einer Formel kann mit Hilfe eines printf ähnlichen Kommandos die
Ausgabe gesteuert werden. Um die Nachkommastellen auf zwei zu begrenzen
bsw. mit ;%.2f
.
Name | Wert | Wert 2 | Ergebnis |
---|---|---|---|
Bully | 2 | 3 | 5 |
Gesil | 4 | 3 | 7 |
Gucky | 12 | 32 | 44 |
Total | 18 | 38 | 128.33 |
#+TBLFM: $4=$2+$3::@5$3=vsum(@2..@4) #+TBLFM: @>$2=vsum(@2..@4) #+TBLFM: @>$4=@2*@3*@4/$irgendeinWert;%.2f
6.4.1 Org-table umwandeln (Radio)
Wenn man html, LaTeX oder ähnliches editiert, möchte man nicht wirklich Tabellen von Hand erstellen. Der org-mode ermöglicht es glücklicherweise Tabellen vom org-mode in verschiedene andere Markup Sprachen umzuwandeln. Damit das funktioniert, muss der orgtbl-mode aktiviert sein. Weiteres siehe Link.
#+BEGIN_LaTeX \begin{longtable}{l|rrr}\hline % BEGIN RECEIVE ORGTBL table_name Jan & 23 & 55 & 2.4\\ Feb & 21 & 16 & 0.8\\ March & 22 & 78 & 12.6\\ April & 24 & 21 & 0.9\\ % END RECEIVE ORGTBL table_name \end{longtable} #+END_LaTeX #+ORGTBL: SEND table_name orgtbl-to-latex :splice t :skip 2 | Month | Days | Nr sold | per day | |-------+------+---------+---------| | Jan | 23 | 55 | 2.4 | | Feb | 21 | 16 | 0.8 | | March | 22 | 78 | 12.6 | | April | 24 | 21 | 0.9 | #+TBLFM: $4=$3/$2;%.1f
6.5 Auf andere Dateien verweisen
Hier mal der Versuch, im org-mode auf andere Dateien zu verweisen.
Kürzel | Beschreibung |
---|---|
C-c C-l | Verweis anlegen |
C-c C-o | Verweis verfolgen |
Eine andere org-mode Datei: sub main org. Mit RET oder C-c C-o
, während der
Cursor auf dem Link liegt, wird ein weiteres Fenster mit der Datei geöffnet.
Der Fokus liegt dann in jener Datei. Falls die Zieldatei noch nicht existiert
wird sie angelegt. Der Pfad muss immer mit angegeben werden, für den
momentanen Pfad mit „./“.
Für den Export in ein anderes Dateiformat (html, LaTeX, etc.) gilt zu beachten, dass nur der aktuelle Puffer exportiert wird, nicht aber die verlinkten Dateien.
6.6 Archivierung
Einzelne Überschriften, inklusive ihres Inhalts, können in die Archivdatei
verschoben werden. Die Archivdatei ist i.d.R. ./<dateiname>_archive
. In
diesem Fall also ./main.org_archive
.
Kürzel | Beschreibung |
---|---|
C-c C-x C-a | Verschiebt den Abschnitt in die Standard-Archiv Datei. |
C-c C-x C-s | Bisher konnte ich den Unterschied |
C-c $ | zwischen diesen drei Kommandos nicht erkennen! |
6.7 Code-Blöcke
Code Blöcke im org-mode können (für mich) zwei Dinge, die das Leben stark vereinfachen. Zum Einen sorgen sie für eine bestimmte Formatierung beim Exportieren, und zum Anderen kann in ihnen Code ausgeführt werden.
Org-mode kennt verschiedene Code Blöcke, die einfach mit einem <
,
gefolgt von einem Code Block Identifier und TAB erzeugt werden können.
Id | Block |
---|---|
s | #+BEGIN_SRC ... #+END_SRC |
e | #+BEGIN_EXAMPLE ... #+END_EXAMPLE |
q | #+BEGIN_QUOTE ... #+END_QUOTE |
v | #+BEGIN_VERSE ... #+END_VERSE |
c | #+BEGIN_CENTER ... #+END_CENTER |
l | #+BEGIN_LaTeX ... #+END_LaTeX |
L | #+LaTeX: |
h | #+BEGIN_HTML ... #+END_HTML |
H | #+HTML: |
a | #+BEGIN_ASCII ... #+END_ASCII |
A | #+ASCII: |
i | #+INDEX: line |
I | #+INCLUDE: line |
Damit der Block #+BEGIN_SRC
nicht ausgeführt wird, wird hinter dem
Eintrag :eval no
eingetragen.
6.7.1 Code Block mit Ditaa
Im Abschnitt Ditaa bsw. sieht der Block wie folgt aus.
#+BEGIN_SRC ditaa :file ./images/ditaa_test.png :cmdline -r -s 0.8 +------+ +------+ | AB | | vf | | CDER |----->| erg |-=-\ |cRED | |cBLU | | +------+ +------+ | /------\ | | mod | \--->|{s} | |cGRE | \------/ #+END_SRC
6.7.2 Code Block mit elisp
Ein Code Block, der ausgeführt wird, erzeugt unter den Block ein
Ergebnis. Dafür reicht es im Code Block C-c C-c
auszuführen. Der
erzeugte #+RESULT:
Block wird dabei, falls schon vorhanden,
aktualisiert.
#+BEGIN_SRC emacs-lisp :eval no (defun eintest (name) "Dies ist eine elisp Funktion, die zum Test in einer org-mode Datei ausgeführt wird." (setq autor name) (setq erster "Autor:") (setq zweiter "Emacs Lisp Code Beispiel.") (setq dritter (concat zweiter "\n" erster " " autor "\n" (number-to-string (/ (random t) 3)))) (message dritter)) (eintest "Andreas Kruse") #+END_SRC
#+RESULTS: : Emacs Lisp Code Beispiel. : Autor: Andreas Kruse : -27112859
6.7.3 Code Block mit shell
#+BEGIN_SRC sh :eval no ls ./man #+END_SRC
#+RESULTS: | auctex.pdf | | de-refcard.pdf | | eintr.pdf | | elisp.pdf | | emacs-latex.pdf | | emacs.pdf | | gnuplot.pdf | | gnuplot_tutorial.pdf | | gpcard.pdf | | latexreferenz.pdf | | orgcard.pdf | | orgguide.pdf | | org.pdf |
6.7.4 Code Block mit Perl
#+BEGIN_SRC perl :eval no my $val = 3 + 5.123; my $ret = sprintf( "Der Wert von \$val ist %s.", $val); #+END_SRC
#+RESULTS: : Der Wert von $val ist 8.123.
6.8 Babel Pakete
Das sind Pakete, die mit org-mode schon mit geliefert werden. Sie
sind gegebenenfalls noch zu aktivieren. Der Code der entsprechenden
Pakete muss in Code-Blöcke eingebettet sein. Dieser Block wird dann
mit C-c C-c
, oder aber evtl. durch exportieren, ausgeführt. Damit
die Code Abschnitte beim Exportieren nicht einfach so ausgeführt
werden, trägt man am Anfang der Datei
# -*- org-confirm-babel-evaluate: t -*-
ein, oder stellt das via Customize
ein. Dies sollte zwar der
default Wert sein - aber sicher ist sicher.
6.8.1 Ditaa
Mit ditaa lassen sich relativ einfach Diagramme in ASCII erstellen, um sie dann durch exportieren als PNG zu erhalten.
Funktioniert unter Windows nicht, da dort die Java-Umgebung fehlt.
http://ditaa.sourceforge.net/#usage
Damit der Block nicht beim jeden Exportieren evaluiert wird, wird
:eval no
für den Code-Block gesetzt.
6.9 Überschriften mit Tag headline tag
6.9.1 Beispiel 1 example
Hier steht nichts.
6.9.2 Beispiel 2 example
Auch dieser Anschnitt ist leer.
6.9.3 Beschreibung tag example description
Überschriften können Tags zugeordnet werden. Wenn der Cursor auf
einer Überschrift liegt, reicht ein C-c C-c
um Tags hinzuzufügen, zu
ändern, oder zu löschen.
Angeblich kann man auch auf die Tags klicken, um eine Liste aller
Überschriften zu erhalten, die den Tag enthalten. Äquivalent dazu
existiert das Kommando C-c a m
. Aber leider funktioniert das aus
irgendeinen Grund nicht.
Mit C-c \
können Überschriften nach Tags gefiltert werden. Dabei
werden dann die Sterne vor den entsprechenden Überschriften blau
hinterlegt. Wie das wieder rückgängig gemacht werden kann, ohne den
Puffer zu schließen, gehört zu den Geheimnissen, die es noch zu lösen
gilt.
6.10 Von org-mode nach html
Das org Paket bietet unter anderem auch die Möglichkeit die Datei nach html zu exportieren. Die Steuerung des Aussehens wird dabei im Kopf mit verschiedenen Optionen gesetzt. Dabei kann das Einstellen des Aussehens über eine CSS Datei geschehen. Das Einbinden dieser CSS Datei (bei mir stylesheet.css) erfolgt dann wie folgt.
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="stylesheet.css" />
Beispiel einer stylesheet Datei.
6.11 Von org-mode nach LaTeX und PDF
Um die org-mode Datei nach PDF zu exportieren reicht ein C-c C-e l
p
. Das funktioniert auch soweit hervorragend. Hier notiere ich
meine Einstellungen, damit das Gute noch ein bisschen besser wird. ;-)
Dieses Dokument soll als Report von einer von mir erstellen LaTeX Header Datei erstellt werden, daher kommt in den Header der Datei folgende Einstellung.
#+LATEX_CLASS: akreport
Ein Quellcodeblock wird mit
#+BEGIN_SRC emacs-lisp -n -r #+END_SRC
gesetzt. Die Flags bedeuten dabei:
- -n
- zur Nummerierung der Codezeilen.
- -r
- damit auf die Codezeilen referenziert werden kann.
- -k
- zeigt die Referenzen im Code an
- :eval no
- Code wird nicht evaluiert
- :var
- Liste von
key=value
Variablen, die dem Source-Code übergeben werden. - :results
output
um alle Ausgaben des Codes auszugeben- :exports
code
,results
,both
ornone
Für weiter Informationen siehe org.html#var.
Nun sollen die Quellcodeblöcke auch mit Farbe formatiert werden. Dafür nutze ich die org-latex Einstellungen.
Erst einmal muss org-latex-default-packages-alist
gesetzt werden.
Für die LaTeX Umgebung listings
zum Quellcode setzen sind die Pakete
xcolor
(Zeile 17) und listings
(Zeile
18) einzutragen.
Aktiviert wird das Paket listings
mit der Zeile
20.
Die Sprachen, die listings
setzen soll, werden in Zeile
22 aufgelistet. Der erste Eintrag ist der
Schalter in der #+BEGIN_SRC
Umgebung, der zweite ist die Sprache,
die listings
benutzen soll.
Wie listings
den Code formatieren soll, wird mit den Einstellungen in
Zeile 47 definiert.
1: '(org-latex-default-packages-alist 2: (quote 3: (("utf8" "inputenc" t) 4: ("T1" "fontenc" t) 5: ("" "fixltx2e" nil) 6: ("" "graphicx" t) 7: ("" "grffile" t) 8: ("" "longtable" t) 9: ("" "wrapfig" nil) 10: ("" "rotating" nil) 11: ("normalem" "ulem" t) 12: ("" "amsmath" t) 13: ("" "textcomp" t) 14: ("" "amssymb" t) 15: ("" "capt-of" nil) 16: ("" "hyperref" nil) 17: ("" "xcolor" t) 18: ("" "listings" t)))) 19: 20: '(org-latex-listings t) 21: 22: '(org-latex-listings-langs 23: (quote 24: ((emacs-lisp "Lisp") 25: (lisp "Lisp") 26: (clojure "Lisp") 27: (c "C") 28: (cc "C++") 29: (fortran "fortran") 30: (perl "Perl") 31: (cperl "Perl") 32: (python "Python") 33: (ruby "Ruby") 34: (html "css") 35: (html "HTML") 36: (xml "XML") 37: (tex "TeX") 38: (latex "[LaTeX]TeX") 39: (shell-script "bash") 40: (gnuplot "Gnuplot") 41: (ocaml "Caml") 42: (caml "Caml") 43: (sql "SQL") 44: (sqlite "sql") 45: (makefile "make")))) 46: 47: '(org-latex-listings-options 48: (quote 49: (("basicstyle" "\\small\\ttfamily") 50: ("keywordstyle" "\\color{blue}\\bfseries") 51: ("commentstyle" "\\small\\color{darkgray}\\rmfamily") 52: ("stringstyle" "\\small\\ttfamily") 53: ("breaklines" "true") 54: ("breakatwhitespace" "true") 55: ("showspaces" "false") 56: ("numberstyle" "\\scriptsize") 57: ("postbreak" "\\space") 58: ("frame" "single"))))))
6.12 org-mode - tangle - Python
Siehe python-n-org-mode.org.
6.13 Agenda, Properties, Tags und Deadlines
Eine schöne Beschreibung dessen, was mit der org-mode Agenda möglich ist, findet sich unter Org Mode - Organize Your Life In Plain Text!
Die für meine Arbeitsablauf wichtigsten Tastaturkürzel sind:
Kürzel | Beschreibung |
---|---|
C-c a | Prefix für das Öffnen der verschiedensten Agenda Ansichten. Die Möglichkeiten werden in einem Minipuffer angezeigt. |
C-c a a | Agenda Ansicht für die aktuelle Woche. |
C-c a t | Auflistung der Todos, wie sie unter org-todo-keywords definiert sind. |
C-c c | Egal in welchem Puffer man gerade ist, wird ein Minipuffer eingeblendet, in dem man ein Todo notieren kann. Dieser wird dann dort gespeichert, wie er unter org-capture-templates eingestellt ist. |
Auf der Todo Zeile | |
C-c C-c | Es kann ein Tag gesetzt werden. |
C-c C-x C-c | Im aktuellen Puffer wird die Agenda Column Ansicht erzeugt. Raus kommt man mit q in dieser Ansicht. |
C-c C-x p | Setzen eines Properties für den Todo Eintrag. |
C-c C-d | Setzen einer Deadline für den Todo Eintrag. |
C-c C-s | Setzen eines Schedules für den Todo Eintrag. |
C-c C-w | Verschieben (refile) in einer definierten Agenda Datei (org-capture-templates). Da ich bei mir nur eine Datei nutze, wird das von mir nicht genutzt. |
6.13.1 org-alert und alert
Mit den Paketen org-alert und alert können Todos, deren Deadline abgelaufen ist, als Popup-Nachricht ausgegeben werden. Damit das funktioniert müssen die beiden Pakete in Emacs und libnotify auf den Rechner installiert sein.
Die Funktion selbst muss initial im Agenda-View gestartet werden.
Dafür, und für ein eigenes Agenda-View, habe ich mir dann in der
.emacs Datei eine eigene Funktion zusammen gezimmert, und die dann
auf C-c f
gelegt.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; org-alert - to show agenda deadlines as alert message ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'alert) (require 'org-alert) ;; Damit das funktioniert muss libnotify installiert sein! (setq alert-default-style 'libnotify) ;; Intervall der Alarm Anzeige in Sekunden (setq org-alert-interval 3600) ;; customize my own agenda view (defun my/org-agenda-view () "My own agenda view fortnight with enable org-alert." (interactive) (org-agenda-list) (setq org-agenda-span 15) (setq org-agenda-start-on-weekday 1) (org-alert-enable) (org-alert-check) (org-agenda-goto-today)) ;; After first execution the keystroke C-c a a will show this view, ;; too. (global-set-key (kbd "C-c f") 'my/org-agenda-view)
6.14 org und imenu-list
Mit dem Kommando M-x imenu-list
wird ein Fenster mit den
Überschriften Innerhalb einer org-mode Datei angezeigt.
Siehe Paketbeschreibung zu imenu-list.
6.15 org-mode Einstellungen in der .emacs Datei
;;;; org-mode ;; The following lines are always needed. Choose your own keys. ;; not needed when global-font-lock-mode is on (add-hook 'org-mode-hook 'turn-on-font-lock) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-cc" 'org-capture) (global-set-key "\C-ca" 'org-agenda) (global-set-key "\C-cb" 'org-iswitchb) ;; only one visible star at headlines (setq org-hide-leading-stars 'hidestars) ;; follow links by RET (setq org-return-follows-link t) ;; Capture mit "C-c c" (define-key global-map "\C-cc" 'org-capture) ;; paths where the org-agenda files may be (setq org-agenda-files (quote ("~/data/orgnotes/aufgaben.org" "~/data/orgnotes/repetetive.org"))) ;; wo die Todo Einträge landen sollen (progn (setq org-capture-templates '(("t" "Aufgabe" entry (file+headline "~/data/orgnotes/aufgaben.org" "Aufgaben") "* TODO %^{Type Title} %^g\nDEADLINE: %^{DEADLINE:}t\n%U\n%?" :prepend t :empty-lines-after 1) ("n" "Notiz" entry (file+headline "~/data/orgnotes/aufgaben.org" "Notizen") "* Note %^{Type Title} %^g\n%U\n%?\n" :prepend t :empty-lines-after 1)))) ; Targets include this file and any file contributing to the agenda - up to 9 levels deep (setq org-refile-targets (quote ((nil :maxlevel . 2) (org-agenda-files :maxlevel . 2)))) ;; Ein "!" bedeutet Zeitstempel ;; Ein "@" bedeutet Notiz (setq org-todo-keywords '((sequence "TODO(t)" "STARTED(s)" "WAITING(w)" "Note(n)" "DELEGATED(g)" "|" "DONE(d)" "CANCELLED(C)"))) ;; Farben anpassen (setq org-todo-keyword-faces '(("TODO" . (:foreground "#b70101" :weight bold)) ("STARTED" . (:foreground "yellow" :weight bold)) ("WAITING" . (:foreground "sienna" :weight bold)) ("Note" . (:foreground "orange" :weight bold)) ("DONE" . (:foreground "forestgreen" :weight bold)) ("DELEGATED" . (:foreground "forestgreen" :weight bold)) ("CANCELLED" . shadow))) ;; Fast TODO Selection (setq org-use-fast-todo-selection t) ;; deutsch as export language (setq org-export-default-language "de") ;; deutscher Kalender: (setq calendar-week-start-day 1 calendar-day-name-array ["Sonntag" "Montag" "Dienstag" "Mittwoch" "Donnerstag" "Freitag" "Samstag"] calendar-month-name-array ["Januar" "Februar" "März" "April" "Mai" "Juni" "Juli" "August" "September" "Oktober" "November" "Dezember"]) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; org-alert - to show agenda deadlines as alert message ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'alert) (require 'org-alert) ;; Damit das funktioniert muss libnotify installiert sein! (setq alert-default-style 'libnotify) ;; Intervall der Alarm Anzeige in Sekunden (setq org-alert-interval 3600) ;; customize my own agenda view (defun my/org-agenda-view () "My own agenda view fortnight with enable org-alert." (interactive) (org-agenda-list) (setq org-agenda-span 14) (setq org-agenda-start-on-weekday 1) (org-alert-enable) (org-alert-check) (org-agenda-goto-today)) (global-set-key (kbd "C-c f") 'my/org-agenda-view)
7 Emacs Grundlagen
Diesen Text schreibe ich als Übungstext um mich in Emacs einzuarbeiten. Dafür benötige ich erst einmal einen Text, damit ich etwas habe, womit ich arbeiten kann. Einstellungen für Emacs können in der Datei .emacs gespeichert werden.
7.1 Emacs Tastaturkürzel
7.1.1 Wichtige Tastaturkürzel allgemein
Kürzel | Beschreibung |
---|---|
C-x C-s | Datei Speichern |
C-n | eine Zeile runter |
C-p | eine Zeile rauf |
C-f | ein Zeichen weiter |
C-b | ein Zeichen zurück |
C-v | eine Bildschirmseite weiter |
M-v | eine Bildschirmseite zurück |
M-f | ein Wort weiter |
M-b | ein Wort zurück |
M-a | einen Satz zurück |
M-e | einen Satz weiter |
C-a | zum Zeilenanfang |
C-e | zum Zeilenende |
M-< | zum Pufferanfang |
M-> | zum Pufferende |
M-r | toggelt zischen Zeilenanfang der ersten, mittleren und letzten sichtbaren Zeile |
C-t | tauscht Buchstaben auf und vor dem Cursor |
M-t | tauscht Wörter auf und vor dem Cursor |
M-l | Kleinschreibung von Cursorposition bis Wortende |
M-c | Cursorpostion groß, bis Wortende Kleinschreibung |
M-u | Großschreibung von Cursorpostion bis Wortende |
M– M-l | Kleinschreibung des Wortes vor Cursorpunkt |
M– M-c | erster Buchstabe groß, der Rest klein, des Wortes vor Cursorpunkt |
M– M-u | Großschreibung des Wortes vor Cursorpunkt |
C-l | Aktuelle Zeile oben/Mitte/unten anzeigen |
C-x C-f | Datei öffnen/anlegen, ohne Dateiname wird Ordner mit dired geöffnet |
C-x b | Anderen Puffer öffnen |
C-x C-b | Liste der Puffer anzeigen |
C-x k | killt momentanen Puffer |
C-x left | vorherigen aktiven Puffer |
C-x right | nächsten aktiven Puffer |
C-x 1 | Nur noch das aktuelle Fenster stehen lassen |
C-x 2 | 2tes Fenster anzeigen, horizental |
C-x 3 | 2tes Fenster anzeigen, vertikal |
C-x 0 | aktuelles Fenster schließen |
C-x o | zu anderen Fenstern wechseln |
C-x 5 2 | Öffnet einen neuen Rahmen. |
C-x 5 b | Öffnet einen Puffer in einen neuen Rahmen. |
C-x 5 f | Öffnet eine Datei in einen neuen Rahmen. |
C-x 5 d | Öffnet Dired in einen neuen Rahmen. |
C-x 5 o | Springt zu einen anderen Rahmen. |
C-x 5 0 | Schließt den aktuellen Rahmen (Frame) falls es mehr als einen gibt. |
C-x 5 1 | Schließt alle Rahmen außer den aktuellen. |
M-g g | gehe zur Zeile … |
C-o | fügt an Cursorpostion Zeilenwechsel ein, Cursor bleibt an der Position |
C-j | fügt an der Cursorposition einen Zeilenwechsel ein und rückt die neue Zeile ein (TAB) |
C-x C-o | löscht alle Leerzeilen unterhalb/oberhalb der aktuellen |
M-^ | verbindet aktuelle Zeile mit vorheriger, Punkt ist beim ersten Wort der unteren Zeile, dieses Wort ist markiert |
C-S-TAB | Autovervollständigen anhand des aktuellen Puffers, ursprünglich M-/ |
M-d | löscht folgendes Wort, geht auch über Zeilenende hinaus |
M-z <char> | zap-to-char, löscht von Cursorpunkt bis einschließlich dem ersten Auftreten von <char> |
C-x z | wiederhole letzten Befehl, folgende z wiederholen noch einmal bis ein nicht-z kommt |
C-SPC | setzt Marke |
C-x C-x | springt zwischen Markierungsanfang und Ende. |
M-@ | markiert von Cursorposition zu Ende des nächsten Wortes, Cursor bleibt an erster Position |
C-x h | markiert gesamten Puffer, Cursor ist am Anfang des Puffers |
C-x TAB | eine markierte Region einrücken |
C-SPC C-SPC | setzt Marke und macht sie unsichtbar, max. 16 Marken je Puffer sind möglich |
C-u C-SPC | springt zu den Marken |
C-x C-SPC | globaler Markring, springt zu den letzten Marken in allen Puffern |
M-SPC | löscht alle Leerzeichen bis auf eins an der aktuellen Cursorposition |
C-S-BSPC | löscht die ganze aktuelle Zeile |
C-c C-x . | timer Zeit ausgeben |
C-c C-x , | timer Zeit pausieren |
C-u C-c C-x , | timer Zeit stoppen |
C-c C-x 0 | timer Zeit auf 0 setzen |
C-C C-X ; | countdown timer |
C-s | vorwärts suchen |
C-r | rückwärts suchen |
im Suchdialog: C-y | Yank im Suchdialog einfügen |
C-s C-w | Wort ab Cursorpunkt vorwärts suchen |
C-r C-w | Wort ab Cursorpunkt rückwärts suchen |
C-M-s | regexp vorwärts suchen |
C-M-r | regexp rückwärts suchen |
M-% | suchen und ersetzen |
M-x pwd | gibt momentanen Ordner aus |
M-x cd | ändern des momentanen Ordners |
C-x C-s | Puffer speichern |
C-x s | alle Puffer speichern |
C-x C-w | Puffer unter neuen Namen speichern |
C-x b | erzeugt oder wählt Puffer aus Pufferliste |
C-x right | nächsten Puffer aus Pufferliste öffnen |
C-x left | vorherigen Puffer aus Pufferliste öffnen |
C-x C-b | zeigt Pufferliste an |
C-x k | löscht Puffer |
M-h | markiert gesamten Absatz |
C-x i | Inhalt einer anderen Datei an der Cursorposition einfügen |
C-x n n | Macht den nicht markierten Bereich unsichtbar. Es wird nur noch mit dem sichtbaren Bereich gearbeitet. |
C-x n w | Macht den Teil, der mit C-x n n unsichtbar gemacht wurde, wieder sichtbar |
M-F10 | Fenster maximieren oder auf Ursprungsgröße zurücksetzen. |
F11 | Fenster über gesamten Bildschirm vergrößern oder auf Ursprungsgröße zurückzusetzen. |
7.1.2 Angezeigte Schriftgröße ändern
Kürzel | Beschreibung |
---|---|
C-x C-+ | angezeigte Schriftgröße erhöhen |
C-x C-- | angezeigte Schriftgröße verkleinern |
C-x C-0 | angezeigte Schriftgröße auf den Ausgangswert zurücksetzen |
7.1.3 Visueller Zeilenumbruch
Kürzel | Beschreibung |
---|---|
M-x visual-line-mode | schaltet Visualisierung des visuellen Zeilenumbruchs ein/aus |
M-x toggle-truncate-lines | schaltet den visuellen Zeilenumbruch ein/aus |
M-x toggle-word-wrap | wenn visueller Zeilenumbruch eingeschaltet ist, dann Wörter umbrechen ein/aus |
7.1.4 Makro aufzeichnen und ausführen
Kürzel | Beschreibung |
---|---|
F3 | Starte Makroaufzeichnung |
F4 | Beende Makroaufzeichnung, wenn nicht aufgezeichnet wird, wird letztes Makro ausgeführt |
C-x C-k n | Dem zuletzt definiertem Makro einen Namen zuweisen |
C-x C-k b | Dem zuletzt definiertem Makro einem Tastatur-Kürzel zuweisen |
M-x <name> | ein Makro mit Namen ausführen |
M-x insert-kbd-macro RET <name> RET | Makro mit Namen in einer Datei als Lisp-Code speichern |
C-x C-k l | Listet die letzten 100 Kommandos. Die können dann zu ein Makro gemacht werden. |
Anzumerken wäre noch, dass das Ausführen von Makros nicht gerade die effizienteste Art ist, etwas auszuführen. Gerade wenn ein Makro sehr oft in einer größeren Datei ausgeführt werden soll, kann die Ausführung sehr lange dauern. Aber wie heißt es doch so schön: „Besser der Rechner kommt ins schwitzen, als ich.“.
7.1.5 Tabulator (Einrückung)
Im org-mode funktioniert die TAB Taste nicht als Einrücker. Abhilfe schafft hier das Kommando M-i, welches ein Tab einfügt.
Kürzel | Beschreibung |
---|---|
M-i | fügt an Cursorposition ein Tab ein |
C-x TAB | rückt die letzte markierte Region um ein Zeichen ein |
C-<n> C-x TAB | |
C-u <n> C-x TAB | rückt Region um <n> Zeichen ein, <n> kann auch negativ sein |
7.1.6 Bookmarks
Kürzel | Beschreibung |
---|---|
C-x r m RET | bookmark Datei und Cursorpunkt, Name ist der Dateiname |
C-x r m <bm> RET | bookmark Datei und Cursorpunkt unter dem Namen <bm> |
C-x r b <bm> RET | springt zur Datei und Cursorpunkt mit Namen <bm> |
C-x r l | listet alle bookmarks auf |
7.1.6.1 Bookmarks Liste bearbeiten
In der bookmarks Liste kann man mit n und p durch die bookmarks wandern. Mit d wird ein bookmark als zu löschen markiert. Mit x werden die Markierungen ausgeführt. Mit q wird die Liste geschlossen. Mit RET wird der bookmark, der gerade unter dem Cursor liegt angesprungen.
7.1.7 Highlight
In den Einstellungen wurde „Global Hi Lock Mode“ aktiv gesetzt. Falls dies
nicht der Fall ist, kann es mit M-x hi-lock-mode
für den aktuellen Puffer,
oder mit M-x global-hi-lock-mode
für alle Puffer, aktiviert werden.
Um alle Highlights im Puffer zurückzusetzen, kann man mit M-x hi-lock-mode
das
Highlighting aus- und wieder einschalten. Dadurch werden alle gesetzten
Highlights gelöscht. Es mag sinnvoll sein, vorher die Highlights mit
M-s h w
auszugeben.
Wenn man im I-Search Modus M-s h r
eingibt, wird der Suchbegriff im
gesamten Text hervorgehoben.
Kürzel | Beschreibung | emacs Kommando |
---|---|---|
M-s h w | alle momentanen Highlights in den Puffer schreiben | hi-lock-write-interactive-patterns |
M-s h u | <regexp> Highlight ausschalten | unhighlight-regexp |
M-s h r | <regexp> Highlight erstellen | highlight-regexp |
M-s h p | Phrase Highlight erstellen | highlight-phrase |
M-s h l | ganze Zeile, in der <regexp> vorkommt, highlighten | highlight-lines-matching-regexp |
7.1.8 Register
Register können in a-z, A-Z und 0-9 gespeichert werden. In der Tabelle wird beispielhaft „r“ als Registeradresse angegeben.
Kürzel | Beschreibung |
---|---|
C-x r SPC r | Position in Register r schreiben |
C-x r j r | zu Position r springen |
C-x r s r | speichere Region in Register r |
C-x r r r | speichere Rectangel in Register r |
C-x r i r | füge Register r ein |
C-u <n> C-x r n r | speichere Nummer <n> in Register r |
C-u <n> C-x r + r | inkrementiere Nummer <n> mit Nummer in Register r, nur sinnnvoll wenn Nummer in Register ist |
C-u <n> C-x r + | inkrementiere Nummer <n> mit 1 |
Register werden nicht über die Sitzung hinaus gespeichert. Um bestimmte Positionen in Registern zu sichern können sie aber in die .emacs Datei geschrieben werden. Wirklich sinnvoll erscheint mir das aber nicht, da dies durch die Bookmarks besser abgedeckt wird.
Hier mal als Beispiel der Sprung zur .emacs Datei mit dem Register e
.
(set-register ?e '(file . "~/.emacs"))
Das Paket register-list habe ich zusätzlich geladen. Um die Punkt-Register auf einfache Art und Weise als Sprungmarken zu nutzen, habe ich das Mapping wie in der Tabelle angeben verwendet.
Mit Hilfe des Helm Pakets werden mit dem Kommando C-c h x
die
Register im Helm Minipuffer angezeigt und lassen sich auswählen.
Mein Kürzel | Orig. Kommando | Beschreibung |
---|---|---|
C-x C-l | M-x register-list | register-list ausführen |
C-x C-p <r> | C-x r SPC <r> | Position in Register <r> schreiben |
C-x C-j <r> | C-x r j <r> | zur Position <r> springen |
C-x C-r <r> | C-x r r <r> | Bereich in Register <r> speichern |
C-x C-i <r> | C-x r i <r> | Register <r> einfügen |
C-x C-h | C-c h x | helm-register, Register im helm Fenster anzeigen |
C-x C-1 | C-x r SPC 1 | Position in Register 1 schreiben |
7.1.9 Abkürzungs-Modus
Kürzel | Beschreibung |
---|---|
C-x a g | Abkürzung definieren. Das Wort vor dem Cursor wird genutzt. Für mehr Wörter M-<n> eingeben. |
C-x a e | Expandiert Abkürzung falls abbrev-mode disabled ist. |
M-x abbrev-mode | Schaltet Abkürzungsmodus ein/aus. |
Abkürzungen werden in die Datei .../emacs/.emacs.d/abbrev_defs
geschrieben.
;; keymapping für dabbrev (default ist M-/) angepasst (global-set-key (kbd "<C-S-iso-lefttab>") 'dabbrev-expand) (define-key minibuffer-local-map (kbd "<C-S-iso-lefttab>") 'dabbrev-expand)
7.1.10 Rectangle (Rechteckauswahl und Bearbeitung)
Mit C-SPC
den Anfang der Rechteckauswahl markieren. Danach zum Endpunkt der
Auswahl gehen. Das Ende ist der Punkt „vor“ dem Cursor!
Visuell schöner ist C-x SPC
. Damit sieht man nur den Rectangle markiert.
Kürzel | Beschreibung |
---|---|
C-x r t | Rectangle String eingeben |
C-x r k | Rectangle löschen |
C-x r M-w | Rectangle speichern |
C-x r y | gespeicherten Rectangle einfügen |
C-x r o | Leerzeichen vor Rectangle setzen (einrücken) |
C-x r N | Rectanglezeilen nummerieren |
C-x r c | Rectangle durch Leerzeichen ersetzen |
7.2 Occur und gefundenes ändern
7.2.1 Zeilen mit <regexp> auflisten/löschen/ändern
Mit M-x occur
oder M-s o
wird anhand eines <regexp> eine Liste der
Zeilen erstellt, in denen <regexp> vorkommt. Diese Liste wird in
einem neuen Puffer (*Occur *) geschrieben, in der die einzelnen Zeilen
als Sprungmarken zum Originaltext fungieren.
Im Puffer *Occur * kann mit e
in den Schreibmodus gewechselt werden.
Hier kann man dann auf die üblichen Arten den Text anpassen, und mit
C-c C-c
werden diese Änderungen dann in den Originalpuffer
übernommen.
Um Zeilen zu löschen, die <regexp> enthalten, oder nicht enthalten, können die Kommandos
M-x delete-matching-lines
und
M-x delete-non-matching-lines
genutzt werden.
7.2.2 Occur für Fortgeschrittene
Wenn man immer dieselben Schlüsselwörter via Occur (M-s o
) in einer
Datei sucht, kann man sich auch eine Lisp Funktion erstellen, die eben
diese Schlüsselwörter bereinigt und listet.
(defun my/occur-list-keywords () "List the keywords in an additionally window" (interactive) (delete-other-windows) (split-window-right -40) (occur "\\(?:FIXME\\|TODO\\|CLARIFY\\)") (switch-window) (toggle-truncate-lines 1) (text-scale-set 1) (text-scale-decrease 2) (read-only-mode 0) (goto-char 0) (while (re-search-forward "^[ \t]*[0-9]+:" nil t) (replace-match "")) (goto-char 0) (while (re-search-forward "^[ \t].*?" nil t) (replace-match "")) (read-only-mode 1) (goto-char 0)) (define-key global-map (kbd "<f9>") 'my/occur-list-keywords)
7.3 Abschnittsformatierung
Um einen Abschnitt zu formatieren gibt man den Befehl M-q ein. Dadurch wird ein Zeilenumbruch spätestens in der 70ten Spalte eingefügt, und alle anderen Zeilenumbrüche des Absatzes entfernt. Desweiteren werden alle Leerzeichen nach einem Leerzeichen gelöscht, mit Ausnahme von doppelten Leerzeichen nach einem Satz. Falls nach einem Punkt nur ein Leerzeichen kommt, werden daraus keine zwei Leerzeichen gemacht, schließlich kann emacs nicht wissen, ob es sich wirklich um ein Satzende handelt, oder um eine Abkürzung.
7.4 Rechtschreibprüfung
Man kann die Rechtschreibprüfung am Wort nutzen, in dem am Ende des
Wortes M-$
betätigt. Richtig gut ist der Modus Flyspell, der
Wörter, die er als falsch erkennt, rot-fett-unterstrichen markiert.
7.5 Fenstergröße ändern
Wenn mehrere Fenster geöffnet sind, kann mit C-x {
das aktuelle
Fenster horizental kleiner, und mit C-x }
das aktuelle Fenster
horizental größer gemacht werden. Mit den Kürzeln wird der Befehl
shrink-window-horizontally
oder enlarge-window-horizontally
aufgerufen. Mit M-x balance-windows-area
werden die Fenster wieder
ausgeglichen, m.a.W. also in den Ursprungszustand gebracht.
Tipp: Um einen Befehl zu wiederholen kann C-x z
eingegeben werden.
Ein weiteres z
wiederholt dann den letzten wiederholten Befehl. Um
ein Fenster also schrittweise um 5 Schritte zu verkleinern, gibt man
C-x { C-x z z z z
ein.
7.6 Leerzeichen entfernen
- delete-trailing-whitespace
- entfernt alle Leerzeichen am Ende jeder Zeile, entweder im ganzen Puffer oder im markierten Bereich
- whitespace-mode
- zeigt alle Leerzeichen an, siehe auch WhiteSpace
7.7 Zeilen ein- und auskommentieren
Emacs bringt ab Werk schon Möglichkeiten mit, um das Kommentieren im Code zu vereinfachen.
Kürzel | Kommando | Beschreibung |
---|---|---|
M-; | M-x comment-dwim | Wenn eine Region markiert ist, wird diese ein- oder auskommentiert. |
Ohne Markierung wird das Kommentarzeichen ans Ende der Zeile gesetzt. | ||
M-j | Zeilenumbruch mit Kommentarzeichen, Cursor ist ausgerichtet. | |
M-x comment-region | Setzt die markierte Region als Kommentar. | |
M-x comment-or-uncomment-region | Wie comment-region , löscht aber Kommentarzeichen, wenn vorhanden. |
|
M-x comment-box | Schließt den markierten Bereich in eine Kommentarbox ein. |
Falls für den Modus noch keine Kommtaranfang- und Kommentarendezeichen
definiert sind, wird beim ersten Kommentieren im Puffer nach den
Kommentarzeichen gefragt, und diese werden ab dann bis zum Schließen des
Puffers genutzt. Um es dauerhaft für einen Modus zu defnieren setzt man
comment-start
und comment-end
in der Modus-Datei.
(setq comment-start "#" comment-end "")
7.8 Dired Puffer
Der Dired Puffer ist ein mächtiges Werkzeug, um Dateien zu
löschen/umbenennen/erzeugen. Eine schnelle Einführung findet sich
unter ergoemacs. Um den Puffer zu öffnen gibt man entweder M-x
dired
oder C-x d
ein. Zusätzlich habe ich noch andere Dired Pakete
geladen, bsw. Dired+.
7.8.1 Kopieren/löschen/umbenennen
Kürzel | Beschreibung |
---|---|
RET | Datei öffnen |
q | Ordner (dired Puffer) schließen |
C | Datei kopieren |
R | Datei umbenennen oder bewegen |
d | Datei löschen |
D | Markierte Datei(n) löschen |
+ | Neuen Ordner erzeugen |
C-x C-f | Neue Datei erstellen |
Z | Packen/entpacken mit gzip |
7.8.2 Markieren mehrerer Dateien
Kürzel | Beschreibung |
---|---|
m | Datei markieren |
u | Markierung entfernen |
U | Alle Markierungen entfernen |
% | Öffnet Fenster mit einer Liste der möglichen Folgekommandos |
% m | Markieren nach Muster (regexp) |
7.8.3 Navigation
Kürzel | Beschreibung |
---|---|
g | dired Puffer erneuern |
^ | gehe zum übergeordneten Ordner |
7.8.4 Mehrere Dateien umbenennen
Kürzel | Kommando | Beschreibung |
---|---|---|
C-x C-q | wdired-change-to-wdired-mode | In den Modus zum Editieren des dired Puffers wechseln. |
C-c C-c | wdired-finish-edit | Änderungen übernehmen. |
C-c C-k | ||
C-c ESC | wdired-abort-changes | Änderungen nicht übernehmen, Editiermodus verlassen, abbrechen. |
7.9 Datei verschlüsseln
Wenn beim Anlegen einer Datei vorher der Befehl epa-encrypt-file
ausgeführt wird, wird zweimal nach einen Passwort gefragt. Nachdem
man beidemale das selbe eingegeben hat, wird die Datei mit der
zusätzlichen Endung gpg angelegt. Diese ist jetzt verschlüsset, und
kann nur noch geöffnet werden, nachdem man das Passwort eingegeben
hat. Immer wenn die Datei geändert wird, wird erneut zweimal nach ein
Passwort gefragt. Dieses Passwort sollte man sich merken, da
ansonsten die Daten in der Datei verschlüsselt bleiben.
Um zu verhindern, dass eine verschlüsselte Datei entschlüsselt im Backup Verzeichnis liegt, habe ich eine Lösung hier.
8 Emacs unter Windows
Am Windowsrechner hatte ich das Problem, dass das Scrollen mit C-n
und C-p
nur sehr langsam ging. Unter der Seite
http://stackoverflow.com/questions/3631220/fix-to-get-smooth-scrolling-in-emacs
habe ich dann eine Lösung gefunden, die bei mir gewirkt hat.
(setq redisplay-dont-pause t
scroll-margin 1
scroll-step 1
scroll-conservatively 10000
scroll-preserve-screen-position 1)
9 Große Dateien
Bei sehr großen Dateien und/oder Dateien mit vielen Zeilen kann Emacs
sehr träge werden. Um das ganze zu Beschleunigen hilft es meist das
Kommando M-x find-file-literally
auszuführen. Dadurch wird zwar
Highlight ausgeschaltet, und Emacs ist für die Datei dann im
Fundamental Modus, dafür kann dann aber mit der Datei gearbeitet
werden.
Wenn das auch nicht hilft, gibt es immer noch die Möglichkeit Emacs
ohne die eigenen Einstellungen zu starten mit emacs -Q
. Falls es
danach flüssig läuft, sollte man sich die geladenen Module mal genauer
anschauen. Einfach eins nach dem anderen wieder laden, und probieren
ob Emacs immer noch flüssig arbeitet.
Eine weitere Möglichkeit soll das Paket vlf, was für „very large files“ steht, bieten. Das muss ich aber noch ausprobieren.
10 Timestamp einfügen mit Hilfe des org-mode Pakets
In einer nicht-org-mode Datei kann der timestamp von org-mode trotzdem
genutzt werden. Dafür wird einfach das Kommando M-x org-time-stamp
eingegeben. Dadurch öffnet sich calendar, in dem sich dann das
gewünschte Datum auswählen lässt.
Das Kommando M-x org-date-from-calendar
gibt das aktuelle Datum
direkt ein.
Siehe auch in der .emacs Datei die Einstellungen für Datum und Uhrzeit eingeben.
11 Tilde eingeben mit Emacs - ein Sonderzeichen
Wie zum Teufel gebe ich das Tilde-Zeichen mit emacs ein? Wenn ich AltGr++ eingebe, kommt eine Fehlermeldung.
11.1 Im Fundamental Modus
Lösung für das Tilde-Problem: C-AGr-\
Jetzt erscheint in der Statuszeile ganz links ein „m“. Als nächstes zweimal AGr-~ eingeben und dann SPC. Noch einmal C-AGr-\ um diesen Eingabemodus wieder zu verlassen.
11.2 Im Org Modus
Tja, wenn ich das doch nur wüsste. Alles rumprobieren hat bisher noch
gar nichts gebracht. ~ Hier gibt man C-x 8 AGr-~ SPC
ein, und schon
ist die ~ drin. Ein einfaches AGr-~ SPC
reicht aber schon, wie
schön.
12 Emacs Pakete
12.1 undo-tree
Dieses Paket ersetzt das Standard undo Verhalten von Emacs. Der
alte undo Befehl C-_
funktioniert wie gewohnt. Zusätzlich gibt es
jetzt den redo Befehl M-_
und die Möglichkeit, sich den
Änderungsbaum mit C-x u
anzusehen, und dort einen Stand
auszuwählen. Das undo-tree
Fenster verlässt man dann mit q
.
12.2 Pufferliste mit ido-mode
Mit M-x ido-mode
wird der Modus aktiviert. Wenn jetzt C-x b
eingegeben wird, erscheint die Pufferliste in kurzform im Echofeld.
Wenn man einen Teil eines Puffernames eingibt, wird die Liste
dementsprechend kleiner.
Kürzel | Beschreibung |
---|---|
M-x ido-mode | aktiviert den ido-mode |
C-x b | führt den ido-mode aus und zeigt Pufferliste |
C-s | wandert vorwärts durch die Pufferliste |
C-r | wandert rückwärts durch die Pufferliste |
12.3 ace-jump-mode
Dieses Packet musste nachträglich installiert werden. Das Einrichten geht nur durch anpassen der .emacs Datei.
Nach Eingabe von C-x C-a
erscheint die Aufforderung, einen
Buchstaben einzugeben. Diesen sucht das Packet dann am Anfang der
Wörter im aktuellem Puffer. Wenn nur ein Auftreten gefunden wurde,
springt der Cursor direkt dort hin. Bei mehrfachem Auftreten werden
die entsprechenden Wörter mit einem Buchstaben markiert. Die Eingabe
des Buchstaben lässt den C:ursor dann dort hin springen. Groß- und
Kleinschreibung wird dabei ignoriert.
;; ace-jump-mode settings (autoload 'ace-jump-mode "ace-jump-mode" "Emacs quick move minor mode" t) ;; you can select the key you prefer to (define-key global-map (kbd "C-x C-a") 'ace-jump-mode)
12.4 Multiple Cursors
Das Paket multiple-cursors ermöglicht es, dass mehrere Markierungen oder ein bestimmtes Wort ein eigenen Cursor zugeordnet bekommt. Dadurch kann dann an diesen Cursorn gleichzeitig das identische eingegeben werden.
Steht der Cursor am Anfang einer Zeile, können die
vorherigen/nachfolgende Zeilen mit C-<
/ C->
markiert werden. Das
Verhalten ist nützlich, um einen Bereich auszukommentieren.
Tastaturkürzel | Beschreibung |
---|---|
C-S-c C-S-c | Bei Regionen über mehrere Zeilen erhält jede Zeile einen Cursor. |
C-> | markiertes Wort noch einmal unten finden, wenn keine Markierung vorliegt, dann eine Zeile runter Cursor dublizieren |
C-< | markiertes Wort noch einmal oben finden, wenn keine Markierung vorliegt, dann eine Zeile hoch Cursor dublizieren |
C-S-c C-> | markiertes Wort im ganzen Puffer finden (bei sehr häufigen Auftreten des Wortes steigt die Prozessorlast stark an) |
;; multiple-cursors (require 'multiple-cursors) (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines) (global-set-key (kbd "C->") 'mc/mark-next-like-this) (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
12.5 Yasnippet
Kürzel | Beschreibung |
---|---|
TAB | expandiert den Trigger |
C-c & C-s | am Punkt einfügen |
C-c & C-n | neues Snippet erstellen |
C-c & C-v | snippet Datei öffnen |
Man beachte das &-Zeichen in der Tabelle. Das Zeichen ist tatsächlich auch einzugeben.
Wenn ein neues Snippet angelegt wird, gibt man am Ende der Bearbeitung C-c
C-c
ein. Nachdem die folgenden Fragen beantwortet wurden, steht das Snippet
auch schon zur Verfügung.
Sprungmarken werden mit $<n>
gesetzt. Wobei <n> = 0 die letzte Sprungmarke
ist. Mit Tab springt man dann von Marke zu Marke, und kann direkt etwas
eingeben. Beim Konstrukt ${<n>:ein Text}
steht bei der Sprungmarke schon der
vorgegebene Text.
;; yasnippet (require 'yasnippet) (yas-global-mode 1)
12.6 Icicles
Gestartet wird der Modus mit M-x icy-mode
.
- Es erweitert die Ausgaben beim Auto-Completion.
- Bei
M-x
werden nach Eingabe vonTAB
in einem Extrafenster alle möglichen Kommandos angezeigt. - Beim Öffnen von Dateien und Puffern arbeitet Icicles ebenfalls. Ob ich es besser finde als den Ido-Mode weiß ich aber noch nicht.
- Bei den Bookmarks arbeitet Icicles ebenfalls.
Den automatischen Start habe ich in der .emacs Datei wieder auskommentiert, da es mir so schien, als ob es sich mit dem Helm Paket beist.
;; (require 'icicles) ;; (icy-mode 1)
12.7 Auto-Complete
Gestartet wird der Modus mit M-x auto-complete-mode
.
Nachdem der Modus gestartet wurde, wird beim Schreiben ständig
versucht, das aktuelle Wort zu vervollständigen. Falls es nur ein
Wort im aktuellem Puffer gibt, welches passt, kann mit ein TAB
das
Wort direkt vervollständigt werden. Bei mehreren Möglichkeiten öffnet
sich ein Popup-Fenster.
Praktisch ist auch, dass beim Eingeben eines Pfades auto-complete automatisch die möglichen Dateien/Ordner zur Auswahl stellt.
Ich habe zusätzlich zum Hauptpaket das Paket ac-abbrev geladen. Somit steht der Liste der Auto-Complete Möglichkeiten auch der Inhalt der Abkürzungsdatei zur Verfügung. Weitere Pakete für verschiedenste Anwendungsmöglichkeiten existieren zwar, sind für mich aber z.Z. noch nicht von Bedeutung.
Mit M-x customize-group RET auto-complete RET
kommt man zu den
Einstellungen. Dort habe ich global-auto-complete-mode aktiviert,
und bei AC Modes den org-mode hinzugefügt.
https://github.com/auto-complete/auto-complete
(require 'auto-complete) (require 'auto-complete-config) (ac-config-default)
12.8 register-list
Dieses Paket, eine Erweiterung des built-in Register, ermöglicht es,
dass alle Register nach dem Kommando M-x register-list
in einem
separaten Fenster angezeigt werden. Wenn der Cursor auf dem
Registerzeichen steht, bringt ein RET darauf einen an die
entsprechende Stelle, oder kopiert den Inhalt in den Killring, je nach
Typ des Register.
Mit ’d’ können Register in der Liste zum Löschen markiert werden. Das betätigen von ’x’ führt das Löschen dann aus.
Kürzel | Beschreibung |
---|---|
e | the key for this register. |
E | the value for this register. |
+ | increment key at point. |
- | decrement key at point. |
d | the register at point for deletion. |
c | the register at point for concatenation. |
u | the register at point. |
U | all registers. |
x | deletions or concatenations. |
f | fontification of value strings. |
g | the register menu display. |
M-x register-list-tab | cycle between the key, the type and the value. |
Q | the register menu. |
;; package register-list (require 'register-list) ;; own keystrokes for register working (global-set-key (kbd "C-x C-l") 'register-list) (global-set-key (kbd "C-x C-p") 'point-to-register) (global-set-key (kbd "C-x C-j") 'jump-to-register) (global-set-key (kbd "C-x C-r") 'copy-to-register) (global-set-key (kbd "C-x C-i") 'insert-register)
12.9 Kill between delimiters
Dieses Paket ermöglicht es, den Inhalt zwischen zwei Trennzeichen
(FROM:
, TO:
) zu löschen. Dabei werden die beiden Trennzeichen
ebenfalls gelöscht. Diese beiden Trennzeichen können auch identisch
sein, müssen es aber nicht. Die Trennzeichen werden dabei für FROM:
vor dem Cursorpunkt und für TO:
nach dem Cursorpunkt gesucht.
- Wenn für
FROM:
kein Zeichen eingegeben wird, wird vonTO:
bis Pufferanfang gelöscht. - Wenn für
TO:
kein Zeichen eingegeben wird, wird vonFROM:
bis Pufferende gelöscht. - Wenn weder für
FROM:
, noch fürTO:
ein Zeichen eingegeben wird, wird der ganze Pufferinhalt gelöscht.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; delete the stuff within delimiters ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'delim-kill)
12.10 goto-chg
Das Paket goto-chg ermöglicht es, zu den letzten Änderungen in einem Puffer zu springen.
Als Tastaturkürzel habe ich bei mir
C .
für den Sprung zur letzten Änderung, und
C ,
für das entgegengesetzte Springen eingestellt.
(require 'goto-chg) (global-set-key [(control ?.)] 'goto-last-change) (global-set-key [(control ?,)] 'goto-last-change-reverse)
12.11 dot-mode
dot-mode vi like
Wenn M-x dot-mode
aktiviert wurde, wiederholt der Befehl
C .
die letzten Eingaben/Kommandos. Goto-chg funktioniert dann nicht, da ich den selben Keystroke benutze.
(require 'dot-mode) (add-hook 'find-file-hooks 'dot-mode-on)
12.12 Das Programm silversearcher-ag und das Paket ag
Das Programm silversearcher-ag ermöglicht es sehr schnell in Dateien
nach einen String zu suchen. Es arbeitet ähnlich wie grep oder
ack-grep. Das Emacs Paket ag ermöglicht es mit dem Kommando M-x ag
silversearcher-ag auszuführen und das Ergebnis in einem Unterfenster
auszugeben. Weiter Informationen finden sich auf der Homepage
https://github.com/Wilfred/ag.el.
Die Homepage des silversearcher-ag Projekts ist https://github.com/ggreer/the_silver_searcher.
12.13 Permanentes Highlight des letzten Suchstrings
Mit dem Paket evil-search-highlight-persist ist permanentes Highlight
des letzten Suchstrings möglich. Das Highlight kann dann mit C-x
SPC
wieder ausgeschaltet werden.
- Hinweis
- Da ich mittlerweile das Paket phi-search benutze,
funktioniert das mit der Tastenkombination
C-s
,C-r
undM-%
leider nicht mehr.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Permanentes Highlight des letzten Suchstrings ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'evil-search-highlight-persist) (global-evil-search-highlight-persist t)
12.14 Das helm Paket
Das Emacs Paket helm ist ein Paket, welches die Handhabung von Emacs stark beeinflusst. Eine sehr gute Einführung findet sich unter helm-intro.
Die Einstellungen, die ich dort übernommen habe sind:
Kürzel | Beschreibung |
---|---|
<tab> | helm-execute-persistent-action; rebind tab to run persistent action |
C-i | helm-execute-persistent-action; make TAB works in terminal |
C-z | helm-select-action; list actions using C-z |
M-x | helm-M-x |
C-: | ac-complete-with-helm |
C-c h b | helm-bookmarks |
M-y | helm-show-kill-ring |
C-x b | helm-mini |
C-x C-f | helm-find-files |
C-c h o | helm-occur |
C-h SPC | helm-all-mark-rings |
C-c h x | helm-register |
;;;;;;;;;; ;; helm ;; ;;;;;;;;;; (require 'helm-config) ; rebind tab to run persistent action (define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action) ; make TAB works in terminal (define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; list actions using C-z (define-key helm-map (kbd "C-z") 'helm-select-action) (global-set-key (kbd "M-x") 'helm-M-x) (global-set-key (kbd "C-:") 'ac-complete-with-helm) (define-key ac-complete-mode-map (kbd "C-:") 'ac-complete-with-helm) ;; C-c C-b wird im org-mode von der Funktion "vorherige Überschrift ;; auf selber Höhe" überschrieben, besser Kürzel C-c h b nutzen (global-set-key (kbd "C-c h b") 'helm-bookmarks) (global-set-key (kbd "M-y") 'helm-show-kill-ring) (global-set-key (kbd "C-x b") 'helm-mini) (global-set-key (kbd "C-x C-f") 'helm-find-files) (global-set-key (kbd "C-c h o") 'helm-occur) (global-set-key (kbd "C-h SPC") 'helm-all-mark-rings) (global-set-key (kbd "C-c h x") 'helm-register) ;; Damit es zu den Register Kommandos passt, noch einmal mit anderen ;; Keystroke (global-set-key (kbd "C-x C-h") 'helm-register) ;; Position in Register 1 schreiben (global-set-key (kbd "C-x C-1") '(lambda () (interactive) (point-to-register ?1))) ;; (global-set-key [f7] '(lambda () (interactive) (register-to-point ?1)))
12.15 Helm und Yasnippet
Das Paket helm-c-yasnippet stellt Kommandos bereit, mit denen
Schlüsselwörter aus Yasnippet Helm-typisch ausgewählt werden können.
Zum einfachen Aufruf wurde das Kürzel C-c y
auf das Kommando
helm-yas-complete
gelegt.
(global-set-key (kbd "C-c y") 'helm-yas-complete)
12.16 Das Projectile Paket
Mit Hilfe des Projectile Pakets und des Helm Pakets können
Projektordner einfach angesprungen und dort einzelne Dateien
ausgewählt werden. Damit das funktioniert muss im entsprechenden
Ordner eine leere Datei .proctectile
angelegt werden, und das
Projectile Paket in diesen Ordner einmal genutzt werden. Danach ist
es dem System bekannt, und kann ausgewählt werden. Eine gute
Einführung findet sich auf der helm-projectile Seite.
Kürzel | Beschreibung |
---|---|
C-c p p | Listet alle besuchten Projekte. |
C-c p f | Listet die Dateien des aktuellen Projekts. |
C-c p h | Listet die bekannten Projekte. |
C-c p i | Cache neu anlagen |
C-c p z | Aktuellen Puffer dem Cache hinzufügen |
projectile-purge-file-from-cache | Aktuellen Puffer aus Cache entfernen |
projectile-purge-dir-from-cache | Aktuellen Ordner aus Cache entfernen |
;; mit customize gesetzt '(projectile-completion-system (quote helm)) '(projectile-global-mode t) ;;;;;;;;;;;;;;;;;;;;; ;; helm projectile ;; ;;;;;;;;;;;;;;;;;;;;; (setq helm-projectile-sources-list '(helm-source-projectile-projects helm-source-projectile-files-list)) (setq projectile-switch-project-action 'helm-projectile-find-file) (setq projectile-switch-project-action 'helm-projectile)
12.17 neotree
Das Paket neotree ist vergleichbar mit dem Vim Paket nerdtree. Das
ein- und ausblenden des Dateimanagers habe ich auf die Taste F12
gelegt.
Kürzel im neotree Puffer | Beschreibung |
---|---|
n | nächste Zeile |
p | vorherige Zeile |
SPC, RET oder TAB | Öffnet Dateien, Ordner werden auf- oder zugeklappt |
g | Neu aufbauen |
A | Maximieren oder minimieren des neotree Fensters |
H | Anzeigen/verstecken von „hidden“ Dateien |
C-c C-n | Erzeugt eine Datei oder einen Ordner wenn der Name mit „/“ endet im aktuellen Ordner |
C-c C-d | Löscht aktuell markierte Datei oder Ordner |
C-c C-r | Markierte Datei oder Ordner umbenennen |
C-c C-c | Markierten Ordner als obersten (Wurzel-) Ordner anzeigen |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; neotree mit F12 togglen ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (global-set-key (kbd "<f12>") 'neotree-toggle)
12.18 Mit Google Übersetzen
Mit Hilfe dieses Paketes kann innerhalb von Emacs mit Hilfe von Google
übersetzt werden. Meine Einstellungen habe ich dabei so gewählt, dass
mit C-c t
das Wort unter dem Cursor oder der
markierte Teil übersetzt wird, und mit C-c T
das zu Übersetzende
eingegeben werden kann. Die Auswahl der Quell- und Zielsprache habe
ich dabei fest auf „von Englisch nach Deutsch“ eingestellt. Die
Übersetzung erscheint dabei als Popup-Fenster am Cursorpunkt.
;; Einstellungen via M-x customize '(google-translate-default-source-language "en") '(google-translate-default-target-language "de") '(google-translate-output-destination (quote popup)) '(google-translate-show-phonetic t) ;;;;;;;;;;;;;;;;;;;;;;;; ;; google translation ;; ;;;;;;;;;;;;;;;;;;;;;;;; (require 'google-translate) (require 'google-translate-default-ui) (global-set-key "\C-ct" 'google-translate-at-point) (global-set-key "\C-cT" 'google-translate-query-translate)
12.19 phi Pakete
12.19.1 phi-search
Das Paket phi-search nützlich beim Durchsuchen eines Textes. Weitere Informationen finden sich unter phi-search auf github.
Wie vom Author des Pakets vorgeschlagen habe ich folgende Kürzel eingerichtet.
Kürzel | Beschreibung |
---|---|
C-s | Re-mapping des Emacs vorwärts Suchbefehls auf phi-search . |
C-r | Re-mapping des Emacs rückwärts Suchbefehls auf phi-search-backward . |
M-% | Re-mapping des Emacs Such- und Ersetzenbefehls auf phi-replace-query . |
< | Im phi-search Unterfenster rückwärts weitersuchen |
> | Im phi-search Unterfenster vorwärts weitersuchen |
(global-set-key (kbd "C-s") 'phi-search) (global-set-key (kbd "C-r") 'phi-search-backward) (global-set-key (kbd "M-%") 'phi-replace-query) (define-key phi-search-default-map (kbd "<") 'phi-search-again-or-previous) (define-key phi-search-default-map (kbd ">") 'phi-search-again-or-next) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; phi-autopair has to be required explicity ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'phi-autopair) (phi-autopair-global-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; phi-search-dired has to be required explicity ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'phi-search-dired)
12.19.2 phi-grep
Das Paket phi-grep stellt die folgenden Kommandos bereit.
- phi-grep-in-file — grep in einer einzelnen Datei.
- phi-grep-in-directory — Rekursives grep in einem Ordner. Damit können Suchworte in allen Dateien unterhalb eines Verzeichnisses gesucht werden. Es wird dabei erst nach dem Verzeichnis gefragt, und danach kommt die Abfrage „CheckOnly“. Das „CheckOnly“ fragt nach einen Muster, nachdem die zu findenen Dateien eingeschränkt werden können. Als letztes kommt dann der Ausdruck, nachdem gesucht werden soll.
\noindent Im dired Modus Puffer kommen noch folgenden Kommandos hinzu.
- phi-grep-dired-in-dir-at-point — grep im Ordner am Cursorpunkt
- phi-grep-dired-in-file-at-point — grep in einer Datei am Cursorpunkt
- phi-grep-dired-in-marked-files — grep in allen markierten Dateien
- phi-grep-dired-in-all-files — grep in allen gelisteten Dateien
- phi-grep-dired-dwim — automatisch eines der Kommandos
\noindent Das Ergebnisfenster ist editierbar. Nachdem man C-g
oder im
Ergebnisfenster RET drückt, kommt eine Abfrage, ob die Änderungen in
den ursprünglichen Puffern übernommen werden sollen, oder nicht.
Der Vorteil des Paketes liegt für mich in der Tatsache, dass es ohne das originale grep Programm läuft, sonden rein in elisp geschrieben ist. Dies macht es gerade für Windows Rechner interessant.
12.20 swiper und helm
Das Paket swiper gibt einen Überblick während einer regexp Suche in
einem Puffer. In M-x customize
habe ich „Swiper Completion Method“
auf „Helm“ gesetzt. Als Keystroke setzte ich in der .emacs Datei
C-c s
. Danach kann man ein oder mehrere Suchmuster eingeben, und
die gefunden Zeilen werden helm-artig gelistet. Diese Einträge können
dann mit Pfeil-auf/ab oder C-n/p
angewählt werden. Im
Originalpuffer wird dann sogleich diese Zeile angesprungen. Mit RET
wird die markierte Zeile angesprungen, und swiper wird beendet.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; swiper - use pattern as regexp and list it ;; ;; my standard method is swiper-helm ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'swiper) (global-set-key (kbd "C-c s") 'swiper-helm) ;; (global-set-key (kbd "C-c s") 'swiper) ;; falls swiper--helm nicht funktioniert
12.21 Zoom Window
Dieses Paket kann bei mehreren Fenstern hilfreich sein. Wenn im
aktiven Fenster der Keystroke C-x C-z
eingegeben wird, wird dieses
Fenster auf die volle Framegröße gebracht, und die Menüleiste
verändert ihre Farbe. Nach einen nochmaligen C-x C-z
werden wieder
aller Fenster wie vorher angezeigt.
(require 'zoom-window) (global-set-key (kbd "C-x C-z") 'zoom-window-zoom) (setq zoom-window-mode-line-color "Cyan")
12.22 Evil Numbers
Das Paket ermöglicht es die erste Nummer in der aktuellen Zeile, vom Cursor aus gesehen zu inkrementieren/dekrementieren.
Kürzel | Beschreibung |
---|---|
C-+ | Addiert 1 auf die gefundene Zahl. |
C-- | Subtrahiert 1 von der gefundenen Zahl. |
(require 'evil-numbers) (global-set-key (kbd "C-+") 'evil-numbers/inc-at-pt) (global-set-key (kbd "C--") 'evil-numbers/dec-at-pt)
12.23 Window switch Pakete
Mit Hilfe des Pakets wn-mode
ist es möglich zwischen den Fenstern
mit M-1
bis M-0
zu wechseln.
Das Paket switch-window
ermöglicht es, die Nummer der Fenster in den
Fenstern füllend anzuzeigen, und durch betätigen der Nummer das
Fenster anzuspringen. Ein Bild davon kann man sich hier machen.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; wn mode to switch to other windows via M-1 ... M-0 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (wn-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; switch-window set to keystroke M-s M-w ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'switch-window) (global-set-key (kbd "M-s M-w") 'switch-window)
12.24 Kommentieren
Das Paket comment-dwim-2
verbessert das built-in Kommentieren von
Emacs. In der Zeile/Region einfach M-;
eingeben, und schon wird die
Zeile/Region kommentiert. Beim nochmaligen ausführen wird
entkommentiert, und an Ende der Zeile ein Kommentarzeichen eingefügt.
Wenn eine drittes mal der Befehl ausgeführt wird, werden die
Kommentarzeichen gelöscht.
Ansehen kann man sich das Verhalten hier.
(global-set-key (kbd "M-;") 'comment-dwim-2)
12.25 Visible Bookmarks
Das Paket bm unterstützt sichtbare Lesezeichen innerhalb eines Puffers. Es ist nicht mit dem built-in bookmark zu verwechseln, sondern dient dazu, innerhalb eines Puffers mit einfachen Tastaturkürzeln Lesezeichen zu setzen/löschen und sie in der Reihenfolge, in der sie gesetzt worden sind, anzuspringen.
In den Einstellungen habe ich die permanente Speicherung der Lesezeichen aktiviert. Dafür war es notwendig, den Code aus der Beschreibung des Paketes in die .emacs Datei zu übernehmen.
Das anspringen der Lesezeichen über mehrere Puffer ist nicht aktiviert. Somit bleiben die Lesezeichen zwar erhalten, aber für die Auswahl eines Puffers ist weiterhin das bookmark-built-in zuständig.
Damit helm und bm zusammen arbeiten, habe ich zusätzlich das Paket
helm-bm geladen. Das von mir eingestellte Tastaturkürzel C-c b
überschreibt dabei das alte Verhalten, alle offenen org-mode Puffer
aufzulisten. Die Lesezeichen der offenen Puffer zu listen und
anspringen zu können, erscheint mir aber als wichtiger.
Die Tastaturkürzel habe ich vom Autor übernommen.
Kürzel | Kommando | Beschreibung |
---|---|---|
C-S-F2 | bm-toggle | setzt und entfernt Lesezeichen, sonderbarerweise ist das C-S-F2 und C-F2 funktioniert nicht |
F2 | bm-next | springt zum nächsten Lesezeichen |
S-F2 | bm-previous | springt zum vorherigen Lesezeichen |
C-c b | helm-bm | listet alle Lesezeichen von bm aus geöffneten Puffern |
Auch die Maus kann benutzt werden, um am linken Rand (fringe) Lesezeichen zu setzen/löschen und anzuspringen.
Maus | Kommando | Beschreibung |
---|---|---|
mouse-5 | bm-next-mouse | springt zum nächsten Lesezeichen |
mouse-4 | bm-previous-mouse | springt zum vorherigen Lesezeichen |
mouse-1 | bm-toggle-mouse | setzt und entfernt Lesezeichen |
;; M$ Visual Studio key setup. (global-set-key (kbd "<C-f2>") 'bm-toggle) (global-set-key (kbd "<f2>") 'bm-next) (global-set-key (kbd "<S-f2>") 'bm-previous) ;; Click on fringe to toggle ;; bookmarks, and use mouse wheel to ;; move between them. (global-set-key (kbd "<left-fringe> <mouse-5>") 'bm-next-mouse) (global-set-key (kbd "<left-fringe> <mouse-4>") 'bm-previous-mouse) (global-set-key (kbd "<left-fringe> <mouse-1>") 'bm-toggle-mouse) ;; This is necessary to activate presistent bookmarks. ;; Make sure the repository is loaded as early as possible (setq bm-restore-repository-on-load t) (require 'bm) ; this line is really really necessary ;; Loading the repository from file when on start up. (add-hook' after-init-hook 'bm-repository-load) ;; Restoring bookmarks when on file find. (add-hook 'find-file-hooks 'bm-buffer-restore) ;; Saving bookmark data on killing a buffer (add-hook 'kill-buffer-hook 'bm-buffer-save) ;; Saving the repository to file when on exit. ;; kill-buffer-hook is not called when Emacs is killed, so we ;; must save all bookmarks first. (add-hook 'kill-emacs-hook '(lambda nil (bm-buffer-save-all) (bm-repository-save))) ;; Update bookmark repository when saving the file. (add-hook 'after-save-hook 'bm-buffer-save) ;; Restore bookmarks when buffer is reverted. (add-hook 'after-revert-hook 'bm-buffer-restore) ;;;;;;;;;;;;;;;;;;;;;;;;;; ;; helm and bm together ;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ;; overwrites the org-mode command to list all active org buffers (global-set-key (kbd "C-c b") 'helm-bm)
12.26 MWIM - Move where I mean
Das Paket mwim setzt den Cursor an das Ende oder den Anfang einer
Zeile, so wie es gemeint ist. Ich habe es auf die Standard
Keystrokes C-a
und C-e
gelegt.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; mwim - move where I mean ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (autoload 'mwim-beginning-of-code-or-line "mwim" nil t) (autoload 'mwim-beginning-of-line-or-code "mwim" nil t) (autoload 'mwim-end-of-code-or-line "mwim" nil t) (autoload 'mwim-end-of-line-or-code "mwim" nil t) (global-set-key (kbd "C-a") 'mwim-beginning-of-code-or-line) (global-set-key (kbd "C-e") 'mwim-end-of-code-or-line)
12.27 smooth scrolling
Das Paket smooth-scrolling lässt den Cursor beim Scrollen mit C-n
und C-p
weicher
scrollen. In der .emacs Datei habe ich nur den Aufruf
(require 'smooth-scrolling)
stehen. Die weiteren Einstellungen kann man dann mit M-x customize
erledigen.
Das Paket nicht mit smooth-scroll verwechseln.
12.28 navi-mode
Um das Paket navi-mode zu nutzen, müssen die drei Pakete
- navi-mode
- outshine
- outorg
installiert werden. Danach noch in der .emacs Datei
(require 'navi-mode)
eintragen, und los kann es gehen.
Das Paket stellt einen read-only Puffer zur Verfügung, der ähnlich wie occur funktioniert, nur das die Suchbegriffe vorgegeben werden. Gedacht ist das Plugin für org-mode Dateien. Damit steht dem Autor die Dokumentenstruktur als extra Seite zur Verfügung, um schnell und einfach durch das Dokument zu navigieren, ohne die Übersicht zu verlieren.
Mit M-s n
wird das Fenster geöffnet und/oder aktualisiert. Dabei
wird der aktivierte Cursor in das jeweils andere Fenster aktiviert.
Im navi-mode Fenster wird mit den Tasten 1 … 8 der Level bestimmt, der angezeigt wird. Bei org-mode Dateien entspricht dies der Anzahl der Sterne vor einer Überschrift.
Kürzel | Beschreibung |
---|---|
M-s n | navi-mode starten, zwischen beiden Fenstern springen |
M-s s | |
M-s M-s | |
s | zwischen beiden Fenstern springen, s funktioniert nur im navi-mode Fenster |
p | Eine Zeile hoch, wie C-p |
n | Eine Zeile runter, wie C-n |
DEL | Eine Seite hoch |
SPC | Eine Seite runter |
h | Hilfe aufrufen |
q | Zum Ort im Arbeitspuffer springen und navi-mode Puffer schließen, leider bleibt das Fenster weiterhin offen, kann aber mit C-x 1 geschlossen werden |
d | Ort in Arbeitspuffer anzeigen |
o | Zum Ort im Arbeitspuffer springen, geht auch mit Enter |
TAB | Ort im Arbeitspuffer anzeigen und Abschnitte zyklisch anzeigen, wie im org-mode bei Überschriften |
r | Nur Abschnitt am Cursor sichtbar machen |
w | Alles wieder sichtbar machen, r negieren |
Bei navi-mode sind desweiteren einige Schlüsselwörter vordefiniert, nach denen es sucht. Für die eigenen Bedürfnisse können diese angepasst und erweitert werden.
key | keyword-symbol | searches for |
---|---|---|
f | :FUN | functions, macros etc. |
v | :VAR | vars, consts, customs etc. |
x | :OBJ | OOP (classes, methods etc) |
b | :DB | DB (store and select) |
a | :ALL | all |
Eine weiter Beschreibung findet sich unter http://orgmode.org/worg/org-tutorials/org-outside-org.html
Mittlerweile habe ich navi mode durch imenu-list ersetzt!
12.29 elmacro
Dieses Paket elmacro stellt die Fähigkeiten zu Verfügung, die letzten Kommandos oder das letzte Makro in emacs-lisp Code auszugeben. Damit es schon beim Start aktiviert ist, gibt man in der .emasc Datei
(elmacro-mode 1)
ein. Damit stehen die Kommandos
- elmacro-show-last-commands
- elmacro-show-last-macro
zu Verfügung.
12.30 imenu-list
Mit imenu können Funktionen in einer Code Datei direkt angesprungen werden. Das Paket imenu-list fügt dieser Funktion die Fähigkeit hinzu, diese Funktionen als Liste in einen Extra Fenster aufzulisten.
Gestartet wird imenu-list mit
M-x imenu-list-minor-mode
Innerhalb des Listenpuffers IList wird mit RET die Funktion direkt angeprungen. Mit SPC wird die Funktion im Code Puffer angezeigt, der Cursor aber bleibt im imenu-list Fenster.
Gerade im org-mode ist imenu-list
recht nützlich, um die
Dateistruktur in einem extra Fenster zu sehen. Für den schnellen
Zugriff habe ich das Kommando auf die F9 Taste gelegt. Dieses Fenster
kann mit q
wieder geschlossen werden.
(global-set-key (kbd "<f9>") 'imenu-list)
12.31 discover
Das Paket discover stellt ein Kontextmenü bereit, welches bei
komplizierteren Emacs Kommandos aufpoppen, und somit eine Auswahl zur
Vervollständigung des Kommandos, unterstützen soll. Bisher
unterstützt es dired
, register
und isearch
. Da ich register
und isearch
durch andere Kommandos und Pakete meinen Bedürfnissen
schon angepasst habe, funktioniert discover
nur noch bei dired
und
occur
. Da ich dired
selten bewusst nutze, ist dieses Paket genau
dort eine große Hilfe. Innerhalb eines dired
Puffers wird mit der
Eingabe eines ?
das Kontextmenü geöffnet, und schon sehe ich eine
Auswahl der möglichen Folgekommandos.
In der .emacs Datei muss nach der Installation noch
(require 'discover) ;; (global-discover-mode 1)
eingetragen werden, um es global zu aktivieren.
Da es sich nicht unbedingt mit allen Einstellungen, und Arbeitsabläufen, die ich mir zusammengestellt habe, verträgt, ist es bei mir allerdings deaktiviert.
12.32 cycbuf
Mit dem Paket cycbuf kann durch die Puffer gewechselt werden, wobei
dabei jeweils temporär die Liste der Puffer angezeigt wird. Da die
vordefinierten Keystrokes sich mit dem org-mode beißen, habe ich sie
meinen Bedürfnissen angepasst. Mit C-c C-left
geht es direkt zum
vorherigen Puffer in der Pufferliste, und mit C-c C-right
in den
nächsten Puffer. Die Pufferliste bleibt solange bestehen, bis eine
andere Tastatureingabe erfolgt.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; cycbuf to cycle smooth through buffers ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'cycbuf) ;; The keys, which are defined in cycbuf-init are: ;; meta right cycbuf-switch-to-next-buffer ;; meta left cycbuf-switch-to-previous-buffer ;; meta super right cycbuf-switch-to-next-buffer-no-timeout ;; meta super left cycbuf-switch-to-previous-buffer-no-timeout ;; The pre-defined keys are already used by org-mode, so. ;; (add-hook 'after-init-hook 'cycbuf-init) (global-set-key (kbd "C-c <C-left>") 'cycbuf-switch-to-previous-buffer-no-timeout) (global-set-key (kbd "C-c <C-right>") 'cycbuf-switch-to-next-buffer-no-timeout)
12.33 zop-to-char
Das Paket zop-to-char ist eine Erweiterung für das Emacs built-in
zap-to-char. Im Gegensatz zum Original löscht es nicht automatisch
den Text zwischen den Cursorpunkt und dem nächsten Auftreten des
eingegeben Zeichens, sondern markiert diesen Bereich und zeigt im
Minipuffer die möglichen Folgekommandos an. Während man im
zop-to-char Modus ist, können auch andere - oder dasselbe - Zeichen
eingegeben werden, und die Markierung springt dann zum nächsten
Auftreten des zuletzt eingegebenen Zeichens. Wenn man dasselbe
Zeichen immer wieder als nächste „Sprungmarke“ benutzen will, reicht
auch ein <right>
, zurück kann man dann mit <left>
.
Der Teil, der gelöscht wird, wird im Kill-Ring gespeichert.
Emacs zop-to-char Youtube Video
Wie vom Paketauthor vorgeschlagen, habe ich in der .emacs Datei das
zap-to-char Kommando M-z <char>
auf zop-to-char gelegt.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; zop-to-char, ;; ;; a replacement of zap-to-char M-z <char> ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (global-set-key [remap zap-to-char] 'zop-to-char)
12.34 csv-mode
Das Paket csv-mode erleichtert den Umgang mit zeichenseparierten Werten. Der Standardtrenner ist „,“. In den meisten Fällen benutze ich allerdings das „;“ als Trenner. Dies kann man in den Einstellungen (customize) anpassen.
Entgegen dem Vorschlag des Pakets lade ich das Paket nicht automatisch, sondern
nur über das Kommando M-x csv-mode
. Danach wird der Trenner farblich
hervorgehoben. Sehr schön ist auch, dass damit das Kommando csv-align-fields
zur Verfügung steht. Damit werden die Spalten visuell getrennt, was die
Lesbarkeit stark verbessern kann. Das Kommando M-x csv-unalign-fields
macht
dies dann wieder rückgängig.
Die wichtigsten Kommandos sind mit Keystrokes belegt.
Keystroke | Kommando |
---|---|
C-c C-v | csv-toggle-invisibility |
C-c C-t | csv-transpose |
C-c C-c | csv-set-comment-start |
C-c C-u | csv-unalign-fields |
C-c C-a | csv-align-fields |
C-c C-z | csv-yank-as-new-table |
C-c C-y | csv-yank-fields |
C-c C-k | csv-kill-fields |
C-c C-d | csv-toggle-descending |
C-c C-r | csv-reverse-region |
C-c C-n | csv-sort-numeric-fields |
C-c C-s | csv-sort-fields |
12.35 guide key
Das Paket guide-key zeigt die weiteren möglichen Kommandos auf den
Anfang eines Kommandos im Minipuffer an. Dies kann insbesondere bei
eher selten genutzten Keystrokes hilfreich sein. Bei mir habe ich nur
den Mode eingeschaltet und die guide-key-sequence auf t
gesetzt.
Für weitere Möglichkeiten sei auf die Homepage von guide-key
verwiesen.
12.36 show-marks
Das Paket show-marks listet die Marken innerhalb des Puffers auf. Mit
hoch-runter können die markierten Zeilen direkt angesprungen werden.
Mit q
verlässt man das show-marks Fenster und schließt es. Der
Unterschied zum Kommando helm-mark-ring
ist, dass bei helm die
gewählte Zeile mit RET angesprungen, und dass helm Fenster geschlossen
wird. Bei show-marks jedoch wird die Zeile direkt angesprungen. Das
ist praktisch um im Puffer durch die markierten Zeilen zu springen.
(global-set-key (kbd "C-c m") 'show-marks)
12.37 clipmon
Das Paket clipmon hat zwei Funktionen, die ganz nützlich sein können.
Wenn der clipmon-mode aktiv ist, werden Texte, die außerhalb von Emacs in den Zwischenspeicher kommen, auch in den Kill-Ring von Emacs abgelegt. Alleine dies finde ich gerade unter Windows nützlich, da dort ein vernünftiges Clipboard fehlt.
Wenn clipmon-autoinsert
aktiviert wird, werden die Texte, die
außerhalb von Emacs in den Zwischenspeicher kommen, direkt in den
Puffer geschrieben.
Kommando | Beschreibung |
---|---|
clipmon-mode | Der clipmon minor-mode. |
clipmon-mode-start | Startet den clipmon minor-mode. |
clipmon-mode-stop | Stoppt den clipmon minor-mode |
clipmon-autoinsert-start | Startet das Schreiben des externen Zwischenspeichers in den Puffer. |
clipmon-autoinsert-stop | Stoppt das Schreiben des externen Zwischenspeichers in den Puffer. |
clipmon-autoinsert-toggle | Wechselt zwischen clipmon-autoinsert aktiv und nicht aktiv. |
Alle möglichen Einstellungen können mit
M-x customize-group RET clipmon
gemacht werden.
12.38 engine-mode
Wenn das Paket engine-mode aktiviert ist, kann aus Emacs heraus eine Suchanfrage direkt im Browser gestartet werden. Damit erspart man sich ein paar Schritte, wenn man gerade am emacsen ist. ;-)
Da ich den Standard Prefix-Tastaturkürzel schon bei sparse
org-agenda
nutze, habe ich in der engine-mode.el die Zeile
(engine/set-keymap-prefix (kbd "C-c /"))
auskommentiert. In der .emacs Datei fügte ich Dafür
(engine/set-keymap-prefix (kbd "C-c e"))
ein. Schade das der Entwickler des Pakets den Tastaturkürzel fest in den Code programmiert hat.
Meine eingestellten Suchmaschinen, die über einen Buchstaben nach Eingabe des Prefix-Tastaturkürzels ausgewählt werden können, sind:
- d
- duckduckgo.com
- g
- google.de
- w
- de.wikipedia.org
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; engine-mode ;; ;; To start search in browser out of emacs. ;; ;; I have comment out the line ;; ;; ;; (engine/set-keymap-prefix (kbd "C-c /")) ;; ;; because of I need the keystroke to sparse the org-agenda. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'engine-mode) (engine-mode t) ;; use Emacs' built-in eww browser: ;; (setq engine/browser-function 'eww-browse-url) (engine/set-keymap-prefix (kbd "C-c e")) (defengine duckduckgo "https://duckduckgo.com/?q=%s" :keybinding "d") (defengine google "http://www.google.de/search?ie=utf-8&oe=utf-8&q=%s" :keybinding "g") (defengine wikipedia "http://www.wikipedia.org/search-redirect.php?language=de&go=Go&search=%s" :keybinding "w" :docstring "Searchin' the wikis.") (defengine youtube "https://www.youtube.com/results?search_query=%s" :keybinding "y")
12.39 org Präsentation mit ox-reveal
Der Text als Präsentation.
12.39.1 Create Presentation with org-mode
With Emacs, org-mode and reveal.js it is possible to create a HTML presentation.
12.39.1.1 Where to find
The Emacs package and the original description is at https://github.com/yjwen/org-reveal/
The reveal.js package is at https://github.com/hakimel/reveal.js/releases.
12.39.1.2 Setting in .emacs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ox-reveal, presentation with org-mode ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'load-path "~/.emacs.d/packages/org-reveal/") (require 'ox-reveal) (setq org-reveal-root "~/.emacs.d/packages/org-reveal/reveal/") (setq org-reveal-single-file t)
12.39.2 The org file
Create a org file to export it to the presentation.
12.39.2.1 Header
The header of the file should look like this.
#+TITLE: Presentation with org-mode #+AUTHOR: Andreas Kruse #+EMAIL: leak@online.ms #+STARTUP: indent content hidestars #+OPTIONS: H:4 toc:nil ^:nil #+OPTIONS: reveal_center:t reveal_progress:t reveal_history:nil reveal_control:t #+OPTIONS: reveal_rolling_links:t reveal_keyboard:t reveal_overview:t num:nil #+REVEAL_THEME: blood #+REVEAL_TRANS: concave #+REVEAL_PLUGINS: (notes highlight markdown) #+REVEAL_TITLE_SLIDE_BACKGROUND: ./images/SpongeBob.jpg #+REVEAL_TITLE_SLIDE_TEMPLATE: <h1>%t</h1> <h4>%a</h4> <h4>%e</h4> <h6>%d</h6>
12.39.2.2 Speakers notes
This is for the speaker, only.
Speakers notes will be shown in an extra browser window (Shift arrow or S - both do not work - but why?).
This is to show it only to the speaker but not to the audit.
#+BEGIN_NOTES This is for the speaker, only. #+END_NOTES
12.39.2.3 Parts
Each header generates one slide.
However, the entry #+REVEAL: split
will split a slide to two slides.
This slide is because of the entry #+REVEAL: split
.
12.39.2.4 Lists
Lists will be written as usual, but the way the list will appear can be set by fragmeant styles.
The code is #+ATTR_REVEAL: :frag (<name>)
.
The names are:
- grow
- shrink
- roll-in
- fade-out
- highlight-red
- highlight-green
- highlight-blue
- appear
12.39.2.5 Themes
Several themes are available.
They are at .../js/reveal/css/theme
.
- beige.css
- black.css
- blood.css
- league.css
- moon.css
- night.css
Long list shall not be shown in one slide.
- serif.css
- simple.css
- sky.css
- solarized.css
- source
- template
- white.css
12.39.2.6 Slide transitions
Available transitions set in header at REVEAL_TRANS
are:
- default
- cube
- page
- concave
- zoom
- linear
- fade
- none
12.39.3 Export
To export the org-file to presentation the ox-reveal libary has to be load at first.
M-x load-libary RET ox-reveal RET
- Afterwards with
C-c C-e RR
the html file can be created.
12.39.4 Using
- Arrow keys left/right to move around the main line of the slides.
- Arrow keys up/down to move around the minor line of the slides.
- ESC to see all slides at onces.
- Arrow keys left/right to move around the main line of the slides.
- Arrow keys up/down to move around the minor line of the slides.
- ESC to see all slides at once.
12.40 bookmark+
Das Paket bookmark+ erweitert das built-in bookmark um Funktionen.
Kommando | Beschreibung |
---|---|
C-x p | Prefix zum Setzen von Bookmarks |
C-x p m | Setzt für die aktuelle Datei ein bookmark |
C-x j | Prefix zum Anspringen eines Bookmarks |
C-x j j | Öffnet helm-mode-bookmark-jump, so wie C-c h b, |
C-x r l | Listen und editieren von Bookmarks |
In der .emacs Datei muss (require ’bookmark+) eingetragen werden!
12.41 sunshine forecast
Mit dem Paket sunshine kann eine Wettervorhersage von openweathermap auf Emacs gezaubert werden. Dafür muss man sich erst einmal auf openweathermap anmelden und sich eine appid holen. Den Ort der Wettervorhersage gibt man dann, für Deutschland, als Postleitzahl und der Länderkennung DE an.
Für das schnelle Öffnen habe ich den Aufruf auf die Taste F8
gelegt. Schließen kann man das Fenster mit q
.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; sunshine, weather forecast ;; ;; xxxx ;; ;; xxxxxxxxxx ;; ;; xxxxxxxxxx ;; ;; API key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'sunshine) (setq sunshine-location "88161,DE") ;; (setq sunshine-location "49762,DE") (setq sunshine-appid "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") (setq sunshine-units (quote metric)) (setq sunshine-show-icons t) (global-set-key (kbd "<f8>") 'sunshine-forecast)
12.42 elpa-mirror
Mit Hilfe des Pakets elpa-mirror werden die installierten Pakete in ein Verzeichnis kopiert. Dieses Verzeichnis kann als Repository angegeben werden. Dies ist nützlich, wenn man die Pakete auf einen anderen System in Emacs einbinden möchte.
Zum Erstellen des Verzeichnisses führt man das Kommando M-x
elpamr-create-mirror-for-installed
aus. Initial muss man das
Zielverzeichnis einmal angeben, welches schon vorher existieren muss.
In der .emacs Datei gibt man das selbst angelegte Paketverzeichnis
als Paketarchiv an und startet dann M-x package-list-packages
.
(setq package-archives '(("myelpa" . "~/myelpa")))
12.43 highlight-thing
Mit dem Paket highlight-thing wird das Wort unter dem Cursor im Puffer gehighlightet.
(require 'highlight-thing) (global-highlight-thing-mode)
12.44 cycle-resize
Das Paket cycle-resize stellt Funktionen zur Verfügung, mit dem das aktuelle Fenster (wenn denn auch mehrere zu Verfügung stehen) einfach und schnell in seiner vertikalen oder horizontalen Größe verstellt werden kann. Die vorgegebenene Werte sind 80% – 50% – 20% – 50% des Rahmens.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; cycle-resize, resize splitted windows ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'cycle-resize) (global-set-key (kbd "C-M-v") 'cycle-resize-window-vertically) (global-set-key (kbd "C-M-h") 'cycle-resize-window-horizontally) ;; default values are 80 -- 50 -- 20 -- 50 ;; (setq cycle-resize-steps '(80 50 20 50))
12.45 auto-yasnippet
Das Paket auto-yasnippet ermöglicht es, dass während des Schreibens
ein Schnippsel erstellt, und ausgeführt werden kann. Dies ist erst
einmal auf ein Schnippsel beschränkt, allerdings kann das aktuelle
Schnippsel schnell und einfach als yasnippet Schnippsel gespeichert,
und so auch später weiter genutzt werden. Dafür wird das Kommando
aya-persist-snippet
bereitgestellt.
In meiner .emacs Datei sind nicht die vorgeschlagenden keybindings
eingestellt, sondern M-C-w
für das Erstellen, und M-C-y
für das
Ausführen.
(global-set-key (kbd "M-C-w") #'aya-create) (global-set-key (kbd "M-C-y") #'aya-expand)
Während des Schreibens wird vor den Austauschausdrücken ein ~
vorangestellt.
Dies ist ein ~auto-yasnippet Beispiel.
Sollte der Ausdruck Teil eines Wortes sein, wird der Ausdruck in Backticks eingerahmt.
Eisenbahn`gleis'anlage.
Falls sich ein Ausdruck wiederholt, wird beim Schreiben die Wiederholung zeitgleich ebenfalls editiert.
Dies ist ein ~auto-yasnippet Beispiel. Das Paket ~auto-yasnippet kann tolle Sachen machen.
Beim Erstellen eines auto-yasnippet Schnippsels wird entweder die aktuelle Zeile verwendet, oder die markierte Region.
12.46 org bullets
Mit Hilfe des Pakets org-bullets werden die Sterne in den Kapitelüberschriften durch utf-8 Zeichen (bullets) ersetzt.
Damit es beim Start einer org-mode Datei gleich mitgeladen wird, muss in der .emacs Datei das folgende eingetragen werden.
(require 'org-bullets) (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
12.47 yafolding
Gerade für Python Code habe ich lange nach ein Paket gesucht, das elegant Code-Blöcke einklappt. Das m.M.n. beste dafür ist das Paket yafolding. Da es in Abhängigkeit der Einrückung arbeitet ist es für Python Code geradezu prädestiniert.
Keystroke | Kommando |
---|---|
C-c C-M-return | yafolding-toggle-all |
C-c C-S-return | yafolding-hide-parent-element |
C-c C-return | yafolding-toggle-element |
Um es im python-mode gleich zu aktivieren habe ich folgendes in die .emacs Datei eingetragen.
(add-hook 'python-mode-hook (lambda () (yafolding-mode))) (define-key yafolding-mode-map (kbd "C-c <C-M-return>") 'yafolding-toggle-all) (define-key yafolding-mode-map (kbd "C-c <C-S-return>") 'yafolding-hide-parent-element) (define-key yafolding-mode-map (kbd "C-c <C-return>") 'yafolding-toggle-element)
12.48 Org-mode Header als bookmark
Dieses Paket org-bookmark-heading ermöglicht bookmarks auf den Header in einer org-mode Datei. Dafür werden keine neuen Keystrokes benötigt, es muss nur der Cursor auf dem Header (nicht die *) stehen, während man, wie gewohnt, ein bookmark anlegt.
12.49 one-time-pad-encrypt
Das Verfahren „one time pad encrypt“ verschlüsselt einen Text mit
einen Schlüssel, der die Länge des Textes haben sollte. In Emacs kann
dies mit dem Paket one-time-pad-encrypt erledigt werden. Der zu
verschlüsselnde Text muss dafür markiert werden, und der Befehl
one-time-pad-encrypt
ausgeführt werden. Für das Entschlüsseln wird
der selbe Befehl genutzt.
12.50 helm-org-rifle
Das Paket helm-org-rifle ist für das Suchen in org-Dateien hilfreich. Meine Einstellungen in der .emacs Datei sind:
(global-set-key (kbd "C-c r r") 'helm-org-rifle) (global-set-key (kbd "C-c r b") 'helm-org-rifle-current-buffer) (global-set-key (kbd "C-c r d") 'helm-org-rifle-directories) (global-set-key (kbd "C-c r f") 'helm-org-rifle-files)
- helm-org-rifle
- Zeigt die Ergebnisse aller offenen org-mode Puffer
- helm-org-rifle-current-buffer
- Zeigt die Ergebnisse des aktuellen Puffers
- helm-org-rifle-directories
- Zeigt die Ergebnisse aus gewählten Verzeichnissen.
- helm-org-rifle-files
- Zeigt die Ergebnisse aus gewählten Dateien.
12.51 yankpad
Das Paket yankpad ermöglicht es, dass man Text strukturiert in eine definierte org-mode Datei ablegt. Diese Texte können später dann einfach eingefügt werden. Schön ist es auch, dass man die Texte wie bei Yasnippet mit Sprungmarken und vordefinierten Auswahltexten anlegen kann. Eine ausführliche Anleitung findet sich auch auf der Homepage des Pakets.
Hier mal ein Beispiel
* Beispiel ** Text Die ist ein Text mit ${1:Sprungmarke} und Auswahltext ${2:$$(yas-choose-value`("Bla" "Blub"))}.
Damit ich das ganze auch über Keystrokes nutzen kann, habe ich folgendes in die .emacs Datei geschrieben.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; yankpad ;; ;; https://github.com/Kungsgeten/yankpad ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq yankpad-file "~/orgnotes/yankpad.org") (global-set-key (kbd "C-x C-y C-y") 'yankpad-insert) (global-set-key (kbd "C-x C-y C-c") 'yankpad-set-category)
12.52 Use-Package
Die Pakete werden mit Hilfe des Pakets use-package aufgerufen.
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
12.54 expand-region
Wenn der Cursor innerhalb eines Bereichs liegt, bsw. durch Klammern
eingegrenzt, kann mit dem Kommando er/expand-region
die Markierung
auf den Bereich erweitert werden. Wird das Kommando wiederholt,
vergrößert sich der markierte Bereich. Mit er/contract-region
setzt
man die Markierung schrittweise wieder zurück.
(use-package expand-region :bind (("C-;" . er/expand-region) ("C-M-;" . er/contract-region)))
12.55 embrace
There are three commands: `embrace-add’, `embrace-change’ and `embrace-delete’ that can add, change, and delete surrounding pairs respectively. You can bind these commands to your favorite key bindings.
There is also a dispatch command `embrace-commander’. After invoking `embrace-commander’, you can hit:
- `a’ for `embrace-add’
- `c’ for `embrace-change’
- `d’ for `embrace-delete’
(use-package embrace :bind (("C-(" . embrace-commander)))
12.56 emojify
To enable emojify mode globally use `global-emojify-mode’. :) :-) ;-) :D
(use-package emojify :ensure t :init (global-emojify-mode 1) :config )
12.57 ob-async
Das Paket ob-async ermöglicht es, dass während ein org-mode Code-Block
arbeitet, man weiterhin im Puffer editieren kann. Dafür muss dann die
Option :async
in der #BEGIN_SRC
Zeile eingetragen werden.
(use-package ob-async :init :config (add-to-list 'org-ctrl-c-ctrl-c-hook 'ob-async-org-babel-execute-src-block) )
12.59 orgalist
Das Paket orgalist ermöglicht das Nutzen von Listen (Todos etc.) in Nicht-Org-Dateien.
12.60 fill-function-arguments
Mit Hilfe des Pakets fill-function-arguments kann man bsw. Listen oder
Dictionaries (Python) zeilenweise zu formatieren. Damit der Aufruf
des Kommandos fill-function-arguments-dwim
auch wie gewünscht
funktioniert muss der Cursor innerhalb der Klammern stehen.
Beispiel von-nach:
f = [ 1, 2, 3, 4, 5 ] f = [ 1, 2, 3, 4, 5 ] d = { 'a' : 2, 'b' : 4, 'c' : 8} d = { 'a' : 2, 'b' : 4, 'c' : 8 }
13 Spezielle Einstellungen in der .emacs Datei
Hier zusätzliche Einträge in der .emacs Datei.
13.1 Yes-or-No
Da es mich stört, bei yes-or-no Abfragen jedesmal das ganze Wort einzutippen, habe ich folgende Zeile meiner .emacs Datei hinzugefügt. Jetzt reicht ein einfachen y oder n.
(fset 'yes-or-no-p 'y-or-n-p)
13.2 LaTeX in Emacs
;;;;;;;;;;;;;;;;;;;;;;;;; ;; LaTeX AUCTeX reftex ;; ;;;;;;;;;;;;;;;;;;;;;;;;; (setq TeX-auto-save t) (setq TeX-parse-self t) (setq-default TeX-master nil) (require 'tex-site) (require 'auctex-latexmk) (auctex-latexmk-setup) (add-hook 'LaTeX-mode-hook 'visual-line-mode) (add-hook 'LaTeX-mode-hook 'flyspell-mode) (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) (add-hook 'LaTeX-mode-hook 'turn-on-reftex) (setq reftex-plug-into-auctex t) (setq TeX-PDF-mode t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LaTeX extras ;; ;; - <TAB> and <S-TAB> fold sections as in org-mode ;; ;; <TAB> only works at sections without * ;; ;; - C-c C-a lets run all LaTeX commands until PDF ;; ;; is created ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'latex-extra) (add-hook 'LaTeX-mode-hook 'latex-extra-mode) ;;;;;;;;;;;;; ;; cdlatex ;; ;;;;;;;;;;;;; (add-hook 'LaTeX-mode-hook 'turn-on-cdlatex) ; with AUCTeX LaTeX mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LaTeX preview pane pdf ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; (latex-preview-pane-enable)
13.4 LaTeX und org-mode
Damit org-mode Dateien beim Export nach LaTeX – PDF ein einheitliches Format erhalten, habe ich mir eine LaTeX Header Template Datei geschrieben, die dann in der org-mode Datei genutzt werden kann.
Die LaTeX Header Template Datei wird mit #+LATEX_CLASS
eingebunden.
Die Variablen können dann mit #+LATEX_HEADER
angepasst werden.
Der Anfang dieser org-mode Datei sieht dann folgendermaßen aus.
#+LATEX_CLASS: akreport #+LATEX_HEADER: \setauthor{Andreas Kruse} # #+LATEX_HEADER: \setauthoraddress{<whatever>} # #+LATEX_HEADER: \setauthortel{<whatever>} # #+LATEX_HEADER: \setauthormobile{<whatever>} #+LATEX_HEADER: \setauthoremail{leak@online.ms} # #+LATEX_HEADER: \setauthorurl{<whatever>} #+LATEX_HEADER: \setleftfoot{\akrauthor} #+TITLE: Emacs Notizen #+AUTHOR: Andreas Kruse #+STARTUP: indent content hidestars #+DATE: {{{modification-time(%d.%m.%Y)}}} #+EMAIL: leak@online.ms
Damit die LaTeX Klasse für org-mode bekannt ist, muss sie in den Emacs
Einstellungen eingefügt werden. Unter Org Latex Classes
fügt man
dafür eine neue Klasse ein, eventuell so wie folgt.
LaTeX class: akreport LaTeX header: \input{/home/andreas/orgnotes/templates/akreport.tex} Levels: INS DEL Choice: Value Menu Heading: numbered: \chapter{%s} unnumbered: \chapter*{%s} INS DEL Choice: Value Menu Heading: numbered: \section{%s} unnumbered: \section*{%s} INS DEL Choice: Value Menu Heading: numbered: \subsection{%s} unnumbered: \subsection*{%s} INS DEL Choice: Value Menu Heading: numbered: \subsubsection{%s} unnumbered: \subsubsection*{%s} INS DEL Choice: Value Menu Heading: numbered: \fourthsection{%s} unnumbered: \fourthsection*{%s} INS DEL Choice: Value Menu Heading: numbered: \fifthsection{%s} unnumbered: \fifthsection*{%s}
13.5 stylesheet.css
html { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 120%; max-width: 800px; margin: 20px; background-color: #363636; background-image: url(./images/emacs_gnu_logo.png) } a:link { color:#00b0b0; } a:visited { color:#00b0b0; } a:active { color:#00b0b0; } .title { text-align: left; font-size: 150%; margin-top: 20px; padding-bottom: 0.5em; border-bottom: 1px solid; } h2 { font-size: 130%; } h3 { font-size: 120%; } #table-of-contents { font-size: 9pt; position: fixed; right: 0em; top: 0em; background: #363636; -webkit-box-shadow: 0 0 1em #777777; -moz-box-shadow: 0 0 1em #777777; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; text-align: right; /* ensure doesn't flow off the screen when expanded */ max-height: 80%; overflow: auto; z-index: 200; } #table-of-contents h2 { font-size: 9pt; max-width: 8em; font-weight: normal; padding-left: 0.5em; padding-top: 0.05em; padding-bottom: 0.05em; } #table-of-contents ul { margin-left: 14pt; margin-bottom: 10pt; padding: 0 } #table-of-contents li { padding: 0; margin: 1px; list-style: none; } #table-of-contents ul>:first-child { color: blue; } #table-of-contents #text-table-of-contents { display: none; text-align: left; } #table-of-contents:hover #text-table-of-contents { display: block; padding: 0.5em; margin-top: -1.5em; } div.figure { padding: 0.5em; } div.figure p { text-align: center; font-style: italic; } #postamble { font-size: 90%; border-top: 1px solid; margin-top: 20px; }
14 Selbstgebaut und geklaut
In diesem Kapitel notiere ich selbstgebaute und/oder geklaute elisp Skripte, die nützlich sein können, aber nicht zum Standardrepertoire gehören.
14.1 Acronyme
Diese Funktion habe ich unter Acronym mode for Emacs, erstellt von
John Kitchin, gefunden. Es wird der Minor Mode Acronym Mode (AM)
erstellt, der die Definition eines Acronyms im Text findet und
speichert. Bei dem erneuten Auftauchen des Acronyms wird, wenn der
Mauscursor auf ihm liegt, ein Tooltipp mit der Definition des Acronyms
eingeblendet. Falls man ohne Maus arbeitet, reicht ein „C-h .
“,
während der Cursor auf dem Acronym ist, um den Tooltipp im Minipuffer
anzuzeigen.
Falls die Fehlermeldung
add-to-list: Symbol's function definition is void: button-lock-set-button
erscheint, fehlt das benötigte Paket button-lock. Dieses Paket muss dann auch vorher aktiviert sein.
(require 'button-lock) (global-button-lock-mode 1) (make-variable-buffer-local (defvar *acronym-buttons* '() "List of acronym buttons.")) (require 'rx) (defun my/highlight-acronyms () (save-excursion (let ((case-fold-search nil)) (goto-char (point-min)) (while (re-search-forward "(\\([A-Z]+\\))" nil t) (when flyspell-mode (flyspell-delete-region-overlays (match-beginning 1) (match-end 1))) (let* ((acronym (match-string 1)) (p (point)) (definition (save-excursion (goto-char (match-beginning 1)) (backward-word (length acronym)) (buffer-substring (point) p)))) (add-to-list '*acronym-buttons* (button-lock-set-button (rx word-start (eval (match-string 1)) word-end) nil :help-echo definition))))))) (defun my/refresh-acronyms () "Refresh acronym tooltips in buffer." (dolist (button *acronym-buttons*) (button-lock-unset-button button)) (setq *acronym-buttons* '())) (defun my/remove-acronym-buttons () (dolist (button *acronym-buttons*) (button-lock-unset-button button)) (setq *acronym-buttons* '())) (defun my/write-acronyms-at-point () "Write the found acronyms in current buffer at point." (interactive) (my/refresh-acronyms) (dolist (button *acronym-buttons*) (insert button "\n"))) ;;;###autoload (define-minor-mode acronym-mode "Put definitions on acronyms." :lighter " AM" (if acronym-mode (my/highlight-acronyms) (my/remove-acronym-buttons))) (provide 'acronym-mode)
Test des Acronym Minor Modes. Der Acronym Mode wird, wenn aktiviert, mit AM angezeigt.
14.2 Sensible Dateien ohne Backup
Bei bestimmten Dateien oder Dateitypen kann es sein, dass das automatische Anlegen einer Backup-Datei nicht erwünscht ist. Dies gilt insbesondere für verschlüsselte Dateien wie bei gpg (siehe epa-encrypt-file). Eine Lösung habe ich auf der Seite von Anirudh Sasikumar gefunden.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; sensitive mode to prevent backup file at sensitive files ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-minor-mode sensitive-mode "For sensitive files like password lists. It disables backup creation and auto saving. With no argument, this command toggles the mode. Non-null prefix argument turns on the mode. Null prefix argument turns off the mode." ;; The initial value. nil ;; The indicator for the mode line. " Sensitive" ;; The minor mode bindings. nil (if (symbol-value sensitive-mode) (progn ;; disable backups (set (make-local-variable 'backup-inhibited) t) ;; disable auto-save (if auto-save-default (auto-save-mode -1))) ;resort to default value of backup-inhibited (kill-local-variable 'backup-inhibited) ;resort to default auto save setting (if auto-save-default (auto-save-mode 1)))) (setq auto-mode-alist (append '(("\\.gpg$" . sensitive-mode)) auto-mode-alist))
14.3 elpa-mirror vereinfachen
Um mir das Leben etwas zu erleichtern, habe ich mir in die .emacs Datei einige Funktionen hineingeschrieben, die das vorhandene elpa-mirror Zielverzeichnis erst leert, bevor es mit dem aktuellen Stand gefüllt wird. Danach packe ich das ganze noch in eine zip Datei, um sie dann einfacher verteilen zu können.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Damit ich einfacher ein elpa-mirror anlegen kann. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defcustom my/elpa-mirror-directory "/home/andreas/orgnotes/elpa-mirror" "Absolute path to the directory for ~elpamr-create-mirror-for-installed~." :type '(string) :group 'elpa-mirror) (defun my/delete-elpa-mirror-files () "Removes all files in my elpa-mirror directory." (make-directory my/elpa-mirror-directory t) (setq fileslist (directory-files my/elpa-mirror-directory t "^[^.]" t)) (while (car fileslist) (delete-file (car fileslist)) (setq fileslist (cdr fileslist)))) (defun my/zip-dir-elpa-mirror () "Zip the elpa-mirror directory to \".../elpa-mirror.zip\". If zip file already exists, it will be deleted." (setq zip-command "cd /home/andreas/orgnotes/ && rm -f /home/andreas/Downloads/elpa-mirror.zip && zip -r9 /home/andreas/Downloads/elpa-mirror.zip elpa-mirror/") (start-process-shell-command "zip-elpa-mirror" nil zip-command)) (defun my/run-elpa-mirror () "If not already exists, creates destination directory as defined in \"customize my/elpa-mirror-directory\". Afterwards old content will be removed, and the command to generate new content will be executed. After all the destination directory will be zipped. See \"my/zip-dir-elpa-mirror\" for this." (interactive) (my/delete-elpa-mirror-files) (setq elpamr-default-output-directory my/elpa-mirror-directory) (elpamr-create-mirror-for-installed) (my/zip-dir-elpa-mirror))
14.4 Alle Links im Dokument finden
Dieses Skript parsed alles Links im Puffer und listet sie.
(defun my/list-links () "Listet alle Links im aktuellen Puffer." (interactive) (let (setq *list-of-links* '()) (save-excursion (goto-char (point-min)) (while (re-search-forward "\\[\\(http.*?\\)]" nil t) (add-to-list '*list-of-links* (match-string 1) t))) (insert "\n") (dolist (link *list-of-links*) (insert "1. " link "\n"))))
my/list-links
14.5 Agendas automatisch nach org.ics exportieren
Nach dem Exportieren der Agenda Dateien in eine ics Datei, kann
deren Inhalt in einem PIM (Outlook, Kontact, etc.) angezeigt
werden. Damit der Inhalt meiner Agenda bei jedem Sichern automatisch
in die ~/org.ics
Datei geschrieben wird, nutze ich die hook Funktion
after-save-hook
. Zusatzlich habe ich mir die Funktion auf die
Tastenkombination C-c F
gelegt.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Write ~/org.ics, a icalendar file of combined agenda files. ;; ;; Do this each time the file will be saved. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (global-set-key (kbd "C-c F") 'org-icalendar-combine-agenda-files) (add-hook 'after-save-hook (lambda () (if (equal "aufgaben.org" (file-name-nondirectory buffer-file-name)) (org-icalendar-combine-agenda-files) nil)))
14.6 Suchen und ersetzen
Immer wenn man in vielen Dateien mehrere Strings verändern muss, kann
es praktisch sein, dies als emacs-lisp Funktion zu verwirklichen.
Einmal gebaut, kann diese Funktion schnell angepasst, und mit C-c
C-c
aktualisiert werden.
(defun my/search-n-replace() (interactive) (setq to-replace (make-hash-table :test 'equal)) (puthash "search" "replace" to-replace) (puthash "suchen" "ersetzen" to-replace) (maphash (lambda (orig replace) (save-excursion (goto-char 0) (while (re-search-forward orig nil t nil) (replace-match replace nil t))) ) to-replace)) (defun my/search-n-add() (interactive) (setq to-replace (make-hash-table :test 'equal)) (puthash "search" " add" to-replace) (puthash "suchen" " und dran hängen" to-replace) (maphash (lambda (orig replace) (save-excursion (goto-char 0) (while (re-search-forward orig nil t nil) (insert replace))) ) to-replace))
15 Bilder
16 Links
- http://www.gnu.org/software/emacs/
- http://orgmode.org/
- http://orgmode.org/org.html#Radio-tables
- http://doc.norang.ca/org-mode.html
- https://github.com/groksteve/org-alert
- https://github.com/jwiegley/alert
- http://ergoemacs.org/emacs/file_management.html
- https://www.youtube.com/watch?v=39ybVLQN9UU
- https://github.com/auto-complete/auto-complete
- https://github.com/Wilfred/ag.el
- https://github.com/ggreer/the_silver_searcher
- http://tuhdo.github.io/helm-intro.html
- http://tuhdo.github.io/helm-projectile.html
- https://github.com/zk-phi/phi-search
- https://github.com/zk-phi/phi-grep
- https://github.com/abo-abo/swiper
- https://www.youtube.com/watch?v=GxSUgxleJfw
- http://tapoueh.org/emacs/switch-window.html
- https://github.com/remyferre/comment-dwim-2
- https://github.com/joodland/bm
- https://gitorious.org/alezost-emacs/mwim/source/4562c4396abbb86cd916efeccdc7047ae0802736:
- https://github.com/aspiers/smooth-scrolling/
- https://github.com/tj64/navi
- https://github.com/Silex/elmacro
- https://github.com/bmag/imenu-list
- http://www.masteringemacs.org/article/discoverel-discover-emacs-context-menus
- https://github.com/purcell/cycbuf
- https://github.com/thierryvolpiatto/zop-to-char
- https://www.youtube.com/watch?v=CVAyOf1wcWw
- https://github.com/kai2nenobu/guide-key
- https://github.com/vapniks/show-marks
- https://github.com/bburns/clipmon
- https://github.com/hrs/engine-mode
- http://www.emacswiki.org/emacs/BookmarkPlus
- https://github.com/aaronbieber/sunshine.el
- http://www.openweathermap.org/
- https://github.com/redguardtoo/elpa-mirror
- https://github.com/fgeller/highlight-thing.el
- https://github.com/pierre-lecocq/cycle-resize
- https://github.com/abo-abo/auto-yasnippet
- https://github.com/sabof/org-bullets
- https://github.com/zenozeng/yafolding.el
- http://github.com/alphapapa/org-bookmark-heading
- https://github.com/garvinguan/emacs-one-time-pad/
- https://www.youtube.com/watch?v=2G2isMO6E2c
- http://anirudhsasikumar.net/blog/2005.01.21.html