2012-01-04 74 views
4

我已經開發了一個emacs pinky的例子,它太多的按下了C-x。理想情況下,我想使用空格鍵代替控件作爲前綴命令,因爲用拇指按住容易得多。按下並釋放空間仍然應該添加一個空格,但同時按Space + x應該可以綁定到一個命令。例如:使用空間而不是控制來避免emacs小指?

(local-set-key (kbd "SPC-s") 'search-forward) 

有沒有人有關於如何實現這一點的任何想法?是否有可能只使用elisp來完成它,還是必須修改emacs源代碼並編譯我自己的版本?

由於我在Windows和Linux上都使用emacs,我寧願選擇與操作系統無關的解決方案。

編輯: 我已經嘗試過key-chord.el,它有助於在某些情況下但不是全部(C-x C-s)。我寧願一個小模式,如控股空間是控制或持有空間is-meta

編輯: 感謝所有答覆。我目前使用鍵和絃將許多C- *命令映射到j *或f *,具體取決於if *是左手還是右手鍵。例如,我已經用jb替換了C-x b。它適用於所有通常只鍵入一次的命令,但不適用於重複使用的命令(如向前或向後段落)。這是迄今爲止最好的跨平臺解決方案,因爲它只需要定製.emacs和key-chord.el文件。我更喜歡一種解決方案,它需要較少的重新映射,並降低鍵入「fyi」並獲得「yank> i」的風險。我相信使用空間可以工作,但我對emacs的技術細節不夠了解,無法使其工作。

我曾考慮用Ctrl替換Caps-Lock或Alt,但這隻對左小指有幫助。許多常用命令都是使用右小指(C-x,C-s,C-w,C-y)執行的。

+1

我發現的一個技巧是(鍵盤允許),你可以放下你的手的一部分來點擊ctrl鍵並用你的拇指點擊C-x C-s等鍵。 Caps Lock重新映射也可以使用,因爲您可以使用無名指。儘管我個人最喜歡的是切換ALT和CTRL,但原因是因爲大多數鍵盤實際上都有類似的鍵(ALT的用途通常比CTRL少),所以您可以使用拇指代替,這需要一些習慣並假設您使用ALT比CTRL少很多。 – 2012-01-04 12:23:59

+0

我嘗試過使用我的下掌握住Ctrl,但由於我的MS自然鍵盤上的小尺寸鍵很不容易。如果我能找到一個巨大的按鍵按鈕,我會買一對夫婦。我看過Kinesis和Maltron鍵盤,但它們相當昂貴。我也更喜歡一個比攜帶自己的鍵盤更便攜的解決方案:) – athoren 2012-01-04 14:57:15

+0

對於我來說,切換CTRL和ALT的作品,傳統的舊鍵盤實際上是默認這種方式,這就是爲什麼Emacs小指從來沒有真正的問題。 – 2012-01-04 15:01:11

回答

0

這不是你的問題的答案,但它是一種避免Emacs小指的方法:不要用一隻手按修改鍵和一個鍵。所以(假設你有一個Qwerty鍵盤)用你的右手按下控制鍵,你的左手按下'x'。

+1

我開始這樣做的時候,當我第一次感覺到疼痛,現在我在兩個小指中都有疼痛感: )迄今爲止我發現的最佳解決方案是和絃。例如,我使用'jb'而不是'C-x b'。但是,對於重複的命令,例如「向上移動4行」(5 x C-p),它不起作用。 – athoren 2012-01-04 15:32:38

6

我將CapsLock重新映射爲Control以避免痛苦(儘管使用KDE來執行映射,但不是emacs)。

更新:我也可以在LXDE和MS Windows中做到這一點。

3

我不認爲這在Emacs Lisp中是可行的。爲了做你想做的事,人們必須檢查'空格'鍵是否仍然被按下或者是否被釋放。然而,Emacs中的鍵盤事件只是簡單的字符,而不是「按下」和「釋放」事件,就像鼠標按鈕一樣。我不知道Emacs C代碼是否足以說明這是否可以在不破壞正常事件循環的情況下實現。

所以我們來看看依賴於操作系統的解決方案。在Xorg下,您可以將修飾符映射到常規鍵(使用xmodmap);然而,按'空格'仍然會產生一個空白,而作爲修飾符,這不是你想要的。我所知道的唯一的解決辦法是一個特殊的Xorg鍵盤驅動程序:

https://gitlab.com/at-home-modifier/at-home-modifier-evdev/wikis/home

我不知道是否存在的Windows類似的東西,雖然。

+0

由於我在Windows中工作,Windows是主要問題。在win中編寫自定義鍵盤驅動程序似乎比在linux中困難得多。我擔心elisp沒有「緊急」事件,因爲我從未見過這樣的事情。儘管如此,我仍然希望在Emacs的資源中可以這樣做。 – athoren 2012-01-04 15:28:38

+0

家中修飾符在Linux上似乎是一個很好的解決方案。如果我能在窗戶上找到類似的東西,我會很開心...... – athoren 2012-01-04 15:36:56

+0

使用AutoHotKey,通過phils回答,您可以做到。 (我是at-home-modifier的作者=)祝你好運。 – 2012-02-28 11:48:17

4

Xah李寫了一篇關於這一主題的nice article, 尤其是當他建議

用手掌或半拳頭而不是你的小手指的按控制 關鍵

+2

[使用空格鍵和空格鍵](http://stackoverflow.com/a/8935973/780703)更好。 Ctrl對於Emacs來說至關重要,而且用手掌按下Ctrl鍵太笨拙。我使用左下角的按鍵進行窗口管理。 – 2012-10-17 05:49:35

6

在Windows,AutoHotKey是針對大多數關鍵重新映射要求的非常靈活且可腳本化的解決方案。

1

我所做的是切換Alt鍵和alt-meta的超級鍵,避免點擊惱人的左控制。除了我切換大寫鎖定超級有一個額外的修飾符,我用於切換緩衝區H-p H-n和其他東西。 如果你有Ubuntu,你的鍵盤設置中的變化是微不足道的。

1

您可以看看cua-mode,它對C-xC-c(標記處於活動狀態時)做了類似的處理。我當然不是專家(我甚至沒有使用cua-mode),但是簡要地看一下代碼,有一個定時器發送一個timeout事件,以便(在你的情況下)你可以綁定[?\s timeout]來插入一個空格並綁定其他的鍵任何你想要的。你也不能(我不認爲),綁定按鍵,彷彿SPC是一個定語:

(local-set-key (kbd "SPC-s") 'search-forward) 

但你將它們綁定爲(比方說)

(define-key space-as-prefix-map (kbd "s") 'search-forward) 

我試圖做一個快速使用cua-mode進行測試,但不幸的是,計時器僅在標記處於活動狀態時才運行。好吧,這比這更復雜一點,但足以說我沒有堅持足夠長的時間來完成所有事情。但是確實有可能通過空間來控制逃避的內容。

3

這應該做你想要什麼:

http://www.emacswiki.org/emacs/space-chord.el

(空弦定義全局「S」「搜索進)

它‘和絃’,所以你必須在同一時間鍵入空格和s,但這樣做很容易。

或者,如果您可以使用控制鎖來幫助避免按住控制鍵(這就像控制鍵的大寫鎖定)。

2

在過去的幾個星期裏,我編寫並使用了一個AutoHotKey腳本,它提供了Windows範圍內的功能,可以完成您所描述的內容。它現在可用on GitHub。雖然它不是一個獨立於操作系統的解決方案,但在Linux上有幾乎相同的實現(例如At-Home-Modifier和Space2Ctrl),因此您應該能夠在任一平臺上獲得相同的用戶體驗。另外,您還可以在其他程序中使用它來執行復制,粘貼和切換瀏覽器選項卡等任務。希望能幫助到你。

相關問題