Hi All, I', Just reopening this feature request. A quick summary of my proposal is given below. 1. This PR will allow an additional configuration option "guitool.<name>.gitgui-shortcut" which will allow us to specify keyboard shortcut for custom commands in git-gui 2. Even there exists a parameter called "guitool.<name>.shortcut" which is used by git-cola, I suggest to keep this new additional config parameter as an independent config parameter, which will not interfere with git-cola in any way, because, both are different applications and it may have different "built-in" shortcuts already assigned. So, sharing shortcut scheme between two apps is not a good idea. 3. New parameter will expect shortcut combinations specified in TCL/TK 's format and we will not be doing any processing on it. Will keep it simple. --- Documentation/config/guitool.txt | 15 +++++++++++++++ git-gui/lib/tools.tcl | 15 ++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Documentation/config/guitool.txt b/Documentation/config/guitool.txt index 43fb9466ff..79dac23ca3 100644 --- a/Documentation/config/guitool.txt +++ b/Documentation/config/guitool.txt @@ -48,3 +48,18 @@ guitool.<name>.prompt:: Specifies the general prompt string to display at the top of the dialog, before subsections for 'argPrompt' and 'revPrompt'. The default value includes the actual command. + +guitool.<name>.gitgui-shortcut + Specifies a keyboard shortcut for the custom tool in the git-gui + application. The value must be a valid string ( without "<" , ">" wrapper ) + understood by the TCL/TK 's bind command.See https://www.tcl.tk/man/tcl8.4/TkCmd/bind.htm + for more details about the supported values. Avoid creating shortcuts that + conflict with existing built-in `git gui` shortcuts. + Example: + [guitool "Terminal"] + cmd = gnome-terminal -e zsh + noconsole = yes + gitgui-shortcut = "Control-y" + [guitool "Sync"] + cmd = "git pull; git push" + gitgui-shortcut = "Alt-s" diff --git a/git-gui/lib/tools.tcl b/git-gui/lib/tools.tcl index 413f1a1700..40db3f6395 100644 --- a/git-gui/lib/tools.tcl +++ b/git-gui/lib/tools.tcl @@ -38,7 +38,7 @@ proc tools_create_item {parent args} { } proc tools_populate_one {fullname} { - global tools_menubar tools_menutbl tools_id + global tools_menubar tools_menutbl tools_id repo_config if {![info exists tools_id]} { set tools_id 0 @@ -61,9 +61,18 @@ proc tools_populate_one {fullname} { } } - tools_create_item $parent command \ + if {[info exists repo_config(guitool.$fullname.gitgui-shortcut)]} { + set gitgui_shortcut $repo_config(guitool.$fullname.gitgui-shortcut) + tools_create_item $parent command \ -label [lindex $names end] \ - -command [list tools_exec $fullname] + -command [list tools_exec $fullname] \ + -accelerator $gitgui_shortcut + bind . <$gitgui_shortcut> [list tools_exec $fullname] + } else { + tools_create_item $parent command \ + -label [lindex $names end] \ + -command [list tools_exec $fullname] + } } proc tools_exec {fullname} { -- https://github.com/git/git/pull/220 -- On Fri, Apr 1, 2016 at 12:02 PM harish k <harish2704@xxxxxxxxx> wrote: > > Hi David, > > Actually Im a TCL primer. This is the first time Im dealing with. > That is why I kept it simple ( ie both accel-key and accel-label need > to be defined in config ). > > I think, git-cola is using Qt style representation accel-key in the config file. > > Is git-cola is an official tool from git ? like git-gui? > if not , > My suggesion is, it is better to seperate config fields according to > application-domain > like, "git-gui-accel = <Ctrl-l>" etc.. > Other vise there is good chance for conflicts. ( Eg: consider the case > that, <Ctrl-p> was assined to a custom tool by git-cola ) > > Currently this patch will not handle any conflicting shortcuts. I > think custom shortcuts will overwrite the other. > > > On Thu, Mar 31, 2016 at 10:11 PM, David Aguilar <davvid@xxxxxxxxx> wrote: > > Hello, > > > > On Tue, Mar 29, 2016 at 11:38:10AM +0000, Harish K wrote: > >> --- > >> git-gui/lib/tools.tcl | 16 +++++++++++++--- > >> 1 file changed, 13 insertions(+), 3 deletions(-) > >> > >> diff --git a/git-gui/lib/tools.tcl b/git-gui/lib/tools.tcl > >> index 6ec9411..749bc67 100644 > >> --- a/git-gui/lib/tools.tcl > >> +++ b/git-gui/lib/tools.tcl > >> @@ -38,7 +38,7 @@ proc tools_create_item {parent args} { > >> } > >> > >> proc tools_populate_one {fullname} { > >> - global tools_menubar tools_menutbl tools_id > >> + global tools_menubar tools_menutbl tools_id repo_config > >> > >> if {![info exists tools_id]} { > >> set tools_id 0 > >> @@ -61,9 +61,19 @@ proc tools_populate_one {fullname} { > >> } > >> } > >> > >> - tools_create_item $parent command \ > >> + if {[info exists repo_config(guitool.$fullname.accelerator)] && [info exists repo_config(guitool.$fullname.accelerator-label)]} { > >> + set accele_key $repo_config(guitool.$fullname.accelerator) > >> + set accel_label $repo_config(guitool.$fullname.accelerator-label) > >> + tools_create_item $parent command \ > >> -label [lindex $names end] \ > >> - -command [list tools_exec $fullname] > >> + -command [list tools_exec $fullname] \ > >> + -accelerator $accel_label > >> + bind . $accele_key [list tools_exec $fullname] > >> + } else { > >> + tools_create_item $parent command \ > >> + -label [lindex $names end] \ > >> + -command [list tools_exec $fullname] > >> + } > >> } > >> > >> proc tools_exec {fullname} { > >> > >> -- > >> https://github.com/git/git/pull/220 > > > > We also support "custom guitools" in git-cola using this same > > mechanism. If this gets accepted then we'll want to make > > similar change there. > > > > There's always a small risk that user-defined tools can conflict > > with builtin shortcuts, but otherwise this seems like a pretty > > nice feature. Curious, what is the behavior in the event of a > > conflict? Do the builtins win? IIRC, Qt handles this by > > disabling the shortcut and warning that it's ambiguous. > > > > Please documentation guitool.<name>.accellerator[-label] in > > Documentation/config.txt otherwise users will not know that it > > exists. > > > > It would also be good for the docs to clarify what the > > accelerators look like in case we need to munge them when making > > it work in cola via Qt, which has its own mechanism for > > associating actions with shortcuts. Documented examples with > > one and two modifier keys would be helpful. > > > > > > cheers, > > -- > > David > > > > -- > > -Regards > Harish.K -- -Thanks Harish.K