修饰键被非常特殊地处理,我怀疑 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 中?xdo
xdotool getwindowfocus
CapsLock -> 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很有用。