Как выполнить команду при запуске urxvt

2052
Yitzy

Urxvt не поддерживает использование панели I в качестве курсора. Один из способов обойти это - послать команду echo -n -e "\033[6 q".

Это работает до тех пор, пока я отправляю команду каждый раз, когда открываю urxvt, что я бы предпочел не делать.

Я пытался заставить urxvt выполнить это при запуске с разной степенью успеха.

Я пытался использовать .bashrc, с exec echo -n -e "\033[6 q". Это не имело никакого эффекта.

Я использую i3, поэтому в следующий раз я попытался установить keysym для urxvt для запуска с командой, а также с использованием -holdаргумента, но все, что произошло, было то, что я не смог использовать терминал, так как он был задержан.

Единственное, что мне удалось сделать, это имело некоторый успех - это установить keyym в .Xresources:

URxvt.keysym.C-Escape: command: \033[6 q

Это сработало, но означает, что мне нужно нажимать Ctrl-Escape каждый раз, когда я запускаю терминал.

Что я хотел бы знать, так это то, есть ли какой-нибудь способ выполнить эту команду всякий раз, когда я запускаю urxvt, и в то же время позволяю мне фактически использовать терминал?

2
Почему вы использовали `exec echo. , .` в вашем `.bashrc`? Не видя всего этого трудно сказать наверняка, но это не правильно Eric Renouf 7 лет назад 0
да уж. Я пытался все и вся. Я был почти уверен, что это ничего не даст, но я решил, что это стоит того. Yitzy 7 лет назад 0

3 ответа на вопрос

1
Thomas Dickey

Если вы хотите поместить это в свой .bashrcфайл, он будет немного улучшен:

  • Вы должны убедиться, что строка направлена ​​на терминал
  • Кроме того, оболочка должна быть интерактивной (в случае, если какой-либо сценарий источника .bashrc)
  • echoс -eопцией есть проблемы с переносимостью. Используйте printf.

Собираем их вместе и пишем в стандартную ошибку (потому что она не буферизируется):

[ -n "PS1" ] && [ -t 2 ] && printf '\033[6 q' >&2 

urxvt реализует DECSCUSRуправляющую последовательность, задокументированную в управляющих последовательностях XTerm :

CSI Ps SP q Set cursor style (DECSCUSR, VT520). Ps = 0 -> blinking block. Ps = 1 -> blinking block (default). Ps = 2 -> steady block. Ps = 3 -> blinking underline. Ps = 4 -> steady underline. Ps = 5 -> blinking bar (xterm). Ps = 6 -> steady bar (xterm). 

Обратите внимание, что коды 5 и 6 являются функциями xterm.

Эта последовательность управления не упоминается на странице руководства в Интернете urxvt (7), но отмечена в записи журнала изменений :

9.19 Sun Oct 27 17:16:07 CET 2013 ... - add support for the set cursor style (DECSCUSR) control function. 

также исходный код показывает это (см. set_cursor_style), а исходный код страницы руководства показывает эту функцию. Это было обновлено в 2014 году для кодов 5 и 6 .

Дальнейшее чтение:

Также вам следует проверить тип вашего терминала. Если вы используете только rxvt и его варианты, `[" $ "= rxvt] && ...` должно сработать, иначе вы, вероятно, захотите использовать `case" $ TERM "в ; rxvt *) ... ;; xterm *) ... ;; esac` или аналогичный. Curt J. Sampson 7 лет назад 0
0
Adrift
echo -en "\x1b[\x35 q" # changes to blinking vertical bar echo -en "\x1b[\x36 q" # changes to steady vertical bar 

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

РЕДАКТИРОВАТЬ: Чтобы быть более информативным, я не уверен, могу ли я связать что-нибудь, или где вы получили эти коды, но я протестировал их в urxvt в моем .bashrc, и это то, что я уже использовал в xterm, и они работают, я могу использовать все формы курсора, если вам нужно все остальное дай мне знать.

0
Das_Sams

Если кто-то, как я, искал ответ на вопрос, а не конкретную проблему парня, который спросил, ответ таков:
urxvt [your other options - e.g. fancy colors...] -hold -e <your command>
если вы опустите опцию, -holdтерминал закроется, когда команда будет выполнена.
пример:
urxvt -fg white -bg black -tr -sh 40 -fade 40 -sl 500 -cr yellow -e calc
запускает urxvt с помощью калькулятора (хорошая точность на gentoo) и закрывает его, когда я закрываю калькулятор. Я использую это с горячей клавишей.
другой пример:
urxvt -fg white -bg black -tr -sh 40 -fade 40 -sl 500 -cr yellow -hold -e echo -e Hello you greatest hacker\n
приветствовал бы нарциссического пользователя, пока он открывает окно терминала и остается открытым. Я не использую последний пример.

Похожие вопросы