New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
editor, feature request: virtual word wrap (as in windows notepad) #201
Comments
I believe this could be done as plugins or macros, but not should be default feature of editor. Also this can be done with fold utility. |
can not find here maybe this plugin can be ported easily? |
btw, now using please note that far editor refuses to paste output of fold command without "-s" argument. |
it's called flexibility. |
there is AutoWrap plugin in FAR's sources: https://sourceforge.net/p/farmanager/code/HEAD/tree/branches/far2/plugins/autowrap/ |
Seems it can not be enabled per-file (only per-extention?), but having it is much better then having none! http://forum.farmanager.com/viewtopic.php?f=4&t=4001&sid=f439b62f7c96218016cda78ad0c5969e |
Closing, as autowrap is ported. |
Still an issue. Autowrap is about wrapping a line by adding newline characters, but EditWrap does a different thing (the thing all modern editors actually do) - it wraps dynamically (or we can call it "virtually"), not inserting newline characters into a file, just altering how it is shown to user. Like "word wrap" option in windows notepad. Here is the code (seems to be Far2-compatible): And discussion thread: |
Ну в общем собрать-то и запустить его у меня получилось, только вот функционал там всё же не совсем тот, что требуется |
Порыл апстримный форум и офигел: да, нормального переноса по словам, по ходу, до сих пор нет. Есть отдельные костыли как вот эта штука выше, но вот так, чтоб открыл файл с длинными строками, отредактировал в режиме переноса строк, сохранил - и длинные строки не порезались, такого нет. Жесть. Ну то есть это осуществимо через EditWrap, конечно, только надо:
Правда, новые переносы строк, добавляемые через Auto wrap, будут всё ещё настоящими переносами строк, а не виртуальными. И существование такой штуки как буфер обмена никак не учитывается. В общем, такой себе экспириенс :) Теоретически можно попробовать собрать то, что нужно, из того, что есть:
Вот тогда получится как в windows notepad или любой textarea в интернетах. И даже с дополнительными плюшками. |
Ой, там всё смешнее ещё. Переносы auto wrap'а таки убираются при unwrap, но только если они внутри блока, до этого подвергнувшегося wrap'у (и то почему-то не всегда). А если это новый абзац - не убираются. И ещё autowrap не работает, если дописывается текст в середине строки, а не в конце. И ещё autowarp не должен добавлять новую строку, если текущая строка - "виртуальная", т.е. без настоящего перевода строки в конце. А должен вместо этого просто перекидывать слово и курсор на следующую строку (исключение - последняя строка файла). А дальше смотреть, не вылезла ли следующая строка за лимит, ну и так до конца абзаца (т.е. первого не виртуального переноса строки). И при удалении символа из виртуальной строки, кстати, тоже - смотреть, не поместится ли туда теперь первое слово следующей строки, и перекидывать, если поместится, ну и так по до конца абзаца тоже. Ну, раз в принципе "виртуальные" переносы строк в редакторе сделать можно (editwrap же делает), это всё должно быть вполне себе реализуемо. |
О, я научился виртуальные переносы строк Editwrap'а вставлять Autowrap'ом :) Нужно после 210 строки в Autowrap.cpp дописать такое:
И тогда добавленные Autowrap'ом переносы строки будут unwrap'иться корректно EditWrap'ом :) И, кажется, я понял, как это колдунство с виртуальными переносами строк в EditWrap работает: если StringEOL пустой, значит, перенос строки виртуальный. И при unwrap такие строки будут склеены. Способ кривой, конечно - по идее, внутри оно должно храниться именно целиковыми строками, а не кусочками с пометкой "здесь порезано", чтобы всякое разное обращение из плагинов по номеру строки-символа корректно работало. Ну и Column/Position справа сверху теряют смысл. При этом правильный способ создаст адок с трансляцией экранных позиций в реальные и обратно. |
Ок, я научил AutoWrap работать, даже если ввод идёт в середине строки. И даже не ломаться при попытке сделать undo/redo. Теперь нужен rewrap остатка абзаца (вместо механического добавления новой виртуальной строки), если строка - не последняя в абзаце. И такой же rewarp в случае удаления символов. |
@elfmz а подскажи хорошую IDE с отладчиком для экспериментов с far2l/плагинами под linux mint, а то, возможно, всё в самом фаре делать - не самый удобный способ, да и без точек останова и возможности подглядывать в переменные как-то всё слишком мучительно сложно получается :)) |
да я вощемто все в фаре и делаю, а точки останова.. настоящие мужчины ими не пользуются :) |
понятно...) значит, по старинке, через принты в консоль))) благо я теперь знаю, как отладочный вывод смотреть)) |
Finally found first TUI app with good word wrap support, Turbo. It even may be easier to add clipboard and full keyboard support through the far2l terminal extensions to this tool than to write good word wrap for the far2l's editor. Btw, Turbo is made on a top of Scintilla (component used by well-known notepad++). I suspected that it would be probably easier to take word wrap from some kind of GUI component than to write it for TUI app from scratch :) (also this thing is made using Turbo Vision, wow, it works on Linux and with full Unicode support!)
|
There is also another TUI editor capable of doing proper word wrap, called tilde. Even having limited (localhost-only, xclip-like) clipboard support. |
Now experiminting on adding clipboard support to it using far2l terminal extensions (those extensions are ingenious thing!). Extended keyboard input already working :) |
@elfmz а можно подсказочку, пожалуйста :) Как устроена система _start_marker/_exit_marker в обработке APC? Что-то не могу разобраться, зачем она нужна, как работает и почему вот такой тестовый код
приводит вот к такой ошибке
из-за чего запускается в терминале far2l через раз? |
эффект прикольный, но вообще включать экстеншены надо в raw режиме, отключив эхо, и дожидаясь (или нет) ответа, ща скину примерный код |
ну вот както так, по сути копипаста из far2l допиленная чтоб компилялось на С а не С++: |
Спасибо! Работает, починился запуск через раз и ругань на маркеры. А что это за маркеры такие всё же и почему инициализация экстеншнов влияет на них? RAW и без эха я пробовал, не влияло. Ожидание ответа помогало в изолированном примере, но не помогало внутри большой сложной аппы, причину не нашел. PS: Очень интересно приделывать экстеншны к чему-то, far2l'ом не являющимся. С putty так же захватывающе было. |
Ну, там когда команда шеллу отправляется - формируется скрипт содержащий отправку старт-маркера потом команда потос стоп-маркера. Раньше эти маркеры были просто рандомной строкой которая парсингом вычленялась, а сейчас - просто особый подвид \x1b_far2l..\x07 команд. |
А маркеры эти нужны чтобы поскипать лишний вывод и понять когда собственно закончилось исполнение юзерской команды. Ведь шелл - он сам по себе живет. |
Resume of the current state. We do not have full featured word wrap ("as in html textareas") in internal editor yet, but there are external editors with such function: turbo and tilde. Alternative options: |
Здравствуйте. Подскажите, пожалуйcта, есть ли возможность отключить autowrap во внутреннем редакторе? |
Solution in: #948 |
Now clipboard works in turbo not only through x11, but also in a clean console, through far2l terminal extensions or through osc 52. Finally there is a fairly convenient editor with line wrapping. Most hotkeys are like in far2l, so you don’t need to relearn. Теперь буфер обмена работает в turbo не только через x11, но и в чистой консоли, через расширения терминала far2l или через osc 52. Теперь, наконец, есть достаточно удобный редактор с переносом строк. Большинство хоткеев как в фаре, переучиваться не надо. |
No description provided.
The text was updated successfully, but these errors were encountered: