在Linux上的Eclipse中,是否可以单独使用箭头键来扩展包浏览器中的树节点?


69

使用Eclipse时,我经常使用键盘箭头浏览包浏览器树。

在Windows中,我可以通过按键来展开折叠的节点。在Linux中,我需要按Shift+ 。有没有一种方法可以重新配置它Shift而不是必需的?


这确实不是Eclipse问题。Eclipse使用本机OS小部件,例如您描述的树控件和键绑定行为来自Windows。我正在向您的问题添加Windows标记。
Konstantin Komissarchik

1
@Konstantin公平的观点,但是linux甚至ubuntu(具体来说)都不会是一个更好的标签,因为那是我遇到问题的地方,而不是Windows。
Alb

好点子。为Linux交换Windows标签。
Konstantin Komissarchik

12
更好地模仿Windows行为会很好:Right在已经扩展的节点上应该跳到第一个子Left节点,在已经折叠的节点上应该跳到其父节点。
Adrian H.

Answers:


18

我的GTK3版本表现得更加自然。将以下内容添加到〜/ .config / gtk-3.0 / gtk.css中:

@binding-set MyTreeViewBinding
{
    bind "Left"     { "select-cursor-parent" ()
                      "expand-collapse-cursor-row" (0,0,0) };
    bind "Right"    { "expand-collapse-cursor-row" (0,1,0) };
}

GtkTreeView
{
    gtk-key-bindings: MyTreeViewBinding;
}

建议,如果您明确描述其行为方式不同,则答案将更有帮助。
studgeek '16

优秀的。我让CSS改用shift + left。检查一下
mppfiles

更改了对此答案的接受答案,因为我想大多数人现在都在使用GTK3
Alb

112

将其放入您的手机中~/.gtkrc-2.0,您应该会很好。左和右行进行了请求的更改,其余只是我个人添加的内容,以使树状视图更像vim。希望有帮助!

binding "gtk-binding-tree-view" {
    bind "j"        { "move-cursor" (display-lines, 1) }
    bind "k"        { "move-cursor" (display-lines, -1) }
    bind "h"        { "expand-collapse-cursor-row" (1,0,0) }
    bind "l"        { "expand-collapse-cursor-row" (1,1,0) }
    bind "o"        { "move-cursor" (pages, 1) }
    bind "u"        { "move-cursor" (pages, -1) }
    bind "g"        { "move-cursor" (buffer-ends, -1) }
    bind "y"        { "move-cursor" (buffer-ends, 1) }
    bind "p"        { "select-cursor-parent" () }
    bind "Left"     { "expand-collapse-cursor-row" (0,0,0) }
    bind "Right"    { "expand-collapse-cursor-row" (0,1,0) }
    bind "semicolon" { "expand-collapse-cursor-row" (0,1,1) }
    bind "slash"    { "start-interactive-search" () }
}
class "GtkTreeView" binding "gtk-binding-tree-view"

然后重新启动Eclipse以应用新的绑定


5
我要这么努力地拥抱你。这困扰了我好几个月!
oschrenk 2012年

3
当前选择位于文件夹中时,它的确工作得很好。但是左箭头的行为仍然与Windows上的行为不完全相同。在已经折叠的文件夹上,它将带​​您到父文件夹。另外,当当前选择是文件时,它将带您到父文件夹。但是在Mint上,它仍然保留在当前选择中。但这仍然是一个巨大的进步,谢谢!
BalusC

2
在Eclipse Luna之前,这一直很好,为什么不停止工作?
Jonathan Naguin 2014年

1
露娜:使用“大数据书呆子”的答案(见下文)
Philipp 2014年

1
添加bind "<Alt>Up" { "select-cursor-parent" () }将使您能够使用Alt-Up跳到父节点。这样,即使您当前的子节点选择不在列表中,您也可以轻松地折叠树。
Mads Nielsen

31

如果有人想知道如何使用GTK3做到这一点-只需打开~/.config/gtk-3.0/gtk.css并添加以下内容:

@binding-set MyTreeViewBinding
{
    bind "Left"     { "expand-collapse-cursor-row" (0,0,0) };
    bind "Right"    { "expand-collapse-cursor-row" (0,1,0) };
}

GtkTreeView
{
  gtk-key-bindings: MyTreeViewBinding;
}

1
这与Eclipse最近移至GTK 3十分相关-尽管所有4.x版本都可以通过设置环境变量来使用GTK 3,但Mars默认已移至GTK 3。
2015年

1
看看stackoverflow.com/a/32529393/306047,恕我直言,将“左”键绑定到“ select-cursor-parent”也很有用。
snorbi

1
在Ubuntu 16.04上测试并正常运行。谢谢:)
Ad Infinitum

1
刚刚在〜/ .config / gtk-3.0 /下创建了该gtk.css,它在CentOS Linux版本7.3.1611上像超级按钮一样工作,现在可以在Eclipse上使用键盘箭头进行导航!
Shoaib Khan

1
一段时间以来,这对我来说效果很好,但是现在在带有GTK + 3.22的Ubuntu 17.04上,它停止了工作。任何其他提示将不胜感激。
Guss

12

安德鲁提供的答案是正确的。请注意,在较新版本的Ubuntu中,没有〜/ .gtkrc-2.0文件,因此您可以创建它,也可以编辑当前主题的gtkrc,该文件存储在

/usr/share/themes/your_theme/gtk-2.0/gtkrc


4
自从我最近切换到Linux Mint(肉桂色)以来,由于your_theme文件夹不包含任何gtk *文件,所以我试图弄清楚如何还原此有用的技巧。答案是这个文件:/usr/share/themes/Default/gtk-2.0-key/gtkrc
Sebastiano

4

我试图使用@Andrew Lazarev的答案。但是,由于GTK3.20(https://bugzilla.gnome.org/show_bug.cgi?id=766166)上的一个非向后兼容更改,因此必须对绑定进行些许修改:

@binding-set MyTreeViewBinding
{
   bind "Left"     { "select-cursor-parent" ()
                  "expand-collapse-cursor-row" (0,0,0) };
   bind "Right"    { "expand-collapse-cursor-row" (0,1,0) };
}

treeview
{
   -gtk-key-bindings: MyTreeViewBinding;
}

注意-之前的,gtk-key-bindings并将其GtkTreeView重命名为treeview


有没有增加流量控制或条件的方法?如您所见,当您按下向左箭头时,它将导航到父对象并应用折叠。用户通常想要的是:如果当前元素是可折叠的并且被展开:折叠;否则,如果当前元素不可折叠或被折叠:导航到父级。你会怎么做?
小丑

2

“树”窗口小部件的导航由底层窗口小部件工具箱-GTK控制。SWT / Eclipse无法控制它。如果需要任何此类配置来更改快捷方式,则必须从GTK本身进行设置。


谢谢那是有道理的。但是,在Nautilus中,我可以使用箭头键扩展节点而无需移动。我在“系统”->“首选项”->“键盘快捷键”中查看,但那里没有任何有关此快捷键的信息。
Alb

1
原因似乎是,在GTK中,TreeView可以具有多个列,并且在列之间可以左右移动,因此它们不能用于展开/折叠节点:mail.gnome.org/archives/gtk-devel-list/2004- March / msg00223.html(是的,这是一封非常旧的邮件)
Thomas Broyer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.