Автор | Сообщение |
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) Если есть идеи для реализации - буду рад услышать.
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|
SergKis
|
| постоянный участник
|
Пост N: 2761
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.08.19 15:24. Заголовок: alkresin Что нужно ..
alkresin Что нужно сделать, что бы при заданном :bWriteTopPane работало разделение окна на части (хотя бы 2а, по горизонтали или вертикали) без отображения данных на горизонтальной полоске. Т.е. при IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, lClear, y ) ELSE ... Была просто полоска и работа в разделенном окне.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2762
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.08.19 15:53. Заголовок: PS В 0 ой строке пол..
PS В 0 ой строке полоски нет, весь вывод данных на StatusBar из нее и при разделении окна на части тоже
|
|
|
alkresin
|
| moderator
|
Пост N: 1349
Зарегистрирован: 06.07.06
|
|
Отправлено: 22.08.19 16:29. Заголовок: Была просто полоска ..
цитата: | Была просто полоска и работа в разделенном окне. |
| :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
|
| постоянный участник
|
Пост N: 2763
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.08.19 18:08. Заголовок: alkresin пишет Ничег..
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
|
| постоянный участник
|
Пост N: 2764
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.08.19 18:25. Заголовок: PS При перемещении в..
PS При перемещении в окне hbedit примера, появляется 0 строка с закраской, что не должно было бы быть. Такая строка уместна была бы по команде Ctrl-w, s , но только без вывода на нее данных. Вывод с нее перенаправить в StatusBar. По команде Ctrl-w, v окно делится верт. полосой, но без полосы в 0 строке. Вывод с нее, так же, перенаправить в StatusBar.
|
|
|
alkresin
|
| moderator
|
Пост N: 1350
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.08.19 12:20. Заголовок: Никак не мог взять в..
Никак не мог взять в толк, что это за 0-ая строка и в чем, собственно, состоит проблема, пока не понял, что речь идет о вашей сборке, где вы отключили панель статуса, но хотите, чтобы при этом сохранились горизонтальные разделители окон. Для этого надо включить панель статуса в дочерних горизонтальных окнах и использовать только в них тот bWriteTopPane.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2765
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.08.19 13:00. Заголовок: alkresin пишет Для э..
alkresin пишет цитата: | Для этого надо включить панель статуса в дочерних горизонтальных окнах и использовать только в них тот bWriteTopPane. |
| Не понял где и что надо делать, что бы перехватывать вывод в статусную строку окна в фокусе, что бы перенаправить у себя индикацию в StatusBar., т.е. в работе вся клиентская область окна, включая 0 ую Понимал так, что bWriteTopPane это вывод данных на статусную строку (окна в фокусе), а горизонтальные\вертикальные разделители окон это свойство\метод механизма разделения окон не связанная с bWriteTopPane
|
|
|
alkresin
|
| moderator
|
Пост N: 1351
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.08.19 13:45. Заголовок: перехватывать вывод ..
цитата: | перехватывать вывод в статусную строку окна в фокусе |
| Это в bWriteTopPane. Параметр lClear указывает, что надо только очистить строку панели (это когда соответствующее окно теряет фокус). Горизонтальный разделитель окон - это и есть панель статуса. Вертикальный рисуется тоже в :WriteTopPane().
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2766
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.08.19 14:33. Заголовок: alkresin пишет Гориз..
alkresin пишет цитата: | Горизонтальный разделитель окон - это и есть панель статуса. Вертикальный рисуется тоже в :WriteTopPane() |
| Может прорисовку их вынести до выполнения bWriteTopPane, что бы разделение на окна было в любом случае, с учетом исключения 0-ой строки (oe:y1 := 0 в :bNew). Тогда в блоке кода останется чистый вывод в статусную строку, в моем случае в StatusBar
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2767
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.08.19 14:58. Заголовок: PS Если сделаю пусто..
PS Если сделаю пустой блок 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 то работы с разделенным окном (Ctrl-w, s или v) совсем не будет. а мы только вывод в статусную строку отключили, а координаты работы в окне\окнах должны были остаться и по Ctrl+TAB (переключение фокуса) окна (позиция курсора) переключаться, а этого нет совсем. Т.е. нет разделения окна на части, а похоже есть 2а полноэкранных окна, т.к. передвинув курсор в одном и сделав Ctrl+TAB видим разницу позиций курсора.
|
|
|
alkresin
|
| moderator
|
Пост N: 1353
Зарегистрирован: 06.07.06
|
|
Отправлено: 23.08.19 17:23. Заголовок: SergKis пишет: ..
SergKis пишет: цитата: | oe:y1 := 0, ; oe:y2 := MaxRow(), ; ... мы только вывод в статусную строку отключили, а координаты работы в окне\окнах должны были остаться |
| Как же они могли остаться, если вы их установили самостоятельно в полный размер?
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2768
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.08.19 17:54. Заголовок: alkresin пишет Как ж..
alkresin пишет цитата: | Как же они могли остаться, если вы их установили самостоятельно в полный размер? |
| Тогда не понятно, как установить всю клиентскую область для основного окна (с 0-ой строкой), а подокна работали разбивая окно на части (как сейчас с 0-ой статусной строкой) и перехватывать данные для статусной строки для вывода в др. месте.
|
|
|
alkresin
|
| moderator
|
Пост N: 1354
Зарегистрирован: 06.07.06
|
|
Отправлено: 28.08.19 13:20. Заголовок: Если есть подокна, т..
Если есть подокна, то основное окно занимает уже не все пространство, а только то, что осталось от подокон. И устанавливать для него координаты не надо - это делается автоматически. :bWriteTopPane - самое подходящее место для вывода какой-то информации в др.место, он вызывается независимо от того, имеется статусная строка (::lTopPane := .T.) или нет.
|
|
|
alkresin
|
| moderator
|
Пост N: 1355
Зарегистрирован: 06.07.06
|
|
Отправлено: 28.08.19 13:23. Заголовок: Обновлен hbedit. Рас..
Обновлен hbedit. Расширено меню Windows. В keymap из hbedit.ini теперь можно задавать сочетания клавиш, разделяя клавиши символом | Например, Alt-1=>Ctrl-W|s
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2775
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.19 17:03. Заголовок: alkresin пишет Если ..
alkresin пишет цитата: | Если есть подокна, то основное окно занимает уже не все пространство, а только то, что осталось от подокон. И устанавливать для него координаты не надо - это делается автоматически. |
| Вопрос остался, как убрать строку с F9-Menu и на месте этой строки была строка текста, т.е как убрать статусную строку ? В windows редакторах в меню "Настройки" есть опции - показывать панель инструментов - показывать строку статуса - показывать колонку нумерации строк текста Если панель инструментов нету, то остальные пункты интересны в работе. цитата: | :bWriteTopPane - самое подходящее место для вывода какой-то информации в др.место |
| Это как раз понятно, более менее
|
|
|
alkresin
|
| moderator
|
Пост N: 1356
Зарегистрирован: 06.07.06
|
|
Отправлено: 28.08.19 18:18. Заголовок: SergKis пишет: Вопр..
SergKis пишет: цитата: | Вопрос остался, как убрать строку с F9-Menu и на месте этой строки была строка текста, т.е как убрать статусную строку ? |
| Самый простой способ - при вызове TEdit():New(cText, cFileName, y1, x1, y2, x2, cColor, lTopPane) установить 8-й параметр lTopPane в .F. Другой - прописать в :bNew o:lTopPane := .F. o:y1 --
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2776
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.19 18:48. Заголовок: alkresin пишет Друго..
alkresin пишет цитата: | Другой - прописать в :bNew o:lTopPane := .F. o:y1 -- |
| Это сработало. Спасибо. Работает даже Ctrl-w,v , есть разделитель вертикальный. При Ctrl-w,s нет горизонтального разделителя, но окно\подокно работает
|
|
|
alkresin
|
| moderator
|
Пост N: 1357
Зарегистрирован: 06.07.06
|
|
Отправлено: 28.08.19 19:05. Заголовок: При Ctrl-w,s нет гор..
цитата: | При Ctrl-w,s нет горизонтального разделителя, но окно\подокно работает |
| Значит, для этих подокон lTopPane должно быть .T., это можно сделать в bNew, например, так: if o:oParent == nil o:lTopPane := .F. o:y1 -- endif т.е., не убирать панель статуса для дочерних окон. Или: if o:y1 == o:aRectFull[1]+1 ... чтобы панели статуса не было у верхних окон.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2777
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.19 19:27. Заголовок: alkresin делал так ..
alkresin делал так TEdit():bNew := {|oe| iif( oe:oParent == Nil, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } не изменило от пред. поста, т.е. нет горизонтальной полосы-разделителя
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2778
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.08.19 22:41. Заголовок: alkresin пишет В key..
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 - вертикальное
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|