Форум » [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

alkresin: Обновлен hbedit. Добавлены команды Vim-mode: f,F,* В диалоги поиска и поиска/замены подставляются предыдущие значения. В меню/списки добавлена поддержка мышиного колеса. Запоминается последний каталог при открытии файла.

SergKis: alkresin Рабочие клавиши в редакторах Ctrl+N - New file edit (чистое\новое окно редактора, как запуск hbedit без параметра имя файла) Ctrl+O - Open file (запрос на файл F4 в F9) Ctrl+S - Save file (альтернатива F2 в F9)

alkresin: SergKis пишет: Рабочие клавиши в редакторах Знаю, а еще в Windows-редакторах для поиска используется обычно Ctrl-F, а не F7. Я думал на эту тему, но, в конце концов, решил приберечь эти клавиши (Ctrl-N и пр.) для чего-нибудь более полезного. А за основу я брал Far и mc. Там, и не только там, сохранение именно по F2 - и ничего, мы с этим живем). Хотелось бы, конечно, чтобы набор клавиш был максимально знакомым, но сохранить совместимость со всеми редакторами нельзя - просто потому, что они разные.


SergKis: alkresin пишет Там, и не только там, сохранение именно по F2 - и ничего, мы с этим живем). Живем, но кто то привык к др. комбинациям клавиш, к примеру, F3 - Save и т.д. Может сделать таблицу ключа и выполнения, что бы набрать удобную, под себя, комбинацию. Возможность отключить Vim, никогда не использовался и не будет в силу привычки. Не увидел, как сделать вариант New file при загруженном уже др. файле. Как убрать строку меню (без нее), нажимая кл. F9. Попросил товарища собрать для меня (давно не работал) gtwvt вариант сборки с Main menu и StatusBar и пытаться встроить в окно hbedit

SergKis: alkresin пишет Знаю, а еще в Windows-редакторах для поиска используется обычно Ctrl-F, а не F7 Еще Ctrl+R и перечисленные выше - это рабочие клавиши. Linuks и Mac (еще можно встретить) в нашей нет от слова совсем. С Far редактором не работают (кроме нескольких человек). Показал hbedit 2м людям - полный ступор, как работать

SergKis: PS в нашей деревне нет от слова совсем.

SergKis: SergKis пишет Не увидел, как сделать вариант New file при загруженном уже др. файле. УПС. Нашел Shift+F4

SergKis: alkresin Товарищ собрал пробный вид, куда хотелось бы встроить hbedit. Тут https://TransFiles.ru/kvd95 Как это правильно сделать ?

alkresin: SergKis пишет: Может сделать таблицу ключа и выполнения, что бы набрать удобную, под себя, комбинацию. Может быть, подумываю об этом. Возможность отключить Vim, никогда не использовался и не будет в силу привычки. Да, имеет смысл, чтоб не пугать условных менеджеров/экономистов - они, действительно, вряд ли будут когда-нибудь его использовать. Как убрать строку меню (без нее), нажимая кл. F9. Вы имеете ввиду верхнюю строку, панель статуса? Программно она отключается при вызове TEdit():New(cText, cFileName, y1, x1, y2, x2, cColor, lTopPane) - lTopPane должен быть .F. Показал hbedit 2м людям - полный ступор, как работать И что же там может повергнуть в ступор? Я понимаю, если бы Vim-режим был ыключен по умолчанию, а так - жми на клавиши и вводи себе текст, как во всех редакторах...

alkresin: SergKis пишет: Товарищ собрал пробный вид, куда хотелось бы встроить hbedit. Я не знаком с синтаксисом wvt_AppendMenu(), что-то не нашел этой функции нигде в Harbour. Где там указывается действие, соответствующее пункту меню?

SergKis: alkresin пишет Я не знаком с синтаксисом wvt_AppendMenu(), что-то не нашел этой функции нигде в Harbour. Где там указывается действие, соответствующее пункту меню? Описание своих ф-и wvt (товарищ дорабатывал gtwvt еще в hb 2.0) [pre2] wvt_CreateStatusBar() создает статусбар wvt_SBSetText(Text, [part]) wvt_SetProgress( 2, 2048) - Поставить градусник на размер inem StatusBar wvt_SetProgress( 2 ) - Удалить градусник wvt_SetProgress() - Продвинуть на шаг wvt_CreateMenu( [lMain] ) -> hMenu Создаем пустое меню lMain - TRUE создать главное меню для програмы FALSE создать PopUpMenu - подключаемое или отдельное ( Default ) wvt_CreatePopUpMenu() -> hMenu2 ??? Создаем пустое подключаемое меню wvt_AppendMenu(hMenu, cCaption, nKey, [cFlags] ) Добавить пункт в меню cCaption - Текст меню В тексте работает символ Chr(9) nKey - Этот код будет послан в очередь (обработка в SetKey(nKey, {||...}) ) cFlag - строка символов в любой комбинации регистр не имеет значение 'B' - Bold выделеный пункт меню 'C' - Cheked Помечен галочкой 'D' - Disable Серый не работающий 'N' - Начинается новая колонка 'H' - При первом открытии меню курсор стоит на этой позиции wvt_AppendMenu( hMenu ) Добавить разделителseparator wvt_SetMenu( hMenu ) -> .T./.F. Установить меню в окно wvt_SetPopUpMenu( hMenu, hMenu2, "Заголовок") -> .T./.F. Подключить к меню подменю wvt_DeleteMenu( hMenu, nPos) -> .T./.F. Удалить меню в позиции Если это подменю то оно уничтожается а Handler освободается. wvt_DestroyMenu( hMenu ) -> .T./.F. Удаляет меню и освобождает память занимаемую меню wvt_TrackPopupMenu( hMenu ) -> nKey Показать подготовленое меню как PopUp [/pre2]

SergKis: PS обработчик ставится на SetKey() или ловится в nKey := inkey(0, ..._ALL) По StatusBar[pre2] METHOD WriteTopPane( lClear ) CLASS TEdit ... IF HB_ISBLOCK(::WriteTopPane) EVal(::bWriteTopPane, Self) RETURN Nil ENDIF IF ::lTopPane ... [/pre2] что то в таком духе, наверно

SergKis: alkresin пишет lTopPane должен быть .F. Спасибо, нашел. И что же там может повергнуть в ступор? Интерфейс, такого нет уже очень давно. Работа все время через несколько клавиш, т.е. - F9, 9, 0 - F11, 0 - частичное соответствие комбинациям клавиш windows (сбиваются), т.е. все действия получаются через F9

alkresin: SergKis пишет: обработчик ставится на SetKey() или ловится в nKey := inkey(0, ..._ALL) Здесь события ловятся Inkey( 0, HB_INKEY_ALL + HB_INKEY_EXT ) - принимаются и обрабатываются расширенные коды. Так, например код F2 не -1, а 0x41000002. Попробуйте использовать в wvt_AppendMenu() именно эти коды.

SergKis: alkresin пишет Попробуйте использовать в wvt_AppendMenu() именно эти коды. Попробовал, не помогло, т.е. [pre2] wvt_AppendMenu( hMnu1, "Open file " + c9 + "F4", 1090519044 ) wvt_AppendMenu( hMnu1, "Menu " + c9 + "F9", 1090519049 ) ... /* i := 0 j := '' DO WHILE i < 10 k := Inkey( 0, HB_INKEY_ALL + HB_INKEY_EXT ) n := hb_keyStd( k ) i++ ? i, k, n j += hb_ntos(n)+c9+hb_ntos(k) + chr(13)+chr(10) ENDDO hb_memowrit('_.txt', j) */ [/pre2] Если убираю коментарии, то ловятся коды как надо и K_F4 и K_F9

alkresin: SergKis пишет: Попробовал, не помогло, Тогда ставьте bOnkey: oEdit:bOnkey := {|o,n| mykeyhandler( o,n )} и в этом mykeyhandler() можно посмотреть, какие коды (n) приходят при выборе пункта меню. Скорее всего, это будут чистые K_F2 и пр. В этом случае в том же mykeyhandler() их надо подменить на расширенные: [pre2]IF n == K_F2 RETURN 0x41000002 ELSEIF ... ELSE RETURN 0 ENDIF[/pre2]

SergKis: alkresin пишет Тогда ставьте bOnkey: oEdit:bOnkey := {|o,n| mykeyhandler( o,n )} Имеется в виду эти места ? Или другое [pre2] FOR i := 1 TO Len( aFiles ) TEdit():New( Iif(!Empty(aFiles[ i ]),Memoread(aFiles[ i ]),""), aFiles[ i ], 0, 0, nScreenH-1, nScreenW-1 ) ATail(TEdit():aWindows):bOnkey := {|o,n| mykeyhandler( o,n )} IF lRO ATail(TEdit():aWindows):lReadOnly := .T. ENDIF NEXT IF Empty( TEdit():aWindows ) TEdit():New( "", "", 0, 0, nScreenH-1, nScreenW-1 ) ATail(TEdit():aWindows):bOnkey := {|o,n| mykeyhandler( o,n )} IF lRO ATail(TEdit():aWindows):lReadOnly := .T. ENDIF ENDIF [/pre2]

SergKis: alkresin Сделал как выше, только вывел в log что приходит [pre2] bBlk := {|o,n| ToLog(.T., 'nKey =', n, hb_keyStd(n)) Return 0 } [/pre2] получил [pre2] ====================== это через меню nKey = 1103 1103 nKey = 1157632005 1001 nKey = 1157627908 1001 nKey = 1157627907 1001 nKey = 1157627906 1001 nKey = 1157640196 1001 nKey = 1157636100 1001 nKey = 1157636099 1001 nKey = 1157627908 1001 nKey = 1157627907 1001 nKey = 1157627906 1001 nKey = 1157640196 1001 nKey = 1157636100 1001 nKey = 1157632005 1001 nKey = 1104 1104 nKey = 1103 1103 nKey = 1157632004 1001 nKey = 1157627907 1001 nKey = 1157627906 1001 nKey = 1157640196 1001 nKey = 1157627907 1001 nKey = 1157627906 1001 nKey = 1157627905 1001 nKey = 1157640195 1001 nKey = 1157636099 1001 nKey = 1157632003 1001 nKey = 1090519065 27 ========================= это по нажатию клавиш F4, Esc, F9, Esc, Esc - выход nKey = 1103 1103 nKey = 1157632003 1001 nKey = 1090519044 -3 nKey = 1090519049 -8 nKey = 1090519065 27 [/pre2] на меню не реагирует

alkresin: SergKis пишет: это через меню При нажатии одного пункта меню? 1001 - это K_MOUSEMOVE, 1003 - K_LBUTTONUP, 1004 - K_RBUTTONDOWN. Немного непонятно, где K_LBUTTONDOWN и при чем тут K_RBUTTONDOWN, но, в целом, ясно, что вы переместили мышь и щелкнули. Кстати, вы вернули коды в wvt_AppendMenu() обратно на простые (не расширенные) ?

SergKis: alkresin пишет Кстати, вы вернули коды в wvt_AppendMenu() обратно на простые (не расширенные) ? Нет, стоят расширенные. Но они через меню не пройдут, как выяснилось (поговорил с товарищем), ограничения win api на число в 2а байта. А тут четыре, т.е. расширенные из меню не пройдут. Посмотрел в более спокойной обстановке - это так.



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