修饰键的处理非常特殊,我怀疑 Mathematica 是否能够覆盖该系统。你可能have在 Mathematica 和操作系统之间的层中执行此操作。但是,根据您所在的应用程序,可以使密钥的行为有所不同。因此,只需做一些工作,就有可能仅在 Mathematica 中大写锁定键的行为有所不同.
编辑:我没有看到你说你有哪个操作系统,所以我添加了Mac指令。
Windows
例如,如果您有 Windows,则可以使用名为http://www.autohotkey.com/ 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
因此,更糟糕的是,如果您在修改“如果 Active Window = Mathematica 则行为像 Bar,则行为像 Foo”脚本时遇到困难,我认为您可以添加此脚本来手动切换 CapsLock 状态。谷歌搜索还将揭示更多结果。
Linux
我知道在 Linux 上,你可以使用名为xbindkeys
将 CapsLock 绑定到脚本,您可以依次调用xdo
如果您检测到 Mathematica 是最顶层的窗口之一(例如通过获取最顶层窗口的 pid 和详细信息 https://stackoverflow.com/questions/2041532/getting-pid-and-details-for-topmost-window , or xdotool getwindowfocus
)或者更糟,你可以只用一个脚本来切换你的配置CapsLock -> xdotool key Escape, xdotool type "whatever", xdotool key Escape
(“Mathematica 模式”)和“正常模式”...尽管这可能会阻止您在做数学时因即时消息而对数学家大喊大叫。除非你可能需要找到某种方法来以编程方式切换 CapsLock,也许是通过创建一个虚拟的 CapsLock 键(尽管这是一种极端的黑客行为,但很可能可以找到某种库;也许有人知道如何在Python中打开/关闭大写锁定吗? https://stackoverflow.com/questions/2353112/anybody-know-how-to-toggle-caps-lock-on-off-in-python可能有用)。 (可以通过使用 CapsLock 之外的键来避免此问题,或者不关心您想要保留 CapsLock 功能;您也可以将另一个从未使用过的键变成 CapsLock。)
Mac
Mac 可能有类似的工具。例如,您可以获得xdotool
就像上面的 Linux 上的 MacPorts 项目一样。我听说 CapLock 键通常无法在 Mac 上轻松反弹,因此如果您可以使用另一个键,可能会容易得多。不过理论上应该是可以的...
如果您想使用 CapsLock,可以使用 PCKeyboardHackhttp://pqrs.org/macosx/keyremap4macbook/extra.html http://pqrs.org/macosx/keyremap4macbook/extra.html将 Caps Lock 键重新映射为告诉 OS X 让您重新映射 Caps Lock 的键。然后重新映射它,然后使用 Quicksilver 将密钥绑定到进行调用的脚本xdotool
检查您是否在 Mathematica 中,还可以发出:esc:...:esc:
如果你是(请参阅此答案的 Linux 部分)。否则,您将模拟 CapsLock 上的按键。但你重新映射了 CapsLock!因此,您可能需要将另一个从未使用过的虚拟键放入 CapsLock 键中,并使用 Cocoa 库或简单的 AppleScript 触发按键。如果您想采用 CapsLock 路线,您可能会发现在 Mac OS X 中将 Caps Lock 用作 Esc https://stackoverflow.com/questions/127591/using-caps-lock-as-esc-on-a-mac useful.