Jump to content

    

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) про эти сочетания ничего нет.

ГДЕ ЕЩЕ?????

Share this post


Link to post
Share on other sites

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

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

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

class "*" binding "NoKeyboardNavigation"

Сработало.

Share this post


Link to post
Share on other sites

У меня это находится в .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" с маленькой буквы написать, то оно, при запуске терминала из консоли, ругается, что ошибка, то есть, читается...

Share this post


Link to post
Share on other sites

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

 

Проблема в коде 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

Share this post


Link to post
Share on other sites
Теперь в gnome-terminal в mcedit заработали столь необходимые Ctrl-Ins, Shift-Ins

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

Share this post


Link to post
Share on other sites
А для чего они могут быть ещё необходимы, кроме как для 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, или вставляется нечто неожиданное, это жестоко бесит.

Share this post


Link to post
Share on other sites
Я отучал gnome-terminal отъедать F10 у Midnight commander-а.

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

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

Share this post


Link to post
Share on other sites
А шо, в третьегномовском терминале из настроек эту возможность выпилили?

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

Share this post


Link to post
Share on other sites
Для него самого, только для выделенного в 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 такой фокус не прошёл.

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this