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

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

alkresin: Довел, наконец, свой текстовый редактор до того состояния, когда можно показать его общественности. Я начал писать его сначала как замену 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: alkresin пишет: Переключаетесь в командный режим, нажав два раза Ctrl-Q defmode=-1 Vim режим отключен и не будет командной строки Не помню такого окошечка. Внешние программы запускаются из командного режима, как в Vim).. "Хорошо бы пива", что бы окошечко было, т.к. консоли нет, есть wvt совсем чуть-чуть и hmg Надо менять hilight.prg, класс Hili - там определены 4 набора keywords. Можно добавить, п о ж а л у й с т а ? Раскрасил hmg команды (получилось хорошо), но не хватает цвета поярче от #define ..., #include ..., т.е. startline для некоторых слов

SergKis: alkresin пишет Проверял без плагина (просто переместил его временно из plugins/) - все нормально. У меня убран из ini (убирал hrb), результат одинаков. Вот сборка моя https://TransFiles.ru/50low на ней видно разные значения row, col после загруженного (через параметры командной строки) файла и при организации под окон Ctrl-w,s\v Подскажите, как правильно исправить ситуацию ?

SergKis: alkresin Еще просьба - сделать список his по F4 с поиском, а не с ключом слева - добавить в edi_SeleFile() маску для файлов, тогда без доп. окна можно организовать запуск bat\cmd файлов не только компиляции (hbp у меня нет, кроме hmg, есть местами), но и др. вариантов, например, запуск notepad3 в режиме сбора инф. буфера клавиатуры - вынести меню с текстами и тексты с запросов окон в hbedit.prg для языковых вариантов, сейчас для своей сборки меняется только hbedit.prg, хотелось бы сохранить эту традицию


SergKis: PSдобавить в edi_SeleFile() маску для файлов Просмотрел, параметр маски есть в функции. Снимается вопрос.

SergKis: PS Можно сделать при выделении текста F3 и блоковом по Ctrl+F3 при повторном нажатии (конец выделения) не выбрасывать меню с предложением выбрать буфер клавиатуры (к примеру, по переменной в TEdit .T.\.F.) ? Режим удобен при работе одной рукой

SergKis: PPS даже если ставлю #define MAX_CBOARDS 1 #define MAX_EDIT_CBOARDS 1 #define CBOARD_MINUS 1 меню с одной строкой вываливается

SergKis: alkresin SergKis пишет на ней видно разные значения row, col после загруженного (через параметры командной строки) файла и при организации под окон Ctrl-w,s\v Подскажите, как правильно исправить ситуацию ? Исправил так [pre2] TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bOnKey := {|o,n| EdOnKey(o, n) }, ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y,cExe) }, ; __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) } [/pre2] Может не очень красиво, но работает.

SergKis: alkresin При создании под окна Ctrl-w,s и Ctrl-w,o (полное окно) меняется поведение клавиши Esc и не переключаются окна по Ctrl-w,w. Так должно быть ?

SergKis: alkresin Как вызвать из подключаемого блока кода плагин, вызываемый по Alt-L (Function list) ? TEdit():bNew := ... постом выше. Исходный текст обработки тут [pre2] STATIC FUNCTION h_KeyInit() h_Key := { ; 1004 => {| | Nil }, ; // K_RBUTTONDOWN 30101 => {| | edi_KeyCToN( "Shift-F4" ) }, ; // New file 30102 => {| | edi_KeyCToN( "Ctrl-F4" ) }, ; // Open file 30103 => {| | edi_KeyCToN( "F2" ) }, ; // Save 30104 => {| | edi_KeyCToN( "Shift-F4" ) }, ; // Save as 30105 => {| | edi_KeyCToN( "Shift-F8" ) }, ; // Code page 30109 => {| | edi_KeyCToN( "F9" ) }, ; // F9-Menu 30201 => {| | edi_KeyCToN( "F7" ) }, ; // Find... 30202 => {| | edi_KeyCToN( "Shift-F7" ) }, ; // Find Next 30203 => {| | edi_KeyCToN( "Alt-F7" ) }, ; // Find Prev 30204 => {| | edi_KeyCToN( "Ctrl-F7" ) }, ; // Replace... 30205 => {| | edi_KeyCToN( "Alt-F8" ) }, ; // Goto... 30206 => {| | edi_KeyCToN( "Alt-B" ) }, ; // Goto the previous position 30207 => {| | edi_KeyCToN( "Alt-L" ) }, ; // Function list 30301 => {| | edi_KeyCToN( "F12" ) }, ; // List of open files 30302 => {|o,n| Window_OnKey(o, n) }, ; // Split window horizontally 30303 => {|o,n| Window_OnKey(o, n) }, ; // Split window vertically 30304 => {|o,n| Window_OnKey(o, n) }, ; // Switch window 30305 => {|o,n| Window_OnKey(o, n) }, ; // Open window fully 30306 => {|o,n| Window_OnKey(o, n) }, ; // Close window 30999 => {| | (-1) } ; // dummy } RETURN Nil STATIC FUNCTION Window_OnKey( o, n ) LOCAL r := -1 IF n == 30302 // Split window horizontally j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 2, Int( (o:y2-o:y1)/2 ) ) j:lReadOnly := .T. ELSEIF n == 30303 // Split window vertically j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 3, Int( (o:x2-o:x1)/2 ) ) j:lReadOnly := .T. ELSEIF n == 30304 // Switch window IF Len(o:aWindows) > 1 r := edi_KeyCToN( "Ctrl-Tab" ) // mnu_ToBuf( o, edi_FindWindow( o, .T. ) ) ENDIF ELSEIF n == 30305 // Open window fully IF o:oParent != Nil edi_CloseWindow( o, .F. ) o:oParent := Nil o:y1 := o:aRect[1] := o:aRectFull[1] o:x1 := o:aRect[2] := o:aRectFull[2] o:y2 := o:aRect[3] := o:aRectFull[3] o:x2 := o:aRect[4] := o:aRectFull[4] IF o:lTopPane o:y1 ++ ENDIF o:TextOut() edi_SetPos( o ) __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) ENDIF ELSEIF n == 30306 // Close window ( fully window ) IF o:oParent != Nil mnu_Exit( o ) ELSEIF Len(o:aWindows) > 1 r := K_ESC ENDIF ENDIF RETURN r FUNCTION EdOnKey( o, n ) LOCAL m := n, b, i, j, k LOCAL s := hb_BitAnd( n, SHIFT_PRESSED ) != 0 LOCAL a := hb_BitAnd( n, ALT_PRESSED ) != 0 LOCAL c := hb_BitAnd( n, CTRL_PRESSED ) != 0 LOCAL p := hb_keyStd( n ) LOCAL r := -1 // ToLog(.T., n, s, a, c, p) IF p == K_F1 // help RETURN r ELSEIF p == K_F8 // colored syntaxis enabled\disabled RETURN r ELSEIF p == K_F10 // exit RETURN r ENDIF b := hb_HGetDef( h_Key, n, Nil ) If b != Nil If HB_ISBLOCK( b ) .and. ( k := EVal( b, o, n ) ) != Nil n := k Else n := b EndIf EndIf RETURN n [/pre2] Цветом выделена попытка вернуть Alt+L в обработчик, не срабатывает попытка через __Keyboard(chr(K_ALT_L)) и возврат -1 в обработчик, не срабатывает Как правильно надо ?

Andrey: SergKis пишет: Раскрасил hmg команды (получилось хорошо), но не хватает цвета поярче от #define ..., #include ..., т.е. startline для некоторых слов Я посмотрел раскраску под МиниГуи. Что то блеклая она какая то ... А поярче нельзя ?

SergKis: alkresin При работе с xml, html файлами, возможно, надо читать кодировку и при Utf-8 включать автоматом utf8 в hbedit

Andrey: Можно сделать переход на редактирование сразу в меню ?

SergKis: Andrey пишет Я посмотрел раскраску под МиниГуи. Что то блеклая она какая то ... А поярче нельзя ? В ini Александр уже подготовил несколько вариантов раскраски секции [PALETTE_0],[PALETTE_1],[PALETTE_2],[PALETTE_3],[PALETTE_4]. Я взял готовый [PALETTE_4] (для моих глаз хорошо), про добавку еще цвета, который поярче и есть, я просил выше. В hbedit можно создать палитру цветов свою и применить к keywords1-4 самостоятельно и довольно не трудно.

Andrey: Ещё по умолчанию хотелось бы иметь выход из редактора по Alt+X и Alt+Q (с сохранением всех файлов) как в ME7.

SergKis: Andrey пишет Можно сделать переход на редактирование сразу в меню ? Стремлюсь к мах возможному переносу в меню windows режимов hbedit. То что кидал теме и выкладывал тут выше - состояние на сегодня

Andrey: В ME7 очень удобное меню по правому Ctrl+Enter В нём можно сделать свои настройки по компиляции и запуску проекта. Всё сразу сохраняется в настройках и при переносе ничего заново настраивать не надо. Вот такое меню по по правому Ctrl+Enter: Можно ли сделать такое же меню запуска ?

SergKis: alkresin Можно сделать, чтобы edi_SeleFile() понимала массив на входе ? К примеру[pre2] FUNCTION edi_SeleFile( oEdit, cPath, y1, x1, y2, x2 ) LOCAL aMenu := iif( HB_ISARRAY( cPath ), AClone( cPath ), edi_Directory( cPath ) ), i, nPos, arr [/pre2] для формирования массива из нескольких масок ф-ей edi_Directory( cPath ) в цикле

SergKis: alkresin SergKis пишет Исправил так TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bOnKey := {|o,n| EdOnKey(o, n) }, ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y,cExe) }, ; __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) } Может не очень красиво, но работает. Оказалось не везде работает. Обработка сообщений меню [pre2] STATIC FUNCTION Window_OnKey( o, n ) LOCAL r := -1 IF n == 30302 // Split window horizontally j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 2, Int( (o:y2-o:y1)/2 ) ) j:lReadOnly := .T. // работает показ координат правильно ELSEIF n == 30303 // Split window vertically j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 3, Int( (o:x2-o:x1)/2 ) ) j:lReadOnly := .T. // работает показ координат правильно ELSEIF n == 30304 // Switch window IF Len(o:aWindows) > 1 // r := edi_KeyCToN( "Ctrl-Tab" ) mnu_ToBuf( o, edi_FindWindow( o, .T. ) ) __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) // переключение работает правильно из меню. Ctrl+Tab, Ctrl+w,w - показ // неверный координат после переключения, после стрелки - все правильно ENDIF ELSEIF n == 30305 // Open window fully IF o:oParent != Nil edi_CloseWindow( o, .F. ) o:oParent := Nil o:y1 := o:aRect[1] := o:aRectFull[1] o:x1 := o:aRect[2] := o:aRectFull[2] o:y2 := o:aRect[3] := o:aRectFull[3] o:x2 := o:aRect[4] := o:aRectFull[4] IF o:lTopPane o:y1 ++ ENDIF o:TextOut() edi_SetPos( o ) __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) // работает показ координат правильно ENDIF ELSEIF n == 30306 // Close window ( fully window ) IF o:oParent != Nil mnu_Exit( o ) ELSEIF Len(o:aWindows) > 1 r := K_ESC ENDIF ENDIF RETURN r [/pre2] Как это побороть ?

SergKis: PS Показ неверных координат по колонке ошибка. Row = 184, Col = 4 . Создаем под окно Ctrl-w,s, значение Row = 184, Col = 4 в под окне. Переходим в позицию Row = 192, Col = 7 Переключение по Ctrl-w,w пошаговое - жмем Ctrl-w => Row = 192, Col = 7 добавляем w, Row = 184, Col = 8 жмем -> Row = 184, Col = 5 жмем <- Row = 184, Col = 4 - жмем Ctrl-w => Row = 184, Col = 4 (правильно) добавляем w, Row = 192, Col = 29 (должна быть Col = 7) - жмем Ctrl-w => Row = 192, Col = 7 (правильно) добавляем w, Row = 184, Col = 8 (должна быть Col = 4) - жмем Ctrl-w => Row = 184, Col = 4 (правильно) добавляем w, Row = 192, Col = 29 (должна быть Col = 7) и т.д. При нажатии Ctrl-Tab получаем сразу конечные значения Row = 192, Col = 29 (должна быть Col = 7) и Row = 184, Col = 8 (должна быть Col = 4)

SergKis: SergKis пишет Как это побороть ? Ларчик просто открывался Поменялись способы добычи Row, Col в :WriteTopPane() (еле высмотрел) Перенес в свою процедуру. Убрал добавки с __keyBoard() тоже, все заработало Блин столько времени ... УРА!



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