Перезагрузка определения сочетаний клавиш в Pharo - PullRequest
0 голосов
/ 16 ноября 2018

Я играл с сочетаниями клавиш в Pharo 7.0.Я хотел изменить привязку для #jumpToNextKeywordOfIt в редакторе Smalltalk, и поэтому я получил следующее изменение в определении метода 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 в этом контексте и как его получить?

1 Ответ

0 голосов
/ 17 ноября 2018

Позвольте мне дать вам несколько советов о том, как найти решение (поскольку это может быть более ценным, чем дать решение сразу)

Проблема в том, что aBuilder верно? Ну из выражения

(aBuilder shortcut: #jumpToNextKeywordOfIt)

мы делаем вывод, что aBuilder - это тот, кто отвечает на #shortcut:. Cmd + m и вы получите 9 разработчиков #shortcut:. У одного из них 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 и посмотрим, остановимся ли мы ... Бинго! Я имею в виду, Стой!

...