1

Moose中,我希望每当用户在任何文本窗格中按下 Command-M 时都会通知我的浏览器。

我正在监听内部端口,等待任何类型的事件。虽然按下 Command-m 时会出现一个文本事件,但它不包含按下 command-m 的事实。

为了验证,在 Moose 中,GLMExplicitBrowser>>innerPortEvent:通过添加以下第一条语句进行修改:

 (aPortEvent port name asString beginsWith: 'select') ifFalse:[ aPortEvent inspect.].

现在在工作区中运行以下命令:

    |browser |
    browser := GLMBasicExamples new textSelection.
    browser openOn: (1 to: 100).
    ((browser paneNamed: #start) port: #selection) value: 2.
    ((browser paneNamed: #end) port: #selection) value: 5.  

每当文本更改时,您都会收到通知。如果按 Command-M,则不会收到通知。如果您接受修改后的文本,您会在文本端口上收到一个与常规文本更改没有区别的端口事件。即:您看不到文本是否被接受!

如何获得特殊按键和文本接受的通知?

4

1 回答 1

2

自定义用户交互是通过动作实现的。如果您有兴趣影响浏览器(而不仅仅是执行一些外部操作),那么您希望操作的逻辑影响演示所在的端口的值。

例如,如果您希望使用 Command-M 获得系统中所有方法的列表,您可以将操作定义为:

 a text
    "..."
      populate: #selection 
      on: $m 
      entitled: 'Implementors' 
      with: [ :text :entity | "logic that retrieves the list of methods" ]

您可以在以下网址查看更多信息: http ://www.themoosebook.org/book/internals/glamour/actions

于 2011-10-27T17:24:35.080 回答