On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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)

Если есть идеи для реализации - буду рад услышать.

Спасибо: 0 
Профиль
Ответов - 300 , стр: 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
...

Была просто полоска и работа в разделенном окне.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2762
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.08.19 15:53. Заголовок: PS В 0 ой строке пол..


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

Спасибо: 0 
Профиль
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 из нее и при разделении окна на части тоже


Ничего не понял.

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2764
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.08.19 18:25. Заголовок: PS При перемещении в..


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1350
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.08.19 12:20. Заголовок: Никак не мог взять в..


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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2765
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.08.19 13:00. Заголовок: alkresin пишет Для э..


alkresin пишет
 цитата:
Для этого надо включить панель статуса в дочерних горизонтальных окнах и использовать только в них тот bWriteTopPane.


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1351
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.08.19 13:45. Заголовок: перехватывать вывод ..



 цитата:
перехватывать вывод в статусную строку окна в фокусе


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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2766
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.08.19 14:33. Заголовок: alkresin пишет Гориз..


alkresin пишет
 цитата:
Горизонтальный разделитель окон - это и есть панель статуса. Вертикальный рисуется тоже в :WriteTopPane()


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

Спасибо: 0 
Профиль
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 видим разницу позиций курсора.

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1353
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 23.08.19 17:23. Заголовок: SergKis пишет: ..


SergKis пишет:

 цитата:
oe:y1 := 0, ;
oe:y2 := MaxRow(), ;
...
мы только вывод в статусную строку отключили, а координаты работы в окне\окнах должны были остаться


Как же они могли остаться, если вы их установили самостоятельно в полный размер?

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2768
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.08.19 17:54. Заголовок: alkresin пишет Как ж..


alkresin пишет
 цитата:
Как же они могли остаться, если вы их установили самостоятельно в полный размер?


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1354
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.08.19 13:20. Заголовок: Если есть подокна, т..


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

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 1355
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.08.19 13:23. Заголовок: Обновлен hbedit. Рас..


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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2775
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.08.19 17:03. Заголовок: alkresin пишет Если ..


alkresin пишет
 цитата:
Если есть подокна, то основное окно занимает уже не все пространство, а только то, что осталось от подокон. И устанавливать для него координаты не надо - это делается автоматически.


Вопрос остался, как убрать строку с F9-Menu и на месте этой строки была строка текста, т.е как убрать статусную строку ?
В windows редакторах в меню "Настройки" есть опции
- показывать панель инструментов
- показывать строку статуса
- показывать колонку нумерации строк текста
Если панель инструментов нету, то остальные пункты интересны в работе.

 цитата:
:bWriteTopPane - самое подходящее место для вывода какой-то информации в др.место


Это как раз понятно, более менее

Спасибо: 0 
Профиль
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 --

Спасибо: 0 
Профиль
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 нет горизонтального разделителя, но окно\подокно работает

Спасибо: 0 
Профиль
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
...

чтобы панели статуса не было у верхних окон.

Спасибо: 0 
Профиль
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) } }

не изменило от пред. поста, т.е. нет горизонтальной полосы-разделителя

Спасибо: 0 
Профиль
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 - вертикальное

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 87
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет