【问题标题】:Reloading keyboard shortcut definitions in Pharo在 Pharo 中重新加载键盘快捷键定义
【发布时间】:2018-11-15 21:57:17
【问题描述】:

我一直在使用 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 是什么?如何获得它?

【问题讨论】:

    标签: smalltalk key-bindings pharo


    【解决方案1】:

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

    问题是aBuilder 对吗?嗯,从表达式

    (aBuilder shortcut: #jumpToNextKeywordOfIt)
    

    我们推断aBuilder 是回复#shortcut: 的人。 Cmd+m 你会得到#shortcut:的9个实现者。其中之一,KMBuilder 有一个有趣的名字。而且,它对shortcut:的实现是

    shortcut: aKeymapName
      ^KMKeymapBuilder 
        for: aKeymapName
        platform: platform
    

    意味着它将以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 看看我们是否停止了……宾果!我的意思是,停下!

    【讨论】:

    • 非常感谢莱安德罗!这确实很有启发性,我很感谢你给出的不仅仅是回答我的问题。我还能够看到我在 Pharo 键绑定方面的一些问题是由于 Xfce 的干预 - 我将不得不调查它。具体来说,$y meta shift 绑定(在我的系统上转换为 Ctrl+Shift+Y)未能产生预期的效果。
    猜你喜欢
    • 1970-01-01
    • 2012-08-28
    • 2012-08-16
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多