1

Несколько раз у меня Mac OS X Terminal находилась в странном состоянии, в результате чего переводы строки не интерпретируются, как обычно. Как будто они делают часть перевода строки, а не возврат каретки. Например, я обычно вижу что-то вроде этого:

% git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#

Но когда Терминал заканчивается в этом странном режиме, я получаю это:

% git status
# On branch master
                  # Untracked files:
                                    #   (use "git add <file>..." to include in what will be committed)
                                                                                                      #

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

(Я не знаю, уместно ли это, но я обычно получаю это при выходе из Emacs. Время от времени я делаю что-то не так и случайно выбираю другую команду вместо C-x C-c . Мои пальцы отменяют это, прежде чем я даже понял, что происходит, поэтому я не знаю, какой это может быть команда, но как только emacs ушел, терминал находится в этом забавном новом режиме.)

2 ответа2

3

Когда эта проблема возникнет снова, введите в терминале следующую команду:

reset

Это должно сбросить настройки терминала по умолчанию и, надеюсь, решить вашу проблему.

2

Когда ранние терминалы (и принтеры) получали символ LF (ASCII 10), они перемещали курсор (печатающую головку) на следующую строку, не перемещая ее по горизонтали. Таким образом, последовательность символов / слов, разделенных только LF, сформирует то, что похоже на лестничную клетку. Это то, что вы видите.

Когда программе требуется перейти к началу следующей строки, они устанавливают CR (ASCII 13) и LF на терминал. CR перемещает курсор в начало текущей строки, а LF переходит на следующую строку.

Драйвер tty в системах Unix имеет дополнительную постобработку вывода, которая обычно включена, которая преобразует выходной LF в комбинацию CR и LF.

Проблема, которую вы видите, состоит в том, что у tty, который использует ваш эмулятор терминала, отключена эта часть пост-обработки вывода. Вы можете повторно обработать выходную постобработку и преобразование LF → CR LF с помощью этой команды:

stty opost onlcr

Этот тип обработки вывода часто отключается в «полноэкранных» программах на основе терминалов, чтобы они лучше контролировали курсор. Таким образом, если такая программа дает сбой (или уничтожается) таким образом, что она не может восстановить настройки tty, то вы, скорее всего, окажетесь в «режиме ступеньки». Так как есть другие настройки tty, которые могут быть затронуты после такого сбоя, вам может понадобиться что-то более тщательное для очистки эффектов. Вы можете сбросить текущие настройки tty на разумные значения по умолчанию с помощью следующей команды:

stty sane

Команда reset делает большую часть того, что делает stty sane , а также отправляет различные управляющие последовательности сброса / инициализации в эмулятор терминала.

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