Есть ли место в «Ubuntu», где хранится полный список того, какие клавиши / комбинации / сочетания клавиш связаны с чем?
Что такое сочетания клавиш Unity с клавиатурой и мышью? перечисляют некоторые Ярлыки «Unity» для Dash, Launcher и т. Д. И Как составить список используемых сочетаний клавиш Compiz? показывает способ составления списка привязок Compiz, но я ищу что-то большее (не только некоторые из сочетания клавиш ограничены только Unity или Compiz), хотя это только начало.
Существует ли глобальный список используемых сочетаний клавиш / сочетаний клавиш / сочетаний клавиш, который хранится где-то в Ubuntu или есть способ их компилировать и перечислять? Тот, который применяется к Ubuntu и работающим в нем (Unity, Compiz, ярлыки для программ и т. Д.).
Конечно, Ubuntu должен хранить это где-нибудь, чтобы комбинация клавиш, нажимаемая на клавиатуре, была направлена на то, с чем она связана? Если в Ubuntu такого места нет, то опубликуйте это как ответ, чтобы будущие пользователи, которые будут искать, будут знать.
До Ubuntu 12.04
Ярлыки размещаются по-разному в зависимости от используемого рабочего стола ведьмы (gnome / unity, kde, xfce, lxde и т. Д.).
Для гномов они под
~/.gconf/desktop/gnome/keybindings
(пользовательские ярлыки)
и под
~/.gconf/apps/metacity
.
Начиная с Ubuntu 12.10
~/.config/dconf/user
(в dconf-editor: org.gnome.settings-daemon.plugins.media-keys.custom-keybindings
(пользовательские ярлыки)
~/.config/compiz-1/compizconfig
Ваш оконный менеджер получает любые ключевые события до того, как приложения это делают, поэтому, если он хочет использовать эти события, он делает это, и ваши приложения никогда не получат их. Если оконный менеджер не хочет реагировать на ключевые события сам, он передает их приложению.
Вы можете проверить это самостоятельно следующим образом:
xev | grep KeyPress
, просмотрщик событий X. Alt
, обратите внимание, что xev
показывает, что он получил ключевое событие в своем окне терминала. Ctrl
, еще раз отметьте, что xev
получил событие. Обратите внимание на то, как выглядит окно терминала прямо сейчас. Left arrow
, чтобы перейти в другое рабочее пространство. (Я предполагаю, что вы используете это в качестве сочетания клавиш менеджера окон.) Right arrow
, чтобы вернуться туда, где вы работаете xev
. Обратите внимание, что он никогда не получал никаких событий клавиш для переключения рабочих пространств с помощью клавиш со стрелками влево и вправо - вывод такой же, как и в шаге 4. Итак, вы видите, что оконный менеджер на практике получает все ключевые события и, если он не хочет их захватывать, передает их приложению. Затем приложение делает то же самое для своих собственных виджетов (например, как вы можете нажимать Enter
весь день в своем веб-браузере, но ничего не будет делать, пока вы не поместите курсор в адресную строку или какое-либо поле, где вы можете введите текст).
Приложение может устанавливать собственные ярлыки, а приложения настраиваются независимо друг от друга.
В KDE 3.x, если я правильно помню, вы можете установить ярлыки по умолчанию (например, Ctrl-s
для сохранения) в Центре управления KDE, и это будет применяться ко всем приложениям, написанным с помощью инструментария Qt, но я не не знаю, возможно ли это все еще с момента перехода на KDE 4.
Приложения хранят свои ярлыки независимо, поэтому нет центрального места, где они хранятся.
Я не понимаю весь процесс взаимодействия с клавиатурой - ОС - ядро - X11 - Window Manager - Среда рабочего стола - Приложения, но если определенное окно, такое как Gedit, имеет Фокус клавиатуры, он может обрабатывать ввод самостоятельно, и это так.
В 11.10 в разделе «Конфигурация системы -> Клавиатура -> Ярлыки» вы получите довольно большой список из них. Это то, что вы ищете?
Нет, нет единого места, где хранятся все ярлыки. Приложения могут хранить свои конфигурации там, где они захотят.
Тем не менее, вы в основном смотрите на два уровня: уровень приложения (например, Ctrl-C для копирования в Firefox) и уровень диспетчера окон (например, Win + D для отображения рабочего стола). Compiz использует gconf для хранения своей конфигурации .
Для приложений вы можете приблизительно разделить их по наборам инструментов. А именно, приложения GTK также используют gconf.
Конечно, Ubuntu должен хранить это где-нибудь, чтобы комбинация клавиш, нажимаемая на клавиатуре, была направлена на то, с чем она связана?
blockquote>Не совсем. Сосредоточенное приложение получает первый удар по событию клавиатуры X, но если этого не происходит, оно всплывает перед другими приложениями, а именно оконным менеджером. Таким образом, вы можете иметь игру, которая захватывает Alt + F4 и не закрывает окно (черт побери, Джеймстаун!). Я думаю, вы думаете, что он идет к какому-то центральному маршрутизатору событий, затем сопоставляется с некоторой базой данных и направляется к месту назначения. Это больше похоже на раздачу бутылки с напитком: проходи мимо, сделай глоток, если хочешь и передай остальное, или возьми все это и будь жадным
Среда Linux / FOSS (как вы могли заметить) довольно демократична, и заставить все приложения согласовать единый репозиторий конфигурации центральной клавиатуры - глупое дело. Во-первых, у вас есть неподдерживаемые приложения, которые были написаны очень давно, и вы об этом не знали.
Обновление: в соответствии с документами Xlib по теме :
Начиная с исходного окна, X-сервер ищет иерархию окон, пока не найдет первое указанное окно клиентом, как заинтересованным в этих событиях. Если в одном из промежуточных окон установлена маска «не распространять», запрещающая генерацию типа события, события этих типов будут подавлены.
blockquote>Также,
Чтобы получать события KeyPress, KeyRelease, ButtonPress и ButtonRelease, установите биты KeyPressMask, KeyReleaseMask, ButtonPressMask и ButtonReleaseMask в атрибуте event-mask окна.
blockquote>И вы можете установить атрибут для отключения распространения .
Проблема в том, что вы не указываете X , какие клавиши следует прослушивать, поэтому вы никогда не можете сказать априори , какие клавиши слушает приложение (не говоря уже о том, что они делают). ) или действительно ли они намереваются распространять это, если они фактически слушают это. Таким образом, центральный реестр невозможен на уровне X, поэтому вам придется делать это на уровне инструментария, что просто практически невозможно. : D