matlab java mac_java – 在MATLAB for Mac中启用选项键快捷键

自从R2009b以来,MATLAB已经通过其

Keyboard Shortcuts Preferences的出色的定制键盘快捷键.这对Mac上使用命令和控制的自定义快捷键非常有效.

不幸的是,这些键盘似乎无法覆盖MATLAB的内置字符映射.例如,如果我将option-f定义为cursor-next-word(a la emacs),则它接受绑定.按下组合键可以正确地将光标移动到下一个单词,但它还会打印出ƒ角色!我相信这是从字符图(也许与输入图相反)? EditorMacro和KeyBindings都无法覆盖此行为.

我偶然发现了this answer from a tangentially related question,这给了我希望.简而言之,他定义了一个Java类,可以处理键盘事件,并用其他键击输入替换它们.但是,解决方案只能在Windows上使用.需要以下修改才能在Mac上运行:

我需要更改键盘重新映射以在字符串中“按”,如下所示:

map = {

'$' '^'

'#' char(181) % might be useful for text formatting

};

至:

map = {

'alt pressed F' '^'

'alt pressed B' char(181) % might be useful for text formatting

};

不幸的是,在运行代码之后,按下option-f会像以前一样产生光标下一个字和ƒ个字符.但是,如果我从首选项禁用光标下一个字的绑定,那么我得到ƒ和^!实际上,即使我使用像F这样简单的操作,KeyReplacementAction也不会取代动作,而是增加它.似乎这个行为在OS X上是MATLAB独有的.

好像我根本没有超越正确的键盘映射.我已经尝试挖掘Java运行时,但是我不太熟悉事件调度模型,以便知道下一步在哪里.也许Java的操作系统级别键盘映射中的东西?

编辑:我已经做了一些挖掘.看起来好像Mac版本的MATLAB不能正确地遵循keyEvent的“消耗”属性.我可以将KeyReplacementAction附加到inputMap或keymap,在这两种情况下,我都会增加键绑定,而不是替换它.我使用反射来“取消保护”AWTEvent的消费()方法,但效果与之前相同.

在堆栈跟踪之后,看起来好像keyEvent正在下降到javax.swing.KeyboardManager的一个实例.看起来我应该能够解除KeyboardManager中的击键,但是我无法弄清楚如何从MATLAB句柄中访问实例.也许有人更熟悉Swing的事件模型,而Java调试器可能会越来越远.

编辑2:flolo的答案促使我研究X11的键盘图.几个注释:

> Matlab似乎不尊重〜/ .Xmodmap或任何当前加载的modmaps.

> Matlab使用$XKEYSYMDB环境变量,如果它在启动时存在.否则,它从$MATLAB / X11 / app-defaults / XKeysymDB加载它.

>整个$MATLAB / X11 / app-defaults /目录看起来很有趣;也许有些骇客可以使这项工作?

> Mac上的X11键盘映射在哪里? MATLAB如何切换到国际键盘布局?

编辑3:Hrm,我认为X11是一个红色的鲱鱼. lsof -c MATLAB显示它正在访问/ System / Library / Keyboard Layouts / AppleKeyboardLayouts.bundle.现在工作…

编辑4:MATLAB确实使用了系统键盘布局.我创建了一个没有任何绑定,因为R.M.建议.这似乎工作 – MATLAB的行为正常.不幸的是,它也打破了我所有其他程序中的Cocoa键盘绑定.关闭,但没有雪茄. (足够接近,实际上,由于简短的想法,R.M.赢得了500美元的赏金,直到我尝试撰写我的祝贺意见,发现我无法像往常一样浏览文本字段.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值