Как стать автором
Обновить

Комментарии 3

Поигрался, уже лучше, довольно удобно, ведёт себя ожидаемо.
Чуть позже мб посмотрю что конкретно на уровне кода можно сделать, пока сходу по юзабилити вот где недоработки:

— Модуль должен требовать «require 'cl» и «require 'hl-line». Советую вообще работу модуля всегда проверять на голом емаксе (--no-init-file), собственно я так нехватку зависимостей и обнаружил.

— По-прежнему модуль предполагает, что юзер двигает курсор базовыми движениями (next-line ит.д.).

— По-прежнему вставка и удаление пробелов идут в историю модификаций. Я бы попытался как-то откатывать эти операции через undo и затем вообще выкидывать их из истории undo (иначе засоряется и цепочка redo).

— Prefix argument съедается (C-u 100 C-n переносит на 1 строку вниз, а не на 100).

— Что-то не то иногда с поведением, движения C-n и C-p добавляют лишние пробелы (чего ИМХО не должно происходить ни при каких обстоятельствах). Воспроизводится на буфере с 2 строками: «aaa» и «b», если встать в конец строки «aaa» и понажимать C-n C-p многократно. (emacs-24.4.1 x86_64-slackware-linux-gnu)

— Если встать на пустое место (на вставленные пробелы) и сделать backward-char, то ожидается, что курсор сдвинется влево, однако на практике это не так.
— Модуль должен требовать «require 'cl» и «require 'hl-line»

fixed

— По-прежнему модуль предполагает, что юзер двигает курсор базовыми движениями (next-line ит.д.).

Вообще-то он так и задумывался — для базовых перемещений курсора «стрелками» (на символ, на строку, на страницу и т.п.).
Причём я принципиально не пытаюсь переопределить сами функции (например, при помощи :after) — только remap. А вот перечень «перехватываемых» команд можно расширить — есть 3 готовых макроса, при помощи которых это делается для типовых команд в одну строку (см. код):
  • wpers--def-vert — для вертикальных перемещений;
  • wpers--def-left — для перемещений влево (сжатие/удаление оверлея);
  • wpers--def-right — для перемещений вправо (содание/расширение оверлея).


По-прежнему вставка и удаление пробелов идут в историю модификаций. Я бы попытался как-то откатывать эти операции через undo и затем вообще выкидывать их из истории undo (иначе засоряется и цепочка redo).

В undo идёт только добавление «легализованных» пробелов «и это правильно» (с) — они и при ручном вводе попадают.
Немного поправил — возможно в пред. версии после undo/redo было похоже на лишние пробелы — оверлей подвисал иногда…

— Prefix argument съедается (C-u 100 C-n переносит на 1 строку вниз, а не на 100).

Это да — упростил на первом этапе, исправил — теперь «старые» команды вызываются через call-interactively и соответственно параметры подхватываются.

— Что-то не то иногда с поведением, движения C-n и C-p добавляют лишние пробелы (чего ИМХО не должно происходить ни при каких обстоятельствах). Воспроизводится на буфере с 2 строками: «aaa» и «b», если встать в конец строки «aaa» и понажимать C-n C-p многократно. (emacs-24.4.1 x86_64-slackware-linux-gnu)

Сколько не пытался не получается воспроизвести :( [GNU Emacs 24.5.1 (i686-pc-mingw32)]…
Кстати, можно визуализировать оверлейные пробелы вызовом wpers-overlay-visible (без параметров — переключатель вкл/выкл, можно явно t — вкл (символ точки по центру), иначе будет отображать заданный символ) или «кастомизацией» wpers-pspace — может в какой-то др. ситуации стабильно воспроизводится?..

— Если встать на пустое место (на вставленные пробелы) и сделать backward-char, то ожидается, что курсор сдвинется влево, однако на практике это не так.

Это к вопросу о «других командах» (см. выше) — добавил обработку.

Ещё добавил поддержку крысы, чисто для феншуя…

Провёл небольшой рефакторинг кода: избавился от макросов там, где они были не к месту, что позволило в динамике создавать новые обработчики команд (например, при custom-изации); упростил и обобщил, что заметил.

вынес на уровень настроек (custom) команды, которые обрабатываются режимом (см. wpers--remaps) и список команд, уничтожающих оверлей (см. wpers-ovr-killing-funs).

Статью, соответственно, немного поправил.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории