LINUX.ORG.RU

[Достало!][Ненависть!][Ненависть!][Ненависть!] Хочу нормальных Ctrl+C, Ctrl+V, Ctrl+X в Konsole


0

1

Меня окончательно достало, что в консоле и MC работа с буфером обмена идет через дикое сочетание клавиш. Я уже просто устаю контролировать и вхолостую нажимать привычные клавиши. Хочу нормальных Ctrl+C, Ctrl+V, Ctrl+X !!!

Ctrl+Ins, Shift+Ins, Ctrl+Del - фтопку. Так же фтопку разные сочетания клавиш для работы в MC и в консоле. Типа для консоли нужно одно забиндить, а в MC пользоваца другим, ибо забинденное сочетание вовнутрь виртуального терминала пролазить не будет. Достала эта тупость. Достали F5 и F8 в MC чтоб с буфером обмена работать.

Достало, что Ctrl+C - это прекращение работы программы. Ну есть же специальное сочетание клавиш Ctrl+Break.

Я уже готов править и KDE и Konsole, и писать вместо глючащего с кириллицей xclip свой костыль, и фиксить под себя MC.

Только чтоб это делать, мне вначале нужно выяснить принципиальный вопрос: как можно "освободить" сочетание Ctrl+C? Как перевесить с него действие на Ctrl+Break? Что происходит при нажатии Ctrl+C?

Я правильно понимаю, что сама консольная программа нажатие именно Ctrl+C не отслеживает, а следит за появлением сигнала SIGINT? А этот сигнал генерирует оболочка (например, bash) при нажатии Ctrl+C? И если где-то в оболочке настроить отправку этого сигнала на другое сочетание клавиш, то сочетание Ctrl+C будет свободным для дальнейшего использования?


Представляю что с тобой будет, если ты познаешь человеческую русскую раскладку, которую создавали более 100 лет, а потом одна ЧСВшнутая компания все сломала за 10.

linux4ever
()
Ответ на: комментарий от linux4ever

> Представляю что с тобой будет, если ты познаешь человеческую русскую раскладку, которую создавали более 100 лет, а потом одна ЧСВшнутая компания все сломала за 10.

Ничего не будет, я на ЭВМ "Микроша" пять лет на раскладке для пишущих машинок сидел (www.artlebedev.ru/kovodstvo/sections/105/), и поверь, знаю что такое хорошо, и что такое плохо.

xintrea
() автор топика

Хех, могу себе представить сколько ты раз вылетал по ошибке из программы )

Но это цветочки. Была как-то клава, у которой вместо вроде delete была кнопка power...

Блин сколько раз я оставался сидеть огорошенным перед вырубленным компом - не сосчитать.

gkrellm
()
Ответ на: комментарий от gkrellm

>Но это цветочки. Была как-то клава, у которой вместо вроде delete была кнопка power...

Это ещё цветочки...

http://i004.radikal.ru/0906/98/fdd962603fa4.jpg

Видите там справа-сверху красную кнопку? Она вызывала немаскируемое прерывание выхода в монитор :)

KRoN73 ★★★★★
()
Ответ на: комментарий от xintrea

И шо таки там копирование было через Ctrl+C ?

wfrr ★★☆
()

Есть два основных подзода к назначению горячих клавиш: vi и emacs. И bash, и tcsh позволяют использовать любой подход. В чём проблема — не понятно совершенно…

anarquista ★★★★★
()

Итак, как обычно, на лоре нет людей, разбирающихся в предмете. Поэтому им нечего сказать по-существу. Поэтому по-существу буду говорить я.

Рассказываю, как «освободить» клавиши Ctrl+C, Ctrl+V, Ctrl+X на уровне оболочки. -------------------------------------------------------------------------------------------------------

Вначале надо запустить команду

# stty -a

и посмотреть, какие клавиши заняты. Сия команда выведет на консоль примерно такой текст:

speed 38400 baud; rows 35; columns 110; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

из него видно, что заняты комбинации Ctrl+C и Ctrl+V, а Ctrl+X свободна. Если писать точнее, то мы видим, что

- При нажатии комбинации Ctrl+C происходит действие intr. Действие intr означает отправку сигнала SIGINT.

- При нажатии комбинации Ctrl+V происходит действие lnext. Это действие означает, что следующий вводимый символ надо воспринимать как символ, а не как команду (Последовательное нажатие Ctrl+V и Ctrl+C пропихнёт в терминал символ ^C, имеющий код 03h).

Что мы должны сделать в такой ситуации, чтобы освободить Ctrl+C и Ctrl+V? Вначале подумать, а нужны ли нам действия intr и lnext. Действие intr вроде как нужно. А возникала ли у вас хоть раз необходимость в действии lnext? Нет? Значит, ненужно.

Почитав невнятную доку по stty, можно понять, что чтоб освободить Ctrl+V, можно воспользоваться командой

stty lnext undef

Теперь осталось решить, что делать с Ctrl+C. Однозначно, данное действие нам нужно, и его надо перевешивать на другую комбинацию клавиш. Но на какую? Разумно было бы перевесить на Ctrl+Break. Но как обозначается Break, в доке по stty не написано. Так же не написано, может ли вообще stty работать с не-ASCII символами (коды 0-127). Да и вообще непонятно, работает ли stty с символами или с кодами клавиш. Судя по всему, stty оперирует именно абстракцией «символ». А если так, то символа Break нет как понятия (хотя, возможно, есть символ Pause, который как раз завязан на ту же клавишу, тут нужно разбираться).

Поэтому, пока никто не подсказал решения для Ctrl+Break, перевесим Ctrl+C на другое сочетание. Вначале хотел перевесить на Ctrl+0 (Ctrl+Ноль), но оказалось, что stty этого сделать не может. Вообще, создается впечатление, что stty может перенастраиваться только на 26 букв латинского алфавита, комбинацию с Ctrl которых можно задавать десятичными кодами 1-26 (например, «stty intr 10» задаст для действия intr комбинацию Ctrl+J, т.к. J-десятая буква в латинском алфавите). Если задавать коды не из диапазона 1-26, терминал начинает неимоверно глючить. Поэтому я вынужден выделить под действие intr комбинацию Ctrl+T (мнемотически легко запомнить, T - это «terminate»).

Выполняем команду

stty intr ^T

и после нее сразу прерывание программы будет работать по Ctrl+T. Можно проверить на любой подходящей программе cat, top, и т.д.

Теперь эти команды можем поместить в .bashrc в домашней директории, и терминал с этого момента будет запускаться со свободными клавишами Ctrl+C, Ctrl+V, Ctrl+X.

xintrea
() автор топика
Ответ на: комментарий от KRoN73

> Видите там справа-сверху красную кнопку? Она вызывала немаскируемое прерывание выхода в монитор :)

Да, это жостко! В Микроше такое дело было гораздо продуманнее

http://phantom.sannata.ru/konkurs/2008/img/kt0803/12.jpg

выход в монитор - узкая черная кнопка слева в самом верху. Ошибиться сложно.

xintrea
() автор топика
Ответ на: комментарий от xintrea

Ну, это в Микроше обычный reset, насколько я понимаю. Немаскируемых прерываний на нём не было :)

...

Прикинь, Reset поставить на клаву... Скажем, вместо левой кнопки Win :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Прикинь, Reset поставить на клаву... Скажем, вместо левой кнопки Win :)

Ну, в Микроше результат нажатия кнопки "Сброс" не такой страшный, как в том же Спектруме. Память не очищалась, просто запускался монитор. Прогу можно было опять запустить без загрузки с магнитофона, главное знать стартовый адрес.

Если сидел в редакторе, можешь после сброса продолжать работать с того же места, все равно редактируемый текст в явном виде в памяти хранится. Эдакая ОС Фантом :)

xintrea
() автор топика
Ответ на: комментарий от xintrea

>Ну, в Микроше результат нажатия кнопки "Сброс" не такой страшный, как в том же Спектруме.

На Спектруме тоже ресет перехватывался, если ПЗУ копировалось в ОЗУ и там прописывался соответствующий адрес :)

KRoN73 ★★★★★
()
Ответ на: комментарий от opensuse

я бы тоже жал, да вот только ctrl+shift - переключение раскладки у меня

PayableOnDeath
()
Ответ на: комментарий от xintrea

> Поэтому я вынужден выделить под действие intr комбинацию Ctrl+T (мнемотически легко запомнить, T - это "terminate").

Уж лучше (по моему) Ctrl+Q. Для Ctrl+T сильно пальцы растопыривать приходится, а "аварийно" прервать программу зачастую нужно как можно быстрее.

one_more_hokum ★★★
()

А у меня первый компутер был УКНЦ (клава примерно как у этого вашего Микроши), так я потом пару клав разбил на своём 486, пока не научился не лупить по клавишам со всего размаху :3

Gvorcek48
()
Ответ на: комментарий от one_more_hokum

> Уж лучше (по моему) Ctrl+Q. Для Ctrl+T сильно пальцы растопыривать приходится, а "аварийно" прервать программу зачастую нужно как можно быстрее.

На комбинации Ctrl+Q в стандартном терминале висит действие "start". Что оно делает - понимаю смутно. "Will restart the output after stopping it". Видимо, можно остановить вывод и продолжить его (действие "start"). Было актуально на медленных терминалах, когда выводимый листинг заполнял экран за пару секунд, а не как сейчас - десять экранов в секунду.

Так что, если действие "start" вам ненужно, вешайте SIGINT на Ctrl+Q, проблем нет.

xintrea
() автор топика
Ответ на: комментарий от xintrea

> xintrea Что оно делает - понимаю смутно.

А-яй яй счас расскажу что делает - это ОЧЕНЬ полезная кнопочка. Но сначала спасибо за stty, за ^V - не знал что ^C можно послать. Классное описание, добавлю:

Есть пара кнопок Ctrl-Q и Ctrl-S. Наверняка на одну из них вы случайно нажимали даже не зная об этом. И тогда у вас по непонятной причину повисал терминал :). Ctrl-S останавливает вывод Ctrl-Q запускает его. (Передадим привет software flow control в модемах). Очень полезно иногда приостановить вывод в терминале. Ещё иногда ползуюсь в ситуации когда шелл-скрипт в цикле вызывает какую-то программу, и ctrl-c закрывает именно ту программу, и так до бесконечности. Тогда ctrl-s, ctrl-c, ctrl-q

gena2x ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.