13

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

我喜欢我的 mma 笔记本中漂亮的文字,并且经常定义函数f[\[Alpha]_] =...以匹配我正在使用的确切方程。因此,它涉及很多Esc- letter-Esc序列,并且Esc每隔一个笔触就会打破我的打字流程。

现在,CapsLock钥匙很少使用(我不记得我上次需要它是什么时候了),但放置方便(你的小指就在那儿!)。将它重新映射到Esconvim为我创造了奇迹,我想知道是否有办法在 中做同样的事情mma,而无需修改系统的键盘布局。

我尝试KeyEventTranslations.tr通过添加以下内容进行编辑EventTranslations[{...

Item[KeyEvent["CapsLock"], "ShortNameDelimiter"]

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

4

1 回答 1

7

修饰键被非常特殊地处理,我怀疑 Mathematica 将能够覆盖系统。您可能必须在 Mathematica 和操作系统之间的层中执行此操作。但是,可以根据您所在的应用程序使键的行为有所不同。因此,通过一些工作,可以使 capslock 键的行为仅在 Mathematica 中有所不同

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


视窗

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

如何将热键或热字符串设置为特定程序的专有?

换句话说,我希望某个键能够正常运行,除非特定窗口处于活动状态。在以下示例中,NumpadEnter 正常执行,除非标题为“CAD 编辑器”的窗口处于活动状态。请注意在“$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

因此,更糟糕的是,如果您在修改“如果 Active Window = Mathematica 其他行为像 Bar”脚本时遇到问题,您可以在此基础上手动切换我认为的 CapsLock 状态。谷歌搜索也会显示更多结果。


Linux

我知道在 Linux 上,您可以使用调用的程序将 CapsLock 绑定到脚本,如果您检测到 Mathematica 是最顶层窗口之一(例如通过获取 pid 和最顶层窗口的详细信息,或)xbindkeys,您可以依次调用该脚本或者更糟糕的是,您可以只使用一个脚本来在(“Mathematica 模式”)和“正常模式”之间切换您的配置......尽管这可能会阻止您在做数学时对数学家大喊大叫。除非您可能需要找到某种方式以编程方式切换 CapsLock,也许是通过创建一个虚拟 CapsLock 键(尽管这是一个极端的黑客,但很可能可以找到某种库;也许有人知道如何打开/关闭大写锁定在 Python 中?xdoxdotool getwindowfocusCapsLock -> xdotool key Escape, xdotool type "whatever", xdotool key Escape可能有用)。(这个问题可以通过使用 CapsLock 之外的键来避免,或者不关心您想要保留 CapsLock 功能;您也可以将另一个您从未使用过的键变成 CapsLock。)


苹果电脑

Mac 可能有类似的工具。例如,您可以xdotool通过 MacPorts 项目在上面的 Linux 上获得类似的东西。我听说 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 路线,您可能会发现在 Mac OS X 中使用 Caps Lock 作为 Esc很有用。

于 2011-05-06T08:33:37.733 回答