Автор | Сообщение |
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) Если есть идеи для реализации - буду рад услышать.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 2825
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.09.19 09:10. Заголовок: alkresin Можно вызо..
alkresin Можно вызов меню выбора кодовых страниц, сделать на клавиши и комбинацию их задавать в ini ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2827
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.19 11:37. Заголовок: alkresin В параметр..
alkresin В параметры командной строки можно добавить кодовую страницу для файла (из списка ini указанные)
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2828
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.19 18:07. Заголовок: alkresin Добавил в ..
alkresin Добавил в параметры командной строки (своя сборка) -cp=<кодовая страница> -his=<режим savehis = 0> Это понадобилось при подключении hbedit в проектах вместо Akelpad, дополнительно к Far Alt+F4 режиму. Возможно, похожее надо в вашей сборке hbedit.exe ? К примеру, когда prg файлы в кодировках RU866, RU1251, Utf8
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2829
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.19 18:11. Заголовок: PS Far Alt+F4 режим ..
PS Far Alt+F4 режим работает с savehis=1 и cp=RU1251, а запуски из проекта savehis=0 и cp=LV866, при этом prg Utf8 с bom отлично понимаются.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2830
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.19 20:40. Заголовок: alkresin Можно ли у..
alkresin Можно ли уст. palette из параметра командной строки ? Например в ini palette=solarized light из командной строки поставить far или notepad
|
|
|
alkresin
|
| moderator
|
Пост N: 1374
Зарегистрирован: 06.07.06
|
|
Отправлено: 10.09.19 09:20. Заголовок: SergKis пишет: отсу..
SergKis пишет: цитата: | отсутствие каталога мешает нормальной работе hbedit в др. кусках кода |
| Отсутствие каталога plugins/ мешает только работе плагинов. В обсуждаемом случае это вызов плагина по горячей клавише. цитата: | Можно вызов меню выбора кодовых страниц, сделать на клавиши и комбинацию их задавать в ini ? |
| Так ведь Shift-F8 для этого предназначен - в help'е и на сайте про это написано. Ну а комбинацию эту можно переназначить в ini, если надо.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2831
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 09:30. Заголовок: alkresin пишет Так в..
alkresin пишет цитата: | Так ведь Shift-F8 для этого предназначен - в help'е и на сайте про это написано |
| Пропустил, не увидел. Все работает. Спасибо. цитата: | Отсутствие каталога plugins/ мешает только работе плагинов |
| Понятно
|
|
|
alkresin
|
| moderator
|
Пост N: 1375
Зарегистрирован: 06.07.06
|
|
Отправлено: 10.09.19 09:33. Заголовок: По поводу добавления..
По поводу добавления новых параметров командной строки: сделать-то можно, но, по моему, более универсальным решением было бы просто указать в командной строке другой ini - так можно задать любую комбинацию нужных параметров.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2832
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 09:45. Заголовок: alkresin пишет По по..
alkresin пишет цитата: | По поводу добавления новых параметров командной строки: сделать-то можно, но, по моему, более универсальным решением было бы просто указать в командной строке другой ini - так можно задать любую комбинацию нужных параметров. |
| В проектах свои ini и в них все есть. Размножать доп. ini не очень хочется. Попробовал 2а каталога с hbedit и запуски в Far с одного, в проектах с другого. Уже не очень удобно, т.к. чувствую где то понадобится savehis=2. Смотрел на замену Palete, вроде, на уровне TEdit сложновато получается. Если не делать в вашей сборке (может кроме меня никому не нужно), то перекиньте FUNCTION edi_IniRead( cFileName ) в файл falert.prg. Буду делать подмену на этом уровне (разбор строк в секциях)
|
|
|
alkresin
|
| moderator
|
Пост N: 1376
Зарегистрирован: 06.07.06
|
|
Отправлено: 10.09.19 13:00. Заголовок: Хорошо, добавлю. Смо..
Хорошо, добавлю. цитата: | Смотрел на замену Palete, вроде, на уровне TEdit сложновато получается. Если не делать в вашей сборке (может кроме меня никому не нужно), то перекиньте FUNCTION edi_IniRead( cFileName ) в файл falert.prg. |
| Я пока не вижу проблемы с объявлением в комадной строке palette (вы ведь об этом?). А вот edi_IniRead() нельзя - она пользуется статическими переменными.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2836
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 14:04. Заголовок: alkresin пишет edi_..
alkresin пишет цитата: | edi_IniRead() нельзя - она пользуется статическими переменными. |
| Нельзя edi_ReadIni( xIni ) из fedit.prg, edi_iniRead() из ffiles.prg там нет статик переменных
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2837
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 14:28. Заголовок: PS Для Palette парам..
PS Для Palette параметра начал набирать (не доделал пока) так, сам параметр -clr=0\1\2\3\4 по именам секций [PALETTE_0], ..., [PALETTE_4], что бы не привязываться к длинным именам Значение palette=far секции [OPTIONS] брать из name=... [PALETTE_?]
|
|
|
alkresin
|
| moderator
|
Пост N: 1377
Зарегистрирован: 06.07.06
|
|
Отправлено: 10.09.19 15:21. Заголовок: Зачем так сложно-то?..
Зачем так сложно-то? Добавил я три параметра (залил на github): -cp= -his= -pal=
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2838
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 16:09. Заголовок: alkresin пишет Зачем..
alkresin пишет По мне, наоборот, просто. Не надо помнить длинные названия. Тут текст мой (сделал как у вас -pal=<только тут число>) Скрытый текст
#include "hbgtinfo.ch" FUNCTION bkInit( cIniName, aParams ) Local cPath := hb_curDrive() + ":\" + Curdir() + '\' Local cName := hb_ProgName(), cTmp, cCP, nHis Local cExe := Lower(hb_fnameName(cName)) LOCAL cCapt := cExe LOCAL aPal := {}, cPal, nPal FOR nPal := 0 TO 9 cTmp := Lower( gIniC7(cIniName, [PALETTE_]+hb_ntos(nPal), 'Name', '') ) IF Empty(cTmp) EXIT ENDIF AAdd(aPal, cTmp) NEXT FOR EACH cTmp IN aParams IF Left( cTmp,4 ) == "-cp=" cCP := Upper( Substr( cTmp, 5 ) ) ELSEIF Left( cTmp,4 ) == "-his=" nHis := Val( Substr( cTmp, 6 ) ) IF nHis < 0 .OR. nHis > 2 nHis := Nil ENDIF ELSEIF Left( cTmp,5 ) == "-pal=" nPal := Val( Substr( cTmp, 6 ) ) + 1 IF nPal > 0 nPal := iif( nPal > Len(aPal), Len(aPal), nPal ) cPal := aPal[ nPal ] ENDIF ENDIF NEXT IF !Empty(cCP) hb_cdpSelect( cCP ) ENDIF IF nHis != NIL TEdit():options["savehis"] := nHis ENDIF IF !Empty(cPal) TEdit():cDefPal := cPal ENDIF cTmp := Lower(gIniC7(cIniName, [OPTIONS], 'PathInHead', 'off')) If 'off' $ cTmp cCapt := cPath + Repl(' .', 3) + space(1) + '-' + space(1) + cExe EndIf CLS ; hb_gtInfo( HB_GTI_WINTITLE, cCapt ) TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } RETURN Nil
| цитата: | Добавил я три параметра (залил на github): |
| Спасибо, буду использовать.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2845
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.19 08:33. Заголовок: alkresin Нарушилась..
alkresin Нарушилась прорисовка разделения окна по Ctrl-w,s, Ctrl-w,v (вся клиентская область в работе edit) Добавка из пред. версии в METHOD WriteTopPane( lClear ) Скрытый текст
METHOD WriteTopPane( lClear ) CLASS TEdit LOCAL y := ::y1 - 1, nCol := Col(), nRow := Row(), nF9 := 0 LOCAL cLen := Ltrim(Str(Len(::aText))), nchars := Len(cLen) IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF 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 SetColor( ::cColor ) DevPos( nRow, nCol ) DispEnd() EndIf IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, lClear, y ) ELSE IF ::lTopPane DispBegin() /* SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) */ IF Empty( lClear ) DevPos( y, ::x1 ) IF ::x2 - ::x1 > 54 DevOut( "F9-menu" ) DevPos( y, ::x1+8 ) nF9 := 8 ENDIF DevOut( Iif( hb_hGetDef(::options,"pathinhead",.F.), NameShortcut(::cFileName,::nTopName,'~'), ; cp_Left( ::lUtf8, hb_fnameNameExt(::cFileName), ::nTopName ) ) ) IF !Empty( cDopMode ) DevPos( y, ::x1 ) DevOut( Padr( cDopMode, 8 ) ) ENDIF DevPos( y, ::x1 + nF9 + ::nTopName + 2 ) DevOut( Iif( ::lUpdated, "* ", " " ) + Lower( ::cp ) ) DevPos( y, ::x1 + nF9 + ::nTopName + 12 ) DevOut( PAdl(Ltrim(Str(::nLine)),nchars) + "/" + cLen ) DevPos( y, ::x1 + nF9 + ::nTopName + 12 + nchars*2 + 3 ) DevOut( "[" + Ltrim(Str(::PosToCol()-::x1+::nxFirst)) + "]" ) SetColor( ::cColorWB ) DevPos( y, ::x2-3 ) IF ::lF3 .OR. (::nby1 >= 0 .AND. ::nby2 >= 0) DevOut( "Sele" ) ELSE DevOut( Iif( ::nMode == 0, Iif( ::lReadOnly, "View", "Edit" ), ; Iif( ::nMode == 1, " Vim", " Cmd" ) ) ) ENDIF ENDIF SetColor( ::cColor ) DevPos( nRow, nCol ) DispEnd() ENDIF ENDIF RETURN Nil
| восстановила прорисовку только горизонтальное разделения при вертикальном, прорисовка делается и убирается, видно мелькание
|
|
|
alkresin
|
| moderator
|
Пост N: 1378
Зарегистрирован: 06.07.06
|
|
Отправлено: 11.09.19 09:54. Заголовок: Там просто вертикаль..
Там просто вертикальный разделитель не прорисовывался . Поправил.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2848
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.19 10:54. Заголовок: alkresin пишет Там п..
alkresin пишет цитата: | Там просто вертикальный разделитель не прорисовывался . Поправил. |
| Вертикальный разделитель прорисовался, а горизонтальный нет, пропал Моих правок нет. :New такой и StbLine() - пустышка пока TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2849
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.19 12:12. Заголовок: PS добавил, вроде, с..
PS добавил, вроде, стало прорисовывать как надо SetColor( ::cColorPane ) IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) ENDIF IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF IF ::bWriteTopPane != Nil
|
|
|
alkresin
|
| moderator
|
Пост N: 1379
Зарегистрирован: 06.07.06
|
|
Отправлено: 11.09.19 12:32. Заголовок: SergKis пишет: TEdi..
SergKis пишет: цитата: | TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } |
| Вы берете прорисовку панели статуса на себя, но функция соответствующая у вас пустая... Вставьте в нее хотя бы IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) ENDIF
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2850
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.19 12:57. Заголовок: alkresin пишет Вы бе..
alkresin пишет цитата: | Вы берете прорисовку панели статуса на себя, но функция соответствующая у вас пустая... |
| В функции будет вывод в windows StatusBar по item-ам, а прорисовка разделителей экрана (полос) - как бы свойство TEdit. Что выводить в StatusBar и сколько item-ов не определился пока, т.к. нет загрузок нескольких файлов (всегда 1) для работы и переключения между окнами по Ctrl+TAB (исп. только при разделении окна на части для работы в др. местах загруженного текста). Сейчас пробую вывод полного имени и cdp в Title окна - вроде неплохо Строки IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) повторяться будут и в блоке кода и без блока, потому вынес эти строки к вашим
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|