将大写锁定密钥重新映射到Mma 7中的Esc

时间:2011-04-27 18:22:06

标签: macos wolfram-mathematica keymapping mathematica-frontend

  

TLDR :如何在Mma 7中将CapsLock转换为“ShortNameDelimiter”?

我喜欢我的mma笔记本中的漂亮文字,并经常将函数定义为f[\[Alpha]_] =...,以便与我正在使用的确切方程式相匹配。因此,它涉及大量的 Esc - 字母 - Esc 序列,并且每隔一个笔画到达 Esc 打破了我的打字流程。

现在, CapsLock 键很少使用(我记不起上次我需要它),但是方便放置(你的小指就在那里!)。将它重新映射到vim上的 Esc 为我创造了奇迹,我想知道是否有办法在mma中执行相同操作,而无需修改系统的键盘布局。

我尝试在KeyEventTranslations.tr

中添加以下内容来修改EventTranslations[{...
Item[KeyEvent["CapsLock"], "ShortNameDelimiter"]

但这没有效果。还有另一种方法吗? CapsLock不是正确的标识符吗?如果它有帮助,我在Mac上使用Mma7学生版。

1 个答案:

答案 0 :(得分:7)

修改键的处理非常特别,我怀疑Mathematica能否覆盖系统。您可能 在Mathematica和OS之间的层中执行此操作。但是,根据您所使用的应用程序,可以使键的行为不同。因此,通过一些工作,可以使大写锁定键仅在Mathematica 中表现不同。

编辑:我没有看到你说你有哪个操作系统,所以我添加了Mac指令。


例如,如果您有Windows,则可以使用名为http://www.autohotkey.com/的程序。它特别具有可以将键绑定到脚本的功能,特别是以下脚本:

  

如何将热键或热字符串专用于某些程序?

     

换句话说,除非特定窗口处于活动状态,否则我希望某个键能够正常工作。   在以下示例中,除非标题为“CAD编辑器”的窗口处于活动状态,否则NumpadEnter将正常执行。注意在“$ NumpadEnter”中使用$前缀,这是让热键“发送自己”所必需的:

$NumpadEnter::
IfWinNotActive, CAD Editor
{
    Send, {NumpadEnter}
    return
}
; Otherwise, the desired application is active, so do a custom action:
Send, abc
return
  

下一个示例比上面的示例更纯粹,但只有在“CAD编辑器”应用程序被设计为忽略NumpadEnter键本身时才会起作用。波形符前缀(〜)使NumpadEnter成为一个非抑制热键,这意味着NumpadEnter键击本身总是被发送到活动窗口,唯一的区别是它触发了热键动作。 〜功能需要Windows NT / 2k / XP。

~NumpadEnter::
IfWinNotActive, CAD Editor
    return
; Otherwise, the desired application is active, so do a custom action:
Send, abc
return

引用此论坛帖子中的“MRCS”,您可能会发现以下内容:

  

第一个我命名为CapsLockR.ahk并包含以下脚本:

CapsLock UP::Run C:\Documents and Sett...[path to script]...\CapsLock.ahk 
  

第二个名为CapsLock.ahk并有此脚本:

GetKeyState, state, CapsLock, T 
if state = D 
    SetCapsLockState, off 
else 
    SetCapsLockState, on 
exit

更糟糕的是,如果您在修改“如果活动窗口= Mathematica其他表现得像Bar”这样的行为时遇到困难,您可以通过此操作来手动切换我认为的CapsLock状态。谷歌搜索也将揭示更多的结果。


的Linux

我知道在Linux上,您可以使用名为xbindkeys的程序将CapsLock绑定到脚本,如果您检测到Mathematica是最顶层的窗口之一,您可以从该脚本调用xdo (例如,通过Getting pid and details for topmost window,或xdotool getwindowfocus)或更糟糕的情况,您可以使用一个脚本在CapsLock -> xdotool key Escape, xdotool type "whatever", xdotool key Escape(“Mathematica模式”)和“正常”之间切换您的配置模式“......虽然这可能会阻止你在做数学时立即消息时对数学家产生误解。除非您可能需要找到一些以编程方式切换CapsLock的方法,可能是通过创建一个虚拟的CapsLock密钥(虽然这是一个极端的黑客,但很可能找到某种类型的库;也许Anybody know how to toggle caps lock on/off in Python?可能很有用)。 (通过使用除CapsLock之外的密钥可以避免这个问题,或者不关心你想保留你的CapsLock功能;你也可以将你从未使用的另一个密钥转换为CapsLock。)


的Mac

Mac可能有类似的工具。例如,您可以通过MacPorts项目在Linux上获得xdotool。我听说CapLock键通常不能在Mac上轻松反弹,所以如果你能处理另一个键,它可能会容易得多。但理论上应该是可能的......

如果您希望使用CapsLock,您可以使用PCKeyboardHack http://pqrs.org/macosx/keyremap4macbook/extra.html将CapLock密钥重新映射到能够让OS X重新映射CapsLock的东西。然后重新映射它,然后使用Quicksilver将密钥绑定到一个脚本,该脚本使调用xdotool检查您是否在Mathematica中也发出:esc:...:esc:如果您是(请参阅此部分的Linux部分)回答)。否则,您将在CapsLock上模拟按键。但你重新映射了CapsLock!因此,您可能需要在CapsLock键中创建另一个从未使用的虚拟键,并使用Cocoa库或简单的AppleScript触发按键。如果您希望继续使用CapsLock路线,您可能会发现Using Caps Lock as Esc in Mac OS X有用。