4

Я настраиваю оба столбца gnome-terminal и xterm (я до сих пор не выбрал, какой из них я буду использовать), и у меня есть пара проблем, которые я хотел бы исправить:

  • область ввода кажется меньше (меньше столбцов), чем область отображения
  • набранный текст не переносится на следующую строку, когда он достигает конца - он просто продолжается обратно на той же строке, перезаписывая подсказку

(Я установил настраиваемое приглашение bash с PS1 на случай, если это уместно)

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.1 (wheezy)
Release:    7.1
Codename:   wheezy
$ echo $TERM
xterm
$ stty -a
[peter@mine ~] $ stty -a
speed 38400 baud; rows 52; columns 126; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; 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
$[peter@mine ~] $ # the column width only goes up to here ------------------------------------------------>

результаты одинаковы как в xterm, так и в gnome-терминал 3.4.1.1

и, как вы можете видеть, вывод команды stty -a идет прямо до края экрана, в то время как ввод текста не идет так далеко.

Я обнаружил, что могу получить желаемый результат, установив в столбцах очень большое число, например:

$ stty cols 1800

это решает обе проблемы. Правильный ли путь решения этой проблемы? Будет ли это "сломать" какой-либо выход из программ? До сих пор я пробовал top и stty -a и это кажется нормальным.

больше информации в соответствии с просьбой в комментариях

я обнаружил, что, если я cat ввести данные в файл, то столбцы на самом деле растягивают всю ширину окна терминала:

[peter@mine applications] $ cat > /tmp/asd
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssqqqqqqqqqqqqqqqq
qqqq

Означает ли это, что на самом деле bash ограничивает количество столбцов, а не терминал? если это так, то как изменить количество столбцов в Bash?

2 ответа2

8

Скорее всего, вы не правильно экранировали код ANSI в определении вашего приглашения в ~/.bashrc

Например, PS1 что-то вроде:

    PS1='\033[1;33m>\033[0m '

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

Размещение квадратных скобок перед escape-символом ascii и после терминатора определения исправит это, что приведет к ожидаемому переносу:

    PS1='\[\033[1;33m\]>\[\033[0m\] '      

Т.е. \033 становится \[\033 и m становится m\]

(Я узнал это сам некоторое время назад здесь).

1

Как уже указывалось в комментариях, ваш вопрос - даже после "уточнения" - неясен и "неполон". Например, вы все еще не говорите, ссылаетесь ли вы на xterm Program/Application/Terminal-emulator или на тип терминала (т. Е. На значение, которое вы получаете при вводе $ TERM. Независимо от того, я попытаюсь дать или, по крайней мере, чтобы направить вас в правильном направлении.

Учитывая тот факт, что вы настроили приглашение bash, я предполагаю, что это будет причиной вашей проблемы. Есть ряд соответствующих обсуждений, ссылок, информации о частых проблемах переноса строк, с которыми сталкиваются пользователи после настройки bash. Похоже, что в большинстве случаев это проблема с выходом цветовых кодов ANSI ; еще несколько вопросов и ответов по stackoverflow.

Опять же, я не уверен, как вы выполнили настройку (этот вывод stty мне ничего не говорит), так как для этого есть несколько вариантов; однако, если вы сделали резервную копию настроек и файлов по умолчанию, это должно быть вашим первым действием. В качестве альтернативы, вы также можете попробовать shopt -s checkwinsize чтобы убедиться, что он выбран, или просто shopt -p выдаст вам список опций bash:-s:selected или -u:unselected. Кроме того, проверьте свои справочные страницы, чтобы получить представление о некоторых из этих вещей, особенно если это ваша оболочка для входа.

Наконец, постарайтесь быть более конкретным, задавая вопросы; или, что еще лучше, сделайте поиск ранее похожих вопросов, которые, возможно, уже задавались.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .