2012-08-13 34 views
4

我最近一直在修改我的Emacs安裝程序,但是我遇到了一個讓我煩惱的問題。我希望能夠引入其他修飾符,如鍵。我想做的事情是,當我處於直接模式(不接受文本輸入以便正常字母可以被反彈)時,我想要做的事情是,當我按住字母s並按jl光標分別移動到下一個和上一個目錄行。有效地使s鍵充當修飾符。emacs中的附加修飾鍵?

我已經研究過使s應用修飾符,如superhyper但這些都用於全局事物。這可能嗎?如果不是那麼這是一個恥辱。

編輯:

似乎有一些與我之後的困惑。如果我定義了一個正常的鍵序列,如

(define-key map (kbd "s j") 'dired-next-dirline)

然後,我必須保持s關鍵每次按我按j之前移動到下一個目錄線路。這是而不是我在找什麼(不要聽起來很生氣:P)我想s表現得像一個修飾語,我可以讓s保持下降,並繼續點擊j下移。

我希望我已經說得更清楚了。謝謝。

+1

我的理解是,添加一個真正的修飾鍵在Emacs使用的是操作系統級別的過程。這對你來說沒有用,因爲你只希望它在某些Emacs環境下表現得那麼好。所以AFAIK,你要求的目前無法完成。 – phils 2012-08-15 00:49:02

+1

可以通過命令臨時更改鍵盤映射,以便只需重複鍵序列中的最後一個鍵。 'C-x e'(執行宏)執行此操作 - 重複該宏,只需再次點擊'e'即可。對於'kmacro的呼叫macro'的源代碼似乎開始閱讀的地方... – legoscia 2012-08-15 15:57:49

+0

@legoscia我喜歡臨時改變鍵盤佈局的想法,但是我覺得使用宏有點不必要。如果沒有人提出一個更好的主意,您可能想將其作爲答案發布。謝謝 – rfcoder89 2012-08-17 12:12:20

回答

3

我在代碼中挖了一遍,想出了這個。它將s j綁定到my-dired-next-dirline,但在完成之後,只需j就足以再次執行此操作。任何其他鍵都會重置臨時綁定。

請注意,函數set-temporary-overlay-map已添加到Emacs 24.2中,在撰寫本文時尚未發佈,因此您需要構建Emacs from git

(defun my-dired-next-dirline() 
    (interactive) 
    (dired-next-dirline 1) 
    (set-temporary-overlay-map 
    (let ((map (make-sparse-keymap))) 
    (define-key map [?j] 'my-dired-next-dirline) 
    map) 
    nil)) 

(eval-after-load "dired" 
    '(progn 
    (let ((prefix-map (make-sparse-keymap))) 
     (define-key prefix-map "j" 'my-dired-next-dirline) 
     (define-key dired-mode-map "s" prefix-map)))) 
+0

正是我需要的,謝謝! = d – rfcoder89 2012-08-18 18:57:03

2

Key chords可能是你在找什麼。

+0

感謝您的回覆,不幸的是,這不是我正在尋找的,因爲每次我希望將它用作修飾符時,我都必須繼續按's'。 – rfcoder89 2012-08-13 17:34:22

+1

每次當你想使用它們作爲修飾符時,你不需要按shift或其他修飾符嗎? – Tom 2012-08-13 18:07:13

+0

對不起,我可能不是很清楚。我想保持它的持續下去,而不必一直按下鍵來將它用作修飾符。 – rfcoder89 2012-08-14 10:23:15

1

如果和絃不是你要找的東西(就像你在Tom's answer的評論中建議的那樣),那麼你似乎想要一個簡單的使用鍵序列的define-key。即

(define-key dired-mode-map (kbd "s j") 'dired-previous-line) 

這有禁用s鍵的原始功能的缺點,但是你可以重新綁定,爲序列s - s,我想。

+0

感謝您的回答,但不幸的是,這與其他答案是一樣的。我編輯了我的問題,使其更加清晰,我希望你能幫助我。 – rfcoder89 2012-08-17 12:04:13

+0

我明白了。我誤解了你對湯姆的回答的評論。我做了一些小小的挖掘,看起來要麼將普通密鑰視爲修改密鑰非常困難,要麼不可能。事實上,在某些情況下,如遠程終端情況,從技術上看不可能看到一個按鍵是否仍然按下。 legoscia的評論可能是你最好的選擇。 – vhallac 2012-08-17 12:50:59

+0

看起來確實很困難。我正在考慮使用臨時鍵盤映射解決方案,它也可以在其他領域派上用場。無論如何感謝您的幫助,非常感謝。 – rfcoder89 2012-08-17 16:17:12

1

這個問題前的日期,但水潤包允許你這樣做多。

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

在這裏看到的例子:https://github.com/abo-abo/hydra/blob/master/hydra-examples.el這裏https://github.com/abo-abo/hydra/blob/master/hydra-test.el

Wiki也有更多的有用的例子https://github.com/abo-abo/hydra/wiki/Hydras-by-Topic

水潤原本只有一個相當不透明的隱喻語法,這使得它很難上手用。我不知道爲什麼被「征服」是用來形容本質上屬於功能從顏色,以神話故事,並與許多首長怪物隱喻這樣一個奇怪的雙層:

  • 做動作,並保持在關鍵 - 模式(你問有效的東西。)(所謂blue九頭蛇)
  • 做動作和退出鍵模式(red九頭蛇)

等。

值得慶幸的是在2015年2月加入了更文字語法,檢查測試,看看並排的顏色和文字語法側。 (這也提交https://github.com/abo-abo/hydra/commit/0a3cc60f5856eb4a38204b9075d67d058ba56bef

也看到這篇文章的作者。 http://oremacs.com/2015/02/02/colorful-hydrae/