Обновить
11
0

Пользователь

Отправить сообщение
Да, конечно, всюду внутри useMagic s/magic/f/ — cпаcибо, исправил!
Рад, что смог быть полезен.
Провёл небольшой рефакторинг кода: избавился от макросов там, где они были не к месту, что позволило в динамике создавать новые обработчики команд (например, при custom-изации); упростил и обобщил, что заметил.

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

Статью, соответственно, немного поправил.
— Модуль должен требовать «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, то ожидается, что курсор сдвинется влево, однако на практике это не так.

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

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

В общем кажется получилось без правки C-кода — на оверлеях. Лежит здесь, статья (продолжение) тут.
Удалит временные пробелы только после 4 фиксированных движений
Не совсем так, точнее пока совсем не так ;)
Удалит только после выхода из режима или сохранении буфера.
Вот как раз по причине сложности отслеживания возможных действий (и их последствий), после которых надо/ненадо удалять пробелы пока сделал именно так.

Много лишних модификаций текста (undo в таком режиме превращается в кошмар).
Есть такое дело, можно попробовать поиграться с отключением undo на вставку пробелов, но боюсь это может привести к неожиданным (и неприятным) последствиям… в общем «будем посмотреть»…

Короче, если такое и делать, то это уже надо править сишный код Emacs.
Хотелось принципиально без этого обойтись, раз уж «конструктор редакторов» то будь любезен так сказать соответствовать… ;)

Идея любопытная, но так её реализовывать нельзя, разве что с елиспом поиграться.
Ну в основном хотелось именно «прощупать» до какой степени можно «настроить под себя». Хотя на практике при «сырцовых» файлах в пределах нескольких тысяч строк тормозов не заметил, вполне себе комфортно работается, но сама идея о замусоривании буфера в принципе конечно не сильно радует…

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность