Автор Гілка: Невелика проблема з командним рядком, readline/inputrc.  (Прочитано 14844 раз)

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Можливо хтось стикався і вирішив її, і зекономить мені час. :)

В режимі UTF-8 і локалі uk_UA.UTF-8 як текстовій консолі, так і в xterm, чомусь при редагуванні довгих команд пропадає можливість перенестися на початок команди. Так, скажімо, при введенні

ls /usr/X11R6/lib/X11/fonts

можна вільно пересувати курсор за допомогою стрілок всередині тексту команди допоки не спробуєш комбінацію Ctrl-a або Home. Після Ctrl-a курсор чогось зупиняється посеред команди (на X11R6), а введення Ctrl-e переносить його на зо десять пробілів далі кінця команди.

Ctrl-a:
$ ls /usr/X11R6/lib/X11/fonts

Ctrl-e:
$ ls /usr/X11R6/lib/X11/fonts         _

Система Slackware 13.37. Ось вміст /etc/inputrc:

# Enable 8 bit input.
set meta-flag On
set input-meta On
set convert-meta Off
set output-meta On

# Set various nice escape sequences:
"\eOd": backward-word
"\eOc": forward-word

# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert

# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line"\e[F": end-of-line

Спробуйте будь ласка вищенаведені маніпуляції у власномій консолі/терміналі.

Підозра падає на readline, яка чомусь починає плутатись з довжиною ланцюжка в юнікодовому режимі. (А може і ні.) В Slackware 13.0 такої проблеми, наскільки я пам'ятаю, не було.
« Змінено: 2011-11-09 11:29:57 від tech »

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
можна вільно пересувати курсор за допомогою стрілок всередині тексту команди допоки не спробуєш комбінацію Ctrl-a або Home. Після Ctrl-a курсор чогось зупиняється посеред команди (на X11R6), а введення Ctrl-e переносить його на зо десять пробілів далі кінця команди.
У мене такого не спостерігається, але це дуже схоже на неправильно встановлене PS1. Спробуйте зробити PS1='' і подивитися, чи це не виправить ситуацію. Якщо проблема зникне, потрібно усі недруковні символи у PS1 огорнути у \[ \] (bash). Для zsh — не пам’ятаю, здається щось на кшталт %{ %}.

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Дуже дякую. В точку. Дійсно, додання \[ \] навколо \e[31m \e[0m в PS1 виправляє ситуацію. Щось я знову відстав від життя. :) Не знав про цей механізм "екранування екранованих послідовностей".