Eshell для имен файлов RTL

По умолчанию Emacs 24 может работать с арабским, ивритом и другими языками справа налево (RTL). У меня есть многоязычные эмуляторы терминов, которые обрабатывают это в X, но я хотел бы использовать eshell внутри emacs, чтобы увидеть неанглийские имена файлов символов (а у меня их много). Когда я использую eshell, символы не в правильном порядке, и это излагает тарабарщину. (setq-default bidi-display-reordering t) (который по умолчанию) не имеет значения, очевидно.

Это возможно?

1 ответ

Решение

Я полагаю, что вы получаете двойное изменение порядка с помощью emacs + mlterm, и вам нужно отключить его.

Ваш скриншот показывает в верхней половине mlterm успешно обнаруживает построчное базовое направление и переупорядочивает символы. И Emacs 24 по умолчанию переупорядочивает bidi в терминале, предполагая, что LTR termianl не является двунаправленным. Объединение обоих результатов приводит к двойному переупорядочению ABC -> CBA -> ABC.

У вас есть 2 варианта:

  1. Отключите bidi в mlterm (по крайней мере, во время работы emacs, не знаете, как это автоматизировать).

  2. Отключите bidi в emacs (по крайней мере, при работе под mlterm). Т.е. установите для bidi-display-reordering значение nil, а не t.

Я ожидаю, что первый будет работать лучше. mlterm может дать вам только тупой слой "bidi display", который может сбить с толку поверх редактора; Emacs дает вам "редактирование двунаправленного текста", когда кто-то задумывается о том, как должно работать все взаимодействие.

  • В частности, параллельные "окна" в emacs должны хорошо работать, когда emacs выполняет биди, и ужасно ломаться, когда mlterm.
  • OTOH, копирование-вставка мыши, вероятно, работает лучше, когда mlterm делает биди.
    Если emacs отправляет переупорядоченные символы, это то, что копирует выбор мыши mlterm. Emacs в основном может взять на себя мышь с xterm-mouse-mode но (непроверенное предположение) он работает с терминальными координатами и потребует дополнительной работы, чтобы сопоставить их с текстом логического порядка.

PS Я не уверен, почему конечный результат выровнен по правому краю, так как кажется, что перед ним пустая строка, поэтому Emacs должен рассмотреть его как новый абзац, решить, что это RTL, и отправить выровненный по правому краю текст в mlterm, и я ожидаю mlterm, чтобы затем повернуть линию вспять, выровняв ее по левому краю. Я, наверное, что-то упустил.

Другие вопросы по тегам