查看现有的键绑定

查看现有的键绑定

我更喜欢 emacs 的按键,但 select-all 似乎不是 emacs 词汇表的一部分,或者至少不是 emacs 的 gtk-key-theme 的一部分。Mw 无法复制选定区域。

  1. 全选的按键是什么?
  2. 这个主题的按键绑定图在哪里?

谢谢,史蒂夫

答案1

那里gtk 中“全选”的简单绑定:C-/

它被定义为一般GtkTextView 信号并不是 emacs 主题的一部分。但是它与 配合得很好。它被定义为 的替代品C-a。虽然后者被 emacs 主题重新解释,但C-/对“全选”仍然有效。

答案2

没有任何捷径可以直接做到这一点。

Ctrl您可以使用-转到文本末尾e并删除一行Ctrl- u。但这仅适用于GtkEntry,即单行输入字段。

如果您需要在GtkTextView多行编辑器式控件 中选择所有内容,您就只能执行繁重的Ctrl-键,Home然后按Ctrl+ Shift- 键End,这对于我的 63 键键盘来说几乎是不可能的。

如果由于编辑效率或移动设备键盘的限制HomeEnd无法使用,那么您将不得不凑合一下。从“编辑”菜单中选择“全选”不是一个好主意,因为它会映射到Alt- e-a在 Firefox 中, Alt- e-t在 gedit 中,Alt- e-s在 OpenOffice 中(即使使用 gnome 集成),每个软件中的键都不同,并且在某些软件中,编辑菜单中没有“全选”,例如 chromium,而在某些软件中,甚至没有编辑菜单本身,甚至没有一个可以用Alt-调出的隐藏菜单e,例如 nautilus。这种不一致违背了 Alt 激活菜单栏的目的,并且任何操作系统,甚至 Windows,都不是那么不一致。即使是右键单击菜单也没有“全选”的固定快捷方式 - 它通常有,a但可以t在应用程序之间使用。要求修复每个单独的软件中的错误只能通过 GNOME 这样的元项目来完成,但是知道 GNOME 本身产生了其中一些问题(删除“nautilus”中的编辑菜单是 GNOME 3 的决定)确实没有给你留下太多希望。

附注:Ctrl-Home是移动到所有文本开头的唯一快捷方式,即使它可能会打断您在小键盘移动设备上输入的工作。

答案就到此为止。对于好奇的人,我还有其他信息:


经验丰富的 emacs 用户会尝试Ctrl- x- h:确实是正宗的 emacs,但 gtk3 的 emacs 模式无法理解任何控制键序列。事实上,只定义了少数几个 emacs 快捷键 - 看一下/usr/share/themes/Emacs/gtk-3.0/gtk-keys.css;贴纸上有足够的空间来写下所有支持的 emacs 快捷键。

更糟糕的是,很难为此重新定位快捷键。如您所知,Ctrl-a已被 emacs 占用。但即使是西班牙语使用者,最大的非英语群体(不包括中文,因为我们使用表意文字),习惯于使用Ctrl-选择所有内容e,也会发现该键盘快捷键也被 emacs 占用。除了e,QWERTY 键盘左半部分没有任何其他键没有已被广泛接受的用途。Google Translate 将 SHIFT 键(单独按下时)视为“全选”,但其他软件或其他 Google 产品均不遵循该设置。

要清空一行,请使用Ctrl- u。这样做的好处是不会覆盖 X SELECTION(使用鼠标中键拉出的那个)。这是 gtk3 的 emacs 模式特有的设置:在真正的 emacs 中,它不会自行执行任何操作;在 readline(bash、mysql 等)中,它应该删除从光标到行首的所有内容,而其对应部分Ctrl-k删除从光标到行尾的所有内容。

有些人可能会建议你在某处留下一个标记,以便用键盘随机选择。你还可能会发现Ctrl-SPACE在 emacs 模式下配置为在文本中设置锚点。尽管与许多其他软件(特别是表意文字输入法和其他一些编辑器软件中的自动完成功能)相冲突,但没有任何快捷键可以使用你设置的锚点。


Ubuntu 不正式支持 emacs 编辑模式,也不支持任何无法通过 UI 完成的 UI 配置。有关此类需求的错误报告被标记为低优先级。出于这个原因,我认为最好向 Linux 通用的地方(例如超级用户)询问此类问题。

答案3

查看现有的键绑定

对于 GTK3 应用程序,您可以查看 Emacs GTK 关键主题的绑定 - 可以在本地(可能在/usr/share/themes/Emacs/gtk-3.0/gtk-keys.css) - 也可以在 GTK git 存储库上GitHub(这不一定等于您的本地文件,因为您的发行版可能已经对其进行了修改)。

阅读此文件时,你必须了解小部件的含义

(查看每个链接站点顶部的图像。)

添加全选键绑定

select-all对于GtkTreeViewGtkTextView

对于GtkTreeViewGtkTextView小部件,有一个名为的信号select-all。您需要向其传递参数,1以便它选择全部而不是取消选择。

因此,编辑~/.config/gtk-3.0/gtk.css并添加如下内容:

@binding-set my-text-and-tree-view-bindings
{
    bind "<alt>a"
    {
    "select-all" (1)
    };
}

textview {
  -gtk-key-bindings: my-text-and-tree-view-bindings;
}

treeview {
  -gtk-key-bindings: my-text-and-tree-view-bindings;
}

GtkEntry

因为GtkEntry没有select-all信号。相反,你可以使用两个信号序列move-cursor来标记文本。

再次编辑~/.config/gtk-3.0/gtk.css并添加如下内容:

@binding-set my-entry-bindings
{
    bind "<alt>a"
    {
    "move-cursor" (paragraph-ends, -1, 0)
    "move-cursor" (paragraph-ends,  1, 1)
    };
}

entry {
  -gtk-key-bindings: my-entry-bindings;
}

火狐

顺便说一句,在 Firefox 中Alt-a默认选择全部,无需配置(使用 Emacs GTK 键主题)。

答案4

如果要选择某个区域内的所有文本,我更喜欢为此定义一个简单的宏。按F3开始编写宏。然后输入

Esc - <          // goes to beginning of document
Ctrl - spacebar  // set mark
Esc - >          // selects all till end of document

然后使用分子量进行复制(我通常从远程 unix 系统复制到本地 Windows),然后按F4完成宏的定义。

现在您已完成宏的定义,只需点击F4重复该动作任意次数。

相关内容