Почему Shift + Insert вставляет из CLIPBOARD в некоторых приложениях и PRIMARY в других?

29

Как вставить из основного выбора (например, выделенный мышью текст) с помощью сочетания клавиш? Shift+Insertнепоследовательные пасты из ПЕРВИЧНОГО или КЛИПАТА, в зависимости от применения.

Задний план:

Ctrl+Cкопирует выделенный текст в блокнот, а выделенный мышью копирует в ПЕРВИЧНЫЙ. Паста из клипборда с Ctrl+Vи паста из ПЕРВИЧНОГО с mouse-middle-click.

В эмуляторе терминала (gnome-терминал) вставьте из CLIPBOARD с помощью Ctrl+Shift+V. (Вставьте из ПЕРВИЧНОГО с mouse-middle-clickнеподвижным.)

Я хочу вставить из ПЕРВИЧНОГО с помощью сочетания клавиш. В gnome-Terminal это Shift+Insert, но в gedit и Firefox, Shift+Insertвставки из CLIPBOARD. Я хочу ярлык, который последовательно вставляется из CLIPBOARD, и другой ярлык, который последовательно вставляется из PRIMARY.

Я использую Ubuntu 14.04 с xmonad и Firefox 34.0

reasgt
источник

Ответы:

30

Все приложения, которые вы упомянули, являются gtk+приложениями, поэтому на них довольно легко ответить. Почему ... Потому что во всех gtk+ приложениях ( кроме одного ) Shift+ Insertвставляется из CLIPBOARD - т.е. это эквивалентно Ctrl+ V. Ярлык жестко закодирован в gtkentry.c(строка 2022) и gtktextview.c(строка 1506):

gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK,
                "paste-clipboard", 0);

Это также задокументировано в Справочном руководстве GTK + 3 под GtkEntry:

The “paste-clipboard” signal
void
user_function (GtkEntry *entry,
               gpointer  user_data)
The ::paste-clipboard signal is a keybinding signal which gets emitted
to paste the contents of the clipboard into the text view.
The default bindings for this signal are Ctrl-v and Shift-Insert.

Насколько я знаю , что это было сделано для обеспечения согласованности с другими DE (см KDE«s Qtклавиш в QTextEdit Class) и ОС Windows 1 . Единственным исключением является . После долгих дебатов разработчики решили (для совместимости с другими терминалами) , что, в , + следует вставить из ПЕРВИЧНЫХ и + + должны вставить из буфера обмена (хотя у вас есть возможность настроить некоторые ярлыки).
gnome-terminalgnome-terminalShiftInsertCtrlShiftV


Что касается того, как вы вставляете выделение с помощью сочетания клавиш ... нет простого пути.

Самый простой способ - назначить ярлык для запускаемого скрипта xdotool click 2(имитирует нажатие средней кнопки мыши). Хотя это работает (и должно работать со всеми или с большинством DE и наборов инструментов), оно работает только в том случае, если курсор мыши находится на самом деле над полем ввода текста, в противном случае происходит сбой.

Другой относительно простой способ - через Gnome Accessibility, если он доступен в вашей системе. Это также требует присутствия цифровой клавиатуры. Перейдите к Universal Access>> Pointing & Clickingи включите Mouse Keys. Убедитесь, что NumLockвыключен. Затем вы можете использовать цифровые клавиши для перемещения курсора и щелчка. Чтобы смоделировать щелчок средней кнопкой мыши, нажмите (и отпустите) *(звездочку), затем нажмите 5(вот краткое руководство ). Это решение, кажется, всегда работает в gtk+окружающей среде. Недостатком является то, что для этого требуется Gnome Accessibilityи цифровая клавиатура. Кроме того, вы не можете настроить ярлык.

На gnome-bugzilla было предложено интересное решение (ошибка 643391) . (Обновление 2018: проблема теперь перенесена сюда .) Требуется исправление некоторых исходных файлов и настройка параметров конфигурации в ~/.config/gtk-3.0/gtk.css(или ~/.gtkrc-2.0для gtk+2 приложений). Я не пробовал это лично, но отзывы положительные.

В идеале вы должны исправить исходные файлы и определить "paste-selection"сигнал, а затем связать Shift+ Insertс "paste-selection"вместо "paste-clipboard". Код Энди (прикрепленный в сообщении об ошибке, связанном выше) может послужить руководством для того, как это сделать. Даже тогда это будет влиять только на gtk+приложения (я не KDE/Qtпарень, поэтому я не знаю, как изменить Qtповедение приложений).


1: (не говоря уже о CUA IBM)

don_crissti
источник
2
Спасибо за это объяснение. Жаль, что лучшего решения не существует, я очень скучаю по сочетанию клавиш для PRIMARY. Обходной путь эмуляции мыши мало помогает, так как смысл в том, чтобы избежать необходимости иметь дело с мышью.
didi_X8
1

Я извиняюсь: я не могу написать комментарий из-за репутации, поэтому я пишу как ответ. Это не прямое решение, но оно помогает мне ...

Вы можете использовать комбинацию информации:

  1. Отредактируйте gtk theme и разрешите привязку клавиш по своему желанию .

  2. Пример создания привязки клавиш gtk 3.0 в css темы .

  3. Пример переопределения gtk keybindings и unbind .

  4. Пример модификации связывания клавиш для gnome-терминала

  5. Автоматический запуск autocutsel с параметрами по умолчанию для синхронизации CLIPBOARD с CUTBUFFER (это необязательно). Эта ссылка только для информации о проблеме.

  6. Используйте clipman для доступа к нескольким буферам (PRIMARY и CLIPBOARD), без выбора автосинхронизации (двунаправленная автоматическая синхронизация делает неправильным).

Поэтому я просто выбираю gtk theme и изменяю CSS темы на нужные комбинации клавиш для сигналов copy-clipboard (Ctrl + Insert) и paste-clipboard (Shift + Insert).

user1742529
источник
1
Это может стать началом хорошего ответа, если вы возьмете содержание этих ссылок и объедините информацию. На самом деле это просто набор ссылок, и это подвергает его риску быть удаленным. Пожалуйста, заполните информацию, чтобы она была прямо в ответе, и я уверен, что вы получите положительные отзывы (таким образом, у вас будет достаточно репутации, чтобы комментировать). Благодарность!
Тоби Спейт