2009-05-08 23 views
10

當閱讀thesequestionsEmacsWiki article關於在Windows中的emacs中將Caps Lock映射爲控件時,最好的答案似乎涉及註冊表。我的問題是用戶無法修改機器的註冊表,因爲他們沒有管理員權限可以執行什麼操作。有沒有辦法從emacs內部進行映射? This article來哦,所以關閉,甚至說,「正如人們已經提到的,你當然可以將Caps-Lock映射到其他鍵,例如控制鍵。」但我無法弄清楚如何表示的控制鍵(使用various references看起來很全面,但可能不是以Windows爲中心),試圖像在Windows上映射大寫鎖定以從Emacs內部進行控制

(setq w32-enable-caps-lock nil) 
(global-set-key [capslock] '[control]) 

(setq w32-enable-caps-lock nil) 
(global-set-key [capslock] 'ctl-x-map) 

其不要的東西t似乎工作。

回答

8

我知道這並不能真正回答你的問題,但特雷傑克遜基本上解釋了這個問題。單獨檢測控制鍵需要Windows上的低級別鍵盤鉤子,我不認爲Emacs實現了該鍵。

單程(涉及外部程序,但不需要管理權限)是使用AutoHotkey。所有你需要的是以下2行腳本:

CapsLock::Ctrl 
LCtrl::Capslock 

您需要每當Emacs是開放的,但幸運的是AutoHotkey的是相當低調的應用程序來運行該腳本(通常只需要大約幾百KB的內存)。例如,您可以在.emacs中執行此腳本,以便在打開emacs時交換控制鍵和大寫鎖定鍵。

+0

做好了我假設的解決方案並找到了另一種方法。我對AutoHotKey進行了非常簡短的介紹,並假設它必須要求管理員權限,但它看起來像魅力一樣工作。我將編輯該問題並添加一些相關鏈接。 – 2009-05-08 17:06:39

+0

糾正我,如果我錯了,但腳本示例的第二行中的拼寫應該是「LCtrl :: CapsLock」而不是「LCtrl :: Cpaslock」 – 2010-01-07 00:23:08

+0

當然,你是對的。固定。 – polyglot 2010-01-08 01:13:57

6

我相信它不起作用,因爲Windows(或X)沒有通過[capslock][control]的實際事件 - 它是一個修飾鍵,如[shift]。按下修飾鍵不會導致應用程序獲得按鍵,但如果按下修飾鍵和第二個(非修飾鍵)鍵,則會出現按鍵。

例如[a][A]是兩個不同的鍵,一個是常規的「a」,另一個是本質上的「shift-a」。我相信你可以設置Windows來讓「shift-a」實際發送一個「z」或其他東西。

因爲[capslock],[control],[shift],[meta]都是修改鍵,它們不會爲應用程序自身產生鍵事件。

總之,Emacs沒有得到一個[control]關鍵事件,它可以重新映射,它會得到一個C-a事件。這通常由[control][a]密鑰的明顯組合完成。但是,事件可能由不同的擊鍵產生,如[F10]甚至[y](令人困惑,是的)。

這就是我的理解。當然歡迎澄清。

+0

是的,這是我得到的感覺,但謝謝你闡述它,比我能有的更好。 – 2009-05-08 17:04:14

1

在Windows上重新映射CapsLock的最簡單方法是下載此CapsLockChanger實用程序,選擇一個映射到(控制)的密鑰並將其放入您的開始 - >啓動菜單。

它保留在您的托盤中,做關鍵重新映射的工作,並不需要與註冊表搞混了。

0

您不一定需要管理員權限才能修改註冊表。
實際上,Windows註冊表是一種分段資源,非常像文件系統,您可以在註冊表中的各個分支和節點上擁有細化權限。 你確定你的假設,你不能改變註冊表,是正確的嗎? 我認爲這是默認情況下在Vista上,而不是在以前的Windows上。

+0

關鍵重新映射的常用方法是非常低級的和每臺機器(更改到HKLM \ SYSTEM的某處),因此管理員權限是必須的。 – 2009-05-09 19:32:52

相關問題