2017-09-14 2 views
1

Ich benutze Org-Modus Geschwindigkeit Tasten viel und ich möchte Tastenfolgen als Geschwindigkeit Schlüssel für die Erinnerung haben. In diesem Fall möchte ich "i n" eine Unterüberschrift einfügen und "i t" eine Todo-Unterüberschrift einfügen.Wie man org-mode Geschwindigkeit Tastenfolge

Ich weiß, ich kann Setup eine Sequenz durch ein Präfix keymap wie folgt aus:

(progn 
(define-prefix-command 'my-org-speed-command-insert-subheading-map) 

(define-key my-org-speed-command-insert-subheading-map (kbd "n") 'jan/org-insert-subheading) 
(define-key my-org-speed-command-insert-subheading-map (kbd "t") 'jan/org-insert-todo-subheading) 
) 

(global-set-key (kbd "C-c i") my-org-speed-command-insert-subheading-map) 

so drücken "C-c i n" und "C-c i t" Aufruf der entsprechenden Funktionen. Fein.

Nun, wenn ich "my-org-speed-command-insert-subheading-map" als Funktion geben durch org Geschwindigkeit aufgerufen werden Befehle

(setq org-speed-commands-user (quote ((":" . helm-M-x) 
             ("a" . org-toggle-archive-tag) 
             ("i" . my-org-speed-command-insert-subheading-map) 
             … … … 
            ))) 

es nicht wie erwartet. Was mache ich falsch?

Ich verstehe, ich kann die Präfix-Map nicht wie tatsächliche Befehle aufrufen, und daher wird es nicht zitiert, wenn mit global-set-key gebunden, so vermute ich, dass das Problem damit zusammenhängt. Aber wie nenne ich es? Oder gibt es einen viel einfacheren Weg, um mein Ziel zu erreichen, das ich einfach nicht gesehen habe?

EDIT: fand ich einen Weg für jetzt, um das Problem zu umgehen, indem das „i“ Speed-Taste Aufruf dieser Funktion mit:

(defun my-org-i-map-function() 
    (let (key1) 
    (setq key1 (read-key-sequence "press \"i\" for a simple subheading, \"t\" for a TODO-subheading")) 
    (cond 
    ((equal key1 "i")(jan/org-insert-subheading nil)) 
    ((equal key1 "t")(jan/org-insert-todo-subheading nil)) 
    (t (message "you didn't set a function for this key sequence"))) 
    )) 

aber das ist eine ziemlich hässliche Lösung wie ich würde zu rufen Sie für jeden ersten Buchstaben verschiedene Funktionen auf, und der zweite und dritte Buchstabe sind in den Funktionsdefinitionen vergraben. Wenn man diesen Ansatz ausgiebig verwendet, wird dies auf lange Sicht viel Verwirrung stiften.

Antwort

1

https://github.com/abo-abo/worf

GNU Emacs-Moll-Modus, der

Werfen Sie einen Blick für org-mode vi-ähnliche Bindungen bietet oder vielleicht "hydra" Paket vom selben Autor.

+0

danke, ich schaute in Worf, aber anscheinend bietet es keine Möglichkeit, die Bindungen, die es verwendet, anzupassen, und da mein primäres Ziel ist mnemonische Sequenzen zu verwenden, funktioniert es nicht für mich. Vielleicht kann ich Hydra für mich tun, was ich will, sobald ich es ein wenig besser verstehe ... – schmuu

+0

Hydra unterstützen mehr als 1 Schlüsselwort, um eine Befehle auszulösen. Hier ist eine Video-Demo vom Autor https://www.youtube.com/watch?v=_qZliI1BKzI – dunkaroo

+0

wow, großartig! Hydra macht genau das, was ich will, ist lächerlich einfach einzurichten und ich muss nicht einmal zuerst in die Überschrift gehen. Ich ersetze meine Speed-Keys sofort komplett. Vielen Dank! – schmuu

0

Ich bin ziemlich sicher, dass Sie auf einzelne Buchstaben für Geschwindigkeitsbefehle beschränkt sind. Z.B. das docstring für org-speed-command-activate sagt:

„Haken für die Aktivierung einzelner Buchstaben Geschwindigkeitsbefehle org-speed-commands-default einen minimalen Befehlssatz gibt Verwenden org-speed-commands-user für die weitere Anpassung..“

Verwandte Themen