在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,则不会收到通知。如果接受修改后的文本,则会在文本端口上获得一个与常规文本更改无法区分的端口事件。即:您无法看到文本是否被接受!
如何获得特殊按键和文本接受的通知?
答案 0 :(得分: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