Reloading keyboard shortcut definitions in Pharo
I've been playing around with keyboard shortcuts in Pharo 7.0. I wanted to modify the binding for #jumpToNextKeywordOfIt
in the Smalltalk editor and so I got the following change in the definition of buildShortcutsOn
method:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
My first thought was that just saving this definition should immediately take effect, but it was not the case. Then I thought, perhaps since this is part of a method definition, then calling this method on the editor class would do the trick. Now, the method takes an argument aBuilder
and I don't really know what that is. So two questions arise:
- Is this the proper way to apply keybinding changes to a running editor?
- What is
aBuilder
in this context and how does one get it?
smalltalk key-bindings pharo
add a comment |
I've been playing around with keyboard shortcuts in Pharo 7.0. I wanted to modify the binding for #jumpToNextKeywordOfIt
in the Smalltalk editor and so I got the following change in the definition of buildShortcutsOn
method:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
My first thought was that just saving this definition should immediately take effect, but it was not the case. Then I thought, perhaps since this is part of a method definition, then calling this method on the editor class would do the trick. Now, the method takes an argument aBuilder
and I don't really know what that is. So two questions arise:
- Is this the proper way to apply keybinding changes to a running editor?
- What is
aBuilder
in this context and how does one get it?
smalltalk key-bindings pharo
add a comment |
I've been playing around with keyboard shortcuts in Pharo 7.0. I wanted to modify the binding for #jumpToNextKeywordOfIt
in the Smalltalk editor and so I got the following change in the definition of buildShortcutsOn
method:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
My first thought was that just saving this definition should immediately take effect, but it was not the case. Then I thought, perhaps since this is part of a method definition, then calling this method on the editor class would do the trick. Now, the method takes an argument aBuilder
and I don't really know what that is. So two questions arise:
- Is this the proper way to apply keybinding changes to a running editor?
- What is
aBuilder
in this context and how does one get it?
smalltalk key-bindings pharo
I've been playing around with keyboard shortcuts in Pharo 7.0. I wanted to modify the binding for #jumpToNextKeywordOfIt
in the Smalltalk editor and so I got the following change in the definition of buildShortcutsOn
method:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
My first thought was that just saving this definition should immediately take effect, but it was not the case. Then I thought, perhaps since this is part of a method definition, then calling this method on the editor class would do the trick. Now, the method takes an argument aBuilder
and I don't really know what that is. So two questions arise:
- Is this the proper way to apply keybinding changes to a running editor?
- What is
aBuilder
in this context and how does one get it?
smalltalk key-bindings pharo
smalltalk key-bindings pharo
asked Nov 15 '18 at 21:57
Wojciech GacWojciech Gac
465719
465719
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Let me give you some hints on how to find the solution (as this might be more valuable than giving the solution at once)
The problem is what's aBuilder
right? Well, from the expression
(aBuilder shortcut: #jumpToNextKeywordOfIt)
we deduce that aBuilder
is someone that responds to #shortcut:
. Cmd+m and you will get 9 implementors of #shortcut:
. One of them, KMBuilder
has an interesting name. Moreover, its implementation of shortcut:
is
shortcut: aKeymapName
^KMKeymapBuilder
for: aKeymapName
platform: platform
meaning that it will answer with an instance of KMKeymapBuilder
. Browse this class and verify that it understands the next message from your expression:
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
It does! So this must be it! To check this, we still need an instance of KMBuilder
. Browse the class, go to the class side and find the unary message #keymap
.
This means that we can obtain aBuilder
by evaluating
KMBuilder keymap
I love unary messages. Specially when they are on the class side!
Now go to the implementor of the method you already tweaked #buildShortcutsOn:
. It is implemented in the class side and we can now evaluate:
RubTextEditor buildShortcutsOn: KMBuilder keymap
To make sure that it works, go now to the desired handler #jumpToNextKeywordOfIt:
and insert a halt
in it. This is in the same class, instance side.
Now lets press Cmd+Shift+y and see if we get the halt... Bingo! I mean, Halt!
Thank you very much Leandro! This was indeed enlightening and I'm grateful to you for giving more than just an answer to my question.. I was also able to see that some of my problems with Pharo keybindings are due to Xfce's meddling - I'll have to look into it. Specifically, the$y meta shift
binding, which on my system translates toCtrl+Shift+Y
, failed to produce the desired effect.
– Wojciech Gac
Nov 17 '18 at 15:25
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53328469%2freloading-keyboard-shortcut-definitions-in-pharo%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Let me give you some hints on how to find the solution (as this might be more valuable than giving the solution at once)
The problem is what's aBuilder
right? Well, from the expression
(aBuilder shortcut: #jumpToNextKeywordOfIt)
we deduce that aBuilder
is someone that responds to #shortcut:
. Cmd+m and you will get 9 implementors of #shortcut:
. One of them, KMBuilder
has an interesting name. Moreover, its implementation of shortcut:
is
shortcut: aKeymapName
^KMKeymapBuilder
for: aKeymapName
platform: platform
meaning that it will answer with an instance of KMKeymapBuilder
. Browse this class and verify that it understands the next message from your expression:
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
It does! So this must be it! To check this, we still need an instance of KMBuilder
. Browse the class, go to the class side and find the unary message #keymap
.
This means that we can obtain aBuilder
by evaluating
KMBuilder keymap
I love unary messages. Specially when they are on the class side!
Now go to the implementor of the method you already tweaked #buildShortcutsOn:
. It is implemented in the class side and we can now evaluate:
RubTextEditor buildShortcutsOn: KMBuilder keymap
To make sure that it works, go now to the desired handler #jumpToNextKeywordOfIt:
and insert a halt
in it. This is in the same class, instance side.
Now lets press Cmd+Shift+y and see if we get the halt... Bingo! I mean, Halt!
Thank you very much Leandro! This was indeed enlightening and I'm grateful to you for giving more than just an answer to my question.. I was also able to see that some of my problems with Pharo keybindings are due to Xfce's meddling - I'll have to look into it. Specifically, the$y meta shift
binding, which on my system translates toCtrl+Shift+Y
, failed to produce the desired effect.
– Wojciech Gac
Nov 17 '18 at 15:25
add a comment |
Let me give you some hints on how to find the solution (as this might be more valuable than giving the solution at once)
The problem is what's aBuilder
right? Well, from the expression
(aBuilder shortcut: #jumpToNextKeywordOfIt)
we deduce that aBuilder
is someone that responds to #shortcut:
. Cmd+m and you will get 9 implementors of #shortcut:
. One of them, KMBuilder
has an interesting name. Moreover, its implementation of shortcut:
is
shortcut: aKeymapName
^KMKeymapBuilder
for: aKeymapName
platform: platform
meaning that it will answer with an instance of KMKeymapBuilder
. Browse this class and verify that it understands the next message from your expression:
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
It does! So this must be it! To check this, we still need an instance of KMBuilder
. Browse the class, go to the class side and find the unary message #keymap
.
This means that we can obtain aBuilder
by evaluating
KMBuilder keymap
I love unary messages. Specially when they are on the class side!
Now go to the implementor of the method you already tweaked #buildShortcutsOn:
. It is implemented in the class side and we can now evaluate:
RubTextEditor buildShortcutsOn: KMBuilder keymap
To make sure that it works, go now to the desired handler #jumpToNextKeywordOfIt:
and insert a halt
in it. This is in the same class, instance side.
Now lets press Cmd+Shift+y and see if we get the halt... Bingo! I mean, Halt!
Thank you very much Leandro! This was indeed enlightening and I'm grateful to you for giving more than just an answer to my question.. I was also able to see that some of my problems with Pharo keybindings are due to Xfce's meddling - I'll have to look into it. Specifically, the$y meta shift
binding, which on my system translates toCtrl+Shift+Y
, failed to produce the desired effect.
– Wojciech Gac
Nov 17 '18 at 15:25
add a comment |
Let me give you some hints on how to find the solution (as this might be more valuable than giving the solution at once)
The problem is what's aBuilder
right? Well, from the expression
(aBuilder shortcut: #jumpToNextKeywordOfIt)
we deduce that aBuilder
is someone that responds to #shortcut:
. Cmd+m and you will get 9 implementors of #shortcut:
. One of them, KMBuilder
has an interesting name. Moreover, its implementation of shortcut:
is
shortcut: aKeymapName
^KMKeymapBuilder
for: aKeymapName
platform: platform
meaning that it will answer with an instance of KMKeymapBuilder
. Browse this class and verify that it understands the next message from your expression:
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
It does! So this must be it! To check this, we still need an instance of KMBuilder
. Browse the class, go to the class side and find the unary message #keymap
.
This means that we can obtain aBuilder
by evaluating
KMBuilder keymap
I love unary messages. Specially when they are on the class side!
Now go to the implementor of the method you already tweaked #buildShortcutsOn:
. It is implemented in the class side and we can now evaluate:
RubTextEditor buildShortcutsOn: KMBuilder keymap
To make sure that it works, go now to the desired handler #jumpToNextKeywordOfIt:
and insert a halt
in it. This is in the same class, instance side.
Now lets press Cmd+Shift+y and see if we get the halt... Bingo! I mean, Halt!
Let me give you some hints on how to find the solution (as this might be more valuable than giving the solution at once)
The problem is what's aBuilder
right? Well, from the expression
(aBuilder shortcut: #jumpToNextKeywordOfIt)
we deduce that aBuilder
is someone that responds to #shortcut:
. Cmd+m and you will get 9 implementors of #shortcut:
. One of them, KMBuilder
has an interesting name. Moreover, its implementation of shortcut:
is
shortcut: aKeymapName
^KMKeymapBuilder
for: aKeymapName
platform: platform
meaning that it will answer with an instance of KMKeymapBuilder
. Browse this class and verify that it understands the next message from your expression:
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
It does! So this must be it! To check this, we still need an instance of KMBuilder
. Browse the class, go to the class side and find the unary message #keymap
.
This means that we can obtain aBuilder
by evaluating
KMBuilder keymap
I love unary messages. Specially when they are on the class side!
Now go to the implementor of the method you already tweaked #buildShortcutsOn:
. It is implemented in the class side and we can now evaluate:
RubTextEditor buildShortcutsOn: KMBuilder keymap
To make sure that it works, go now to the desired handler #jumpToNextKeywordOfIt:
and insert a halt
in it. This is in the same class, instance side.
Now lets press Cmd+Shift+y and see if we get the halt... Bingo! I mean, Halt!
edited Nov 17 '18 at 9:45
answered Nov 16 '18 at 23:31
Leandro CanigliaLeandro Caniglia
9,05622136
9,05622136
Thank you very much Leandro! This was indeed enlightening and I'm grateful to you for giving more than just an answer to my question.. I was also able to see that some of my problems with Pharo keybindings are due to Xfce's meddling - I'll have to look into it. Specifically, the$y meta shift
binding, which on my system translates toCtrl+Shift+Y
, failed to produce the desired effect.
– Wojciech Gac
Nov 17 '18 at 15:25
add a comment |
Thank you very much Leandro! This was indeed enlightening and I'm grateful to you for giving more than just an answer to my question.. I was also able to see that some of my problems with Pharo keybindings are due to Xfce's meddling - I'll have to look into it. Specifically, the$y meta shift
binding, which on my system translates toCtrl+Shift+Y
, failed to produce the desired effect.
– Wojciech Gac
Nov 17 '18 at 15:25
Thank you very much Leandro! This was indeed enlightening and I'm grateful to you for giving more than just an answer to my question.. I was also able to see that some of my problems with Pharo keybindings are due to Xfce's meddling - I'll have to look into it. Specifically, the
$y meta shift
binding, which on my system translates to Ctrl+Shift+Y
, failed to produce the desired effect.– Wojciech Gac
Nov 17 '18 at 15:25
Thank you very much Leandro! This was indeed enlightening and I'm grateful to you for giving more than just an answer to my question.. I was also able to see that some of my problems with Pharo keybindings are due to Xfce's meddling - I'll have to look into it. Specifically, the
$y meta shift
binding, which on my system translates to Ctrl+Shift+Y
, failed to produce the desired effect.– Wojciech Gac
Nov 17 '18 at 15:25
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53328469%2freloading-keyboard-shortcut-definitions-in-pharo%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown