2017-09-14 123 views
1

我使用組織模式的速度鍵很多,我想要按鍵序列作爲速度鍵以便於記憶。在這種情況下,我想要"i n"插入一個副標題,並且"i t"插入一個待辦事項副標題。如何設置組織模式速度按鍵序列

我知道我可以設置一個序列通過使用前綴鍵盤映射這樣的:

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

因此按"C-c i n""C-c i t"調用相應的功能。精細。

現在,當我給"my-org-speed-command-insert-subheading-map"作爲函數由組織速度被稱爲命令

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

預期這是行不通的。我究竟做錯了什麼?

我知道我不能像實際命令那樣調用前綴映射,因此在與global-set-key綁定時不會引用它,所以我懷疑問題與此有關。但那我怎麼稱呼它?或者,有沒有一種更簡單的方法來實現我根本沒有看到的目標?

編輯: 我發現了一個方法來解決這個問題,現在由具有「I」鍵速度調用此函數:

(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"))) 
    )) 

但這是因爲我有一個相當醜陋的解決方案爲每個第一個字母調用不同的函數,第二個和第三個字母被隱藏在函數定義中。因此,廣泛使用這種方法勢必會在較長時間內造成很多混亂。

回答

1

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

GNU Emacs的次要模式,提供了組織模式

以同一作者一看也許「九頭蛇」套餐六樣綁定。

+0

謝謝,我看着worf,但顯然它沒有提供定製它使用的綁定的方法,因爲我的主要目標是使用助記符序列,所以它不適用於我。也許我可以得到九頭蛇爲我做我想要什麼,一旦我明白它好一點... – schmuu

+0

九頭蛇支持超過1個關鍵字來觸發命令。這裏是作者的視頻演示https://www.youtube.com/watch?v=_qZliI1BKzI – dunkaroo

+0

哇,太棒了!九頭蛇完全符合我的要求,可以很容易地設置,而且我甚至不需要先去標題。我會馬上更換我的速度鍵。謝謝! – schmuu

0

我敢肯定,你僅限於速度命令的單個字母。例如。爲org-speed-command-activate文檔字符串表示:

「鉤子用於激活單字母速度指令 org-speed-commands-default指定的最小命令集 使用org-speed-commands-user用於進一步定製。」。