Разбиение на строки и объединение строк

GenuZ
Posts: 12
Joined: 21.10.2022 11:58

Разбиение на строки и объединение строк

Post by GenuZ »

Никак не могу найти как разбить выделение на строки фиксированной ширины. С переносом по словам, а не по символам.
Как при применении Ctrl+U (Вид --> Переключить перенос по словам), только с реальным изменением текста.

Ну и, соответственно, как их потом объединить в одну строку с учётом тех же слов (оставляя между ними пробел).

Интересует аналог функций Ctrl+I и Ctrl+J в Notepad++. Но там за выбраную ширину для разбиения на строки берётся установленная видимость строк (регулируемая увеличением шрифта по Ctrl+колёсико), а хотелось бы фиксированную (опциональную!) настройку необходимой ширины строки. С дефолтом, скажем, в стандартные 80 символов.

Уже измучался, ковыряясь в настройках и плагинах, как это замутить... Подобное раньше делалось в редакторе Far Manager (уже не помню, может тоже с каким-то плагином). И это очень полезно при редактировании обычного текста.

Если такое настроить при текущих возможностях нельзя, прошу считать это за фичреквест. Как расширение функционала меню "Правка --> Строчные операции" с опцией в конфиге на требуемую дефолтную ширину строки. С возможностью выбирать для этого хоткеи.

Это последнее, что заставляет меня скакать между разными редакторами, чтобы отредактировать обычный file_id.diz.
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

команды в CudaExt plugin:
- Re-wrap/split lines by margin (он спросит по какой колонке делать)
- Re-wrap/split lines by margin, with defaults
обратка:
- Join lines

(команды ищутся в Палитре Команд. там же по F9 задать хоткеи)
GenuZ
Posts: 12
Joined: 21.10.2022 11:58

Post by GenuZ »

main Alexey wrote:команды в CudaExt plugin:
- Re-wrap/split lines by margin (он спросит по какой колонке делать)
- Re-wrap/split lines by margin, with defaults
- Join lines
Оно всё как-то странно работает. В том же Notepad++ (и в Far с плагином) концы длинных строк (за пределами лимита) просто переносятся на следующую. И так пока не останется куска длиннее лимита. На выходе - красивый абзац.

Функции, которые вы подсказали выше в CudaText делают странное:
1. Они изменяют отступ самой строки (куска строки). А если выбрать опцию Keep indent, то наоборот - делают отступ во всех строках.
Если это применять к абзацу текста, книги - получается полная дичь.
2. Если выделить несколько строк и применить split, то он смешает эти строки в кучу, но правильно обрезанную кучу. Для нормального результата приходится применять Re-wrap/split на каждой отдельной строке... Что с большим документом - ещё то удовольствие!

Примеры:

Оригинальный текст:
Основные возможности программы:
- Неограниченное (ну почти) количество наблюдателей, для проверки интересующих страниц с определенными интервалами времени;
- Уведомления об изменениях на отслеживаемых страницах;
- Подсветка изменений произошедших в содержимом страницы;
- Хранение истории произошедших изменений на странице;
- Авторизация на интересующих сайтах и проверка содержимого страниц, предназначенных для авторизованного пользователя;
- Отслеживание изменений конкретных элементов на страницах и обрабатка HTML-кода этих элементов с помощью регулярных выражений;
- Группировка наблюдателей и фильтрация списка отображения;
- Режим работы из папки (portable).
Результат CudaExt:
Основные возможности программы: - Неограниченное (ну почти) количество
наблюдателей, для проверки интересующих страниц с определенными интервалами
времени; - Уведомления об изменениях на отслеживаемых страницах; - Подсветка
изменений произошедших в содержимом страницы; - Хранение истории произошедших
изменений на странице; - Авторизация на интересующих сайтах и проверка
содержимого страниц, предназначенных для авторизованного пользователя; -
Отслеживание изменений конкретных элементов на страницах и обрабатка HTML-кода
этих элементов с помощью регулярных выражений; - Группировка наблюдателей и
фильтрация списка отображения; - Режим работы из папки (portable).
Результат в Notepad++ (правильный, желаемый):
Основные возможности программы:
- Неограниченное (ну почти) количество наблюдателей, для проверки интересующих
страниц с определенными интервалами времени;
- Уведомления об изменениях на отслеживаемых страницах;
- Подсветка изменений произошедших в содержимом страницы;
- Хранение истории произошедших изменений на странице;
- Авторизация на интересующих сайтах и проверка содержимого страниц,
предназначенных для авторизованного пользователя;
- Отслеживание изменений конкретных элементов на страницах и обрабатка HTML-кода
этих элементов с помощью регулярных выражений;
- Группировка наблюдателей и фильтрация списка отображения;
- Режим работы из папки (portable).
Подскажите, есть ли возможность достигнуть поведения функции как у Notepad++ - сохранения структуры отступов и списка , структуры текста как в книге, читабельности результата?
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

Послал ссылку на это обсуждение к автору CudaExt, надеюсь он найдет время (у него много работы).
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

Пробую сам поправить это.
сделайте такую правку и проверьте.
в файле (cudatext)/py/cuda_ext/cd_ext_find_repl.py, найти:

Code: Select all

        _rewrap(margin, cmt_sgn, save_bl, rng[0], rng[1], True)
заменить на:

Code: Select all

        for nline in reversed(range(rng[0], rng[1]+1)):
            _rewrap(margin, cmt_sgn, save_bl, nline, nline, False)
GenuZ
Posts: 12
Joined: 21.10.2022 11:58

Post by GenuZ »

main Alexey wrote: сделайте такую правку и проверьте.
Строчки уже не смешивает, но всё равно косячит с отступами второй и последующих строк в абзаце. Оставляет им тот же отступ, что и у первой строки абзаца.

Было:

Code: Select all

  Приложение для отображения и удаления скрытых устройств, если они соответствуют выбранному типу устройств и/или классу устройств одним нажатием кнопки мыши.
 - Windows по умолчанию не показывает скрытые устройства. Windows покажет скрытые устройства, только если выполняется два пункта: переменной devmgr_show_nonpresent_devices добавлено значение 1; стоит галочка "Показать скрытые устройства". Ghostbuster отображает и удаляет все скрытые устройства, которые соответствуют собственным критериям выбора. Можно выбрать или отменить выбор классов, или устройств при помощи контекстного меню правой кнопки мыши в списке устройств. Только скрытые устройств и устройства, которые удовлетворяют критериям отбора будут удалены при нажатии кнопки "Remove Ghosts". Все остальные устройства остаются нетронутыми. Предупреждение: Используйте инструмент с осторожностью и только тогда, когда знаете, что делаете! 
 - Enumerates all devices installed on the computer and detects the ghosted ones, offering support for adding or deleting classes and devices Everything that’s connected to your computer can be viewed from a particular panel. Some of them might be hidden in order to protect your system, but you can use GhostBuster Portable in order to enlist all of them along with sets of related details. 
 - The advantages of a portable application This is the portable edition of GhostBuster, a small application that shows all devices installed on the computer, even ghosted ones. Since there is no installation involved, you can drop the executable file anywhere on the hard disk and just click it to run.
Стало:

Code: Select all

  Приложение для отображения и удаления скрытых устройств, если они
  соответствуют выбранному типу устройств и/или классу устройств одним нажатием
  кнопки мыши.
 - Windows по умолчанию не показывает скрытые устройства. Windows покажет
 скрытые устройства, только если выполняется два пункта: переменной
 devmgr_show_nonpresent_devices добавлено значение 1; стоит галочка "Показать
 скрытые устройства". Ghostbuster отображает и удаляет все скрытые устройства,
 которые соответствуют собственным критериям выбора. Можно выбрать или отменить
 выбор классов, или устройств при помощи контекстного меню правой кнопки мыши в
 списке устройств. Только скрытые устройств и устройства, которые удовлетворяют
 критериям отбора будут удалены при нажатии кнопки "Remove Ghosts". Все
 остальные устройства остаются нетронутыми. Предупреждение: Используйте
 инструмент с осторожностью и только тогда, когда знаете, что делаете! 
 - Enumerates all devices installed on the computer and detects the ghosted
 ones, offering support for adding or deleting classes and devices Everything
 that’s connected to your computer can be viewed from a particular panel. Some
 of them might be hidden in order to protect your system, but you can use
 GhostBuster Portable in order to enlist all of them along with sets of related
 details. 
 - The advantages of a portable application This is the portable edition of
 GhostBuster, a small application that shows all devices installed on the
 computer, even ghosted ones. Since there is no installation involved, you can
 drop the executable file anywhere on the hard disk and just click it to run.
Послал ссылку на это обсуждение к автору CudaExt
Спасибо!
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

да, вижу. надо в py/cuda_ext/cd_ext_find_repl.py,
найти блок "def _rewrap(", в нем найти блок "for ext in range(1,100):" и убрать его вот так:

Code: Select all

    if False and save_bl:
        for ext in range(1,100):
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

обновил плагин CudaExt в аддонах. проверьте. если еще что-то не то, welcome.
GenuZ
Posts: 12
Joined: 21.10.2022 11:58

Post by GenuZ »

main Alexey wrote:если еще что-то не то, welcome.
Вот ещё что обнаружил. Разбиение на строки не работает с выделением строк вертикальным блоком.

Юзкейс такой:
1. Есть текст со строками без отступов. Которые начинаются с первой колонки.
2. Я ставлю каретку в начало строки и растягиваю её на несколько строк вниз. И добавляю пару пробелов для будущих отступов в начале каждого абзаца.
3. Затем жму Shift+End и получаю выделение до конца всех выделенных строк, на которые я растягивал каретку в п.2.
4. Из такого положения (когда строки выделены вертикальным блоком, начиная с третьей колонки слева) разбиение на строки не срабатывает.
5. Но если снять описанное выделение и заново выделить строки обычным способом, абзацами - всё работает.
6. Примечательно, что если способом из п.1-4 выделить одну строку - разбиение тоже сработает прекрасно.
main Alexey
Posts: 2245
Joined: 25.08.2021 18:15

Post by main Alexey »

вообще это уже даже не вертикальное выделение а произвольные мулти-каретки. потому что Shift+End дает выделения до конца строк любой длины. и тут уже "CudaExt разбиение" отказывается, оно для такого не работает. чисто-вертикальное выделение уже не помню как получить.

в консоли такая проверка на "вертикальное" -
ed.get_sel_mode()
дает 0 - это SEL_NORMAL. 1 - SEL_COLUMN.
Post Reply