On-line: rvu, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
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 
ПрофильЦитата Ответить
Ответов - 215 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]


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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить



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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


SergKis пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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

Спасибо: 0 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


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


SergKis пишет:

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


Можно.

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить



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


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


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

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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
Ответов - 215 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 316
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет