繁体   English   中英

在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'.    

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

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

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

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

(aBuilder shortcut: #jumpToNextKeywordOfIt)

我们推断aBuilder是响应#shortcut: Cmd + m,您将获得9个#shortcut:实现者。 其中之一, KMBuilder有一个有趣的名字。 而且,它的shortcut:实现是shortcut:

shortcut: aKeymapName
  ^KMKeymapBuilder 
    for: aKeymapName
    platform: platform

表示它将使用KMKeymapBuilder实例进行KMKeymapBuilder 浏览此类,并验证其是否理解表达式中的下一条消息:

category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.

是的! 所以一定是这样! 要检查这一点,我们仍然需要KMBuilder的实例。 浏览班级,转到班级侧并找到一元消息#keymap

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

KMBuilder keymap

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

现在转到您已经调整过的#buildShortcutsOn:方法的实现者。 它是在类端实现的,我们现在可以评估:

RubTextEditor buildShortcutsOn: KMBuilder keymap

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

现在让我们按Cmd + Shift + y,看看我们是否停止了……宾果游戏! 我的意思是,停下来!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM