Размещение курсора в позиции мыши в терминале с помощью Option+Click в терминале не работает.

Вопрос или проблема

В терминале Ubuntu я могу увидеть, что размещение курсора в позиции мыши в терминале с помощью Option+Click работает.

То же самое работает в других терминалах Linux с Mac. Например, ссылка: https://www.bollyinside.com/articles/place-cursor-at-mouse-position-on-terminal-with-an-optionclick/

Есть ли способ достичь этого в Ubuntu?

По своей сути терминалы работают так, что курсор “принадлежит” и контролируется приложением, которое запущено внутри. Курсор обозначает следующее место, куда будет выведен вывод приложения.

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

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

Любая такая эвристика, очевидно, имеет очень ограниченное применение и, вероятно, часто будет сбиваться. Как терминал может узнать, какое приложение запущено? Используя хаки вроде копания в /proc или аналогах, что перестает работать через ssh, tmux или другие аналогичные слои? Если известно, какое приложение запущено (например, оболочка или текстовый редактор), как узнать, в каком состоянии это приложение (например, выполняет ли оболочка команду или ждет вашего ввода команды? Если последнее, возможно, она находится в специальном режиме readline? Если это текстовый редактор, редактируете ли вы файл или находитесь в другом режиме (например, командной строке, диалоге и т.д.)? Есть ли разделение экрана, и нужно ли вам переходить на другую панель?) Начнем ли мы обучать терминал поведению некоторых известных приложений? Безнадежно.

Неудивительно, что только очень немногие эмуляторы терминала стараются предложить вам эту функцию удобства. Я еще не пробовал эту функцию в них, но я практически уверен, что нашел бы массу багов за считанные минуты. Невозможно надежно узнать, какие нажатия клавиш необходимо сгенерировать, чтобы ответом приложения было перемещение курсора в запрашиваемую вами точку. Любая работа, которую предлагает вам терминал, обязательно является хрупким предположением.

Я не уверен, что вы имеете в виду под “терминалом Ubuntu”, но, судя по тегам вопроса, вы, вероятно, имеете в виду GNOME Terminal. Как и большинство терминалов, GNOME Terminal не пытается решить невозможное.

Вы должны познакомиться с мощными функциями приложений, которые вы используете. Поддерживает ли приложение мышь? Возможно, вам нужно это включить, и тогда приложение будет получать клики мыши и, скорее всего, перемещать курсор туда. Если нет, есть ли какие-то горячие клавиши, которые перемещают курсор на более дальние расстояния? Например, Ctrl+Left, Ctrl+Right для прыжков по словам? Более новые версии bash и readline могут прыгать вверх и вниз к следующей визуальной строке, что я лично связал с Ctrl+Up, Ctrl+Down. И так далее. Нет “универсального решения” для перемещения курсора.

Терминал rxvt-unicode перемещает курсор в позицию мыши при Shift-Click.

Это будет работать точно так же, как Option-Click в терминале Mac.

.

Ответ или решение

Теория

Проблема, связанная с невозможностью установки курсора в нужную позицию в терминале Ubuntu с помощью комбинации Option+Click, объясняется базовой архитектурой работы терминалов и приложений, которые в них работают. Терминал, как оболочка, управляет отображением данных, но непосредственное управление курсором осуществляется программой, запущенной внутри терминала. Например, когда вы работаете в shell или текстовом редакторе, именно эти приложения определяют, где в следующий раз появится курсор.

Этот подход подразумевает, что изменение позиции курсора "извне", т.е. через интерфейс терминала, может привести к отображению некорректной информации на экране. Следовательно, терминалы не поддерживают такую функциональность без интеграции с работающими приложениями. Теоретически, для того чтобы правильно установить курсор в нужную позицию, терминал должен "знать", какая команда должна быть синтезирована для каждого приложения, чтобы курсор переместился.

Примеры

На практике можно встретить некоторые терминалы, которые пытаются реализовать подобный функционал путем создания панели синтетических событий клавиатуры. К примеру, rxvt-unicode позволяет перемещать курсор в терминале при помощи Shift+Click. Тем не менее, такая реализация имеет множество ограничений: она зависит от текущего состояния приложения, может не работать через сессии SSH, и перестать функционировать при работе через tmux и другие "промежуточные" слои.

Интересно, что некоторые терминалы или эмуляторы терминалов, запущенные на MacOS, могут предлагать эту функцию, предоставляя возможность перемещения курсора с помощью Option+Click. Однако, эти функции часто ограничиваются возможностями контекста приложений и специфичностью терминала.

Применение

Изначально нужно прояснить, что понимание работы вашего текущего программного окружения является ключом к решению вопроса. Почти все профессиональные приложения имеют собственные средства перемещения курсора. Например, популярные командные оболочки или редакторы (bash, zsh, vim, emacs) поддерживают управление курсором через клавиатурные сокращения.

Для конкретного вызова нужного действия можно использовать такие базовые комбинации клавиш как Ctrl+Left/Right для перемещения по словам или, в ряде случаев, подключить поддержку мыши для таких приложений, как vim или emacs.

Если вы используете GNOME Terminal, который является стандартным в Ubuntu, то вы должны знать, что это приложение не поддерживает данный функционал. Однако, при помощи дополнений и плагинов, вы можете расширить функциональность текстовых редакторов, настроив их на работу с мышью. В emacs, например, вы можете настроить .emacs файл так, чтобы он лучше работал с событиями мыши.

В ряде случаев, стоит рассмотреть возможность использования альтернативных терминалов, таких как rxvt-unicode, который поддерживает перемещение курсора по щелчку мыши с определенными комбинациями клавиш. Это решение будет идентично поведению терминала на Mac с опцией Option+Click.

Заключение

Перемещение курсора внутри терминала по щелчку мыши — это функциональность, которая сильно зависит от интеграции с работающим приложением и архитектурой терминала. В большинстве случаев, такие задачи решаются на уровне самих приложений через изучение их встроенных возможностей и клавиатурных сокращений. На практике, если вам необходима данная функция, исследуйте возможность использования терминалов с поддержкой соответствующих расширений или интеграции с системами, которые вы используете.

Оцените материал
Добавить комментарий

Капча загружается...