Привязки ключей Gtk3 в css-файлах
где я могу найти исчерпывающий список доступных Привязок клавиш, которые пользователь может определить в файле CSS для GTK+ 3?
Я уже проверил эти ресурсы:
- https://developer.gnome.org/gtk3/stable/GtkCssProvider.html
- https://developer.gnome.org/gtk3/stable/gtk3-Bindings.html
- / usr / share / темы / по умолчанию / gtk-3.0 / gtk-ключи.CSS (которое является пусто)
- / usr / share / темы / Emacs / gtk-3.0 / gtk-ключи.в CSS
например, как пользователь сделает <Control>Space
переместить курсор в конец текста в GtkTextView
?
4 ответов
похоже, что исчерпывающей документации нет. Вот что я нашел до сих пор:
список возможных действий (от/usr/share/themes/Emacs/gtk-3.0 / gtk-ключи.css):
- переместить курсор
- удалить от курсора
- вырезать буфер обмена
- past-clipboard
- start-interactive-поиск
- move-current
получить код gtk+ :
git clone git://git.gnome.org/gtk+
например, "перемещение курсора":
bind "<ctrl>b" { "move-cursor" (logical-positions, -1, 0) };
если вы :
grep -i logical gtk+/gtk/gtkenums.h
вы найдете матч и увидите, что есть другие возможности:
/**
* 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
*/
например, привязка, которую я хотел сделать (переместите курсор в конец текста в Gtk::TextView)
bind "<Control>KP_Space" { "move-cursor" (buffer-ends, 1, 0) }
"шаблон" является :
bind "key_combination" { "action" (action_param1, action_param2, ...)}
на move-cursor
действия, параметры (step, count, extend_selection)
, где step
один из вышеуказанные значения перечисления. Отметить, что для line-ends
, paragraph-ends
и buffer-ends
отрицательный count
означает "начало", а положительное значение означает"конец". И extend_selection
просто 0 или 1 (для C-стиля "False" и "True").
таким же образом, параметры действия "удалить из курсора":
/**
* 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.
*/
теперь, если вы хотите, чтобы все видели все возможные действия, которые жестко закодированы, то вот так :
find ./gtk+/ -type f | xargs grep -A 2 gtk_binding_entry_add_signal
вы увидите много вещей, как это :
./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);
затем должно быть легко найти то, что вы искали.
Я предполагаю, что вы должны найти любой сигнал с G_SIGNAL_ACTION
флаг включен. Вы можете получить этот список программно из файла Gtk gir (/usr/share/gir-1.0/Gtk-3.0.gir
в моей системе), ища каждый <glib:signal>
сущности action
атрибут установлен в 1.
Я не так люблю на XPath-выражения чтобы выйти с однострочным решением, хотя.
Я также искал надлежащую документацию о возможных привязках ключей в течение довольно долгого времени и просто споткнулся эти документы однострочного текстового виджета GtkEntry
. В этом конкретном случае можно прокрутить весь путь до конца меню, чтобы найти все другие "сигналы привязки клавиш", которые предлагает виджет, например insert_at_cursor
, paste_clipboard
etc. включая параметры, которые принимают эти сигналы (например,DeleteType в случае delete_from_cursor
). теперь не должно быть слишком тяжело!--6--> найти сигналы для других виджетов GTK.
Update: если документы Vala предоставляют подробное описание сигналов привязки клавиш, можно предположить, что обычные документы Gtk3 тоже. действительно. Всегда легче найти то, что вы ищете, если вы знаю то, что вы ищете. :)
Я думаю, в конечном счете ntd имеет наиболее правильную идею, но вот более просматриваемое решение, а не grep
ping через файл GIR.
вы должны (при условии полной документации) иметь возможность найти эту информацию, перейдя на страницу документации для интересующего виджета, а затем искать эту страницу для термина сигнал клавиш.
доступные сигналы документируются вместе с другими на странице каждого виджета, а затем квалифицируется как ли они для Привязок ключей в описании.
обычно вы также можете идентифицировать их по тому, что их значение во 2-м столбце сводной таблицы сигналов, т. е. флаги типа сигнала, является действие, а также указал ntd.
например, GtkComboBox
:move-active
:
[подпись функции обработчика]
the ::move-активный сигнал является сигналом привязки клавиш который получает излучение для перемещения активного выделения.
[описание аргументов]
As ntd указано, что это, вероятно, может быть автоматизировано в значительной степени. Как и GIR, документация генерируется из исходных файлов C, поэтому, если у вас нет файла GIR или просто предпочитаете этот способ, вы можете предположительно сделать умное использование grep
, sed
, et al. через те, чтобы вытащить информацию.