Форум » [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 Что нужно сделать, что бы при заданном :bWriteTopPane работало разделение окна на части (хотя бы 2а, по горизонтали или вертикали) без отображения данных на горизонтальной полоске. Т.е. при[pre2] IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, lClear, y ) ELSE ...[/pre2] Была просто полоска и работа в разделенном окне.

SergKis: PS В 0 ой строке полоски нет, весь вывод данных на StatusBar из нее и при разделении окна на части тоже

alkresin: Была просто полоска и работа в разделенном окне. :bWriteTopPane := {|o,l,y| LOCAL nCol := Col(), nRow := Row() SetColor( o:cColorPane ) Scroll( y, o:x1, y, o:x2 ) IF o:oParent != Nil .AND. o:x1 == o:oParent:x2 + 2 Scroll( o:y1, o:x1-1, o:y2, o:x1-1 ) ENDIF SetColor( o:cColor ) DevPos( nRow, nCol ) RETURN Nil } В 0 ой строке полоски нет, весь вывод данных на StatusBar из нее и при разделении окна на части тоже Ничего не понял.


SergKis: alkresin пишет Ничего не понял. Имеется ввиду, что нет строки 0 с F9-Menu ... Данные из этой строки перенесутся в StatusBar, который будет организован в дальнейшем. Вопрос разделения работы по разделенному на части окну hbedit и вывода данных на строку горизонтальную разделения. :bWriteTopPane := {|o,l,y| LOCAL nCol := Col(), nRow := Row() SetColor( o:cColorPane ) Scroll( y, o:x1, y, o:x2 ) IF o:oParent != Nil .AND. o:x1 == o:oParent:x2 + 2 Scroll( o:y1, o:x1-1, o:y2, o:x1-1 ) ENDIF SetColor( o:cColor ) DevPos( nRow, nCol ) RETURN Nil } Не решило задачу разделения окна командами Ctrl-w, s или Ctrl-w, v Тут пример сборки https://TransFiles.ru/my9x2

SergKis: PS При перемещении в окне hbedit примера, появляется 0 строка с закраской, что не должно было бы быть. Такая строка уместна была бы по команде Ctrl-w, s , но только без вывода на нее данных. Вывод с нее перенаправить в StatusBar. По команде Ctrl-w, v окно делится верт. полосой, но без полосы в 0 строке. Вывод с нее, так же, перенаправить в StatusBar.

alkresin: Никак не мог взять в толк, что это за 0-ая строка и в чем, собственно, состоит проблема, пока не понял, что речь идет о вашей сборке, где вы отключили панель статуса, но хотите, чтобы при этом сохранились горизонтальные разделители окон. Для этого надо включить панель статуса в дочерних горизонтальных окнах и использовать только в них тот bWriteTopPane.

SergKis: alkresin пишет Для этого надо включить панель статуса в дочерних горизонтальных окнах и использовать только в них тот bWriteTopPane. Не понял где и что надо делать, что бы перехватывать вывод в статусную строку окна в фокусе, что бы перенаправить у себя индикацию в StatusBar., т.е. в работе вся клиентская область окна, включая 0 ую Понимал так, что bWriteTopPane это вывод данных на статусную строку (окна в фокусе), а горизонтальные\вертикальные разделители окон это свойство\метод механизма разделения окон не связанная с bWriteTopPane

alkresin: перехватывать вывод в статусную строку окна в фокусе Это в bWriteTopPane. Параметр lClear указывает, что надо только очистить строку панели (это когда соответствующее окно теряет фокус). Горизонтальный разделитель окон - это и есть панель статуса. Вертикальный рисуется тоже в :WriteTopPane().

SergKis: alkresin пишет Горизонтальный разделитель окон - это и есть панель статуса. Вертикальный рисуется тоже в :WriteTopPane() Может прорисовку их вынести до выполнения bWriteTopPane, что бы разделение на окна было в любом случае, с учетом исключения 0-ой строки (oe:y1 := 0 в :bNew). Тогда в блоке кода останется чистый вывод в статусную строку, в моем случае в StatusBar

SergKis: PS Если сделаю пустой блок[pre2] TEdit():bNew := {|oe| oe:lTopPane := .F., ; oe:y1 := 0, ; oe:y2 := MaxRow(), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } FUNCTION StbLine( o, l, y ) LOCAL nCol := Col(), nRow := Row() /* SetColor( o:cColorPane ) Scroll( y, o:x1, y, o:x2 ) IF o:oParent != Nil .AND. o:x1 == o:oParent:x2 + 2 Scroll( o:y1, o:x1-1, o:y2, o:x1-1 ) ENDIF SetColor( o:cColor ) DevPos( nRow, nCol ) */ RETURN Nil [/pre2] то работы с разделенным окном (Ctrl-w, s или v) совсем не будет. а мы только вывод в статусную строку отключили, а координаты работы в окне\окнах должны были остаться и по Ctrl+TAB (переключение фокуса) окна (позиция курсора) переключаться, а этого нет совсем. Т.е. нет разделения окна на части, а похоже есть 2а полноэкранных окна, т.к. передвинув курсор в одном и сделав Ctrl+TAB видим разницу позиций курсора.

alkresin: SergKis пишет: oe:y1 := 0, ; oe:y2 := MaxRow(), ; ... мы только вывод в статусную строку отключили, а координаты работы в окне\окнах должны были остаться Как же они могли остаться, если вы их установили самостоятельно в полный размер?

SergKis: alkresin пишет Как же они могли остаться, если вы их установили самостоятельно в полный размер? Тогда не понятно, как установить всю клиентскую область для основного окна (с 0-ой строкой), а подокна работали разбивая окно на части (как сейчас с 0-ой статусной строкой) и перехватывать данные для статусной строки для вывода в др. месте.

alkresin: Если есть подокна, то основное окно занимает уже не все пространство, а только то, что осталось от подокон. И устанавливать для него координаты не надо - это делается автоматически. :bWriteTopPane - самое подходящее место для вывода какой-то информации в др.место, он вызывается независимо от того, имеется статусная строка (::lTopPane := .T.) или нет.

alkresin: Обновлен hbedit. Расширено меню Windows. В keymap из hbedit.ini теперь можно задавать сочетания клавиш, разделяя клавиши символом | Например, Alt-1=>Ctrl-W|s

SergKis: alkresin пишет Если есть подокна, то основное окно занимает уже не все пространство, а только то, что осталось от подокон. И устанавливать для него координаты не надо - это делается автоматически. Вопрос остался, как убрать строку с F9-Menu и на месте этой строки была строка текста, т.е как убрать статусную строку ? В windows редакторах в меню "Настройки" есть опции - показывать панель инструментов - показывать строку статуса - показывать колонку нумерации строк текста Если панель инструментов нету, то остальные пункты интересны в работе. :bWriteTopPane - самое подходящее место для вывода какой-то информации в др.место Это как раз понятно, более менее

alkresin: SergKis пишет: Вопрос остался, как убрать строку с F9-Menu и на месте этой строки была строка текста, т.е как убрать статусную строку ? Самый простой способ - при вызове TEdit():New(cText, cFileName, y1, x1, y2, x2, cColor, lTopPane) установить 8-й параметр lTopPane в .F. Другой - прописать в :bNew o:lTopPane := .F. o:y1 --

SergKis: alkresin пишет Другой - прописать в :bNew o:lTopPane := .F. o:y1 -- Это сработало. Спасибо. Работает даже Ctrl-w,v , есть разделитель вертикальный. При Ctrl-w,s нет горизонтального разделителя, но окно\подокно работает

alkresin: При Ctrl-w,s нет горизонтального разделителя, но окно\подокно работает Значит, для этих подокон lTopPane должно быть .T., это можно сделать в bNew, например, так: if o:oParent == nil o:lTopPane := .F. o:y1 -- endif т.е., не убирать панель статуса для дочерних окон. Или: if o:y1 == o:aRectFull[1]+1 ... чтобы панели статуса не было у верхних окон.

SergKis: alkresin делал так [pre2] TEdit():bNew := {|oe| iif( oe:oParent == Nil, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } [/pre2] не изменило от пред. поста, т.е. нет горизонтальной полосы-разделителя

SergKis: alkresin пишет В keymap из hbedit.ini теперь можно задавать сочетания клавиш, разделяя клавиши символом | Например, Alt-1=>Ctrl-W|s Такое сочетание работает, а через Ctrl-1 или Ctrl-~ нет. keymap=Ctrl-N=>Shift-F4,Ctrl-O=>Ctrl-F4,Ctrl-F=>F7,Ctrl-G=>Alt-F8,Ctrl-R=>Ctrl-F7,Alt-1=>Ctrl-w|v,Ctrl-1=>Ctrl-w|v,Ctrl-~=>Ctrl-w|s Ctrl+<клавиша> рядом и "роднее" и удобнее, чем Alt+<клавиша> Ctrl+TAB -переключить окна Ctrl+~ - горизонтальное разделение Ctrl+1 - вертикальное



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