Форум » [x]Harbour » Hbedit - текстовый редактор (продолжение) » Ответить

Hbedit - текстовый редактор (продолжение)

alkresin: Довел, наконец, свой текстовый редактор до того состояния, когда можно показать его общественности. Я начал писать его сначала как замену Memoedit(), но потом увлекся) и решил сделать что-то помощнее, как нормальный редактор для повседневного использования. Мне приходится в течение дня работать и под виндами, и под Линуксом - использую Far и mc, соответственно. Иногда Vim - но к некоторым вещам в нем так и не привык. Но хочется иметь что-то одно для всех платформ - не слишком навороченный, но чтоб было все что надо. Сегодня выложил на github: https://github.com/alkresin/hbedit. F9 (или мышкой по соответствующей надписи) - главное меню. В ближайших планах: - Lower/Upper для utf8 - новые режимы подсветки ( директивы препроцессора и пр. ) - скобки - подсветка парных и переход на парные - undo - решить проблемы с табуляцие - сохранение истории открытых файлов, поиска - написать help (hbedit.help) Если есть идеи для реализации - буду рад услышать.

Ответов - 215, стр: 1 2 3 4 5 6 7 8 9 10 11 All

alkresin: не изменило от пред. поста, т.е. нет горизонтальной полосы-разделителя Точно, oParent устанавливается после вызова TEdit():New(), по нему нельзя проверить. Значит, сработает другое условие: o:y1 == o:aRectFull[1]+1 Такое сочетание работает, а через Ctrl-1 или Ctrl-~ нет. Ctrl-1, Ctrl-2,... в Harbour в консоли вообще не работают - нет реакции на эти нажатия, не генерируется событие.

SergKis: alkresin пишет Ctrl-1, Ctrl-2,... в Harbour в консоли вообще не работают - нет реакции на эти нажатия, не генерируется событие. Понятно. А в WVT ? Значит, сработает другое условие: o:y1 == o:aRectFull[1]+1 Горизонтальная строка появляется со смещением (где должно, в обычном режиме, находится "F9-Menu" ) и лишней информацией "Harbour plugins: Alt-D ...". Хотелось бы пустую полосу в ширину окна

alkresin: А в WVT ? Да. Моя сборка hbedit в нем построена. Сделаю gt hwgui - там будет работать). Горизонтальная строка появляется со смещением (где должно, в обычном режиме, находится "F9-Menu" ) и лишней информацией "Harbour plugins: Alt-D ...". Горизонтальная разделительная строка появляется на месте строки статуса, потому что это она и есть. Какое это смещение? "Harbour plugins: Alt-D ..." появляется только вначале, потом там пусто - это предупреждение, что для открытого в окне файла подключен Harbour плагин. Вы можете это отключить, если в :bNew пропишете o:bStartEdit := Nil или установите свой bStartEdit.


SergKis: alkresin пишет Вы можете это отключить, если в :bNew пропишете o:bStartEdit := Nil или установите свой bStartEdit. Сделал[pre2] TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bStartEdit := Nil , ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } [/pre2] результат такой же, как был описан ранее. Пример, своя сборка, тут (смещение вправо линии на длину "F9-Menu", так понимаю) https://my-files.ru/zn3jdl Если убираю в ini ;plugin=plug_prg_init.hrb то горизонтальная линия разделения окна пропадает совсем А можно сделать, что то типа oEdit:lStatusLine := .T.\.F. ?

SergKis: PS Разговор о командах Ctrl-w,v - нормальное разделение Ctrl-w,s - не нормальное разделение

alkresin: SergKis пишет: Пример, своя сборка, тут (смещение вправо линии на длину "F9-Menu", так понимаю) https://my-files.ru/zn3jdl Файл по ссылке удален - пишут, вредоносное ПО)

SergKis: alkresin пишет Файл по ссылке удален - пишут, вредоносное ПО) Да, удалили, но не сразу, я сначала проверил ссылку. Тут https://TransFiles.ru/pzqj9

SergKis: PS в bkInit я убрал oe:bStartEdit := Nil, т.к. с ним при Ctrl-w,s совсем нет горизонтальной разд. строки, а так она есть, но из plugin init. Если комментируем в ini (как выше), то опять совсем нет горизонтальной разд. строки

SergKis: PPS И как для меня, plugin=plug_prg_init.hrb в таком виде, нужен как пример, т.е. в работе ( Far Alt+F4 ) он отключен

alkresin: Ну так вы же сами убрали из :bWriteTopPane отрисовку разделительной линии. Надо, чтоб было: [pre] IF ::lTopPane DispBegin() SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF DispEnd() ENDIF[/pre]

SergKis: alkresin пишет Ну так вы же сами убрали из :bWriteTopPane отрисовку разделительной линии. Да, убрал, т.к. если делать прорисовку в :bWriteTopPane (в том виде как в StbLine(...), была ваша рекомендация), то начинает появляться и жить закраска в 0ой строке, при вертикальном разделении Ctrl-w,v Если сделать по последней рекомендации, то все хорошо, как хотелось и при ;plugin=plug_prg_init.hrb Спасибо. Может тогда вынести прорисовку вертикальной\горизонтальной строки разделения до :bWriteTopPane[pre2] < сюда, к примеру > IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, lClear, y ) ELSE IF ::lTopPane DispBegin() SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF [/pre2]

alkresin: SergKis пишет: Может тогда вынести прорисовку вертикальной\горизонтальной строки разделения до :bWriteTopPane Можно.

SergKis: alkresin Можно добавить в hbedit ? - если имя плагина (без расширения .hrb) есть как функция, выполнить ее (плагин перенесен в тело hbedit), что бы не править базовый текст при смене модификации hbedit - в плагин plug_prg_spis.prg включить определения INIT WINDOW ... и DEFINE WINDOW ..., что бы не править плагин базовый, т.к. до этих определений, после FUNCTION, может находится достаточно строк

alkresin: SergKis пишет: если имя плагина (без расширения .hrb) есть как функция, выполнить ее (плагин перенесен в тело hbedit), Проблематично. Надо менять логику работы в нескольких местах - многое заточено под номер плагина в массиве, сформированном из секции [PLUGINS], в т.ч. - назначение горячих клавиш. И, честно говоря, не вижу смысла в переносе плагина в тело основной программы - впрочем, мы об этом уже говорили. в плагин plug_prg_spis.prg включить определения INIT WINDOW ... и DEFINE WINDOW Тогда уж лучше завести ini-файл для этого плагина, который будет располагаться рядом с hrb - чтобы там можно было определить все ключевые слова, которые вам захочется отловить для списка функций.

SergKis: alkresin пишет Надо менять логику работы в нескольких местах - многое заточено под номер плагина в массиве, сформированном из секции [PLUGINS], в т.ч. - назначение горячих клавиш Потому и поднял вопрос, т.к. придется каждый раз менять свой код при смене версии hbedit. Из всех плагинов нужно максимум 3 и без изменений, каталог plugins, как бы, лишний, а иногда мешающий, при уст. на разных местах (pc) Тогда уж лучше завести ini-файл для этого плагина, который будет располагаться рядом с hrb - чтобы там можно было определить все ключевые слова, которые вам захочется отловить для списка функций. Это хорошее решение, но уже несколько лет в своем проекте работает набор определений как у вас и плюс 2а про которые написал. Есть ли смысл усложнять с доп. ini ?

SergKis: PS [pre2] FUNCTION edi_RunPlugin( oEdit, xPlugin ) LOCAL i, cPlugin, cFullPath IF Valtype( xPlugin ) == "N" i := xPlugin ELSEIF Valtype( xPlugin ) == "C" i := Ascan( TEdit():aPlugins, {|a|a[1]==xPlugin} ) ENDIF IF i > 0 IF Empty( TEdit():aPlugins[i,4] ) cPlugin := TEdit():aPlugins[i,1] IF !Empty( cFullPath := edi_FindPath( "plugins" + hb_ps() + cPlugin ) ) TEdit():aPlugins[i,4] := hb_hrbLoad( cFullPath ) TEdit():aPlugins[i,5] := cFullPath ENDIF ENDIF IF !Empty( TEdit():aPlugins[i,4] ) hb_hrbDo( TEdit():aPlugins[i,4], oEdit, hb_fnameDir( TEdit():aPlugins[i,5] ) ) ENDIF ENDIF RETURN Nil [/pre2] Может достаточно изменить выделенное цветом, остальное не трогать, т.к. в ini список плагинов будет и нужно перед выполнением проверть наличие ф-ии и выполнить, если есть. И работа с номером плагина в др. местах останется

alkresin: Недостаточно. В массив TEdit():aPlugins добавляются не все плагины, перечисленные в ini, а только те, для которых найдены соответствующие hrb - иначе в меню по F11 могут попасть несуществующие плагины.

SergKis: alkresin пишет Недостаточно. В массив TEdit():aPlugins добавляются не все плагины... Понял. Тогда можно перенести edi_RunPlugins() к edi_Alert() в falert.prg. В реальной работе нет F11 (меню плагинов, будет блокирована или исп. для другого), т.к. используется только 1 плагин (мах будет 3) и все на клавишах. Каталог Plugins с фиктивными hrb можно оставить.

alkresin: Что-то запутали вы меня). Проблема для вас была в наличии каталога plugins, который "как бы, лишний, а иногда мешающий" - из-за этого вы хотели перенести плагин в основной текст. А теперь пишете, что для обеспечения работы схемы "каталог Plugins с фиктивными hrb можно оставить"... Впрочем, если перенос edi_RunPlugins() в falert.prg вас выручит, я не сильно против.

SergKis: alkresin пишет Что-то запутали вы меня) Совершенно не хотел этого делать. Если плагины уходят в текст hbedit, то каталог plugins, как бы лишний, но если отсутствие каталога мешает нормальной работе hbedit в др. кусках кода, то пусть каталог остается для меню, индекса и т.д., а hrb плагинов пусть лежат. Если текст плагина включен в код hbedit выполнится он, нет - выполнится плагин, если назначен в ini. У себя в работе с prg, надолго, нужен только 1 плагин, возможно, в дальнейшем еще +2а и все. С последней сборки (вашими рекомендациями) на Alt+F4 в Far повесил hbedit и практически перестал использовать Notepad3 на Enter и F4 (фаровский edit). Работа вся на клавишах, никакое меню (кроме уст. кодовой страницы) не вызывал не разу. При смене версии правится только hbedit.prg и очень немного. Как бы все устаканивается с исп. LV866 и др. кодовых страниц. Спасибо.



полная версия страницы