On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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 
ПрофильЦитата Ответить
Ответов - 184 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]





Пост N: 2761
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.08.19 15:24. Заголовок: alkresin Что нужно ..


alkresin
Что нужно сделать, что бы при заданном :bWriteTopPane работало разделение окна на части (хотя бы 2а, по горизонтали или вертикали) без отображения данных на горизонтальной полоске.
Т.е. при
 
IF ::bWriteTopPane != Nil
Eval( ::bWriteTopPane, Self, lClear, y )
ELSE
...

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

Спасибо: 0 
ПрофильЦитата Ответить



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


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

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



Пост 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 
ПрофильЦитата Ответить



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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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



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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
moderator


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


SergKis пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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

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


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

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



Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
Ответов - 184 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 10
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет