On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
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: 1252
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 08.05.19 12:06. Заголовок: Есть еще кодоблок :b..


Есть еще кодоблок :bNew - это CLASS VAR, отрабатывает при открытии каждого файла. Можно (и лучше) устанавливать bonkey и bWriteTopPane там.

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



Пост N: 2536
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.05.19 13:09. Заголовок: alkresin пишет Есть ..


alkresin пишет
 цитата:
Есть еще кодоблок :bNew - это CLASS VAR, отрабатывает при открытии каждого файла. Можно (и лучше) устанавливать bonkey и bWriteTopPane там.


Это верно для 2го oEdi и далееt, для первого bNew не установить, т.к. выполняется он в :New(...) и больше нигде.
Если выделить установки и расчет координат в др. метод, к примеру :Def(), то тогда да
oE :=TEdit():New(...)
oE:bOnKey := ...
oE:bWriteTopPane := ...
oE:lTopPane := .F.
oE:Def()

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


Пост N: 1253
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 08.05.19 15:21. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это верно для 2го oEdi и далееt, для первого bNew не установить,


Почему?
Это же CLASS VAR, я специально отметил. Просто пишете до появления первых объектов редактора:
TEdit():bNew := ...

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



Пост N: 2537
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.05.19 18:34. Заголовок: alkresin пишет Прост..


alkresin пишет
 цитата:
Просто пишете до появления первых объектов редактора


Спасибо, почти все получилось
 
DATA lTopPane INIT .T.
hbedit.prg
...
TEdit():bNew := {|oe| oe:lTopPane := .F., ;
oe:bOnKey := {|o,n| EdOnKey(o, n) }, ;
oe:bWriteTopPane := {|o,n| StBline(o, n) } }
nScreenH -= 1

FOR i := 1 TO Len( aFiles )
TEdit():New( Iif(!Empty(aFiles),Memoread(aFiles),""), aFiles, 0, 0, nScreenH-1, nScreenW-1, , .F. )
IF lRO
ATail(TEdit():aWindows):lReadOnly := .T.
ENDIF
NEXT

IF Empty( TEdit():aWindows )
TEdit():New( "", "", 0, 0, nScreenH-1, nScreenW-1, , .F. )
IF lRO
ATail(TEdit():aWindows):lReadOnly := .T.
ENDIF
ENDIF
...

Загруженные сразу при запуске hbedit.exe 3и файла перемещение курсора вверх\вниз - все ok
New file + добавляем строки, перемещение курсора вверх\вниз до 1ой строки, т.е курсор во 2ой
Open file перемещение курсора вверх\вниз до 1ой строки, т.е курсор во 2ой
Ctrl+TAB на загруженные при старте,New file + добавляем строки, перемещение курсора вверх\вниз - все ok
Ставлю
DATA lTopPane INIT .F.
Все ok во всех режимах выше

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



Пост N: 2538
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.05.19 18:38. Заголовок: PS читать Ctrl+TAB ..


PS
читать
Ctrl+TAB на загруженные при старте,New file + добавляем строки, перемещение курсора вверх\вниз - все ok

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



Пост N: 2539
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.05.19 19:06. Заголовок: PPS сделал так T..


PPS
сделал так
 
TEdit():bNew := {|oe| oe:lTopPane := .F., oe:y2 := MaxRow()-1, oe:y1 := 0, ;
oe:bOnKey := {|o,n| EdOnKey(o, n) }, ;
oe:bWriteTopPane := {|o,n| StBline(o, n) } }

his удалил.
На сразу загруженных файлах - все ok.
New file, Open file ставят курсор во 2ую строку, причем New file при стрелке вверх ставит в 1ю строку курсор и больше не перемещается - строка 1, позиция 1

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


Пост N: 1254
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 11.05.19 09:15. Заголовок: Обновлен hbedit. Реа..


Обновлен hbedit.
Реализована поддержка табуляции.
Оптимизирован движок подсветки.
Кое-что исправлено.

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



Пост N: 2540
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.05.19 15:51. Заголовок: alkresin 1. Заменяю..


alkresin
1.
Заменяю на "свои" окна (из MiniGui.lib подошло подключением) Скрытый текст

Можно ли в этом месте поставить переменную с блоком кода, если задана, то выполнять блок кода из переменной, иначе код функции ? Что бы не лазить для правки каждый раз в текст edi_Alert()

2.
Загружаю текст prg hbedit.exe fedit.prg , курсор на строке, к примеру 2153
 
RETURN Nil

FUNCTION mnu_F3( oEdit )

между RETURN Nil и FUNCTION ... на пустой строке
Смещаем курсор вправо стрелкой на n позиций, т.е. Col > 1
Делаем Backspace, строка пустая пропадает и имеем
 
RETURN Nil
FUNCTION mnu_F3( oEdit )

Это не правильно.

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



Пост N: 2541
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.05.19 16:11. Заголовок: PS К пункту 1. Хотел..


PS
К пункту 1.
Хотел edi_Alert() перевести на #translate, но т.к. нет файла hbedit.ch с #include "hbedit.ch" в каждом *.prg, а заводить свой, это править все файлы prg, что по мне, хуже, то предложил переменную с блоком кода.

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


Пост N: 1255
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 14.05.19 09:39. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно ли в этом месте поставить переменную с блоком кода, если задана, то выполнять блок кода из переменной


Не понял. А откуда предполагается брать кодоблок, как он будет задан?

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


Пост N: 1256
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 14.05.19 09:40. Заголовок: Обновил hbedit. Расш..


Обновил hbedit.
Расширена поддержка макросов (см. help).
Всякие мелкие правки.

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



Пост N: 2544
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.19 10:38. Заголовок: alkresin пишет Не п..


alkresin пишет
 цитата:
Не понял. А откуда предполагается брать кодоблок, как он будет задан?


К примеру так
 
FUNCTION edi_Alert( cText, cAns1, cAns2, cAns3 )
...
STATIC b_Alert

IF Valtype(cText) == 'B'
b_Alert := cText
RETURN Nil
ENDIF
IF empty( b_Alert )
... как сейчас
ELSE
i := EVal( b_Alert, cText, cAns1, cAns2, cAns3 )
ENDIF

RETURN i
тогда в своем prg делаю установку блока и происходит подмена кода выполнения.
Хорошо бы в oEdit добавить пару переменных CLASS VAR ... для блоков кода подмены запроса Open file и Save as ...
Т.к. используем (у себя в работе) в gtwvt windows варианты запросов.
Конечно и для окон запроса Search и Search&Replace такой механизм не помешал бы, но пока не так актуально.


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



Пост N: 2545
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.19 10:48. Заголовок: PS И совсем замечате..


PS
И совсем замечательно, если в oEdit добавить установку своего HB_GTI_PALETTE для каждого экземпляра окна.
К примеру через блок кода CLASS VAR ... и вызовом его при смене\установки окна редактирования.
Можно отработать разноцветность режимов, как минимум

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


Пост N: 1257
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 14.05.19 12:39. Заголовок: SergKis пишет: К пр..


SergKis пишет:

 цитата:
К примеру так


Лучше я просто выделю edi_Alert() в отдельный файл.

 цитата:
Хорошо бы в oEdit добавить пару переменных CLASS VAR ... для блоков кода подмены запроса Open file и Save as ...


Вы же их все-равно вызываете из своего меню. Так вызывайте свои процедуры вместо них.

 цитата:
И совсем замечательно, если в oEdit добавить установку своего HB_GTI_PALETTE для каждого экземпляра окна.


Это вы можете сделать в кодоблоке bStartEdit, который вызывается каждый раз при вызове :Edit().

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



Пост N: 2547
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.19 13:10. Заголовок: alkresin пишет Лучше..


alkresin пишет
 цитата:
Лучше я просто выделю edi_Alert() в отдельный файл.


Очень хорошо.

 цитата:
Так вызывайте свои процедуры вместо них.


Так и буду делать

 цитата:
Это вы можете сделать в кодоблоке bStartEdit


Увидел, что есть bStartEdit и bEndEdit - замечательно



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



Пост N: 2558
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.19 10:59. Заголовок: alkresin Запуск hbe..


alkresin
Запуск hbedit.exe
New file
Ставлю кодировку Utf8
что то набираю
Save as ...
Esc
смотрим файл в Far F3, F4 -> у файла нет BOM

Наверно, нужна галочка\пункт меню, сохранять с BOM или нет.

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


Пост N: 1259
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 16.05.19 15:10. Заголовок: SergKis пишет: Наве..


SergKis пишет:

 цитата:
Наверно, нужна галочка\пункт меню, сохранять с BOM или нет.


Согласен, надо будет добавить в диалог по Save as. Плюс eol и, может быть, кодовую страницу.

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



Пост N: 2559
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.19 15:15. Заголовок: alkresin пишет и, мо..


alkresin пишет
 цитата:
и, может быть, кодовую страницу.


Желательно, иметь режим, сменить кодировку текста, к примеру, RU866 -> Utf8 и т.д.

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


Пост N: 1260
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 16.05.19 16:22. Заголовок: Ну, кодировка менятс..


Ну, кодировка менятся просто как и в Far'е:
Выделяем все (Ctrl-A), вырезаем, меняем кодировку и вставляем.

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



Пост N: 2561
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.19 16:32. Заголовок: alkresin пишет Выдел..


alkresin пишет
 цитата:
Выделяем все (Ctrl-A), вырезаем, меняем кодировку и вставляем.


Не самый удобный механизм. В Notepad3.exe есть режим переоткрыть в кодировке, кл. F8 (меню есть) -> табличка кодировок.
Т.е. в файле Utf8, в работе RU1251, или RU866, или LV866.
Просто и удобно

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