在Pharo中重新加载键盘快捷键定义

Woj*_*Gac 2 smalltalk key-bindings pharo

我一直在使用Pharo 7.0中的键盘快捷键.我想#jumpToNextKeywordOfIt在Smalltalk编辑器中修改绑定,所以我在buildShortcutsOn方法的定义中得到了以下更改:

(aBuilder shortcut: #jumpToNextKeywordOfIt)
    category: RubSmalltalkEditor name
    default: $y meta shift
    do: [ :target | target editor jumpToNextKeywordOfIt: true ]
    description: 'Jump to next keyword'.    
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是,只是保存这个定义应该立即生效,但事实并非如此.然后我想,也许因为这是方法定义的一部分,然后在编辑器类上调用这个方法就可以了.现在,该方法需要一个参数aBuilder,我真的不知道那是什么.所以出现两个问题:

  1. 这是将键绑定更改应用于正在运行的编辑器的正确方法吗?
  2. aBuilder在这种背景下是什么,如何得到它?

Lea*_*lia 5

让我给你一些关于如何找到解决方案的提示(因为这可能比立即提供解决方案更有价值)

问题是什么是aBuilder对的?好吧,从表达

(aBuilder shortcut: #jumpToNextKeywordOfIt)
Run Code Online (Sandbox Code Playgroud)

我们推断出那aBuilder是一个回应的人#shortcut:.Cmd + m,你将得到9个实现者#shortcut:.其中之一,KMBuilder有一个有趣的名字.而且,它的实施shortcut:

shortcut: aKeymapName
  ^KMKeymapBuilder 
    for: aKeymapName
    platform: platform
Run Code Online (Sandbox Code Playgroud)

这意味着它会回答一个实例KMKeymapBuilder.浏览此类并验证它是否理解表达式中的下一条消息:

category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
Run Code Online (Sandbox Code Playgroud)

它确实!所以这一定是它!要检查这一点,我们仍然需要一个实例KMBuilder.浏览课程,转到课程侧并找到一元消息#keymap.

这意味着我们可以aBuilder通过评估获得

KMBuilder keymap
Run Code Online (Sandbox Code Playgroud)

我喜欢一元信息.特别是当他们在课堂上!

现在转到已经调整过的方法的实现者#buildShortcutsOn:.它是在课堂上实现的,我们现在可以评估:

RubTextEditor buildShortcutsOn: KMBuilder keymap
Run Code Online (Sandbox Code Playgroud)

为了确保它正常工作,现在转到所需的处理程序#jumpToNextKeywordOfIt:halt在其中插入一个.这是在同一个类,实例方面.

现在让我们按Cmd + Shift + y,看看我们是否停止了......宾果!我的意思是,停止!