Провёл небольшой рефакторинг кода: избавился от макросов там, где они были не к месту, что позволило в динамике создавать новые обработчики команд (например, при 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, то ожидается, что курсор сдвинется влево, однако на практике это не так.
Это к вопросу о «других командах» (см. выше) — добавил обработку.
Удалит временные пробелы только после 4 фиксированных движений
Не совсем так, точнее пока совсем не так ;)
Удалит только после выхода из режима или сохранении буфера.
Вот как раз по причине сложности отслеживания возможных действий (и их последствий), после которых надо/ненадо удалять пробелы пока сделал именно так.
Много лишних модификаций текста (undo в таком режиме превращается в кошмар).
Есть такое дело, можно попробовать поиграться с отключением undo на вставку пробелов, но боюсь это может привести к неожиданным (и неприятным) последствиям… в общем «будем посмотреть»…
Короче, если такое и делать, то это уже надо править сишный код Emacs.
Хотелось принципиально без этого обойтись, раз уж «конструктор редакторов» то будь любезен так сказать соответствовать… ;)
Идея любопытная, но так её реализовывать нельзя, разве что с елиспом поиграться.
Ну в основном хотелось именно «прощупать» до какой степени можно «настроить под себя». Хотя на практике при «сырцовых» файлах в пределах нескольких тысяч строк тормозов не заметил, вполне себе комфортно работается, но сама идея о замусоривании буфера в принципе конечно не сильно радует…
вынес на уровень настроек (custom) команды, которые обрабатываются режимом (см. wpers--remaps) и список команд, уничтожающих оверлей (см. wpers-ovr-killing-funs).
Статью, соответственно, немного поправил.
fixed
Вообще-то он так и задумывался — для базовых перемещений курсора «стрелками» (на символ, на строку, на страницу и т.п.).
Причём я принципиально не пытаюсь переопределить сами функции (например, при помощи :after) — только remap. А вот перечень «перехватываемых» команд можно расширить — есть 3 готовых макроса, при помощи которых это делается для типовых команд в одну строку (см. код):
В undo идёт только добавление «легализованных» пробелов «и это правильно» (с) — они и при ручном вводе попадают.
Немного поправил — возможно в пред. версии после undo/redo было похоже на лишние пробелы — оверлей подвисал иногда…
Это да — упростил на первом этапе, исправил — теперь «старые» команды вызываются через call-interactively и соответственно параметры подхватываются.
Сколько не пытался не получается воспроизвести :( [GNU Emacs 24.5.1 (i686-pc-mingw32)]…
Кстати, можно визуализировать оверлейные пробелы вызовом wpers-overlay-visible (без параметров — переключатель вкл/выкл, можно явно t — вкл (символ точки по центру), иначе будет отображать заданный символ) или «кастомизацией» wpers-pspace — может в какой-то др. ситуации стабильно воспроизводится?..
Это к вопросу о «других командах» (см. выше) — добавил обработку.
Ещё добавил поддержку крысы, чисто для феншуя…
Удалит только после выхода из режима или сохранении буфера.
Вот как раз по причине сложности отслеживания возможных действий (и их последствий), после которых надо/ненадо удалять пробелы пока сделал именно так.
Есть такое дело, можно попробовать поиграться с отключением undo на вставку пробелов, но боюсь это может привести к неожиданным (и неприятным) последствиям… в общем «будем посмотреть»…
Хотелось принципиально без этого обойтись, раз уж «конструктор редакторов» то будь любезен так сказать соответствовать… ;)
Ну в основном хотелось именно «прощупать» до какой степени можно «настроить под себя». Хотя на практике при «сырцовых» файлах в пределах нескольких тысяч строк тормозов не заметил, вполне себе комфортно работается, но сама идея о замусоривании буфера в принципе конечно не сильно радует…