Перейти к содержанию
    

keyboard shortcuts

Весь мозг сломал. Как (gnome-terminal, Centos 7) сделать так, чтобы сочетания клавиш Ctrl-Ins / Shift-Ins проходили в терминал, а не занимались copy/paste из гуевой clipboard? unbind в .gtkrc-2.0 / gtk.css не помогает, в system.mwmrc о них нет упоминания. В гуёвых настройках (gnome-control-center / keyboard / shortcuts и в самом gnome-terminal / Preferences / Shortcuts) про эти сочетания ничего нет.

ГДЕ ЕЩЕ?????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я отучал gnome-terminal отъедать F10 у Midnight commander-а.

Создал файл ~/.gtkrc-2.0.mine следующего содержания:

binding "NoKeyboardNavigation" {
        unbind "<shift>F10"
}

class "*" binding "NoKeyboardNavigation"

Сработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня это находится в .config/gtk-3.0/gtk.css :

@binding-set mybinding {
    unbind "<Shift>Insert"
    unbind "<Ctrl>Insert"
    unbind "<Shift>F10"
}

GtkEntry {
    gtk-key-bindings: mybinding;
}

 

Однако, не работает (но и не ругает, что там что-то не так). Shift-F10, кстати, тоже не отключился, менюшка выскакивает. Однако, если там лажануться, например "Insert" с маленькой буквы написать, то оно, при запуске терминала из консоли, ругается, что ошибка, то есть, читается...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну если гора не идет к Магомету, то.... В общем, это нельзя сконфигурировать. Только конкретным ломом.

 

Проблема в коде libvte (пакет vte3). Исправил сочетания Ctrl/Shift+Home/End (не пропускались с модификаторами, это гуглем нарыл), и Ctrl/Shift+Insert (захардкодены на терминальский Copy/Paste - это сам отрезал), и еще заодно всякие там PgUp/PgDn с модификаторами, второе место с Shift+Home/End, ну и т.п.

 

Лекарство:

diff -uNr a/src/keymap.c b/src/keymap.c
--- a/src/keymap.c	2013-06-08 15:46:26.000000000 +0400
+++ b/src/keymap.c	2014-12-27 00:16:09.000000000 +0300
@@ -278,6 +278,8 @@
	{cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "1~", -1, X_NULL},
	{cursor_all, keypad_all, fkey_hp, 0, _VTE_CAP_ESC "h", -1, X_NULL},
	{cursor_all, keypad_all, fkey_nothpvt, 0, X_NULL, 0, "kh"},
+	{cursor_default, keypad_all, fkey_default, 0, _VTE_CAP_CSI "H", -1, X_NULL},
+	{cursor_app, keypad_all, fkey_default, 0, _VTE_CAP_SS3 "H", -1, X_NULL},
	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
};

@@ -285,6 +287,8 @@
	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, "@7"},
	{cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "4~", -1, X_NULL},
	{cursor_all, keypad_all, fkey_notvt220, 0, X_NULL, 0, "@7"},
+	{cursor_default, keypad_all, fkey_default, 0, _VTE_CAP_CSI "F", -1, X_NULL},
+	{cursor_app, keypad_all, fkey_default, 0, _VTE_CAP_SS3 "F", -1, X_NULL},
	{cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
};

@@ -1255,6 +1259,8 @@
	gboolean fkey = FALSE;
	/* Determine if this key gets modifiers. */
	switch (keyval) {
+	case GDK_KEY (Home):
+	case GDK_KEY (End):
	case GDK_KEY (Up):
	case GDK_KEY (Down):
	case GDK_KEY (Left):
diff -uNr a/src/vte.c b/src/vte.c
--- a/src/vte.c	2013-06-08 15:46:27.000000000 +0400
+++ b/src/vte.c	2014-12-27 00:52:06.000000000 +0300
@@ -5391,7 +5391,8 @@
			break;
		case GDK_KEY (KP_Insert):
		case GDK_KEY (Insert):
-			if (modifiers & GDK_SHIFT_MASK) {
+			if (modifiers & GDK_SHIFT_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				if (modifiers & GDK_CONTROL_MASK) {
					vte_terminal_paste_clipboard(terminal);
					handled = TRUE;
@@ -5401,7 +5402,8 @@
					handled = TRUE;
					suppress_meta_esc = TRUE;
				}
-			} else if (modifiers & GDK_CONTROL_MASK) {
+			} else if (modifiers & GDK_CONTROL_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				vte_terminal_copy_clipboard(terminal);
				handled = TRUE;
				suppress_meta_esc = TRUE;
@@ -5411,7 +5413,8 @@
		case GDK_KEY (KP_Up):
		case GDK_KEY (Up):
			if (modifiers & GDK_CONTROL_MASK 
-                            && modifiers & GDK_SHIFT_MASK) {
+                            && modifiers & GDK_SHIFT_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				vte_terminal_scroll_lines(terminal, -1);
				scrolled = TRUE;
				handled = TRUE;
@@ -5421,7 +5424,8 @@
		case GDK_KEY (KP_Down):
		case GDK_KEY (Down):
			if (modifiers & GDK_CONTROL_MASK
-                            && modifiers & GDK_SHIFT_MASK) {
+                            && modifiers & GDK_SHIFT_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				vte_terminal_scroll_lines(terminal, 1);
				scrolled = TRUE;
				handled = TRUE;
@@ -5430,7 +5434,8 @@
			break;
		case GDK_KEY (KP_Page_Up):
		case GDK_KEY (Page_Up):
-			if (modifiers & GDK_SHIFT_MASK) {
+			if (modifiers & GDK_SHIFT_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				vte_terminal_scroll_pages(terminal, -1);
				scrolled = TRUE;
				handled = TRUE;
@@ -5439,7 +5444,8 @@
			break;
		case GDK_KEY (KP_Page_Down):
		case GDK_KEY (Page_Down):
-			if (modifiers & GDK_SHIFT_MASK) {
+			if (modifiers & GDK_SHIFT_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				vte_terminal_scroll_pages(terminal, 1);
				scrolled = TRUE;
				handled = TRUE;
@@ -5448,7 +5454,8 @@
			break;
		case GDK_KEY (KP_Home):
		case GDK_KEY (Home):
-			if (modifiers & GDK_SHIFT_MASK) {
+			if (modifiers & GDK_SHIFT_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				vte_terminal_maybe_scroll_to_top(terminal);
				scrolled = TRUE;
				handled = TRUE;
@@ -5456,7 +5463,8 @@
			break;
		case GDK_KEY (KP_End):
		case GDK_KEY (End):
-			if (modifiers & GDK_SHIFT_MASK) {
+			if (modifiers & GDK_SHIFT_MASK
+			    && terminal->pvt->cursor_mode != VTE_KEYMODE_APPLICATION) {
				vte_terminal_maybe_scroll_to_bottom(terminal);
				scrolled = TRUE;
				handled = TRUE;

 

Теперь в gnome-terminal в mcedit заработали столь необходимые Ctrl-Ins, Shift-Ins, Ctrl-Home, Shift-Home, Ctrl-End, Shift-End, Shift-PgDn, Shift-PgUp.

 

 

На всякий случай и .rpm исправленный (пришлось его еще и gzip-ом, а то форум не принимает):

vte3_0.34.6_3.el7.centos.x86_64.rpm.gz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь в gnome-terminal в mcedit заработали столь необходимые Ctrl-Ins, Shift-Ins

А для чего они могут быть ещё необходимы, кроме как для copy/paste?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для чего они могут быть ещё необходимы, кроме как для copy/paste?

Для него самого, только для выделенного в mcedit текста (шифт+стрелки, или по F3), и между несколькими запущенными mcedit, а не для глобального гномовского клипборда - оттуда paste можно сделать через правую кнопку мыши, или через отдельный key binding, которые по умолчанию Ctrl-C/Ctrl-V (Ctrl-C приходится откручивать по любому, и какой гейтс придумал этот нужнейший сигнал на мгновенный выход из приложения, SIGINT, сделать "copy"), и надо это раз в году, из чего то гуёвого копировать в нормальное (т.е. консольное) приложение.

 

То есть, чтобы ( http://linux.die.net/man/1/mcedit ) работало вот это (я к этому насмерть привык, а в mcedit пишу 90% всего кода, касаемого софта под линукс (как и Far manager, когда дело касается написания дров под windows)):

In addition to that, Shift combined with arrows does text highlighting (if supported by the terminal): Ctrl-Ins copies to the file ~/.mc/cedit/cooledit.clip, Shift-Ins pastes from ~/.mc/cedit/cooledit.clip, Shift-Del cuts to ~/.mc/cedit/cooledit.clip, and Ctrl-Del deletes highlighted text. - заметьте, свой "clipboard", основанный на файле ~/.mc/cedit/cooledit.clip, а не гуёвый глобальный, на который жестко были привязки Ctrl/Shift-Ins/Del в libvte.

 

В общем, все это многолетняя привычка писать код в Far Manager и в mcedit - и, когда, я выделяю текст, но он не копируется по Ctrl-Ins / Shift-Ins, или вставляется нечто неожиданное, это жестоко бесит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я отучал gnome-terminal отъедать F10 у Midnight commander-а.

Создал файл ~/.gtkrc-2.0.mine следующего содержания:

А шо, в третьегномовском терминале из настроек эту возможность выпилили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А шо, в третьегномовском терминале из настроек эту возможность выпилили?

Глючит она. Там есть "Enable the menu accelerator key", но, от нее зависит, "проваливается" ли код Shift-F10 в терминал, или нет, но меню выскакивает всегда, независимо от этой настройки. Мне это жить не мешает, я не пользуюсь этой комбинацией клавиш, поэтому я это не открутил (старый метод откручивания, приведенный АНТОХой, не работает). Подозреваю, что это там же, в libvte.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для него самого, только для выделенного в mcedit текста (шифт+стрелки, или по F3), и между несколькими запущенными mcedit, а не для глобального гномовского клипборда - оттуда paste можно сделать через правую кнопку мыши, или через отдельный key binding, которые по умолчанию Ctrl-C/Ctrl-V (Ctrl-C приходится откручивать по любому, и какой гейтс придумал этот нужнейший сигнал на мгновенный выход из приложения, SIGINT, сделать "copy"), и надо это раз в году, из чего то гуёвого копировать в нормальное (т.е. консольное) приложение.

Я выкрутился иначе: научил mc копировать в CLIPBOARD:

[~/.config/mc/ini]

clipboard_store=xclip -i -selection clipboard
clipboard_paste=xclip -o -selection clipboard

, и велел xterm-у (я пользуюсь им, а не gnome-terminal) вставлять из CLIPBOARD:

[~/.Xresources]

*VT100.Translations: #override \
  Shift <Key>Insert: insert-selection(CLIPBOARD) \n\

Получилось вообще шикарно, mc работает не с PRIMARY, а с CLIPBOARD. Можно нажать Ctrl+Insert в mc, переключиться во что-то графическое, и вставить там. И наоборот. И ничего не надо патчить и перекомпилировать:)

Сейчас попробовал - с gnome-terminal такой фокус не прошёл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с xterm (да и с Konsole) и у меня все без патчей работает само по себе, и система, принятая в mcedit, на 100% устраивает, так как ничего из mc в гуи копировать не приходится, а бывает только наоборот - из браузера, например, в исходник.

 

но, gnome-terminal мне просто на вид приятнее :), так бы тоже в xterm работал бы.

 

И, как Вы правильно заметили, в gnome-terminal без такого патча фокус не пройдет, так как комбинация Shift/Ctrl-Ins в mcedit все равно не дойдет (патч именно это делает, чтобы код этой комбинации пришел приложению, а не был обработан внутри самого терминала), чтобы Вы там бы не конфигурировали в mc/ini

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...