LINUX.ORG.RU

[emacs] Победить C-RET в КОНСОЛЬНОМ emacs

 


0

1

Проблема в том, что в Emacs, запущенном в gnome-terminal как emacs -nw (т.е. в консольном режиме), комбинации C-RET почему-то воспринимаются как C-j. Как это лечить? google знает о проблеме немного, но все, что я нахожу, говорит о том, что это не лечится. Может гуру знают рецепты?

★★★★★

> C-RET почему-то воспринимаются как C-j

man ascii : ret - это C-m

C-j

может, C-m?

Как это лечить?

Костыль можно прикрутить, но смысла мало, к тому же c-ret используется не столь часто, аки например m-ret

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

> Нет, не работает. C-RET невозможно имитировать с помощью C-m

И не должен, был намек на то что RET - это C-m, терминал не поймет C-RET. Так доступнее?

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

Как mcedit понимает C-PgDown если emacs этого не может понять? Значит есть все-таки способ заставить комбинации Ctrl+что-то_особое работать!

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

> Как mcedit понимает C-PgDown если emacs этого не может понять?

А при чем тут PgDown? Запусти cat и посмотри на коды, которые генерируют эти сочетания. PgDown и C-PgDown отличаются кодами. C-RET и RET — нет.

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

> PgDown и C-PgDown отличаются кодами.

PgDown - ведь esc-последовательность. Как к ней Ctrl прикрутить мне не очень непонятно. Вот M- (Alt-) - другое дело.

to TC:

Тут наверное надо посмотреть как ведет себя mcedit в различных терминалах, может `gedit' ему посылает что-нибудь алтернативное.

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

> PgDown - ведь esc-последовательность. Как к ней Ctrl прикрутить мне не очень непонятно.

Там просто генерируются разные esc-последовательности. Это же эмулятор терминала решает, какую последовательности символов выдавать на какие сочетния клавиш с модификаторами. В принципе, наверное, можно его так настроить, чтобы C-RET тоже отдавалась как некая esc-последовательность, ну и в редакторе биндинг соответствующим образом поправить.

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

> Там просто генерируются разные esc-последовательности.

Портабельные между различными терминалами?

если нет, то да:

C-RET тоже отдавалась как некая esc-последовательность

И возражение ТС относительно C-PgDown приобретает больший вес.

ps... настроить вроде можно, в том же urxvt `Shift-SPC' у меня передает `C-x SPC' (для emacs и less)

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

> Портабельные между различными терминалами?

Нет.

Впрочем, всё оказалось сложнее. Например, в чистой консоли у End и C-End коды совпадают. Но mc их различает. Значит curses (или на чем там mc крутится? на slang вроде) при запуске переключает режимы генерации кодов на терминале.

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

Даже интересно стало: установил mc. В чистой консоли коды одинаковые, а как отличить, что `mсedit' их различает?

В `urxvt' же C-(Pg..|End) ничего не передает.

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

> ^[[5~ vs ^[[5^

В этом случае их (prior и С-prior) и emacs различает.

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

> Например, в чистой консоли у End и C-End коды совпадают. Но mc их различает. Значит curses (или на чем там mc крутится? на slang вроде) при запуске переключает режимы генерации кодов на терминале.

IIRC, он переключает консоль в «сырой» режим. Такой трюк проходит только в Linux.

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

> C-RET и RET

Также различаются в mc. Проверь!

unanimous ★★★★★
() автор топика

Ну и да, интерес мой не праздный: я хочу эффективнее использовать emacs по сети, а граф. интерфейс тормозит. C-RET забиндена в maxima-mode на подачу всей строки на выполнение. Я могу, конечно, перебиндить, но это означает много хлопот, потому что такая комбинация не единственная, скажем C-Home, C-End, C-. C-, тоже не работают

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

> а как отличить, что `mсedit' их различает?

End, S-End, C-End в виртуальной консоли даёт одинаковый код. В mсedit: End — переход в конец строки, S-End — выделение до конца строки, C-End переход на последнюю строку.

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

> C-Home, C-End

Будут различаться и так.

я хочу эффективнее использовать emacs по сети

А монтировать сетевые ресурсы?

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

> А монтировать сетевые ресурсы?

Это костыль, раз. Во-вторых, консольный emacs грузится намного быстрее. В третьих, это emacs на рабочей машине, а не локальный.

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

> Это костыль, раз.

Да-да... и plan9 - сплошь костыли.

Во-вторых, консольный emacs грузится намного быстрее.

emacs --daemon

В третьих, это emacs на рабочей машине, а не локальный.

Аргумент, правда в том случае, если железо неподходящее или окружение нельзя/сложно такое же водрузить.

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

Хорошо, считай это моим иррациональным желанием: я хочу работать в консоли и желаю, чтобы эта работа шла столь же эффективно, как и в иксах. Для этого мне нужны горячие клавиши, которые (по возможности) не отличаются от иксовых, а также возможность не перебиндивать over 9000 их на все случаи жизни; я считаю, что большинство умолчаний и так хороши

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

> Собственно, мне интересно, существует ли способ это сделать или все безнадежно.

Если без костылей, то рискну предположить, что вряд ли. (У меня, например, в виде костылей S-SPC и М-S-SPC). Недаром у многих сочетаний есть аналоги (в том же `org-mode'), для этих можно и небольшие костыли к gnome-terminal прикрутить.

А так вроде можно упаковать в, скажем, esc-последовательность, а на удаленном emacs-е ее интерпретировать: тогда не надо будет конечные сочетания менять.

Надо было сразу с консольного начинать), а от хорошего отвыкать сложно.

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

> Надо было сразу с консольного начинать), а от хорошего отвыкать сложно.

Э-эх! X-овый emacs всем хорош, но по сети его гонять — сплошное мучение.

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

>Ну и да, интерес мой не праздный: я хочу эффективнее использовать emacs по сети, а граф. интерфейс тормозит. C-RET забиндена в maxima-mode на подачу всей строки на выполнение.

Ну, собственно, тут уже все сказано, и мнение о невозможности, к которому ты пришел, верно.

потому что такая комбинация не единственная, скажем C-Home, C-End, C-. C-, тоже не работают

C-Home, C-End у меня работают в эмуляторе TERM=xterm, например, но не работают в TERM=linux.

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