在 Pharo 中重新加载键盘快捷键定义
Reloading keyboard shortcut definitions in Pharo
我一直在使用 Pharo 7.0 中的键盘快捷键。我想在 Smalltalk 编辑器中修改 #jumpToNextKeywordOfIt
的绑定,所以我在 buildShortcutsOn
方法的定义中进行了以下更改:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
我的第一个想法是只保存这个定义应该会立即生效,但事实并非如此。然后我想,也许既然这是方法定义的一部分,那么在编辑器 class 上调用这个方法就可以了。现在,该方法接受一个参数 aBuilder
,我真的不知道那是什么。于是出现两个问题:
- 这是将键绑定更改应用于 运行 编辑器的正确方法吗?
- 在此上下文中,
aBuilder
是什么?如何获得它?
让我给你一些关于如何找到解决方案的提示(因为这可能比立即给出解决方案更有价值)
问题是 aBuilder
对吗?好吧,从表达式
(aBuilder shortcut: #jumpToNextKeywordOfIt)
我们推断 aBuilder
是响应 #shortcut:
的人。 Cmd+m 你会得到 #shortcut:
的 9 个实现者。其中之一,KMBuilder
有一个有趣的名字。而且,它对shortcut:
的实现是
shortcut: aKeymapName
^KMKeymapBuilder
for: aKeymapName
platform: platform
意味着它会用 KMKeymapBuilder
的实例来回答。浏览此 class 并验证它是否理解您的表达式中的下一条消息:
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
确实如此!所以一定是这个!要检查这一点,我们仍然需要一个 KMBuilder
的实例。浏览 class,转到 class 端并找到一元消息 #keymap
.
这意味着我们可以通过评估
得到aBuilder
KMBuilder keymap
我喜欢一元消息。特别是当他们站在 class 一边时!
现在转到您已经调整的方法的实现者 #buildShortcutsOn:
。它在 class 端实现,我们现在可以评估:
RubTextEditor buildShortcutsOn: KMBuilder keymap
为确保它有效,现在转到所需的处理程序 #jumpToNextKeywordOfIt:
并在其中插入 halt
。这是在同一个class,实例端。
现在让我们按 Cmd+Shift+y 看看我们是否能停止……宾果游戏!我的意思是,停止!
我一直在使用 Pharo 7.0 中的键盘快捷键。我想在 Smalltalk 编辑器中修改 #jumpToNextKeywordOfIt
的绑定,所以我在 buildShortcutsOn
方法的定义中进行了以下更改:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
我的第一个想法是只保存这个定义应该会立即生效,但事实并非如此。然后我想,也许既然这是方法定义的一部分,那么在编辑器 class 上调用这个方法就可以了。现在,该方法接受一个参数 aBuilder
,我真的不知道那是什么。于是出现两个问题:
- 这是将键绑定更改应用于 运行 编辑器的正确方法吗?
- 在此上下文中,
aBuilder
是什么?如何获得它?
让我给你一些关于如何找到解决方案的提示(因为这可能比立即给出解决方案更有价值)
问题是 aBuilder
对吗?好吧,从表达式
(aBuilder shortcut: #jumpToNextKeywordOfIt)
我们推断 aBuilder
是响应 #shortcut:
的人。 Cmd+m 你会得到 #shortcut:
的 9 个实现者。其中之一,KMBuilder
有一个有趣的名字。而且,它对shortcut:
的实现是
shortcut: aKeymapName
^KMKeymapBuilder
for: aKeymapName
platform: platform
意味着它会用 KMKeymapBuilder
的实例来回答。浏览此 class 并验证它是否理解您的表达式中的下一条消息:
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
确实如此!所以一定是这个!要检查这一点,我们仍然需要一个 KMBuilder
的实例。浏览 class,转到 class 端并找到一元消息 #keymap
.
这意味着我们可以通过评估
得到aBuilder
KMBuilder keymap
我喜欢一元消息。特别是当他们站在 class 一边时!
现在转到您已经调整的方法的实现者 #buildShortcutsOn:
。它在 class 端实现,我们现在可以评估:
RubTextEditor buildShortcutsOn: KMBuilder keymap
为确保它有效,现在转到所需的处理程序 #jumpToNextKeywordOfIt:
并在其中插入 halt
。这是在同一个class,实例端。
现在让我们按 Cmd+Shift+y 看看我们是否能停止……宾果游戏!我的意思是,停止!