Smalltalk 在Moose中,如何通知我特殊按键?

Smalltalk 在Moose中,如何通知我特殊按键?,smalltalk,pharo,moose-technology,Smalltalk,Pharo,Moose Technology,在中,我希望每当用户在任何文本窗格中按Command-M时,都会通知我的浏览器 我正在收听内部端口,等待任何事件。虽然按下Command-m时会出现文本事件,但它不包含按下Command-m的事实 要验证,请在Moose中,通过添加以下第一条语句来修改GLMExplicitBrowser>>innerPortEvent:: (aPortEvent port name asString beginsWith: 'select') ifFalse:[ aPortEvent inspect.].

在中,我希望每当用户在任何文本窗格中按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,则不会收到通知。如果接受修改后的文本,则文本端口上会出现一个端口事件,该事件似乎与常规文本更改无法区分。即:您无法查看文本是否被接受


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

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

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

 a text
    "..."
      populate: #selection 
      on: $m 
      entitled: 'Implementors' 
      with: [ :text :entity | "logic that retrieves the list of methods" ]
有关更多信息,请访问: