【问题标题】:Remap Caps lock key to Esc in Mma 7在 Mma 7 中将 Caps Lock 键重新映射为 Esc
【发布时间】:2011-08-14 02:25:52
【问题描述】:

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

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

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

我尝试通过在EventTranslations[{... 中添加以下内容来编辑KeyEventTranslations.tr

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

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

【问题讨论】:

  • @belisarius:那篇文章谈到了整个系统的重新映射,正如我在问题中提到的那样,这不是我想做的事情。我还要如何在互联网上大喊大叫? ;)
  • 我怀疑 Caps/Scroll/NumLock 键可能无法传递给 Mathematica 或被 Mathematica 读取。
  • 你的最后一句话令人不安。无论如何,由于 Lock 键在键盘上切换灯,这是通过计算机完成的,而不是连接到键盘上,所以必须有一些钩子来处理这个,它可能会干扰你想要的。我记得使用 CapsLock 进行其他功能的游戏经常会以某种方式破坏指示灯的行为,这表明需要拦截这个钩子。
  • @yoda。我知道了。但 Dynamic[CurrentValue["ModifierKeys"]] 显示这些键,但不显示 CapsLock 键。
  • 顺便说一句...你在 TEH INTERNETZ 上大喊大叫,何:按下 Shift 键,HOL 时间,为什么 SPE::ING IZ 这么糟糕!

标签: macos wolfram-mathematica keymapping mathematica-frontend


【解决方案1】:

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

编辑:我没有看到你说你有什么操作系统,所以我添加了 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

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


Linux

我知道在 Linux 上,您可以使用名为 xbindkeys 的程序将 CapsLock 绑定到脚本,如果您检测到 Mathematica 是最顶层的窗口之一(例如通过 @ 987654322@ 或 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 很有用。

【讨论】:

  • 实际上,提问者确实写道:“我在 Mac 上使用 Mma7 学生版。”但我认为这个想法还是有帮助的。
  • 如果每个犯这种错误的人都“无法阅读”,那么我们 99.99% 都是文盲。
  • 谢谢,我确实知道 PCKeyboardHack,它就在我的机器上,等待试用。还没有时间:/。此外,当我在上面写到我在 vim 中将 CapsLock 重新映射到 Esc 时,我误会了。那是在我的 Linux 机器上,你可以用 xmodmap 来做到这一点。在 Mac 上重新映射 CapsLock 一点也不简单。我会尽快更新我的进度。
  • 我还看到在 Mac(或类似的东西)上“Caps Lock 反弹慢得多”的声明。但是,我已将 Caps Lock 重新映射为控制并进行设置,以便选择某些内容(文本、文件等)并双击 ctrl 将其发送到 Launchbar(不管那是什么)。无论我做得多快,它都能奏效。所以我认为这种说法是不正确的。
猜你喜欢
  • 2015-02-09
  • 1970-01-01
  • 2023-03-06
  • 2011-01-11
  • 1970-01-01
  • 2013-03-04
  • 2020-05-18
  • 2010-09-12
  • 2010-10-24
相关资源
最近更新 更多