On-line: Andrey, Haz, гостей 2. Всего: 4 [подробнее..]
АвторСообщение
alkresin
moderator


Пост N: 1174
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 04.04.19 14:37. Заголовок: Hbedit - текстовый редактор (продолжение)


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

Если есть идеи для реализации - буду рад услышать.

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


alkresin
moderator


Пост N: 1358
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 29.08.19 08:53. Заголовок: не изменило от пред...



 цитата:
не изменило от пред. поста, т.е. нет горизонтальной полосы-разделителя


Точно, oParent устанавливается после вызова TEdit():New(), по нему нельзя проверить. Значит, сработает другое условие: o:y1 == o:aRectFull[1]+1


 цитата:
Такое сочетание работает, а через Ctrl-1 или Ctrl-~ нет.


Ctrl-1, Ctrl-2,... в Harbour в консоли вообще не работают - нет реакции на эти нажатия, не генерируется событие.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2780
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.08.19 21:03. Заголовок: alkresin пишет Ctrl-..


alkresin пишет
 цитата:
Ctrl-1, Ctrl-2,... в Harbour в консоли вообще не работают - нет реакции на эти нажатия, не генерируется событие.


Понятно.
А в WVT ?

 цитата:
Значит, сработает другое условие: o:y1 == o:aRectFull[1]+1


Горизонтальная строка появляется со смещением (где должно, в обычном режиме, находится "F9-Menu" ) и лишней информацией "Harbour plugins: Alt-D ...". Хотелось бы пустую полосу в ширину окна

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1361
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.08.19 09:00. Заголовок: А в WVT ? Да. Моя ..



 цитата:
А в WVT ?


Да. Моя сборка hbedit в нем построена.
Сделаю gt hwgui - там будет работать).


 цитата:
Горизонтальная строка появляется со смещением (где должно, в обычном режиме, находится "F9-Menu" ) и лишней информацией "Harbour plugins: Alt-D ...".


Горизонтальная разделительная строка появляется на месте строки статуса, потому что это она и есть. Какое это смещение?
"Harbour plugins: Alt-D ..." появляется только вначале, потом там пусто - это предупреждение, что для открытого в окне файла подключен Harbour плагин. Вы можете это отключить, если в :bNew пропишете o:bStartEdit := Nil или установите свой bStartEdit.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2781
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.08.19 11:08. Заголовок: alkresin пишет Вы м..


alkresin пишет
 цитата:
Вы можете это отключить, если в :bNew пропишете o:bStartEdit := Nil или установите свой bStartEdit.


Сделал
 
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) } }

результат такой же, как был описан ранее.
Пример, своя сборка, тут (смещение вправо линии на длину "F9-Menu", так понимаю) https://my-files.ru/zn3jdl
Если убираю в ini
;plugin=plug_prg_init.hrb
то горизонтальная линия разделения окна пропадает совсем
А можно сделать, что то типа oEdit:lStatusLine := .T.\.F. ?

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2782
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.08.19 11:19. Заголовок: PS Разговор о команд..


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1363
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.08.19 13:11. Заголовок: SergKis пишет: Прим..


SergKis пишет:

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


Файл по ссылке удален - пишут, вредоносное ПО)

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2783
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.08.19 13:35. Заголовок: alkresin пишет Файл ..


alkresin пишет
 цитата:
Файл по ссылке удален - пишут, вредоносное ПО)


Да, удалили, но не сразу, я сначала проверил ссылку.
Тут https://TransFiles.ru/pzqj9

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2784
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.08.19 13:42. Заголовок: PS в bkInit я убрал ..


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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2785
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.08.19 13:47. Заголовок: PPS И как для меня, ..


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1364
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.08.19 14:04. Заголовок: Ну так вы же сами уб..


Ну так вы же сами убрали из :bWriteTopPane отрисовку разделительной линии.
Надо, чтоб было:
 
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


Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2786
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.08.19 14:56. Заголовок: alkresin пишет Ну та..


alkresin пишет
 цитата:
Ну так вы же сами убрали из :bWriteTopPane отрисовку разделительной линии.


Да, убрал, т.к. если делать прорисовку в :bWriteTopPane (в том виде как в StbLine(...), была ваша рекомендация), то начинает появляться и жить закраска в 0ой строке, при вертикальном разделении Ctrl-w,v
Если сделать по последней рекомендации, то все хорошо, как хотелось и при ;plugin=plug_prg_init.hrb
Спасибо.
Может тогда вынести прорисовку вертикальной\горизонтальной строки разделения до :bWriteTopPane
 
< сюда, к примеру >
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


Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1365
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 30.08.19 15:48. Заголовок: SergKis пишет: Може..


SergKis пишет:

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


Можно.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2805
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.19 16:32. Заголовок: alkresin Можно доба..


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1371
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.09.19 10:49. Заголовок: SergKis пишет: если..


SergKis пишет:

 цитата:
если имя плагина (без расширения .hrb) есть как функция, выполнить ее (плагин перенесен в тело hbedit),


Проблематично. Надо менять логику работы в нескольких местах - многое заточено под номер плагина в массиве, сформированном из секции [PLUGINS], в т.ч. - назначение горячих клавиш. И, честно говоря, не вижу смысла в переносе плагина в тело основной программы - впрочем, мы об этом уже говорили.

 цитата:
в плагин plug_prg_spis.prg включить определения INIT WINDOW ... и DEFINE WINDOW


Тогда уж лучше завести ini-файл для этого плагина, который будет располагаться рядом с hrb - чтобы там можно было определить все ключевые слова, которые вам захочется отловить для списка функций.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2811
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.09.19 11:12. Заголовок: alkresin пишет Надо ..


alkresin пишет
 цитата:
Надо менять логику работы в нескольких местах - многое заточено под номер плагина в массиве, сформированном из секции [PLUGINS], в т.ч. - назначение горячих клавиш


Потому и поднял вопрос, т.к. придется каждый раз менять свой код при смене версии hbedit. Из всех плагинов нужно максимум 3 и без изменений, каталог plugins, как бы, лишний, а иногда мешающий, при уст. на разных местах (pc)

 цитата:
Тогда уж лучше завести ini-файл для этого плагина, который будет располагаться рядом с hrb - чтобы там можно было определить все ключевые слова, которые вам захочется отловить для списка функций.


Это хорошее решение, но уже несколько лет в своем проекте работает набор определений как у вас и плюс 2а про которые написал. Есть ли смысл усложнять с доп. ini ?

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2812
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.09.19 11:27. Заголовок: PS FUNCTION edi_Run..


PS

 цитата:
 
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


Может достаточно изменить выделенное цветом, остальное не трогать, т.к. в ini список плагинов будет и нужно перед выполнением проверть наличие ф-ии и выполнить, если есть. И работа с номером плагина в др. местах останется

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1372
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.09.19 13:08. Заголовок: Недостаточно. В масс..


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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2813
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.09.19 13:30. Заголовок: alkresin пишет Недос..


alkresin пишет
 цитата:
Недостаточно. В массив TEdit():aPlugins добавляются не все плагины...


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1373
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 06.09.19 14:49. Заголовок: Что-то запутали вы м..


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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2814
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.09.19 20:10. Заголовок: alkresin пишет Что-т..


alkresin пишет
 цитата:
Что-то запутали вы меня)


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

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 440
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет