Gtk3键在css文件中绑定

ced*_*emo 11 css gtk key-bindings pygobject gtk3

在哪里可以找到用户可以在GTK + 3的CSS文件中定义的可用键绑定的详尽列表?

我已经检查了这些资源:

例如,用户如何<Control>Space将光标移动到文本末尾GtkTextView

ced*_*emo 9

似乎没有详尽的文件.这是我到目前为止所发现的:

可能的操作列表(来自/usr/share/themes/Emacs/gtk-3.0/gtk-keys.css):

  • 移动光标
  • 删除 - 从游标
  • 截止剪贴板
  • 过去剪贴板
  • 启动交互式搜索
  • 动电流

获取gtk +代码:

git clone git://git.gnome.org/gtk+
Run Code Online (Sandbox Code Playgroud)

例如,"move-cursor action":

bind  "<ctrl>b" { "move-cursor" (logical-positions, -1, 0) };
Run Code Online (Sandbox Code Playgroud)

如果你这样做:

grep -i logical gtk+/gtk/gtkenums.h
Run Code Online (Sandbox Code Playgroud)

你会找到一个匹配,看看还有其他可能性:

/**
 * GtkMovementStep:
 * @GTK_MOVEMENT_LOGICAL_POSITIONS: Move forward or back by graphemes
 * @GTK_MOVEMENT_VISUAL_POSITIONS:  Move left or right by graphemes
 * @GTK_MOVEMENT_WORDS:             Move forward or back by words
 * @GTK_MOVEMENT_DISPLAY_LINES:     Move up or down lines (wrapped lines)
 * @GTK_MOVEMENT_DISPLAY_LINE_ENDS: Move to either end of a line
 * @GTK_MOVEMENT_PARAGRAPHS:        Move up or down paragraphs (newline-ended lines)
 * @GTK_MOVEMENT_PARAGRAPH_ENDS:    Move to either end of a paragraph
 * @GTK_MOVEMENT_PAGES:             Move by pages
 * @GTK_MOVEMENT_BUFFER_ENDS:       Move to ends of the buffer
 * @GTK_MOVEMENT_HORIZONTAL_PAGES:  Move horizontally by pages
 */
Run Code Online (Sandbox Code Playgroud)

例如我想做的绑定(将光标移动到Gtk :: TextView中文本的末尾)

bind "<Control>KP_Space" { "move-cursor" (buffer-ends, 1, 0) }
Run Code Online (Sandbox Code Playgroud)

"模板"是:

bind "key_combination" { "action" (action_param1, action_param2, ...)}
Run Code Online (Sandbox Code Playgroud)

对于move-cursor动作,参数是(step, count, extend_selection),其中step一个是上述枚举值.要注意,对于line-ends,paragraph-endsbuffer-ends一负count的意思是"开端",而正数意味着"结束".并且extend_selection只是0或1(对于C风格的"假"和"真").

同样,"从游标中删除"操作的选项是:

/**
 * GtkDeleteType:
 * @GTK_DELETE_CHARS: Delete characters.
 * @GTK_DELETE_WORD_ENDS: Delete only the portion of the word to the
 *   left/right of cursor if we’re in the middle of a word.
 * @GTK_DELETE_WORDS: Delete words.
 * @GTK_DELETE_DISPLAY_LINES: Delete display-lines. Display-lines
 *   refers to the visible lines, with respect to to the current line
 *   breaks. As opposed to paragraphs, which are defined by line
 *   breaks in the input.
 * @GTK_DELETE_DISPLAY_LINE_ENDS: Delete only the portion of the
 *   display-line to the left/right of cursor.
 * @GTK_DELETE_PARAGRAPH_ENDS: Delete to the end of the
 *   paragraph. Like C-k in Emacs (or its reverse).
 * @GTK_DELETE_PARAGRAPHS: Delete entire line. Like C-k in pico.
 * @GTK_DELETE_WHITESPACE: Delete only whitespace. Like M-\ in Emacs.
 *
 * See also: #GtkEntry::delete-from-cursor.
 */
Run Code Online (Sandbox Code Playgroud)

现在,如果您希望所有人都能看到所有可能的硬编码操作,那么这是一种方法:

find ./gtk+/ -type f | xargs grep -A 2 gtk_binding_entry_add_signal
Run Code Online (Sandbox Code Playgroud)

你会看到很多这样的事情:

./gtk+/gtk/gtklabel.c:  gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK,
./gtk+/gtk/gtklabel.c-              "move-cursor", 3,
./gtk+/gtk/gtklabel.c-              G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS,
--
./gtk+/gtk/gtklabel.c:  gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_CONTROL_MASK,
./gtk+/gtk/gtklabel.c-              "copy-clipboard", 0);
./gtk+/gtk/gtklabel.c-
./gtk+/gtk/gtklabel.c:  gtk_binding_entry_add_signal (binding_set, GDK_KEY_Return, 0,
./gtk+/gtk/gtklabel.c-              "activate-current-link", 0);
./gtk+/gtk/gtklabel.c:  gtk_binding_entry_add_signal (binding_set, GDK_KEY_ISO_Enter, 0,
./gtk+/gtk/gtklabel.c-              "activate-current-link", 0);
./gtk+/gtk/gtklabel.c:  gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Enter, 0,
./gtk+/gtk/gtklabel.c-              "activate-current-link", 0);
./gtk+/gtk/gtklabel.c-
--
./gtk+/gtk/gtkdialog.c:  gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "close", 0);
Run Code Online (Sandbox Code Playgroud)

那么应该很容易找到你想要的东西.