如何设置Pharo快捷键切换windows?

How to set Pharo keyboard shortcut for switching windows?

我了解到在 Pharo 中可以使用 Alt-Tab 在 windows 之间切换。但是我从来没有能够对此进行测试,因为我通常使用的两个操作系统都捕获 Alt-Tab 并将其用于自己的 window 切换。

我在系统键盘映射浏览器中找不到 Alt-Tab 列表。 switch windows的key在哪里定义的,怎么改?

编辑:我也喜欢 "here's how you could have found out for yourself" 类型的答案。

使用 hallo 菜单在 window 对象上调出检查器。然后在检查器中切换到 'Keys' 选项卡。在那里您可以看到与变形相关的所有快捷方式。选择您感兴趣的 (Alt+TAB) 将在右侧打开一个新的检查器窗格。 'Source code' 显示并突出显示定义键绑定的源代码。浏览方法,编辑它,保存它,重置键映射(KMRepository 重置),你应该完成了。

嗯...你击中了我们的弱点之一:)

键绑定不是他的最佳状态,但是:

  • 实际上,alt+tab 已经设置为 "switch window" activity。问题是它并不总是有效(例如,它在 Playground 上无效)。
  • 这是因为那里有一些硬编码逻辑,我们正在慢慢地从系统中删除这些人(其中一些部分在 Pharo 诞生之前已有 15 年以上的历史)。
  • 有人(可能是在尝试修复 playground 或硬编码失败时)忘记在创建新预览的方法中停止 window... 所以即使您到达系统的那部分,您将拥有一个调试器。当然,您可以通过删除断点来恢复正确的行为,但这并不能纠正 "switch windows" 并非随处可用的事实。
  • 我为它打开了一个错误条目:https://pharo.fogbugz.com/f/cases/15546,如果你想关注这个问题(你需要一个帐户,我很抱歉)。

无论如何,我们正在移除这些硬编码的东西,您可以检查 World Menu/System/Keymap Browser 的所有当前可用设置(它们很多,我们也在研究如何更好地显示这些组合...emacs 样式、弹出通知等)

我通过编辑 Morhpic-Core 包中的 "Basic, general navigation shortcuts among morphs">>Kernel edit Morph class>>#morphNavigationShortcutsOn:

您可以在其中为 "World navigateWindowForward" 等创建快捷方式。 我花了一段时间才找到有效的键 o.k,但大多数在文本字段中时效果不佳。我正在使用以下内容:

<keymap>
(aBuilder shortcut: #navigateFocusForwardCtrl)
    category: #MorphFocusCtrlNavigation
    default: $j ctrl asKeyCombination
    do: [ :target :morph :event | morph navigateFocusForward ].
(aBuilder shortcut: #navigateFocusBackwardCtrl)
    category: #MorphFocusCtrlNavigation
    default: $k ctrl asKeyCombination
    do: [ :target :morph :event | morph navigateFocusBackward ].
(aBuilder shortcut: #navigateVisibleWindowForward)
    category: #MorphFocusCtrlNavigation
    default: Character tab ctrl asKeyCombination
    do: [ :target :morph :event | World navigateVisibleWindowForward ].
(aBuilder shortcut: #navigateWindowForward)
    category: #MorphFocusCtrlNavigation
    default: $l ctrl asKeyCombination
    do: [ :target :morph :event | World navigateWindowForward ].
(aBuilder shortcut: #navigateWindowBackward)
    category: #MorphFocusCtrlNavigation
    default: $; ctrl asKeyCombination
    do: [ :target :morph :event | World navigateWindowBackward  ]

虽然类别可能不正确,但它有效...(而 #MorphFocusNavigation 不正确!)