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

LYSK: Ссылку на бинарник можно? Из исходников не получается у меня..

alkresin: LYSK пишет: Ссылку на бинарник можно? Из исходников не получается у меня.. Бинарник еще не выкладывал. Может, завтра, или сегодня попозже. А почему не получается собрать? Какие ошибки выдает?

Sergy: alkresin пишет: Если есть идеи для реализации - буду рад услышать. 1) Во многих современных "программистских" реакторах есть отличная штука - автозавершение (syntax completion). Привык в редакторе для Far, но там какой-то баг - при редактировании "большого" файла (~30-60 Кб) и выходе из него в главное окно файла с вероятностью ~1/5 не запускается hbmk2. Причем чем дольше редактируешь и больше размер текста - тем вероятность выше. (( 2) Хотелось-бы свертку блоков. Хотя-бы для начала функций/процедур. 3) Очень удобная штука - анализ зависимостей. Т.е. выбираем имя переменной/функции, и "где-то сбоку" появляется удобный навигатор с быстрыми переходами к тексту функции, где встречается это имя. В Far тоже реализовано в виде расширения, но тоже, к сожалению, через ж... Готов помочь с реализацией, если сочтете нужным добавить такой функционал.


nick_mi: Не очень понятно, зачем для текстового редактора библиотека RDDLETO.LIB

SergKis: Sergy пишет Во многих современных "программистских" реакторах есть Вот пример редактора (быстрого на больших файлах) с хотелками (как пример) https://TransFiles.ru/oxqxo Немного модифициорванный товарищем по работе: - 866 это LV866 - Ctrl+Y удаление строки (в меню это было Повтор записи) - раскраска синтаксиса hb+hmg (она встроена, к сожалению, автором в прогу)

SergKis: PS F2 - Save F5 - Перечитать файл

alkresin: nick_mi пишет: Не очень понятно, зачем для текстового редактора библиотека RDDLETO.LIB Случайно попала, copy/paste с другого батника. Но я ее убрал еще пару дней назад. Обновите свою копию.

alkresin: Sergy пишет: 1) Во многих современных "программистских" реакторах есть отличная штука - автозавершение Да, автозавершение не помешало бы. 2) Хотелось-бы свертку блоков. Хотя-бы для начала функций/процедур. Вот к свертке не лежит у меня душа, предпочитаю навигацию по списку функций - ее я, кстати, сделал. Может, в силу привычки. 3) Очень удобная штука - анализ зависимостей. Так и не понял, что это. Как расширение называется?

SergKis: SergKis пишет Вот пример редактора Прошу прощения, положил сборку 64 bit, в ней не сделана Ctrl+Y. Вот сборка 32 bit https://TransFiles.ru/z3mos

Sergy: alkresin пишет: Так и не понял, что это. Как расширение называется? Чуть позже отвечу. Нужно вспомнить, где это видел...

SadStar2019: На моей XP - "Не является приложением Win32" На win7 запускается.

SergKis: SadStar2019 Если это о Notepad3, то см. https://www.rizonesoft.com/downloads/notepad3/ DOWNLOAD Notepad3_5.19.108.1602_Setup.exe (80971 downloads) PORTABLE Notepad3_5.19.108.1602.zip (33932 downloads) VERSION 5.19.108.1602 UPDATED January 8, 2019 FILE SIZE 2 MB LICENSE Open Source REQUIREMENTS Windows® 7, 8 / 8.1, 10 (32 and 64 bit)

ММК: alkresin пишет: Но хочется иметь что-то одно для всех платформ - не слишком навороченный, но чтоб было все что надо. alkresin пишет: Если есть идеи для реализации - буду рад услышать. Far хороший редактор. Его не надо тестировать , править и т.д. Компактный рабочий инструмент. Есть под винду, есть и под линукс. И есть возможность использования плагинов. С ним ( с фаром) все знакомы. Идея очень простая- напишите , если есть такая необходимость, плагин (плагины) . Если получится хороший это будет действительно не только интересно, но и полезно :))

alkresin: ММК пишет: Far хороший редактор. Его не надо тестировать , править и т.д Это призыв не строить велосипеды) ? Я сам большой поклонник Far'а, это мой главный инструмент. Но вот его версия под Линукс... Пробовал года два назад - сейчас уже не помню, что за проблемы были, но они оказались достаточно серьезными, чтобы я его оттуда удалил и до сих пор не вспоминал, поэтому до сих пор приходится пользоваться mc. Кроме того, этот редактор (hbedit) можно встраивать в свои консольные приложения. Плагины, кстати, у меня тоже есть, и их можно будет компилировать из самого редактора, даже не имея под рукой компиляторов (hb_compileFromBuf() ).

MIKHAIL: Да, хорошего встроенного редактора не хватало.

alkresin: Создал новую страницу у себя на сайте для hbedit: http://www.kresin.ru/hbedit.html, оттуда его можно скачать в собранном виде. Вот то, что сделано на сегодняшний день: - Мультирежимность - кроме основного режима редактирования есть режимы выделения, Vim - подобный и командный режимы. - Поддержка разных кодировок, в т.ч. Utf-8. - Возможность открытия произвольного количества окон. - Подсветка синтаксиса, в том числе подсветка парных скобок. - Поддержка закладок, поиск, переход на заданную строку и позицию в строке, переход на парные скобки. - Поддержка до 10 буферов Clipboard. - Неограниченное Undo. - Поддержка плагинов, написанных на Harbour и собранных в виде hrb-файлов. - Возможность компилировать и добавлять в редактор плагины прямо из редактора, причем для этого не требуется наличие Harbour или другого компилятора на компьютере. - Возможность помечать плагины как предназначенные для определенного типа файлов - чтобы они присутствовали в списке только для этих файлов (prg, c, xml, ...). - Возможность запускать на исполнение Harbour-код прямо из редактора.

SergKis: alkresin пишет оттуда его можно скачать в собранном виде. 1. Не определяет автоматом файлы utf-8 с BOM 2. Нет выделения вертикального блока Shift+Alt+ стрелки 3. F3 нажимаем выделяем данные в строке, жмем F3, получаем список Clipboard (так понимаю ситуацию), жму Esc и apps.err:[pre2] 04/14/19 17:47:09 Error BASE/1132 Bound error: array access Called from MNU_F3(1732) Called from TEDIT:ONKEY(829) Called from TEDIT:EDIT(279) Called from MAIN(72) 04/14/19 17:51:45 Error BASE/1132 Bound error: array access Called from MNU_F3(1732) Called from TEDIT:ONKEY(829) Called from TEDIT:EDIT(279) Called from MAIN(72) [/pre2] 4. Как при запуске уст. позицию каретки <строка>, <колонка> 5. Понял, что параметры экрана ставим через ini. Если вариантов параметров несколько (внешний запуск) 25, 80 25, 40 25, 120

SergKis: PS Как получить вариант виндосовской раскраски белый фон, черный\синий текст ?

Vlad04: alkresin 1)А насчёт возможности закоментировать ( снять комент ) строку, блок типа // Желательно, чтобы была возможность ? 2)История сохраненных файлов вроде сохраняется в файле hbedit.his, а как к ней получить доступ из программы ?

SergKis: Vlad04 пишет А насчёт возможности закоментировать ( снять комент ) Так, вроде, ставятся\снимаются коменты // и /* */

SergKis: alkresin Привычно Ctrl+Home - на начало, в hbedit Ctrl+PgUp Ctrl+End - в конец, в hbedit Ctrl+PgDn Ctrl+Z восстановить изменения, сделанные ранее, в hbedit вкл. какой то режим отличный от текущего Может есть таблица соответствия для клавиш и процедур, для управления ?

alkresin: SergKis пишет: 1. Не определяет автоматом файлы utf-8 с BOM Теперь определяет. 3. F3 нажимаем выделяем данные в строке, жмем F3, получаем список Clipboard (так понимаю ситуацию), жму Esc и apps.err: Исправлено. Бинарники на сайте обновлены. Кстати, чтобы пояснить: F3 как завершение выделения с копированием выделенного в один из буферов по выбору может быть нажато и в том случае, если выделение начиналось без F3, а любым другим способом. 2. Нет выделения вертикального блока Shift+Alt+ стрелки Да, пока нет. Буду делать. 4. Как при запуске уст. позицию каретки <строка>, <колонка> Как и другие опции редактора, это можно сделать между вызовами :New() и :Edit() - для этого эти методы и разделены: [pre2]oEdit := TEdit():New( cText, cFileName ) oEdit:nRow := 10 oEdit:nCol := 18 oEdit:Edit()[/pre2] Здесь :nRow и :nCol - абсолютная позиция курсора на экране, так что если окно редактора выведено не с 0,0, то надо сделать соответствующие вычисления ( + ::y1, + ::x1 ). Можно установить также :nyFirst, :nxFirst - смещение текста, если его вывод начинается не с самого начала. 5. Понял, что параметры экрана ставим через ini. Если вариантов параметров несколько (внешний запуск) 25, 80 25, 40 25, 120 Не понял, в чем вопрос, но на всякий случай поясню: у нас есть класс TEdit(), который можно встроить в свое приложение, и редактор hbedit, как самостоятельное приложение (в исходниках это один файл hbedit.prg, в котором содержится обработка параметорв, чтение ini и вызов TEdit().Hbedit читает и использует только секцию screen из hbedit.ini, TEdit - все остальные. Было бы странно, если бы встроенный редактор вдруг менял настройки экрана. Т.е., количество строк/колонок экрана и пр. устанавливает вызывающее TEdit() приложение (hbedit, например). Координаты окна редактора на экране могут быть заданы при вызове :New(): oEdit := TEdit():New( cText, cFileName, y1, x1, y2, x2, cColor )

alkresin: SergKis пишет: Как получить вариант виндосовской раскраски белый фон, черный\синий текст ? Если речь о TEdit(), то установкой :cColor, :cColorSel цвет выделенного текста), :cColorPane (цвет панели состояния). Если об HbEdit - я этот момент как-то упустил, надо будет добавить опции в ini-файл.

alkresin: Vlad04 пишет: 1)А насчёт возможности закоментировать ( снять комент ) строку, блок типа Желательно, чтобы была возможность ? Не понял, о чем вы. Если о поддержке выделения другим цветом комментариев, то она есть. 2)История сохраненных файлов вроде сохраняется в файле hbedit.his, а как к ней получить доступ из программы ? "Open file" из меню, или F4 - появляются опции "New file", "Open file" - вызывает диалог для ввода имени файла с возможностью выбора из дерева каталогов, и список из hbedit.his.

alkresin: SergKis пишет: Привычно Ctrl+Home - на начало, в hbedit Ctrl+PgUp Ctrl+End - в конец, в hbedit Ctrl+PgDn Вообще-то в Far и Ctrl+PgUp, Ctrl+PgDn аналогично работают, я ими и пользуюсь обычно. Впрочем, можно и Ctrl+Home, Ctrl+End Ctrl+Z восстановить изменения, сделанные ранее, в hbedit вкл. какой то режим отличный от текущего добавить. Здесь используется Alt-Backspace, я его в большинстве известных мне редакторов использую, в том числе и в Far. А этот "какой-то" режим - попытка реализовать некоторые возможности Vim. Если предложите какое-нибудь другое достаточно удобное сочетание клавиш для него, можно пообсуждать. Я сначала хотел Ctrl-Space, но потом обнаружил, что в Линукс-системах это сочетание недоступно, т.к. используется чем-то другим. Может есть таблица соответствия для клавиш и процедур, для управления ? Так в hbedit.help все есть (вызывается по F1), и в меню (F9) расписаны многие клавиши.

SergKis: alkresin пишет Как и другие опции редактора, это можно сделать между вызовами :New() и :Edit() - для этого эти методы и разделены То, что можно сделать свою сборку, встроить в прогу - понятно, но, скажу так, не хочется, т.к. вполне достаточно, у клиента, run редактора. У Far есть возможность запускать редактор с параметрами уст. каретки. Ранее выкладывал Notepad3, в нем целый список полезных параметров командной стоки (см. в "Справке").[pre2] Использование: Notepad3 [/?] […[Кодировка]] […[Окончания строк]] [/e] [/g] [/m] [/l] [/q] [/d] [/h] [/x] [/c] [/n] [/r| [/p] [/t] [/o] [/f] [/v] [/vd] [/z] [[диск:][путь]имя[…]] файл Должен быть последним аргументом, изначально без пробелов. + Несколько аргументов файлов (с кодированными пробелами). - Один аргумент файла (без кодированнных пробелов). Параметры: /? Показать это окно. … Кодировка (/ansi, /unicode, /unicodebe, /utf8, /utf8sig). … Формат окончаний строк (/crlf, /cr, /lf). /e Исходная кодировка файла. /g Перейти к указанной позиции (/g -1 конец файла). /m Найти указанный текст (/m- последний, /mr regex, /mb обратная косая черта). /l Автообновление измененных файлов. /q Форсировать создание новых файлов без запроса. /s Выбрать схему синтаксиса. /d Выбрать схему текста по умолчанию. /h Выбрать схему Web Source Code. /x Выбрать схему XML Document. /c Открыть новое окно и вставить содержимое буфера обмена. /b Открыть новое окно для сбора изменений буфера обмена. /n Всегда открывать новое окно (/ns один экземпляр файла). /r Переиспользовать окно (/rs один экземпляр файла). /p Задать положение и размер окна (/p0, /ps, /pf,l,t,r,b,m). /t Задать заголовок окна. /i Запустить иконкой в области уведомлений. /o Поверх других окон. /f Указать ini-файл (/f0 без ini-файла). /u Запуск с повышенными полномочиями. /v Распечатать файл немедленно и выйти. /vd Распечатать файл (открыть диалог печати). /z Пропустить следующий (применимо для поиска с регулярным выражением). Примеры: Notepad3 /utf8sig /crlf d:\temp\Test.txt … Новый файл: "Test.txt" Кодировка=UTF-8-BOM, Окончания=CRLF. Notepad3 /v d:\temp\Test.txt … Распечатать: "Test.txt" немедленно. [/pre2] Выделенное очень полезно.

SergKis: SergKis пишет 5. Понял, что параметры экрана ставим через ini. Если вариантов параметров несколько (внешний запуск) 25, 80 25, 40 25, 120 alkresin пишет Не понял, в чем вопрос Вопрос установки Mode(...) для экрана, т.к. для небольших данных достаточно 15 row height, 40 Col width и нужна позиция окна Y, X

SergKis: alkresin пишетКстати, чтобы пояснить: F3 как завершение выделения с копированием выделенного в один из буферов по выбору может быть нажато и в том случае, если выделение начиналось без F3, а любым другим способом. Возможно, для кого то, 10 Clipboard очень нужная опция, но по мне, она лишняя, т.к. в списке буферов текст не определяет однозначно что там (видно ~ 30-40 символов). Потом надо заниматься постоянной очисткой номерного Clipboard, что тоже удовольствия не доставляет, еще раз подчеркну, для меня. Режим Notepd3 /b Открыть новое окно для сбора изменений буфера обмена. Лучше решает поставленную задачу по 10 Clipboard По мне

SergKis: alkresin пишет А этот "какой-то" режим - попытка реализовать некоторые возможности Vim Даже не знаю, что это за возможности. Может через ini уст. есть такой режим или нет. Для аналога MemoEdit() у клиента, наверно, это не нужно Так в hbedit.help все есть (вызывается по F1), и в меню (F9) расписаны многие клавиши. Я о таблице Hash в hbedit, где код нажатой клавиши соответствует, к примеру, блоку кода исполнения. Что бы можно было переставить под себя те же Ctrl+PgUp\PgDn на Ctrl+Home\End Норошо бы иметь и цвета в Hash, чтобы отсылаться на них (задавать в ini)

SergKis: alkresin пишет у нас есть класс TEdit(), который можно встроить в свое приложение Не куда встраивать - все Windows hmg. Разговор о использовании вместо EDITBOX. Сейчас исп. Notepat3 (ранее был Notepad2). Минус у него, надо делать изменения в текстах и сборку, для изменения цветов и ключевых слов (не вынесено в ini) + прыгание каретки по концам строк+клавиши не привычно, приходится переназначать в текстах (Вы тоже предлагаете такой же механизм пересборки в основе). Плюс у него большая скорость при работе с большими файлам log. Клиенту нравится работать с одним большим файлом лог за год и больше (фрагментация по кварталам\месяцам не нравится), выбирая оттуда данные для разных справок в Excel\Word ...

SergKis: alkresin пишет Бинарники на сайте обновлены. Бяка при вводе новой строки из первой (позиции до текста в текущей line) позиции[pre2] до :Excel := upper(gIniC(:cCfg, [COM], 'Excel', 'Yes')) :Lang := upper(gIniC(:cCfg, [COM], 'Lang' , 'LV')) If ! :Lang $ 'LV,EN'; :Lang := 'LV' после Enter перед :Lang :Excel := upper(gIniC(:cCfg, [COM], 'Excel', 'Yes')) :Lang := upper(gIniC(:cCfg, [COM], 'Lang' , 'LV')) If ! :Lang $ 'LV,EN'; :Lang := 'LV' должно быть :Excel := upper(gIniC(:cCfg, [COM], 'Excel', 'Yes')) :Lang := upper(gIniC(:cCfg, [COM], 'Lang' , 'LV')) If ! :Lang $ 'LV,EN'; :Lang := 'LV' [/pre2]

SergKis: PS Вопрос\замечание. Зачем снимать выделение после Ctrl+C ? Если переключусь на др. текст, там сделаю (поправлю себя) Ctrl+C, вставлю в др. текст, вернусь в самый первый для повтора Ctrl+C, а он сброшен. Снимать предлагаю по клавишам перемещения или исключая Ctrl+C

SergKis: PS К Ctrl+C Если сделал Ctrl+C и обнаружил, что не дотянул 1,2 строки, а все сбросилось, начинай сначала выделять - не айс

alkresin: Пожалуй, соглашусь, что Ctrl-Z лучше оставить для Undo. Переключение режима переведу на Ctrl-Q. SergKis пишет: У Far есть возможность запускать редактор с параметрами уст. каретки. Как? Разве Far'овский редактор запускается отдельно из командной строки? /g Перейти к указанной позиции (/g -1 конец файла) Под позицией понимается номер строки? Вопрос установки Mode(...) для экрана, т.к. для небольших данных достаточно 15 row height, 40 Col width и нужна позиция окна Y, X Номер строки, размер - это все нетрудно сделать, а вот позиция окна - это вряд ли возможно сделать средствами gt - редактор-то консольный. Да и зачем? в списке буферов текст не определяет однозначно что там (видно ~ 30-40 символов). Потом надо заниматься постоянной очисткой номерного Clipboard, что тоже удовольствия не доставляет, еще раз подчеркну, для меня. Режим Notepd3 /b Открыть новое окно для сбора изменений буфера обмена. Лучше решает поставленную задачу по 10 Clipboard Полностью текст в списке и не нужен - вы же знаете, что туда помещали. И зачем очищать - не понял. Окно для сбора изменений - идея интересная, но вот насколько это удобно? Впрочем, не пробовал, не знаю.

alkresin: SergKis пишет: Даже не знаю, что это за возможности. Может через ini уст. есть такой режим или нет. Vim - редактор по умолчанию в Линукс консоли, редактор отличный, хоть и своеобразный). Но менеджеру/экономисту это действительно не нужно - так что опция в ini, отключающая его, вполне уместна. Я о таблице Hash в hbedit, где код нажатой клавиши соответствует, к примеру, блоку кода исполнения. В Harbour консоли это не так просто, поскольку с возвращаемыми inkey() кодами надо еще работать - они могут быть одинаковыми для разных сочетаний клавиш. Но я буду иметь ввиду такой вариант. Бяка при вводе новой строки из первой (позиции до текста в текущей line) позиции Да, вижу - autoindent некорректно срабатывает, надо будет исправить.

SergKis: alkresin пишет Разве Far'овский редактор запускается отдельно из командной строки? Раньше точно было, использовал для просмотра aef файлов VO без установленного VO, причем можно уст. и line и col Полностью текст в списке и не нужен - вы же знаете, что туда помещали К сожалению нужен, был в работе такой редактор (прям очень похоже список давал), т.к. как прваило идут тексты If ... elseIf ... Else или DO CASE ... CASE ... и если учесть windows словоблудие и длину слов, то имея 10 похожих строк, фиг поймешь что где лежит и куда хотел деть. В реале работал с одним Clipboard. Под позицией понимается номер строки? Да, номер строки, позиция 1 всегда а вот позиция окна - это вряд ли возможно сделать средствами gt - редактор-то консольный. Да и зачем Если пойдет консольный, то wvt, наверно, сделать можно. Там использовать Main menu и StatusBar. На замену Notepad3, hb править легче, чем C с прибамбасами.

SergKis: alkresin пишетОкно для сбора изменений - идея интересная, но вот насколько это удобно? Впрочем, не пробовал, не знаю. Очень удобно. Запускаем Notepad3 /f0 /b _Tmp.txt Теперь запускаем prg Farом, другой prg Akelpadом, Notepad3 и ходим по prg, помечаем строки и при Ctrl+C строки появляются в окне сборщике, дописываясь в конец. Так можно программу новую набрать или куски и потом из этого окна применить. Ctrl+A, Ctrl+X и все по новой Отлавливает текст в Clipboard и из др. программ

SergKis: alkresin пишетgt - редактор-то консольный. Да и зачем? Возможность запустить данные с карточек (нескольких) по координатам, к примеру, справа друг под другом. Если координат нет, только ини, в который запоминаются координаты, размеры где работали, то 2а, 3и таких ини и 3 запуска с параметром ини, так же позволит смотреть одновременно несколько данных вместо EditBox. Параметр /t задаст заголовок окна. В итоге - все прекрасно

Vlad04: SergKis Так, вроде, ставятся\снимаются коменты // и /* */ Как ? Ручками каждую строку ? Я имею ввиду - выделил блок и какой -то командой закоментировал или снял коментарии, как в Far е (и в 1с) , где можно поставить или убрать для блока //

SergKis: Vlad04 пишет Я имею ввиду - выделил блок и какой -то командой закоментировал или снял коментарии, как в Far е (и в 1с) , где можно поставить или убрать для блока Поставить вначале /* и в конце */ проще, чем тащить пометкой блок и вспоминать "какую то" команду. А ставить автоматом в выделенном блоке в каждую стоку // ? Зачем ? Но это по мне, как другим ... на любителя.

alkresin: Обновил Hbedit. Теперь Ctrl-Z как и Alt-BS делает Undo, Ctrl-Q меняет режим, Ctrl-Home И Ctrl-End работают как и Ctrl-PgUp, Ctrl-PgDn. Пофиксено кое-что. Добавлены параметры командной строки: -xy=xPos, yPos - установка в пикселях начального положения окна редактора (только для Windows) -f iniFileName - имя ini-файла вместо hbedit.ini

alkresin: Vlad04 пишет: Я имею ввиду - выделил блок и какой -то командой закоментировал Теперь понятно. Надо просто написать соответствующий плагин. Они здесь пишутся на чистом Harbour, компилируются и устанавливаются прямо из редактора. Могу оказать методическую помощь).

SergKis: alkresin fedit.prg line 215[pre2] ::aText := hb_ATokens( cText, Chr(10) ) ::cEol := Iif( Right( ::aText[1],1 ) == Chr(13), Chr(13) + Chr(10), Chr(10) ) не точное определение, есть файлы prg (в hmg несколько штук оказалось), где смесь и Chr(13) + Chr(10) и Chr(10) Не факт что aText[1] будет содержать Chr(13) Надо привести к одному Chr(10) в работе, к примеру ::aText := hb_ATokens( CtrTran(cText, Chr(13)), Chr(10) ) или с анализом If Chr(13) $ cText [/pre2]

SergKis: PS StrTrans( конечно же

alkresin: SergKis пишет: есть файлы prg (в hmg несколько штук оказалось), где смесь и Chr(13) + Chr(10) и Chr(10) Если там смесь, то, вообще говоря, неизвестно, какой правильный. Надо будет (давно собираюсь) добавить в диалог сохранения файла опцию, принудительно устанавливающую тот или иной eol.

SergKis: alkresin пишет добавить в диалог сохранения файла опцию, принудительно устанавливающую тот или иной eol. Может, достаточно в ini ? CRLF=Y\N

alkresin: SergKis пишет: Может, достаточно в ini ? Если в ini, то все файлы, независимо от их изначального eol будут принудительно и молча сохраняться с определенным eol, что, вообще говоря, неправильно. С третьей стороны, если у вас в файле смесь eol'ов, то какая вам разница, с каким он сохранится?

SergKis: alkresin пишет С третьей стороны, если у вас в файле смесь eol'ов, то какая вам разница, с каким он сохранится Есть hb_OsNewLine(), вроде так называется, по сути это и есть CRLF для оси. Ее и применять при CRLF=Y или в ini писать EOL=CRLF\LF Кода смесь, то лучше, что ось дает.

SergKis: alkresin Плавающая ошибка, точно не смог определить появление[pre2] 04/16/19 15:07:09 Error BASE/1132 Bound error: array access Called from FMENU(64) Called from SPIS1(37) Called from HB_HRBDO(0) Called from MNU_PLUGINS(1980) Called from TEDIT:ONKEY(871) Called from TEDIT:EDIT(283) Called from MAIN(97) 04/16/19 15:08:29 Error BASE/1132 Bound error: array access Called from FMENU(64) Called from SPIS1(37) Called from HB_HRBDO(0) Called from MNU_PLUGINS(1980) Called from TEDIT:ONKEY(871) Called from TEDIT:EDIT(283) Called from MAIN(97) 04/16/19 15:09:14 Error BASE/1132 Bound error: array access Called from FMENU(64) Called from SPIS1(37) Called from HB_HRBDO(0) Called from MNU_PLUGINS(1980) Called from TEDIT:ONKEY(871) Called from TEDIT:EDIT(283) Called from MAIN(97) 04/16/19 15:10:08 Error BASE/1132 Bound error: array access Called from FMENU(64) Called from SPIS1(37) Called from HB_HRBDO(0) Called from MNU_PLUGINS(1980) Called from TEDIT:ONKEY(871) Called from TEDIT:EDIT(283) Called from MAIN(97) 04/16/19 15:11:24 Error BASE/1132 Bound error: array access Called from FMENU(64) Called from SPIS1(37) Called from HB_HRBDO(0) Called from EXEC(1980) Called from FMENU(102) Called from TEDIT:ONKEY(859) Called from TEDIT:EDIT(283) Called from MAIN(97) [/pre2] Работал следующее как через меню, так и нажатием клавиш (чередовал раз через меню, несколько раз только клавиши и ...) F9 -> "Plugins F11" -> "0. Function list" -> <Список ...>

SergKis: SergKis пишет Кода смесь, то лучше, что ось дает. Если CRLF или EOL нет в ini, то Default :Eol := hb_OsNewLine(), если есть, то от установки

SergKis: SergKis пишет Работал следующее как через меню, так и нажатием клавиш Может важно, когда проделывал указанные действия, в самом тексте ничего не делал по перемещению\изменению. Только перемещение при помощи плагина

SergKis: alkresin Запуск hbedit.exe -xy=10,10 main.prg ini screen_width=40 screen_height=15 Меню F9 уходит за пределы она, центруясь по старым координатам Его бы от левого угла или иметь возможность отключить показ\вызов F9 меню, для текстов в таких размерах не очень надо меню

SergKis: alkresin Получил стабильное сваливание hbedit.exe -xy=10,10 main.prg https://TransFiles.ru/8d6e2 делаем F11 -> 0 и все

alkresin: SergKis пишет: Получил стабильное сваливание hbedit.exe Это я уже нашел, там в плагине ошибка - завтра обновлю.

SergKis: alkresin Попробовал расширить commands= ... добавил toolbar splitbox with window label button getbox buttonex checkbox comboboxex combo listbox image RadioGroup textbox main modal child mdichild action tbrowse super frame Все здорово А нельзя ввести группы на команды и соответствующий цвет для группы? К примеру commands2=<те которые добавил в commands> по умолчанию тот же цвет, что и у commands, но что бы можно было установить из ini

SergKis: PS может несколько групп ? commands3=

SergKis: alkresin По языковым текстам меню и т.д.. Может сразу их вынести в Utf8 ? Встанет же вопрос языка. К примеру hbedit.ini utf8 кодировка и секция с текстами (кому как надо, правильно переведет с EN), не связываясь раздельно с EN, RU, DE, FR, ...

alkresin: SergKis пишет: Если CRLF или EOL нет в ini, то Default :Eol := hb_OsNewLine(), если есть, то от установки Сделал в ini eol=0 (автоопределение как сейчас - по умолчанию), 1 - Линукс, 2 - Дос. Ставить в зависимости от ОС (hb_OsNewLine()) - не вариант. Часто бывает нужно под одной ОС редактировать файлы, сделанные под или для другой ОС. А нельзя ввести группы на команды и соответствующий цвет для группы? К примеру commands2=<те которые добавил в commands> по умолчанию тот же цвет, что и у commands, но что бы можно было установить из ini Да, я планирую расширение модуля подсветки. Цвета подсветки, кстати, можно установить в ini и сейчас - секция HILIGHT. По языковым текстам меню и т.д.. Еще не думал на эту тему.

alkresin: Обновлен Hbedit. Исправлены ошибки. Добавлены опции командной строки: - -gN - goto line N; If N is negative it is a number of lines before the end - [-size=nCols,nRows] - number of columns and rows in an editor window Добавлено определение цветов в ini, секция OPTIONS: colormain, colorsel, colorpane(панель слстояния), colorbra(подсветка парных скобок). Туда же добавлены eol (0,1,2) и trimspaces (on,off) - удаление конечных пробелов при сохранении файла. Команды режима Vim b,B, e,E, w,W приведены в соответствие со стандартом Vim. Добавлена команда Alt-b - переход на предыдущую ( после поиска и пр. ) позицию. Возврат назад, короче. После Ctrl-C, Ctrl=Ins, Ctrl-Tab выделение теперь не убирается.

SergKis: alkresin пишет Еще не думал на эту тему. Это понятно, пока мысли в другом. Это я смотрю, как править "под себя" в wvt У нас подправлена, товарищем, wvt для работы с main menu и statusbar, поэтому строка с F9-menu ... в таком виде не нужна, т.е. работа по клаве остается, а меню и выполнение пунктов надо перенести в main menu + тексты перевести в LV. Вот и смотрю тексты с такого угла (что отключить, что оставить из режимов), потому что уже сейчас почти все устраивает (может не доделано и ...)

SergKis: PS С текстами, примерно, так делаю hText := { 1 => ..., 2 => ..., ... <полный набор текстов в EN (к примеру)>} в ini (utf8) секция [TEXT], в ней ключ = текст языковый. Какие ключи есть, переносим в hText. Для меню массив или hash 01.00 = текст горизонтальный в main menu 01.01 = ... -> popup ... 02.01 = ... -> popup ... Выполнение меню hash 01.01, {|..| ... } ... это просто для информации

SergKis: alkresin Еще такая фишка для ini his - добавить в строку истории параметр текстовый, меняющий в меню имя файла на указанный текст - вход в hbedit с отображением меню истории (с текстами) Тогда можно делать шаблоны каких то данных под именами файлов и культурно предлагать сразу при запуске выбрать для работы нужный

SergKis: PS В hbedit.ini иметь имя ini his для работы

SergKis: alkresin Еще предложение, пакетный поиск с заменой из ini [REPL] <ключ как написан>=<значение (в том числе и пустое)> к примеру [REPL] ^1=my text 1 ^2=мой текст 1 $DokNr$=ABC 12345 ... в плагин, по мне, выносить не стоит, т.к. уже есть\будет режим поиск - замена, то использовать рекурсивно по ini добавить команду -repl=<имя ini> и можно в ini his параметром к альтернативному тексту названия все ini utf8

alkresin: SergKis пишет: У нас подправлена, товарищем, wvt для работы с main menu и statusbar, ... а меню и выполнение пунктов надо перенести в main menu + тексты перевести в LV. Ничего не понял). Какое wvt подправлено? Харборовский драйвер gtwvt? Что такое LV?

alkresin: По вашим предложениям с ini his и заменой, определенной в ini ( это ведь имеется ввиду, что в ini будет прописано что на что менять и hbedit должен при открытии любого файла производить пакетно такую замену, я правильно понял? ). Мне это представляется несколько экзотическим - в том смысле, что такие фичи носят слишком узкоспециализированный характер и вряд ли будут полезны для большинства пользователей. Я предлагаю более универсальное решение - это возможность прописать в ini-файле имя плагина, который должен выполняться при старте редактора, можно также имя плагина, выполняющегося при открытии файла, можно разные плагины в зависимости от типа (расширения) файла. Вам остается написать сам плагин для своих нужд - таким образом вы сможете реализовать и эти свои два предложения, и много чего еще.

SergKis: alkresin пишет По вашим предложениям с ini his и заменой, определенной в ini ( это ведь имеется ввиду, что в ini будет прописано что на что менять и hbedit должен при открытии любого файла производить пакетно такую замену, я правильно понял? ) В целом, да. Добавив опцию Save = 0\1\2 0 - как есть по имени файла 1 - добавить к имени _дату_время 2 - добавить к имени (версия\номер) Мы получаем без внешних программ рабочее место на базе шаблонов с "нормальным" названием в his Если запросили в параметрах, то список his высветился, выбрали, если есть repl - выполнили Если в параметрах не задавали, через ини, получаем his не автоматом, а через меню идем в his и т.д. по списку Из программы из карточки создаем данные repl и по шаблону получаем письмо\справку\..., которую можно поправить\добавить и сохранить по режиму Save, Далее отослать куда надо полученное Если предусмотреть в repl продолжение строк (как есть), то можно код программы набрать по шаблонам (заготовленным заранее label, button,...) Я предлагаю более универсальное решение - это возможность прописать в ini-файле имя плагина По мне, тут он лишний, в цикле прочитанного в hash [repl] прогнать существ. процедуру поиск-замена без сообщений Да и ставить клиенту лишние файлы и следить за их целостностью, не всегда, целесообразно Писать плагины, на данный момент, для экномич. работ не вижу смысла

alkresin: SergKis пишет: По мне, тут он лишний... Плагины для того и предназначены, чтобы расширять функциональность программы, чтобы добавлять в нее дополнительные, предназначенные для нужд конкретной реализации возможности. Программа общего назначения, какой является текстовый редактор, не должна содержать такого рода узкоспециализированные, заточенные под конкретного потребителя функции, она должна только предоставлять возможность для расширения, для модификации ее под конкретные нужды. Такой возможностью и являются плагины.

SergKis: alkresin пишетПрограмма общего назначения, какой является текстовый редактор, не должна содержать такого рода узкоспециализированные, заточенные под конкретного потребителя функции Вообще то были редактора\программы (даже в dos) с параметрами найти и заменить все. Надо было писать записи в bat nn раз что бы выполнить замену. Считать замену в тексте по картинке с запросом "Что найти" "На что поменять" с уточнениями "Найти предыдущую", "Найти следующую", "Заменить", "Заменить все" + галочки с уточнениями. Это считается нормальным. То же проделать "Заменить все" списком из файла (вместо 30 окон запросов) - узкоспециализированным. Странно по мне. Плагины, сейчас представленные, относятся к prg типу файлов, по мне, это компоненты программы - не плагины, без них это обычный txt файл, как в notepad. Т.е. введенные типы файлов, кроме подсветки, автоматом, должны давать что то больше чем, к примеру, Notepad3

SergKis: alkresin пишет Вам остается написать сам плагин для своих нужд - таким образом вы сможете реализовать и эти свои два предложения, и много чего еще. В программе все так и делается, выгружается в txt, заменяется, подается в notepad3 с ini в размерное окно и полученный файл после, если надо, переименовывается и перекидывается куда нибудь, если надо. Таскается это все из проги в прогу через либы.

SergKis: alkresin пишет По вашим предложениям с ini his и заменой, определенной в ini ( это ведь имеется ввиду, что в ini будет прописано что на что менять и hbedit должен при открытии любого файла производить пакетно такую замену, я правильно понял? ). Если задан файл и -repl в параметрах - выполняется замена при запуске Если задан his, то при запуске активируется меню his (как меню F2 в Far, может активироваться при запуске) для выбора пункта, если у выбранного стоит repl, то выполнить этот repl перед загрузкой

alkresin: SergKis пишет: Вообще то были редактора\программы (даже в dos) с параметрами найти и заменить все. Программы были и есть - например, моя snr), но для редактора это все же нетипичная функция. Странно по мне. А мне странно, что вы не хотите себе, для своих же нужд, написать маленький плагин. Если задан файл и -repl в параметрах - выполняется замена при запуске Если задан his, то при запуске активируется меню his... Все это легко реализуется с помощью плагина. Помещаете hrb в plugins/, прописываете его имя в ini - и дело сделано.

alkresin: Обновлен hbedit Теперь для подсветки вместо commands, funcs указываются keywords1, keywords2, keywords3, keywords4. Добавлена возможность указать в ini плагин, запускаемый автоматически при старте программы (секция START). Еще какие-то мелочи - уже не помню).

SergKis: alkresin пишет Все это легко реализуется с помощью плагина. Помещаете hrb в plugins/, прописываете его имя в ini - и дело сделано. Этого мало. Для эксплуатации этого мало. Надо в меню "культурно" назвав вставить, не в список плагинов, это внутреннее дело программы, а клиенту надо только его и на его языке. Вы отказались от строки меню и строки статуса\подсветки - это уже лишнее нажатие F9\мыши. Все запищат от такого. Потом для редактора mode 24 row, 80 col ... это не используется давно, 32x120 как минимум (точно не помню соотношения, т.к. давно не использую консоль\wvt, товарищ wvt использует). Наличие меню, дает возможность набирать пункты - для клиента это важно. Подсветка полного имени файла, как правило не нужно (опционно) достаточно имени, т.к. большинство работ с выбранным ini в одном каталоге. Сравниваю с Notepad3, который устанавливаем с программами у всех клиентов + сами используем, правда с оболочкой проекта, пока тенденция не в пользу hbedit, к сожалению.

SergKis: SergKis пишет Потом для редактора mode 24 row, 80 col Извините, ошибся, стоит 30x100. Подумал 24x80 т.к. на своих текстах много не видно и совмещение меню со статус строкой показалось экономия строк рабочих.

alkresin: SergKis пишет: Надо в меню "культурно" назвав вставить, не в список плагинов, это внутреннее дело программы, а клиенту надо только его и на его языке. Не понял. Что надо вставлять в меню? Вы говорили о стартовом меню: "вход в hbedit с отображением меню истории (с текстами)". Т.е., пользователь запускает hbedit, сразу выскакивает меню с алиасами имен файлов и он выбирает нужный для редактирования. Я предлагаю вам написать плагин, который выведет это меню на экран и прописать его в ini - файле в секции {START] - так что его не надо будет вызывать, он будет запускаться при старте hbedit автоматически. При необходимости повторного вызова его можно прописать и в списке плагинов ([PLUGINS], который выводится на экран по F11 - это пользователю нетрудно запомнить. SergKis пишет: Извините, ошибся, стоит 30x100. Стоит то, что прописано в ini, хоть 30х100, хоть 50х200...

SergKis: alkresin пишет Не понял. Что надо вставлять в меню? Это меню, как было в дос программах, сверху строка меню, снизу строка состояния (или наоборот). Применительно к hbedit это не F9-menu надпись\кнопка, а сразу развернутое горизонтально главное меню, сразу видно, что там (не надо лишний раз нажимать\кликать F9-menu). Вставлять\набирать надо это меню (только те пункты, которые нужны) и подменю набирать. Использовать языковые тексты. В notepad main menu "File" "Edit" "Format" "View" "Help". В notepad3 похоже. Надписи EN, клиентов это устраивает, т.к. системная программа. Любая другая должна иметь "обоснование", почему не на государственном (hbedit собранная под wvt в тек. виде не подойдет никак) Я предлагаю вам написать плагин, который выведет это меню hrb хорошо, но у клиента хорошо, если он хотя бы в ресурсах программы. LetoDb v.m.1.0 все hrb функции убрал в exe после случая с "добрым" admin, который в тихаря удалил его несколько раз. Потом, если вводятся типы файлов LANG_PRG, LANG_C,..., LANG_TXT, ... то должен быть набор свойств\функций для работы с ним. Набор должен работать в автомате - не через меню плагин (это доп. режим). Так по мне. his - это история работы с файлом или применительно к prg - это список файлов проекта, т.е. в каталоге может быть куча файлов, но файлами his раскладываются на проекты. Зачем тут писать plugin, достаточно иметь галочку, как в Far на меню F2. Нужно запустить hbedit с галочкой или именем his. В том же Far создаем несколько пунктов для проектов, с параметром file.his. Альтернативное имя пункта меню. К примеру, у меня в проекте, она берется из первой строки // ... или /* ... */ и добавляется к имени prg (без путей) Для сборки проекта надо запускать cmd, желательно именно на данный список his prg или hbmk2 с hbp по F11 - это пользователю нетрудно запомнить Вот пользователю это совсем не нужно (даже запоминать не будет, будет звонить). Ему надо кнопку, tooltip, меню ...

alkresin: SergKis пишет: hrb хорошо, но у клиента хорошо, если он хотя бы в ресурсах программы. LetoDb v.m.1.0 все hrb функции убрал в exe после случая с "добрым" admin, который в тихаря удалил его несколько раз. Ну это несерьезно. А если admin удалит ini файлы, или exe? А если он в Program Files покуролесит? Или он только hrb удаляет ? Тогда поставьте другое расширение файлу - dll, например. если вводятся типы файлов LANG_PRG, LANG_C,..., LANG_TXT, ... то должен быть набор свойств\функций для работы с ним. Набор должен работать в автомате - не через меню плагин Типы файлов вводятся извне программы, в ini. Поэтому и функции, специфичные для них, реализованы внешними модулями. Если мне понадобится добавить еще один тип, то что, программу для этого менять?

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

SergKis: alkresin пишет Ну это несерьезно Еще как серьезно, маленькое действие, приводящее к вызову admin (по договору ходит). Каждый визит оплачивается часовым тарифом. Мы доступа к серверу не имеем, определить что произошло с клиента никак. Если мне понадобится добавить еще один тип, то что, программу для этого менять? Периодически, особенно, если удачное предложение, ДА. Иначе, чем отличается введенные типы от др. редакторов, того же far, notepsd3 (этот может и фонты менять на выделениях. не только цвета). Но, Вам, виднее.

SergKis: PS Вырезка из ini Notepad3 по типам [pre2] [Default Text] [2nd Default Text] [ANSI Art] [Apache Config Files] [Assembly Script] [AutoHotkey Script] [AutoHotkey_L Script] [AutoIt3 Script] [AviSynth Script] [Awk Script] [Batch Files] [C# Source Code] [C/C++ Source Code] [Cmake Script] [Coffeescript] [Configuration Files] [CSS Style Sheets] [D Source Code] [Diff Files] [Go Source Code] [Inno Setup Script] [Java Source Code] [JavaScript] [HARBOUR Source Code] Default=size:+2 [JSON] [LaTeX Files] [Lua Script] [Makefiles] [Markdown] [MATLAB] [Nim Source Code] [NSIS Script] [Pascal Source Code] [Perl Script] [PowerShell Script] [Python Script] [Registry Files] [Resource Script] [R-S-SPlus Statistics Code] [Ruby Script] [Rust Source Code] [Shell Script] [SQL Query] [Tcl Script] [VBScript] [VHDL] [Visual Basic] [Web Source Code] [XML Document] [YAML] [/pre2]

SergKis: alkresin пишет Если вам так нужно свое постоянное меню, то есть еще вот такое решение Меню и строку состояния как в дос в wvt не используем. Уже писал, товарищ по работе, меняет wvt добавляя main menu и StatusBar, т.е. вся площадь окна - рабочая область. Исп. ф-ии (это еще hb 2.0) wvt_CreateMenu( [lMain] ) -> hMenu ... wvt_AppendMenu(hMenu, cCaption, nKey, [cFlags] ) Добавить пункт в меню cCaption - Текст меню В тексте работает символ Chr(9) nKey - Этот код будет послан в очередь Наш обработчик ловит nKey и запускает из массива или hash по ключу блок кода. Я не работаю с wvt давно, подзабыл детали и пример не нашел, убрал куда то Хорошо бы вашему обработчику послать сообщение, что выполнить (список всех исполнителей ?) cFlag - строка символов в любой комбинации регистр не имеет значение 'B' - Bold выделеный пункт меню 'C' - Cheked Помечен галочкой 'D' - Disable Серый не работающий 'N' - Начинается новая колонка 'H' - При первом открытии меню курсор стоит на этой позиции Еще условия : - надо кодировку LV866 (EN,LV,RU) ее нет в hb standart - hb 3.2 unicode с LV866 сделан под vc2017 (не переведены еще часть используемых C lib) - hbedit тексты должны быть utf8 + все ini (BOM) + работа с ними внутри utf8 - все меню hbedit, переведены в main menu Что бы браться за это для hbedit, надо очень веские причины, т.к. сейчас Notepad3 с LV866, клавиши и режимы приведены "нормальным" действиям. Изменения Notepad3 только новой пересборкой, но особо уже ничего не надо, так по мелочи есть по покраске, наберется, пересоберется

SergKis: PS Вспомнил, свой обработчик, это установленные SetKey( nKey, {|| ...})

Vlad04: По-моему вы пытаетесь скрестить ежа и ужа. Как известно редакторы предназначенные для Юзеров ( просмотр текста, печать и ещё что-то) отличаются по функционалу от редакторов предназначенных для написания кода. А судя по вводной в начале темы alkresin и собирался создать ВТОРОЙ - не слишком навороченный, но чтоб было все что надо. . Но SergKis пытается из него сделать редактор для ПОЛЬЗОВАТЕЛЕЙ, при чем не сильно продвинутых Вот пользователю это совсем не нужно (даже запоминать не будет, будет звонить). Ему надо кнопку, tooltip, меню ...

SergKis: Vlad04 пишет По-моему вы пытаетесь скрестить ежа и ужа Почитайте самое начало темы, разговор о сделанном MemoEdit() и на его базе, более мощное hbedit, который по смыслу полностью совпадает с Notepad3 (C вариант) и Far. Если с Far понятно, "вас тут много, а я один - делайте плагины, когда нужно, чего нет". В hbedit такая метода мне не понравилась, для отладки нового алгоритма - хорошо, для работы повседневной, не очень, по мне. В отличии от notepad3, hbedit (MemoEdit()) можно встроить в прогу, вот я и прикидывал как это сделать. Консольный hbedit => wwt hbedit, но вариант похожий на windows По поводу вопросов по "Вот пользователю это совсем не нужно ..." Интерфейсов консольных и wvt в стиле clipper не осталось, всем надо и понимают что и как для windows интерфейса. Меню hbedit после клика F9 вызовет полное недоумение у нынешних пользователей, а нажать клавишу F9 большая половина не поймет ... и будут звонить - "как получить что то ... вы показывали". Это почти не утрировано.

alkresin: Vlad04 пишет: Но SergKis пытается из него сделать редактор для ПОЛЬЗОВАТЕЛЕЙ Проблема в том, что ему нужен, как я понимаю, не просто редактор для пользователей, а программа на базе редактора, с функциями, редактору общего назначения не свойственными, специализированная для нужд конкретного клиента. В принципе, эта задача вполне решаема с помощью плагинов. SergKis пишет: Консольный hbedit => wwt hbedit, но вариант похожий на windows С помощью своего плагина - пожалуйста. Редактор мультиплатформенный, консольный (чтобы и по ssh можно было работать), поэтому включать в основную программу чисто виндовские элнменты - не вариант. Интерфейсов консольных и wvt в стиле clipper не осталось, ... Меню hbedit после клика F9 вызовет полное недоумение у нынешних пользователей Вы явно недооцениваете пользователей. Буквально на прошлой недели я поставил небольшую консольную программу на завод в маленьком поселке - как раз со старым Клипперовским меню, без поддержки мыши. Первой реакцией было недоумение - на что нажимать, как работать, но после 5-минутной консультации по телефону все стало на свои места. Неделю уже работают, никаких вопросов.

alkresin: Еще раз обновил редактор. Кое-что исправлено, добавлен плагин - список функций для С. Добавлена возможность задавать в ini цвета подсветки и для конкретного языка.

SergKis: alkresin пишет Вы явно недооцениваете пользователей. Реальность в Латвии такова, что остались только мы (два динозавра), пишущих на Clipper\Harbour Проблема в том, что ему нужен, как я понимаю, не просто редактор для пользователей, а программа на базе редактора, с функциями, редактору общего назначения не свойственными, специализированная для нужд конкретного клиента. В принципе не нужна в предлагаемом виде, все на плагинах (Far достаточно со своими, но и им давно не пользуюсь, только в качестве источника для Clipboard). Notepad3 полностью обеспечивает работу с мемо полями и текстами док., шаблонами (вместо worda, т.к. нужна лицензия). Его запустил с ini, изменил размеры окна до нужного и позицию - сохранилось все в ini, след. запуск с ini размещает где хотели. Таких несколько ini обеспечивают одновременную работу с несколькими карточками. Это аналог работы в окне STANDARD с EDITBOX. Title окна задается (номер карточки или еще что) /t Nr.1234567. по кнопке можно запустить распечатку файла немедленно или с запросом свойств печати. Кстати, кодировка LV866 в нем соответствует RU866 и устанавливается в меню выбором кодировки 866. Лат. буквы в местах псевдографики. Можно попробовать

SergKis: PS для prg, кроме подсветки (hb+hmg) есть автозавершение и режим уст. длинной строки с прорисовкой линии, в этом режиме до линии добавляются строки пробелами и курсор не прыгает (это уже наши правки), при добавлении новых строк это ломается, но не смертельно (F2, F5) исправляет. Линия в 0 - обычный режим Notepad3

SergKis: alkresin При большом списке функций, методов, ... (кончились цифры+буквы у пунктов FMenu), просится - сортировка списка по наименованию - поиск в списке по наименованию планируется ли такое ?

alkresin: SergKis пишет: планируется ли такое ? Может быть. Пока не думал.

alkresin: Что-то странное в этом апрельском воздухе)... Зашел сегодня на Harbour Users посмотреть, чем народ дышит, а там в апреле среди прочих два сообщения о разработке консольного текстового редактора, одно из них - от Линареса: [url=https://groups.google.com/forum/#!topic/harbour-users/gXH7fwucSAA]https://groups.google.com/forum/#!topic/harbour-users/gXH7fwucSAA[/url] [url=https://groups.google.com/forum/#!topic/harbour-users/gBhBpgl13LA]https://groups.google.com/forum/#!topic/harbour-users/gBhBpgl13LA[/url] А вы говорите, "интерфейсов консольных и wvt в стиле clipper не осталось". Новый тренд пошел).

SergKis: alkresin пишет А вы говорите, "интерфейсов консольных и wvt в стиле clipper не осталось". Новый тренд пошел). Так это в нашей деревне. У вас Linuks (типа своя ось) должен вперед двигаться, после ограничений по windows. Потому консоль, wvt должны рулить

SergKis: alkresin пишет Может быть. Пока не думал. Для пробы взял h_tbrowse.prg из hmg, 379 entity, 15340 line

SergKis: PS Включаю в Entity кроме CLASS и END CLASS, чтобы в списке видеть, где кончаются объявления методов и их INLINE, BLOCK конструкции, для перехода в конец класса.

alkresin: Обновлен hbedit. Добавлены: кодоблок :bNew - он отрабатывает при вызове метода TEdit():New(), что позволяет выполнять свой код при открытии файла; кодоблок :bEdit - он отрабатывает перед началом редактирования (метод TEdit():Edit()) - там можно, в частности, установить свою область в окне редактора; кодоблок :bOnKey - он отрабатывает после нажатия клавиши или щелчка мышью и позволяет, таким образом, перехватывать события. '. (в режиме Vim) и Alt-'. (в режиме редактирования) - переход к месту последнего изменения. В ini добавлена подсветка .bat. Ну и кое-какие исправления.

ММК: alkresin пишет: А вы говорите, "интерфейсов консольных и wvt в стиле clipper не осталось". Новый тренд пошел). Да, ретро периодически привлекает. Вот даже еще "круче" - из DOS'а в WEB. http://forums.fivetechsupport.com/viewtopic.php?f=3&t=36990&sid=45770993eb5f74b9c7cc74dd013baec8&start=30 Что касается Линариса, то его вряд ли интересует такой редактор. Во всяком случае в FW достаточно небольших примеров включая "виндовые", что для пользователя интереснее. А все предназначенное для разработчиков плавно перетекает в среду разработки. Это уже другая песня... alkresin пишет: два сообщения о разработке консольного текстового редактора, одно из них - от Линареса: Помог человеку. Предложил вариант "подсветки" . И далее интересно ( не Линарис) - Now we may have to find a way to utilize it (hbEditor class) into something more useful.. than a mere sample

alkresin: ММК пишет: Да, ретро периодически привлекает. Вот даже еще "круче" - из DOS'а в WEB. Ретро - это MSDOS в любой упаковке, а консольный интерфейс - это не ретро, а один из способов организации интерфейса, активно использующийся наряду с графическим и сегодня, все зависит от конкретной задачи и, конечно, от вкусов пользователя. Я, например, тоже пользователь, и во многих случаях предпочитаю именно консольный интерфейс (Far, текстовые редакторы, ...). И я не один такой, тот же Vi/Vim до сих пор остается одним из самых популярных программистских (и не только) редакторов, и в последние годы его популярность даже выросла. Что касается Линариса, то его вряд ли интересует такой редактор. Во всяком случае в FW достаточно Не знаю, какой редактор использует Антонио, при случае спрошу). Но то, что он автор FW ничего не говорит о его предпочтениях, точно так же. как и то, что я - автор HwGui и др. GUI инструментов ничего не говорит о моих.

SergKis: ММК пишет А все предназначенное для разработчиков плавно перетекает в среду разработки. Это уже другая песня... Почему другая ? Я воспринял hbedit как такой элемент и стал наседать с вопросами. Для prg добавить - файл проекта (вполне пойдет his) - CmdRun для сборки модуля - Список функций (как сейчас по одному prg) по prg из файла проекта в такой схеме пройдут и др. языки Для txt групповая поиск\замена (может подходить для всех типов)

alkresin: SergKis пишет: Я воспринял hbedit как такой элемент и стал наседать с вопросами. Для prg добавить - файл проекта (вполне пойдет his) - CmdRun для сборки модуля - Список функций (как сейчас по одному prg) по prg из файла проекта Предложение интересное (только his тут ни при чем), хоть я и не помню, чтобы вы говорили об этом раньше. Можно объявить в ini новый тип файла и сделать плагин/группу плагинов для него.

SergKis: alkresin пишет хоть я и не помню, чтобы вы говорили об этом раньше SergKis пишет Потом, если вводятся типы файлов LANG_PRG, LANG_C,..., LANG_TXT, ... то должен быть набор свойств\функций для работы с ним. Набор должен работать в автомате - не через меню плагин (это доп. режим). Так по мне. his - это история работы с файлом или применительно к prg - это список файлов проекта, т.е. в каталоге может быть куча файлов, но файлами his раскладываются на проекты. Зачем тут писать plugin, достаточно иметь галочку, как в Far на меню F2. Нужно запустить hbedit с галочкой или именем his. В том же Far создаем несколько пунктов для проектов, с параметром file.his. Альтернативное имя пункта меню. К примеру, у меня в проекте, она берется из первой строки // ... или /* ... */ и добавляется к имени prg (без путей) Для сборки проекта надо запускать cmd, желательно именно на данный список his prg или hbmk2 с hbp Файл his это где мы были, что по списку файлов совпадает с файлом проекта. Попытка сэкономить. Конечно файл проекта лучше

alkresin: Обновлен hbedit. Теперь список нужных кодовых страниц можно определить в hbedit.ini, секция [CODEPAGES]. Доступны все кодовые страницы, поддерживаемые Harbour, список поместил в readme.md. Реализованы Lower/Upper и, соответственно, case insensitive поиск для utf8.

SergKis: alkresin переместил hbedit.exe в BIN каталог (без ini и плагинов, они в текущем, т.е. по проектам условным) 0. Плагины не подключаются 1.Запустил на текущий рабочий в котором ini и his есть - такой вариант не работает (создает в bin ini и his) 2. .\bin\hbedit -f .\hbedit.ini ... - работает (создает в bin his) 3. .hbedit.ini дописал к hbbedit. \bin\hbedit ... - работает (создает в bin his) Если hbedit.exe поместить на флешку с защитой записи или CD (portable вариант), то ...

SergKis: PS читать 0. Плагины не подключаются везде

SergKis: PPS Отключить his можно ? Никогда не использовал при работе с проектом (история совпадает с проектом). За пределы проекта работа - другой запуск (др. средства\программы)

SergKis: alkresin пишет (help) Выделив нужный текст, вы можете использовать следующие горячие клавиши: ... Del, d удалить текст; Ctrl+X надо добавить

alkresin: SergKis пишет: 0. Плагины не подключаются везде plugins/, hbedit.ini, hbedit.help должны быть в одном каталоге с hbedit.exe.

alkresin: Обновлен hbedit. Реализована замена (Search&Replace) по Ctrl-F7. В ini, секция [OPTIONS], добавлен параметр savehis: 0 - не сохранять историю, 1(по умолчанию) - сохранять в каталоге с hbedit.exe, 2 - сохранять в текущем каталоге.

SergKis: alkresin пишет plugins/, hbedit.ini, hbedit.help должны быть в одном каталоге с hbedit.exe. Но набор плагинов может быть разным функционально. Если есть в текущем каталог plugins, подключать его, нет у hbedit.exe

SergKis: PS ini и help так же может, как комплект, быть привязан к плагинам (создаются динамически) и разработкой тек. каталога

alkresin: В принципе можно проверять сначала наличие этих файлов в текущем каталоге, и, если их нет, то в базовом, хотя я не рекомендовал бы использовать такую возможность на практике слишком активно - запутаться можно.

SergKis: alkresin пишет запутаться можно. Запутаться можно и в трех соснах, а так будет гибкость и новые возможности. В Fox 2.1 не путались же

alkresin: Что касается файлов проекта, то, думаю, не надо плодить новые сущности - лучше всего использовать .hbp от hbmk2. Он кросс-платформенный, содержит всю необходимую информацию и может быть непосредственно использован для сборки.

SergKis: alkresin пишет лучше всего использовать .hbp от hbmk2. Он кросс-платформенный С этим не поспоришь. Вопрос файла проекта, т.е. список файлов в виде меню для перехода на него (загрузка для работы) Что то вроде такого Demo.prg "Main window бла бла бла " 2019.04.10 10:30:10 (last модификация+длина файла) FuncMisc1.prg "Дополнительные функции к выборке 1". 2019.04.22 23:01:45 (last модификация+длина файла) FuncMisc2.prg "Дополнительные функции к выборке 2". 2019.04.22 19:31:10 (last модификация+длина файла) ... Demo.hbp Demo.rc Demo.ini Demo.cfg ... Получать по кнопке или на входе

SergKis: PS Это оч. похоже на his по сути, т.е. открыли 1 файл, другой и т.д., набрался файл с одной стороны his, с другой список файлов проекта (в др. и не зайдешь в этом проекте). Структуру записи his расширить, сто руками заполнять, что программно, если что тов нем лишнее, зашел удалил. Для файла проекта, конечно, надо ведение, т.е. набор пунктов и т.д.

alkresin: Обновлен hbedit. Добавлена подсветка директив препроцессора, существенно пополнен набор команд Vim-режима (см.help), hbedit.ini и plugins/ теперь могут находится и в текущеи каталоге - при старте hbedit ищет их там, а потом уже в базовом каталоге.

SergKis: SergKis пишет Для файла проекта, конечно, надо ведение, т.е. набор пунктов и т.д. Для информации, от своей проги ведения проектов, для MiniGui [pre2] [APP] Utf8=No Title=HMG 19.01 Notepad=\BK32\Notepad3.exe ;AkelPad=\BK32\BIN\AkelPad Default=01 Res=.\RES CmdComp=_hb_.cmd CmdRun= LibName= [01] Title=Проект MiniGui. PRG. PathApp=.\SOURCE PathExe=.\ NameExe= Include=*.prg Exclude= [02] Title=Проект MiniGui. C. PathApp=.\SOURCE PathExe=.\ NameExe= Include=*.c Exclude= [03] Title=Проект MiniGui. TsBrowse. PathApp=.\SOURCE\TsBrowse PathExe=.\ NameExe= Include=*.prg,*.c Exclude= [04] [05] [06] [07] [08] [09] [Common] FontName=Arial FontSize=10 SizeScale=100,100 [Window] Form_1Form_1=0,0,1229,727, wErrorwError=591,0,776,192, [Browse] brwProg=304,87,87,87,604, brwEntiti=179,479,434,87, brwEntAll=173,346,346,87,216, [Obj] 1=\BK32\OBJ\ErrSysHMG_.obj %O%\%P%.obj [Lib] 1=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 2=advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib Vfw32.lib 3=odbc32.lib odbccp32.lib comctl32.lib ShLwapi.lib WinMM.lib 4=ws2_32.lib WSock32.Lib ImageHlp.lib htmlhelp.lib MSImg32.lib 5=/nologo /incremental:no /pdb:%O%\%P%.pdb /SUBSYSTEM:WINDOWS 6=/machine:I386 /out:%W%\%P%.exe 7=hbdebug.lib hbvm.lib hbrtl.lib hblang.lib hbrdd.lib rddfpt.lib 8=rddntx.lib rddcdx.lib hbmacro.lib hbpp.lib hbsix.lib hbcommon.lib 9=hbcplr.lib hbgt.lib hbcpage.lib hbct.lib hbmemio.lib 10=hbmisc.lib hbwin.lib 11=bk32_c.lib MiniGui32_c.lib MiniGui32_c2.lib 12=MiniGui32_2.lib gtwin.lib gtgui.lib [FColor] 1 ={"CLASS" , "R"} 2 ={"ACCESS", "V"} 3 ={"ASSIGN", "V"} 4 ={"METHOD", "M"} 5 ={"DEFINE", "H"} 6 ={"STATIC", "B"} 7 ={"Static", "B"} 8 ={"Define", "H"} 9 ={"define", "H"} 10={"static", "B"} 11={"Method", "M"} [Entiti] 01=FUNC 02=FUNCTION 03=PROC 04=PROCEDURE 05=CLASS 06=ACCESS 07=ASSIGN 08=METHOD 09=DEFINE WINDOW 10=INIT WINDOW 11=INIT DIALOG 12=STAT FUNC 13=STATIC FUNC 14=STATIC FUNCTION 15=STAT PROC 16=STATIC PROC 17=STATIC PROCEDURE 18=HB_FUNC( 19=INIT PROC 20=INIT PROCEDURE 21=EXIT PROC 22=EXIT PROCEDURE 23=CASE WM_... [/pre2] Секции [Obj\, [Lib] исп. для сборки своих проектов через свой bat (без hbmk2, давно делался 2010 год). В hmg есть свой cmd сборки. В проект вкл. только одна секция из подкаталога source\TsBrowse, т.к. другие не использую в работе

SergKis: PS Протокол ошибок сборки выдаю на Browse и если есть строки со ссылкой на строки prg, при выборе запускаю Akelpad\Notepad3 с установкой на стр. из протокола

alkresin: SergKis пишет: Для файла проекта, конечно, надо ведение, т.е. набор пунктов и т.д. Что вы имеете ввиду?

SergKis: alkresin пишет Что вы имеете ввиду? заполнение руками строк в файле проекта руками через запрос Get-ами или в ini. В примере ini выше секции заполняю руками в редакторе (для простоты)

SergKis: SergKis пишет В примере ini выше секции заполняю руками Секции [Window], [Browse] заполняются программой - это координаты куда разместили окно и browse под него, т.к. проектов много, то и окна работы с проектом и окна об ошибках можно располагать удобно

alkresin: SergKis пишет: заполнение руками строк в файле проекта руками через запрос Get-ами или в ini. Ничего не понял). Т.е., вообще ничего - и, в частности, что за пункты все-таки. В любом случае, делать специальный файл проекта нового формата я не предполагаю. У нас есть .hbp и он прекрасно справляется со своими задачами. Он содержит, в частности, список файлов проекта - а это именно то, что нужно редактору: можно и общий список функций составить, и глобальный поиск по проекту сделать. Если для файлов нужны алиасы (пояснения), то их можно поместить в .hbp как комментарии - над строкой с именем файла. Чтобы не спутать их с другими комментариями, можно, например, маркировать их как ##. Библиотеки, объектники, опции сборки - это все редактору не нужно - он просто запустит hbmk2 и тот сделает свою работу.

SergKis: alkresin пишет Ничего не понял). Т.е., вообще ничего - и, в частности, что за пункты все-таки. Расшифровка пунктов ini проекта [pre2] [APP] Utf8=No ; prg файлы в Utf8 с BOM или нет, если Yes, то ; файлы prg проверяются на BOM и переводятся в Utf8, если его нет ; Сборка проекта в однобайтовом режиме, через дол. каталог ; куда prg файлы перекидываются для сборки Utf8 переводится в нужную ; CodePage Title=HMG 19.01 ; Title окна MDI Notepad=\BK32\Notepad3.exe ; какой редактор запускать. Akelpad отдельной ;AkelPad=\BK32\BIN\AkelPad ; строкой, т.к. номер строки передается ему через реестр Default=01 ; проект (MdiChild окно) открыть по умолчанию при запуске Res=.\RES ; каталог ресурсов проекта CmdComp=_hb_.cmd ; запуск cmd файла для сборки модуля (компилируются толь измененные prg) CmdRun= ; имя cmd файла для запуска модуля на исполнение LibName= ; имя либы, создаваемой одновременно с exe, prg с Func Main не входит в либ [01] ; секция первого проекта (MdiChild окно) Title=Проект MiniGui. PRG. ; название проекта, вводим руками PathApp=.\SOURCE ; каталог с prg файлами проекта PathExe=.\ ; путь куда созданный EXE модуль NameExe= ; имя exe модуля Include=*.prg ; включаемые файлы в проект из каталога PathApp Exclude= ; файлы, исключаемые из списка файлов в проект [02] ; секция второго проекта (MdiChild окно) Title=Проект MiniGui. C. ; название проекта, вводим руками PathApp=.\SOURCE ; каталог с prg файлами проекта PathExe=.\ ; путь куда созданный EXE модуль NameExe= ; имя exe модуля Include=*.c ; включаемые файлы в проект из каталога PathApp Exclude= ; файлы, исключаемые из списка файлов в проект [03] ; секция трктьего проекта (MdiChild окно) Title=Проект MiniGui. TsBrowse. ; название проекта, вводим руками PathApp=.\SOURCE\TsBrowse ; каталог с prg файлами проекта PathExe=.\ ; путь куда созданный EXE модуль NameExe= ; имя exe модуля Include=*.prg,*.c ; включаемые файлы в проект из каталога PathApp Exclude= ; файлы, исключаемые из списка файлов в проект [04] ; и т.д. [05] ; секции проектов запуска [06] [07] [08] [09] [Common] ; секция задания параметра фонтов и FontName=Arial ; параметров для работы перевода FontSize=10 ; размера из dlu в pixel SizeScale=100,100 ; в hmg есть класс для этого Dlu2Pixel [Window] ; Form_1Form_1=0,0,1229,727, ; секции програмной фиксации wErrorwError=591,0,776,192, ; размеров окон [Browse] ; и brwProg=304,87,87,87,604, ; Browse brwEntiti=179,479,434,87, ; brwEntAll=173,346,346,87,216, ; [Obj] 1=\BK32\OBJ\ErrSysHMG_.obj %O%\%P%.obj [Lib] 1=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 2=advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib Vfw32.lib 3=odbc32.lib odbccp32.lib comctl32.lib ShLwapi.lib WinMM.lib 4=ws2_32.lib WSock32.Lib ImageHlp.lib htmlhelp.lib MSImg32.lib 5=/nologo /incremental:no /pdb:%O%\%P%.pdb /SUBSYSTEM:WINDOWS 6=/machine:I386 /out:%W%\%P%.exe 7=hbdebug.lib hbvm.lib hbrtl.lib hblang.lib hbrdd.lib rddfpt.lib 8=rddntx.lib rddcdx.lib hbmacro.lib hbpp.lib hbsix.lib hbcommon.lib 9=hbcplr.lib hbgt.lib hbcpage.lib hbct.lib hbmemio.lib 10=hbmisc.lib hbwin.lib 11=bk32_c.lib MiniGui32_c.lib MiniGui32_c2.lib 12=MiniGui32_2.lib gtwin.lib gtgui.lib [FColor] ; секция задания цвета фонта по Entiti 1 ={"CLASS" , "R"} ; 2 ={"ACCESS", "V"} ; 3 ={"ASSIGN", "V"} ; 4 ={"METHOD", "M"} ; 5 ={"DEFINE", "H"} ; 6 ={"STATIC", "B"} ; 7 ={"Static", "B"} ; 8 ={"Define", "H"} ; 9 ={"define", "H"} ; 10={"static", "B"} ; 11={"Method", "M"} ; [Entiti] ; секция задания ключевых фраз и слов для выделения Entiti 01=FUNC ; по ним создается список Browse (как плагин по функциям prg) 02=FUNCTION ; так же создается список всех Entiti проекта с поиском 03=PROC ; по именам и переходом в режим редактора с установкой 04=PROCEDURE ; на нужную строку 05=CLASS 06=ACCESS 07=ASSIGN 08=METHOD 09=DEFINE WINDOW 10=INIT WINDOW 11=INIT DIALOG 12=STAT FUNC 13=STATIC FUNC 14=STATIC FUNCTION 15=STAT PROC 16=STATIC PROC 17=STATIC PROCEDURE 18=HB_FUNC( 19=INIT PROC 20=INIT PROCEDURE 21=EXIT PROC 22=EXIT PROCEDURE 23=CASE WM_... ; для отображения в списке всех команд WM_CLOSE, WM_ACTION ... [/pre2]

alkresin: Обновлен hbedit. Добавлены пара плагинов для Golang (запуск на выполнение и форматирование). В ini, секция [LANG_...], теперь можно указывать спец.плагин для этого типа файлов - он будет запускаться при открытии файлов этого типа и играет для него ту же роль, что и стартовый плагин в [START]. В ini добавден [LANG_HBP] Кое-что подправлено с подсветкой.

Vlad04: Как сделать: 1) Чтобы при открытии , окно было распахнуто 2) По умолчанию стоял какой-то ранее выбранный синтаксис, к примеру, prg Кодовая страница вроде ставится

SergKis: alkresin Для удаления выделенного текста, еще используется Ctrl+X, этого нет в hbedit

SergKis: PS 1. Open file окно, при пустом поле и нажатии enter открывать окно списка файлов 2. На окнах поиск, поиск-замена, переход на запись, сохранять последние данные в Selected режиме. 3. На, вышеуказанных, окнах добавить F<n> клавишу для вызова истории набранных данных ранее, не только кликая мышой

alkresin: Vlad04 пишет: 1) Чтобы при открытии , окно было распахнуто В смысле, на весь экран? Могу добавить в hbedit.ini такую опцию, если надо. 2) По умолчанию стоял какой-то ранее выбранный синтаксис, к примеру, prg Так при открытии файла .prg автоматом устанавливается соответствующий синтаксис...

alkresin: SergKis пишет: Для удаления выделенного текста, еще используется Ctrl+X, этого нет в hbedit Ok. 1. Open file окно, при пустом поле и нажатии enter открывать окно списка файлов 3. На, вышеуказанных, окнах добавить F<n> клавишу для вызова истории набранных данных ранее, не только кликая мышой Открыть список файлов или историю можно и без мышки двумя способами: 1) перейти на соседнюю кнопку (стрелка вниз или Tab) и нажать пробел 2) нажать Ctrl + стрелка вниз. 2. На окнах поиск, поиск-замена, переход на запись, сохранять последние данные в Selected режиме. В смысле, выделять найденную строку? В поиск/замена она выделяется. А при переходе по номеру строки что выделять?

SergKis: alkresin пишет В смысле, выделять найденную строку? В поиск/замена она выделяется. А при переходе по номеру строки что выделять? В истории есть последнее значение поиска, поиска-замены, переход на ... (списки выдвигаются же) При открытии окна (соответствующего) заполнять этими значениями соответствующие поля окна с Selected для - замены новыми, тогда сбрасываются и вводятся новые - стрелками перемещения Selected сбрасываем и правим, что было - сразу для повторения поиска по enter

SergKis: PS как Far делает

alkresin: Теперь понятно, буду иметь ввиду.

alkresin: Обновлен hbedit. Добавлен новый плагин для hbp - предварительная версия. Он прописан в ini в секции [LANG_HBP], поэтому запускается автоматически при открытии .hbp файла. Он подменяет панель статуса на простенькое меню, в котором пока две опции: список файлов проекта (можно выбрать любой для редактирования) и сборка проекта - в дальнейшем после сборки планируется открыть дпполнительное окно со списком ошибок. Добавлен Ctrl-X для cut selected. В секцию [START] ini-файла добавлена опция maximize: если On, то редактор при старте раскрывается на весь экран.

SergKis: alkresin пишет Добавлен новый плагин для hbp - предварительная версия Может этот плагин учесть кодировку части (всех) prg в utf8, а сборка не уникодная в указанной CodePage ? Или его переписывать надо, под себя ?

SergKis: PS В секции [START] можно определить загружаемый файл и если это hbp, возможность сразу выдать список по Ctr+F ?

SergKis: PPS Возможно ли, добавить в hbp, через спец. коментарий, добавляемые другие файлы в список Ctrl+F ? Это ini, cfg, текстовые шаблоны, ..., относящиеся к работе с проектом.

SergKis: PPS Возможность иметь в hbp добавить спец. коментарий, как SEPARATOR, для визуального разделения в меню файлов по Ctrl+F

SergKis: SergKis пишет В секции [START] можно определить загружаемый файл и если это hbp, возможность сразу выдать список по Ctr+F ? В реальности загружать файл hbp не надо, надо только список, желательно, с комментарием, добавленным к prg и датой последней модификации. Попробовал у себя создать схему своей работы - файлы в utf8 - сборка не уникодная - список файлов проекта выходит, если делаю ext=.hbp.hbi , т.е hbi - файл проекта для меню, hbp для сборки в др. месте (подкаталоги) cmd делаю с перемещением utf8 prg -> Codepage, т.е. программа делает перекодировку, если prg utf8 или перезапись если нет и только потом работа hbmr2 или другого вызываемого cmd Т.е. хочу сказать, желательно иметь (что бы не писать свои исполнители для перекодировки) в hbedit ключи "тихого" пакетного исполнения для перезаписи с кодировкой

alkresin: SergKis пишет: Может этот плагин учесть кодировку части (всех) prg в utf8, а сборка не уникодная в указанной CodePage ? Честно говоря, даже думать на эту тему не хочется). Если надо, добавьте это туда для себя. В секции [START] можно определить загружаемый файл и если это hbp, возможность сразу выдать список по Ctr+F ? Файл - да, можно. Учитывая, что ini может быть из текущего каталога, в этом есть определенная логика. Можно и список файлов там (в ini) указать. Но вот выводить автоматом список файлов при старте мне не нравится. Может, я просто отредактировать этот hbp хочу, или мне надо начать с поиска... Возможно ли, добавить в hbp, через спец. коментарий, добавляемые другие файлы в список Ctrl+F ? ... Возможность иметь в hbp добавить спец. коментарий, как SEPARATOR Думаю, да. В реальности загружать файл hbp не надо, надо только список В реальности hbedit - это текстовый редактор и он должен уметь отредактировать hbp.

SergKis: alkresin пишет Но вот выводить автоматом список файлов при старте мне не нравится. Может, я просто отредактировать этот hbp хочу, или мне надо начать с поиска... Возможно в [START] это, действительно, не очень нужно (хотя запуск без параметров со стартовым списком файлов удобен), а вот в параметрах запуска - вполне. В Far на F2 меню несколько пунктов с разными файлами (меню) проектов создать для запуска нужного в работе, то же удобно. В реальности hbedit - это текстовый редактор и он должен уметь отредактировать hbp. Но у него хорошие возможности быть больше чем редактором (редакторов достаточно). На своей схеме работы показал, что файл hbp и реальный файл проекта (по списку файлов) это разные вещи. Т.е. для меню использовал копию hbp -> hbi Врляд ли стоит забивать мусором реальный hbp, (У Андрея, в простом примере только 20 строк файлов). У меня средний проект (модуль) содержит 3.5 экрана browse x 27 строк на экране и это только prg. Таких модулей в задаче 10, причем используют либу, создаваемую главным модулем. Модуль - это список типа hbp. Честно говоря, даже думать на эту тему не хочется). Если надо, добавьте это туда для себя. В hbedit уже все есть для перекодировки, нет только параметров запуска. Вариант простой - на входе utf8 -> перекодируем в Codepage указанный, имена файлов на входе, выходе - на входе CodePage -> перекодируем в Utf8, т.е. перекодировки CodPage1 -> CodePage2 через Utf8 - можно добавить параметр -dt , по которому переписывать с кодировкой, если время, дата файлов не равны, после перезаписи устанавливать время,дату выходного равную входному С такими командами в cmd можно городить любые сборки, для языковых программ.

SergKis: alkresin Возможно, надо в параметры добавить кодировку открываемого файла. Вот пример работы проекта на каталоги MiniGui https://TransFiles.ru/8d1h3 В нем поставил использование hbedit вместо Notepad3 (Подкаталог ED) В ini поставил кодировку RU1251, т.к. все на EN, но есть примеры с русскими комментариями. Добавил проект\каталог hbedit-master, для работы с ним, надо RU866 и лучше ее задать параметром. Установка - скачиваем и устанавливаем hmg 19.04 - скаченный пример помещаем в подкаталог UTILS\hmg_project - скаченный hbedit-master помещаем подкаталог SAMPLES\hbedit-master - запускаем из UTILS\hmg_project demo.exe

Vlad04: alkresin Чтобы при открытии , окно было распахнуто В смысле, на весь экран? Могу добавить в hbedit.ini такую опцию, если надо. Да, добавьте, пожалуйста По умолчанию стоял какой-то ранее выбранный синтаксис, к примеру, prg Так при открытии файла .prg автоматом устанавливается соответствующий синтаксис... Я и формы с расширением fmg в редакторе открываю

SergKis: alkresin Пожелание к hbedit, иметь режим (по установке или всегда), если файл уже загружен, повторные загрузки в новом или том же окне, давать в ReadOnly с отметкой режима, к примеру, цвет фона другой или отметка в строке состояния

SergKis: PS иметь возможность выполнить hb_MacroBlock вместо плагина при запуске, для вызова меню на клавишу, к примеру [START] plugin= &( _PushKey(<код нажатой клавиши>, <Ctrl нажат\нет>, <Shift нажат\нет>, <Alt нажат\нет>), ; _PushKey(<код нажатой клавиши>, <Ctrl нажат\нет>, <Shift нажат\нет>, <Alt нажат\нет>), ... )

alkresin: Vlad04 пишет: Да, добавьте, пожалуйста Так уже добавлено неделю назад. Я и формы с расширением fmg в редакторе открываю Тогда в ini, секция [LANG_PRG] добавьте в ext нужные расширения: ext=.prg.fmg

alkresin: SergKis пишет: Пожелание к hbedit, иметь режим (по установке или всегда), если файл уже загружен, повторные загрузки в новом или том же окне Сейчас hbedit при попытке повторно отрыть тот же файл просто переключает окно.

alkresin: Обновлен hbedit. Реализована возможность добавления новых окон редактора на экран - для вывода результатов компиляции, например. Теперь плагины plug_hbp_init и plug_prg_run используют эту возможность. Если, например, plug_hbp_init по Ctrl-L выявлены ошибки компиляции, появляется дополнительное окно (текущее при этом уменьшается) со списком ошибок и при нажатии Enter (или двойном щелчке) на строке с ошибкой открывается соответствующий файл на нужной строке.

alkresin: SergKis пишет: иметь возможность выполнить hb_MacroBlock вместо плагина при запуске, для вызова меню на клавишу, к примеру [START] plugin= &( _PushKey(<код нажатой клавиши>, <Ctrl нажат\нет>, <Shift нажат\нет>, <Alt нажат\нет>), ; _PushKey(<код нажатой клавиши>, <Ctrl нажат\нет>, <Shift нажат\нет>, <Alt нажат\нет>), ... ) Сделать-то можно, но учтите, что ini-файл имеет определенный формат, который предусматривает, в частности, одну строку на каждую опцию.

SergKis: alkresin пишет Сейчас hbedit при попытке повторно отрыть тот же файл просто переключает окно. Я знаю и др. редакторы делают закладку или в новом окне открывают, но все в режиме редактирования и при модификации всех повторно открытых, сообщают об изменениях. Хотелось бы избежать случайных изменений повторно открытых файлов (открыты для просмотра в разных местах) Сделать-то можно, но учтите, что ini-файл имеет определенный формат, который предусматривает, в частности, одну строку на каждую опцию. Это понятно. Нажать нужно, к примеру, F9 и 9 или a, или сразу F11

SergKis: alkresin пишет Сейчас hbedit при попытке повторно отрыть тот же файл просто переключает окно. hbedit.exe h_tbrowse.prg hbedit.exe h_tbrowse.prg hbedit.exe h_tbrowse.prg Открывают 3и новых окна и это хорошо, т.к. хочу через F11 открыть их в разных местах и только 1ый менять и запуски со второго вкл. автоматом в ReadOnly режиме

SergKis: PS Режим запуска hbedit.exe h_tbrowse.prg h_tbrowse.prg h_tbrowse.prg возможен, но менее интересен, т.к. просмотр в одном окне Ctrl+TAB переключая, на разных окнах их можно раздвинуть по экрану, что производительнее

SergKis: PPS Можно сделать собственный набор пунктов меню F9 через ini ? Из того что есть в работе нужны 9 и a, остальные пункты как help с возможностью выбора и выполнения с него или убрать в какое то подменю (один пункт как "Other")

SergKis: alkresin пишет появляется дополнительное окно (текущее при этом уменьшается) со списком ошибок А можно этот режим перевести в отдельное, новое окно в указанных размерах, координатах в ini, не трогая основное окно ? К примеру в секции [START] и все ошибки (и run процессов на hbp) выдавать в нем

SergKis: PS Еще лучше координаты этого окна запоминать при выходе из него, т.е. подвинули в нужное место посмотрели, вышли, координаты запомнились. Следующий запуск в этих Y, X

SergKis: SergKis пишет А можно этот режим перевести в отдельное, новое окно в указанных размерах, координатах в ini Хорошо бы для этого окна размер фонта установить другой не 12, как в [SCREEN], а 10 или 9

alkresin: SergKis пишет: hbedit.exe h_tbrowse.prg hbedit.exe h_tbrowse.prg hbedit.exe h_tbrowse.prg Открывают 3и новых окна и это хорошо, т.к. хочу через F11 открыть их в разных местах и только 1ый менять А, так вы имеете ввиду запуск разных экземпляров hbedit... Отслеживать наличие запущенных hbedit я не планирую. Что могу сделать - так это добавить ключ командной строки, чтобы файл открывался в readonly.

alkresin: SergKis пишет: Можно сделать собственный набор пунктов меню F9 через ini ? Можно - через стартовый плагин. А можно этот режим перевести в отдельное, новое окно в указанных размерах, координатах в ini, не трогая основное окно ? Вы имеете ввиду - запустить новый экземпляр hbedit?

SergKis: alkresin пишет Вы имеете ввиду - запустить новый экземпляр hbedit? Да, это удобнее, чем менять основное окно. Был опыт такой работы - не понравилось. Отслеживать наличие запущенных hbedit я не планирую. Что могу сделать - так это добавить ключ командной строки, чтобы файл открывался в readonly Жаль, через мутекс на полное имя файла, вроде не сложно Можно - через стартовый плагин. И снова жаль. Большой опыт работы в VO со скриптами .vos (аналог prg), *.vox (условный аналог hrb) при построении задач. Убирал *.vox в ресурсную dll, но то, что выносилось, как плагины, клиенту (или нашему человеку) для ведения\исправления немного под конкретную ситуацию рабочего места (каталога), со временем превратилось в большую головную боль, начиная с простого - собрать в библиотеку на клиента, анализировать изменения, ... Вопрос возник в связи с переходом на hb. Писать плагины, пока, не входит в планы для lang_prg, как и собирать сам hbedit.exe - не вижу смысла.

alkresin: SergKis пишет: Да, это удобнее, чем менять основное окно. Был опыт такой работы - не понравилось. Мне больше нравится так, как сделал. Кроме того, такой вариант невозможен при удаленной работе по ssh.

alkresin: Обновлен hbedit. В меню добавлена возможность поиска - сейчас это сделано для списка функций, где количество функций превышает 36 и при навигации по файлам/каталогам (F4). Добавлен ключ командной строки -ro - открывать указанные файлы в readonly режиме. При этом в панели состояния вместо Edit стоит View. Добавлена команда x (и, соответственно, [0...9]x) для Vim-mode.

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а байта. А тут четыре, т.е. расширенные из меню не пройдут. Посмотрел в более спокойной обстановке - это так.

alkresin: Ну тогда надо вернуть простые и все должно работать.

SergKis: alkresin пишет Ну тогда надо вернуть простые и все должно работать. Работают, вызывают окна при выборе пункта меню (это все через расширенные коды) [pre2] wvt_AppendMenu( hMnu1, "Open file " + c9 + "Ctrl+F4", K_CTRL_F4 ) wvt_AppendMenu( hMnu1, "Find " + c9 + "Ctrl+F7", K_CTRL_F7 ) Не работают F11, Shift+F8, Shift+F2 [/pre2]

alkresin: Ну а что получает bOnKey, если отбросить мышиные события?

SergKis: [pre2] bBlk := {|o,n| ToLog(.T., 'nKey =', n, hb_keyStd(n)) Return 0 } результат по нажатиям клавиш в лог ========================= это по нажатию клавиш F4, Esc, F9, Esc, Esc - выход nKey = 1103 1103 nKey = 1157632003 1001 nKey = 1090519044 -3 nKey = 1090519049 -8 nKey = 1090519065 27 n (первая колонка после nKey =) приходит в расширенном виде, вторая колонка реал. код клавиши [/pre2] Получается, при расширенном коде, что проходит в меню item в 2а байта, срабатыват, нет игнорируется

SergKis: т.е. K_CTRL_F4 и K_CTRL_F7 уложились в 2а байта, потому и выполнились - окна запросов open file и find появились

alkresin: Ну, вообще говоря, поскольку у вас есть bOnKey, вы можете подавать туда любые коды. Т.е., не обязательно привязываться к реальным кодам, расширенным или нет, можно подать любой код, а в bOnKey прописать его обработку. Главное, чтобы этот код не совпадал с чем-то существующим и нужным.

SergKis: alkresin пишет Т.е., не обязательно привязываться к реальным кодам, расширенным или нет, можно подать любой код, а в bOnKey прописать его обработку. Сделал в меню коды [pre2] bBlk := {|o,n| Local k := 0 If n == 30101; k := K_CTRL_F4 ElseIf n == 30102; k := K_CTRL_F7 ElseIf n == 30103; k := K_SH_F2 ElseIf n == 30104; k := K_SH_F8 EndIf ToLog(.T., 'nKey =', n, hb_keyStd(n), k) Return k } Значения k < 0, не учтено тут (красным добавил) IF !Empty( ::bOnKey ) i := Eval( ::bOnKey, Self, nKeyExt ) IF i == - 1 RETURN Nil ELSEIF i > 0 nKeyExt := i nKey := hb_keyStd(nKeyExt) ELSEIF i < 0 nKey := i ENDIF ENDIF что делать с nKeyExt не знаю, ниже по коду проверки nKeyExt на Alt, Ctrl с правкой сработали назначения на Shift+... - вывелись соответствующие окна, Ctrl+... не сработали [/pre2]

SergKis: PS K_F2 -> -1 тут проверка на -1[pre2] i := Eval( ::bOnKey, Self, nKeyExt ) IF i == - 1 RETURN Nil [/pre2]

alkresin: bOnKey должен возвращать расширенные коды. TEdit():OnKey() проверяет наличие бита, соответствующего нажатому Ctrl в расширенном коде, так как Клипперовские коды для ряда клавиш совпадают, например, Up arrow и Ctrl-E, Down arrow и Ctrl-X, ... SergKis пишет: Значения k < 0, не учтено тут (красным добавил) А почему они должны быть < 0 (кроме -1)?

alkresin: Обновлен hbedit. Добавлена поддержка макросов. Добавлена возможность переопределения клавиш через ini-файл: опция keymap а [OPTIONS], например: keymap=Ctrl-N=>Shift-F4,Ctrl-O=>Ctrl-F4

SergKis: alkresin пишет bOnKey должен возвращать расширенные коды. Подскажите, как перевести реал. коды клавиш в расширенные, буду переводить

alkresin: Для себя написал маленькую программку: [pre2]#include "hbgtinfo.ch" #include "inkey.ch" FUNCTION main LOCAL nkey, nkeyExt ? hb_gtVersion( 1 ), "GT" + hb_gtVersion() ? "Host codpage: " + hb_cdpSelect() DO WHILE .T. nKeyExt := Inkey( 0, HB_INKEY_ALL + HB_INKEY_EXT ) nkey := hb_keyStd( nKeyExt ) ? nKey, " ext: 0x" + hb_numToHex( nkeyExt, 8 ), hb_keyVal( nKeyExt ) IF nKey == 27 EXIT ENDIF ENDDO RETURN Nil [/pre2] Жму клавишу и смотрю код. Другого способа нет. Расширенный код на то и расширенный, что там содержится информация, которой нет в простых кодах.

SergKis: alkresin пишет Для себя написал маленькую программку: Может можно так обыграть, добавив[pre2] DATA lAlt INIT .F. DATA lCtrl INIT .F. DATA lShift INIT .F. ... METHOD onKey( nKeyExt ) CLASS TEdit ... IF !Empty( ::bOnKey ) ::lAlt := ::lCtrl := lShift := .F. i := Eval( ::bOnKey, Self, nKeyExt ) IF ::lAlt .or. ::lCtrl .or. lShift nKey := i ELSEIF i == - 1 RETURN Nil ELSEIF i > 0 nKeyExt := i nKey := hb_keyStd(nKeyExt) ENDIF ENDIF ... IF !lSkip lShift := ( hb_BitAnd( nKeyExt, SHIFT_PRESSED ) != 0 .AND. Ascan( aKeysMove, nkey ) != 0 ) .or. ::lShift IF lShift ... IF hb_BitAnd( nKeyExt, ALT_PRESSED ) != 0 .or. ::lAlt ... IF hb_BitAnd( nKeyExt, CTRL_PRESSED ) != 0 .or. ::lCtrl ... И в блоке кода ставить bBlk := {|o,n| Local k := 0 If n == 30101; k := K_CTRL_F4; o:lCtrl := .T. ElseIf n == 30102; k := K_CTRL_F7; o:lCtrl := .T. ElseIf n == 30103; k := K_SH_F2; o:lShift := .T. ElseIf n == 30104; k := K_SH_F8; o:lShift := .T. EndIf Return k } [/pre2]

SergKis: PS В блок кода правку, наверно, надо[pre2] bBlk := {|o,n| Local k := n [/pre2] или n использовать без k переменной

SergKis: PPS Правка[pre2] ::lAlt := ::lCtrl := lShift := .F. IF !Empty( ::bOnKey ) // ::lAlt := ::lCtrl := lShift := .F. [/pre2]

alkresin: SergKis пишет: Может можно так обыграть, добавив Зачем? Почему просто не передать расширенный код клавиши? Их в вашем меню всего ничего. К тому же, :lctrl не спасет - не отделит, например, Ctrl-Left arrow от Ctrl-Z. Если так трудно поставить несколько кодов, можете использовать новую функцию edi_KeyCToN( cKey ) - я добавил вчера спец.модуль для возможности переопределения клавиш, записи макросов и пр.: edi_KeyCToN( "Ctrl-N" ), например.

SergKis: alkresin пишет Зачем? Почему просто не передать расширенный код клавиши? Их в вашем меню всего ничего. В планах заменить + добавить все меню существующие, с учетом языковых текстов (англ., рус., латв.) перенеся на main menu по горизонтали и popup на них, а так же организовать меню на правый клик мыши + заменить окна консоли на окна windows варианта, которые в нашем варианте gtwvt есть (open file, save file, ...). Выискивать соответствия кодов - отвык работать с консолью\wvt, где то 2011 г. когда "брал в руки шашки" Функцию попробую, спасибо

SergKis: alkresin С функцией получилось заменить коды клавиш в блоке кода[pre2] bBlk := {|o,n| If n == 30101; n := edi_KeyCToN( "Ctrl-F4" ) // K_CTRL_F4 ElseIf n == 30102; n := edi_KeyCToN( "Ctrl-F7" ) // K_CTRL_F7 ElseIf n == 30103; n := edi_KeyCToN( "Shift-F2" ) // K_SH_F2 ElseIf n == 30104; n := edi_KeyCToN( "Shift-F8" ) // K_SH_F8 EndIf Return n } Для вывода в StatusBar добавил DATA bWriteTopPane ... METHOD WriteTopPane( lClear ) CLASS TEdit LOCAL y := ::y1 - 1, nCol := ::nCol, nRow := ::nRow LOCAL cLen := Ltrim(Str(Len(::aText))), nchars := Len(cLen) IF Valtype( ::bWriteTopPane ) == 'B' Eval( ::bWriteTopPane, Self, lClear ) ENDIF IF ::lTopPane ... и в hbedit.prg ... FOR i := 1 TO Len( aFiles ) TEdit():New( Iif(!Empty(aFiles),Memoread(aFiles),""), aFiles, 0, 0, nScreenH-1, nScreenW-1, , .F. ) ATail(TEdit():aWindows):bOnKey := bBlk ATail(TEdit():aWindows):bWriteTopPane := {|o,c| STBsay(o, c) } IF lRO ATail(TEdit():aWindows):lReadOnly := .T. ENDIF NEXT IF Empty( TEdit():aWindows ) TEdit():New( "", "", 0, 0, nScreenH-1, nScreenW-1, , .F. ) ATail(TEdit():aWindows):bOnKey := bBlk ATail(TEdit():aWindows):bWriteTopPane := {|o,c| STBsay(o, c) } IF lRO ATail(TEdit():aWindows):lReadOnly := .T. ENDIF ENDIF ... [/pre2] Получил вывод данных по Statusbar item-ам

SergKis: alkresin Как заставить автоматом выполнить первую строку меню плагинов, т.е. клавишами F11 -> меню -> 0 -> список функций файла prg [pre2] CASE K_F11 mnu_Plugins( Self ) ::lTextOut := .T. EXIT [/pre2] т.е. создать команду меню ElseIf n == 30105; n := <что то тут> // edi_KeyCToN( "Ctrl-F7" )

alkresin: Я добавил функцию edi_RunPlugin( xPlugin ) - можно непосредственно запустить нужный плагин из списка в ini. xPlugin - имя плагина или его номер в списке.

SergKis: alkresin пишет Я добавил функцию edi_RunPlugin( xPlugin ) т.е. делать так (в тек. версии функции нет) ElseIf n == 30105; edi_RunPlugin( xName ); n := -1 Как узнать имя или номер плагина ? Номер это из общего списка или списка на LANG_... тип ?

SergKis: PS Понял, номер берем из общего списка. Что является именем ключ ini p1 = ... или элемент значения до первой запятой ?

alkresin: SergKis пишет: Что является именем ключ ini p1 = ... или элемент значения до первой запятой ? Второе. Например, plug_prg_spis.hrb

SergKis: Спасибо. Еще вопрос. Кол-во окон определяем Len( oEdit:aWindows ) Как получить номер текущего окна ? Думаю подсветить в Statusbar, может и в строку с F9-Menu это надо сделать, что бы понимать где находимся при Ctrl+TAB При поиске, на окне в поле текст selected, вставляю из clipboard, что искать и текст вставляется перед текстом, который selected, т.е. имеем оба текста При выбора загружаемого, при пустом поле, по Enter получаем работу в новом пустом окне - типа режим new file, лучше открыть список файлов для выбора Заметил, при повторном выборе того же файла для загрузки, загрузка не производится, переключаемся на загруженный ранее. Мне думается, это не правильно. Лучше загрузить повторно, но вкл. режим readonly. Повторные загрузки удобны тем, что можно работать в разных местах текста, используя во всех список функций, имея возможность править первый загруженный. То же можно делать при групповой загрузке одного и того же файла (такой режим сейчас работает)

alkresin: SergKis пишет: Как получить номер текущего окна ? oEdit:nCurr Заметил, при повторном выборе того же файла для загрузки, загрузка не производится, переключаемся на загруженный ранее. Мне думается, это не правильно. Наверное, здесь надо поставить вставить вопрос (edi_Alert) с выбором вариантов: переключиться на открытое окно, создать новое окно, создать новое в readonly.

SergKis: alkresin пишет oEdit:nCurr Спасибо. Уже нашел и вывел в item к режиму как Wiin. Nr [ Max ] Наверное, здесь надо поставить вставить вопрос (edi_Alert) с выбором вариантов: переключиться на открытое окно, создать новое окно, создать новое в readonly. По мне, это лишнее, т.к. если произведена повторная загрузка, то она в view и не мешает, Заранее не знаю какие доп. файлы надо подгружать и сколько раз, определяется во время работы. К примеру, h_tbrowse.prg (~750 entity) беру в AkelPad для правки, по мере надобности загружаю 1 или 2 Far для просмотра в др. местах кода, если не хватает запускаю notepsd3, бывает еще доп. Far запускаю. Если переложить на hbedit, то лишние вопросы alert будут мешать. Вот цвет фона поменять для view режима, было бы хорошо

SergKis: PS Пометить первый экземпляр загруженного файла в readony (edit->view) не с команды, а динамически - это надо, т.к. уже работаешь с каким то, а нужно с др. проекта подгрузить и закрыть от изменений

SergKis: PPS Такие операции как переключить окно, поставить readonly, ... хорошо делать па правый клик повесив меню. Не смотрел, есть в TEdit блок кода аналогичный :bOnKey

alkresin: SergKis пишет: По мне, это лишнее, т.к. если произведена повторная загрузка, то она в view и не мешает Может случиться (со мной случается), что пользователь повторно открывает файл, просто забыв, что он уже открыт - в этом случае такой alert будет полезен. Вот цвет фона поменять для view режима, было бы хорошо Сейчас для readonly в панели статуса написано в правом углу View.

alkresin: Обновил hbedit (только на github) - добавил сохранение макросов в his, bWriteTopPane и еще что-то по мелочи. Сейчас придется переписать отдельные части для нормальной поддержки табуляции.

SergKis: alkresin Перенес назад вызов блока, т.к. у меня режим ::lTopPane := .F.[pre2] METHOD WriteTopPane( lClear ) CLASS TEdit LOCAL y := ::y1 - 1, nCol := ::nCol, nRow := ::nRow LOCAL cLen := Ltrim(Str(Len(::aText))), nchars := Len(cLen) IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, y ) ENDIF IF ::lTopPane DispBegin() SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) IF Empty( lClear ) // IF ::bWriteTopPane != Nil // Eval( ::bWriteTopPane, Self, y ) // ELSE ... [/pre2]

SergKis: alkresin Как узнать, какой LANG_... (тип синтаксиса) у конкретного oEdit ?

SergKis: PS Как получить список плагинов на конкретный oEdit, т.е. LANG_... (тип синтаксиса) ?

SergKis: SergKis пишет Как узнать, какой LANG_... (тип синтаксиса) у конкретного oEdit ? Как получить список плагинов на конкретный oEdit, т.е. LANG_... (тип синтаксиса) ? Разобрался: 1. oEdше:cSyntaxType, подсветил у режима 2. надо получать на базе ф-ии mnu_Plugins( oEdit )

alkresin: SergKis пишет: т.к. у меня режим ::lTopPane := .F. А смысл?

SergKis: alkresin пишет А смысл? Нет строки отображения по :lTopPane == .T. Есть Main menu и StatusBar Пример тут https://TransFiles.ru/esw5h

SergKis: PS Еще, по возможности максимально переведутся режимы hbedit на меню по правой кнопке мыши

SergKis: PPS Имеется ввиду меню виндосовское по wvt_TrackPopupMenu( hMnu )

SergKis: alkresin пишет А смысл? 1. Что бы линии с F9-Menu не было никогда, сейчас она появляется после загрузки Open file 2. Кол-во строк на экране можно было сделать на строку меньше, т.е. MaxRow()-1, т.к. StatusBar съедает от клиентской области 1 строку

SergKis: alkresin 1. Поставил значение DATA lTopPane INIT .F. // .T. строка с F9-Menu не прорисовывается, в параметрах для :New(..., .F.) указывать не надо. Все как хотелось. Осталось найти, как\где уменьшить кол-во строк на экране. Подозреваю, что это oEdit:y2, пока не проверял. 2. Ctrl+Y удаляет строку но перескакивает на несколько строк ниже, к примеру, удаляем 59, перескок на 62 и т.д. 3. Ставлю на входе в hbedit.prg[pre2] IF Empty( TEdit():aWindows ) TEdit():New( "", "", 0, 0, nScreenH-1, nScreenW-1, , lTopPane ) IF lRO ATail(TEdit():aWindows):lReadOnly := .T. ENDIF ENDIF FOR i := 1 TO Len( TEdit():aWindows ) TEdit():aWindows[ i ]:bOnKey := {|o,n| EdOnKey(o, n) } TEdit():aWindows[ i ]:bWriteTopPane := {|o,n| StBline(o, n) } NEXT IF nStartLine != Nil [/pre2] С загруженными все работает. Делаю Open file или New file для них, новых, не работает, нет установки этих блоков. Т.е. переключаю (Crtl+TAB) на загруженный ранее при входе - работают блоки, на новые переключаю - не работают, блоков кода у них нет. Это видно в представленном примере hbedit выше. Думаю поставить значения блоков в DATA bOnKey, bWriteTopPane т.е. DATA bOnKey INIT {|o,n| EdOnKey(o, n) } DATA bWriteTopPane INIT {|o,n| StBline(o, n) } Или не стоит так делать ?

alkresin: Есть еще кодоблок :bNew - это CLASS VAR, отрабатывает при открытии каждого файла. Можно (и лучше) устанавливать bonkey и bWriteTopPane там.

SergKis: alkresin пишет Есть еще кодоблок :bNew - это CLASS VAR, отрабатывает при открытии каждого файла. Можно (и лучше) устанавливать bonkey и bWriteTopPane там. Это верно для 2го oEdi и далееt, для первого bNew не установить, т.к. выполняется он в :New(...) и больше нигде. Если выделить установки и расчет координат в др. метод, к примеру :Def(), то тогда да oE :=TEdit():New(...) oE:bOnKey := ... oE:bWriteTopPane := ... oE:lTopPane := .F. oE:Def()

alkresin: SergKis пишет: Это верно для 2го oEdi и далееt, для первого bNew не установить, Почему? Это же CLASS VAR, я специально отметил. Просто пишете до появления первых объектов редактора: TEdit():bNew := ...

SergKis: alkresin пишет Просто пишете до появления первых объектов редактора Спасибо, почти все получилось[pre2] DATA lTopPane INIT .T. hbedit.prg ... TEdit():bNew := {|oe| oe:lTopPane := .F., ; oe:bOnKey := {|o,n| EdOnKey(o, n) }, ; oe:bWriteTopPane := {|o,n| StBline(o, n) } } nScreenH -= 1 FOR i := 1 TO Len( aFiles ) TEdit():New( Iif(!Empty(aFiles),Memoread(aFiles),""), aFiles, 0, 0, nScreenH-1, nScreenW-1, , .F. ) IF lRO ATail(TEdit():aWindows):lReadOnly := .T. ENDIF NEXT IF Empty( TEdit():aWindows ) TEdit():New( "", "", 0, 0, nScreenH-1, nScreenW-1, , .F. ) IF lRO ATail(TEdit():aWindows):lReadOnly := .T. ENDIF ENDIF ... [/pre2] Загруженные сразу при запуске hbedit.exe 3и файла перемещение курсора вверх\вниз - все ok New file + добавляем строки, перемещение курсора вверх\вниз до 1ой строки, т.е курсор во 2ой Open file перемещение курсора вверх\вниз до 1ой строки, т.е курсор во 2ой Ctrl+TAB на загруженные при старте,New file + добавляем строки, перемещение курсора вверх\вниз - все ok Ставлю DATA lTopPane INIT .F. Все ok во всех режимах выше

SergKis: PS читать Ctrl+TAB на загруженные при старте,New file + добавляем строки, перемещение курсора вверх\вниз - все ok

SergKis: PPS сделал так [pre2] TEdit():bNew := {|oe| oe:lTopPane := .F., oe:y2 := MaxRow()-1, oe:y1 := 0, ; oe:bOnKey := {|o,n| EdOnKey(o, n) }, ; oe:bWriteTopPane := {|o,n| StBline(o, n) } } [/pre2] his удалил. На сразу загруженных файлах - все ok. New file, Open file ставят курсор во 2ую строку, причем New file при стрелке вверх ставит в 1ю строку курсор и больше не перемещается - строка 1, позиция 1

alkresin: Обновлен hbedit. Реализована поддержка табуляции. Оптимизирован движок подсветки. Кое-что исправлено.

SergKis: alkresin 1. Заменяю на "свои" окна (из MiniGui.lib подошло подключением) [pre2] FUNCTION edi_Alert( cText, cAns1, cAns2, cAns3 ) LOCAL aText := hb_aTokens( cText, ";" ), i LOCAL aGets := { {,,2," Ok ",4,"W+/R","W+/B",{||__KeyBoard(Chr(K_ENTER))}} } LOCAL nLen := 0, nBtnsLen := 6, cp, x1, y1 := 10, oldc, bufsc * =================================================================== cText := '' ; AEval(aText, {|ct,ni| cText += ct + ; iif( Len(aText) == ni, "", chr(13)+chr(10) ) }) If ! empty(cAns3) cp := 'Information' If Len( aText ) > 1 cp := ATail(aText) Else If ( i := RAt( '.', cText ) ) > 0 cp := Alltrim(subs(cText, i + 1)) EndIf EndIf If '?' $ cp; cp := StrTran(cp, '?', '') EndIf i := MsgYesNoCancel( cText, cp ) ElseIf ! empty(cAns2) cp := 'Information' If Len( aText ) > 1 cp := ATail(aText) Else If ( i := RAt( '.', cText ) ) > 0 cp := Alltrim(subs(cText, i + 1)) EndIf EndIf If '?' $ cp; cp := StrTran(cp, '?', '') EndIf i := MsgYesNo( cText, cp ) ElseIf ! empty(cAns1) If cAns1 == 'Quit' MsgBox( cText, "Error" + ". " + cAns1 ) Else MsgBox( cText, cAns1 ) EndIf Else MsgInfo( cText ) EndIf If i != Nil; i += 1 EndIf RETURN i * =================================================================== FOR i := 1 TO Len( aText ) nLen := Max( nLen, Len( aText[ i ] ) ) NEXT nLen += 4 ... [/pre2] Можно ли в этом месте поставить переменную с блоком кода, если задана, то выполнять блок кода из переменной, иначе код функции ? Что бы не лазить для правки каждый раз в текст edi_Alert() 2. Загружаю текст prg hbedit.exe fedit.prg , курсор на строке, к примеру 2153[pre2] RETURN Nil FUNCTION mnu_F3( oEdit ) [/pre2] между RETURN Nil и FUNCTION ... на пустой строке Смещаем курсор вправо стрелкой на n позиций, т.е. Col > 1 Делаем Backspace, строка пустая пропадает и имеем[pre2] RETURN Nil FUNCTION mnu_F3( oEdit )[/pre2] Это не правильно.

SergKis: PS К пункту 1. Хотел edi_Alert() перевести на #translate, но т.к. нет файла hbedit.ch с #include "hbedit.ch" в каждом *.prg, а заводить свой, это править все файлы prg, что по мне, хуже, то предложил переменную с блоком кода.

alkresin: SergKis пишет: Можно ли в этом месте поставить переменную с блоком кода, если задана, то выполнять блок кода из переменной Не понял. А откуда предполагается брать кодоблок, как он будет задан?

alkresin: Обновил hbedit. Расширена поддержка макросов (см. help). Всякие мелкие правки.

SergKis: alkresin пишет Не понял. А откуда предполагается брать кодоблок, как он будет задан? К примеру так[pre2] FUNCTION edi_Alert( cText, cAns1, cAns2, cAns3 ) ... STATIC b_Alert IF Valtype(cText) == 'B' b_Alert := cText RETURN Nil ENDIF IF empty( b_Alert ) ... как сейчас ELSE i := EVal( b_Alert, cText, cAns1, cAns2, cAns3 ) ENDIF RETURN i тогда в своем prg делаю установку блока и происходит подмена кода выполнения. Хорошо бы в oEdit добавить пару переменных CLASS VAR ... для блоков кода подмены запроса Open file и Save as ... Т.к. используем (у себя в работе) в gtwvt windows варианты запросов. Конечно и для окон запроса Search и Search&Replace такой механизм не помешал бы, но пока не так актуально. [/pre2]

SergKis: PS И совсем замечательно, если в oEdit добавить установку своего HB_GTI_PALETTE для каждого экземпляра окна. К примеру через блок кода CLASS VAR ... и вызовом его при смене\установки окна редактирования. Можно отработать разноцветность режимов, как минимум

alkresin: SergKis пишет: К примеру так Лучше я просто выделю edi_Alert() в отдельный файл. Хорошо бы в oEdit добавить пару переменных CLASS VAR ... для блоков кода подмены запроса Open file и Save as ... Вы же их все-равно вызываете из своего меню. Так вызывайте свои процедуры вместо них. И совсем замечательно, если в oEdit добавить установку своего HB_GTI_PALETTE для каждого экземпляра окна. Это вы можете сделать в кодоблоке bStartEdit, который вызывается каждый раз при вызове :Edit().

SergKis: alkresin пишет Лучше я просто выделю edi_Alert() в отдельный файл. Очень хорошо. Так вызывайте свои процедуры вместо них. Так и буду делать Это вы можете сделать в кодоблоке bStartEdit Увидел, что есть bStartEdit и bEndEdit - замечательно

SergKis: alkresin Запуск hbedit.exe New file Ставлю кодировку Utf8 что то набираю Save as ... Esc смотрим файл в Far F3, F4 -> у файла нет BOM Наверно, нужна галочка\пункт меню, сохранять с BOM или нет.

alkresin: SergKis пишет: Наверно, нужна галочка\пункт меню, сохранять с BOM или нет. Согласен, надо будет добавить в диалог по Save as. Плюс eol и, может быть, кодовую страницу.

SergKis: alkresin пишет и, может быть, кодовую страницу. Желательно, иметь режим, сменить кодировку текста, к примеру, RU866 -> Utf8 и т.д.

alkresin: Ну, кодировка менятся просто как и в Far'е: Выделяем все (Ctrl-A), вырезаем, меняем кодировку и вставляем.

SergKis: alkresin пишет Выделяем все (Ctrl-A), вырезаем, меняем кодировку и вставляем. Не самый удобный механизм. В Notepad3.exe есть режим переоткрыть в кодировке, кл. F8 (меню есть) -> табличка кодировок. Т.е. в файле Utf8, в работе RU1251, или RU866, или LV866. Просто и удобно

alkresin: Обновлен hbedit. В диалог Save as добавлены опции eol и bom. В диалог Search&Replace добавлена кнопка для выбора replace. В диалог Search добавлены опции Whole word и Regular expression.

SergKis: alkresin пишет В диалог Save as добавлены опции eol и bom. Не смог попасть на [ ] ...BOM .. ( ) ...., ни TAB, ни стрелкой вниз, ни мышкой

SergKis: PS hbedit.exe F9, 7, 3 // Utf8 поставили ввожу текст Esc edi_Alert с сообщением, отвечаю Save окно Save, ввожу имя, перемещаюсь по галочкам, жму Esc полный выход из hbedit, отказался только от режима Save as, вернуться должен на текст oEdit и выходить через edi_Alert

SergKis: alkresin Может галочку для BOM Utf8 в ini завести. Если работа с текстовыми файлами BOM чаще нужен, чем нет, при html и xml BOM не нужен

alkresin: SergKis пишет: Не смог попасть на [ ] ...BOM .. ( ) ...., ... Esc полный выход из hbedit Исправил.

alkresin: Обновлен hbedit (когда я это пишу, то имею ввиду бинарники у меня на сайте, исходники на github обновляются чаще). Добавлены vim-команды r, R, ~. Исправлены кое-какие ошибки.

alkresin: Обновлен hbedit. Теперь можно расщепить текущее окно на две части по горизонтали или по вертикали, при этом в новом "субокне" откроется тот же файл, что и в текущем, но в readonly режиме: Ctrl-w, s - расщепить по горизонтали Ctrl-w, v - расщепить по вертикали Ctrl-w, w - переключение между "субокнами". Сочетания клавиш, если кого удивляют, взяты из vim. Добавлены новые vim-команды: ciw, ci", di"

alkresin: Обновлен hbedit. Сделан выбор нескольких файлов (нужные отмечаются пробелом) из списка в диалоге Open File и в списке файлов проекта hbp-плагина. В диалог Open File добавлены опции ReadOnly и In a current window (т.е., вместо текущего файла). Добавлена возможность искать по содержимому файлов: в списке файлов в нижней строчке, где мы можем ввести фрагмент имени файла для поиска, после прямой косой теперь можно ввести строку для поска по содержанию, которая должна завершаться двумя косыми. Например, нам надо найти prg-файлы каталога, где есть строка "AddWindow": prg/AddWindow// Между двумя завершающими косыми можно ввести 'c' - поиск без учета регистра: prg/addwindow/c/

SergKis: alkresin 1. Выбор файлов окно, TAB, фокус на [^] жму Enter (только пробел, "маловато будет") -> уходим на oEdit как New file 2. Выбор файлов окно на списке, ищем по содержимому /prg/method/пытаюсь ввести / не дает, Enter -> валит dbedit 3. Деление окна Ctrl+w любое. На разделенном (правом или нижнем) окне F11 или F4, возможно др. меню не восстанавливают экран после меню при возврате в режим Edit

SergKis: PS При вертикальном разделении окна, в левом окне, счетчик колонок наезжает на режим работы - пропадают правые значения и ]

SergKis: PPS Прикольно разбивать окна на подокна, но когда, разбив все окно на 4 части, продолжить разбиение, кроме искажения строки меню, выход по Esc с подокна уходит на главное окно, а ожидается на предыдущее подокно, как создавались и переключаются по Ctrl+w, w. Т.е. Esc убирает подокно и ставит на предыдущее, иначе нажатие Esc скидывает всю работу по окнам с подокнами, убирая\завершая hbedit, что становится неожиданным

alkresin: SergKis пишет: Выбор файлов окно, TAB, фокус на [^] жму Enter (только пробел, "маловато будет") -> уходим на oEdit как New file Не удалось воспроизвести и не понял, при чем тут пробел. /prg/method/пытаюсь ввести / не дает Поиск по умолчанию - с учетом регистра (потому что без учета - медленнее) - второй слэш не вводится, потому что поиск не дал результатов. А валиться не должен, конечно, исправлю.

SergKis: alkresin пишет Не удалось воспроизвести и не понял, при чем тут пробел. По пробелу (в фокусе [^]) вызывается список файлов, а по Enter улетаем сразу в oEdit. Точно так ведут себя и др. элементы окна ReadOnly, In a current ... -> улетают в oEdit при Enter. Находясь в фокусе, по мне, они должны срабатывать, как при нажатии Space. Если в фокусе поле ввода имени файла и оно пустое, а мы жмем Enter, должно срабатывать TAB+VK_SPACE, т.е. фокус на [^] и вызов списка, а не переход в oEdit, как при New file

alkresin: SergKis пишет: По пробелу (в фокусе [^]) вызывается список файлов, а по Enter улетаем сразу в oEdit. Точно так ведут себя и др. элементы окна ReadOnly, In a current ... -> улетают в oEdit при Enter. Находясь в фокусе, по мне, они должны срабатывать, как при нажатии Space. Вопрос спорный. Я, когда это делал, ориентировался на Far - там именно так, как у меня сейчас.

SergKis: alkresin пишет Вопрос спорный. Я, когда это делал, ориентировался на Far - там именно так, как у меня сейчас. Для пользователей console, wvt режимов это скорее аксиома. Все переделанные проги на windows hmg, по просьбам пользователей, доводятся именно до такой работы (хорошо в hmg есть команда). И это удобнее, по мне. Если бы фокус стоял на кнопке [Отменить], а сейчас получается именно так по default, я бы согласился. Far, правктически, не использую как редактор.

SergKis: PS Вызывая окно Open file, хочется выбрать именно файл и хотелось, что бы окно было сфокусировано на это, а не режим [Отменить]

SergKis: SergKis пишет При вертикальном разделении окна, в левом окне, счетчик колонок наезжает на режим работы - пропадают правые значения и ] По мне, для подокон имя файла и режим работы можно не показывать в строке состояния - все видно в окне с режимом Edit. Достаточно счетчиков строк, колонок.

alkresin: SergKis пишет: Если бы фокус стоял на кнопке [Отменить], а сейчас получается именно так по default, я бы согласился Нажатие ENTER в любой позиции, кроме кнопки CANCEL - это подтверждение операции, а не отмена. Если бы у вас в строке для имени файла что-то было, то указанный файл открылся бы. Ну а раз там пусто, то соответствующее действие не производится.

SergKis: alkresin пишет Если бы у вас в строке для имени файла что-то было, то указанный файл открылся бы. Ну а раз там пусто, то соответствующее действие не производится. В своих программах, на полях со справочником (вызов списка файлов - аналог) Enter на пустом поле, проделывает операцию вызова справочника. Это удобно для пользователя, как удобно и нажатие Enter на элементе в фокусе - проделывается операция в "фокусе". Esc - отказ от операции. Но это Ваша программа и Ваше видение. Я только излагаю мысли вслух

SergKis: PS [^] - это кнопка и когда она в фокусе, то Space и Enter исполнители операции в "фокусе". Сейчас срабатывает только Space, что несколько не логично.

alkresin: Логика может быть разная. Я, повторяю, ориентировался на Far и Midnight Commander. Если авторам и пользователям этих двух популярных инструментов такая организация интерфейса кажется нормальной - значит, эта логика не такая уж ущербная).

alkresin: Обновлен hbedit. Исправлены ошибки, о которых здесь говорилось. В командном режиме добавлена возможность запускать консольные команды с перенаправлением вывода в новое окно редактора: !harbour

Pasha: Чтобы не создавать новую тему, напишу сюда. В редакторе фара сборку я сделал таким образом: Записал в фаре макрос (по Ctrl+.): Нажатие Shift+F10 (сохранение файла без подтверждения) затем нажатие клавиш _build В папке есть файл _Build.bat, по которому запускается сборка. При ошибках или предупреждениях в текущую папку кидается протокол компилятора с проблемными строками Повесил макрос на Ctrl+F12 В редакторе фара нажимаю волшебную клавишу, жду несколько сек, и анализирую результат. Кто как вызывает компиляцию из редактора, может есть способ получше ? Как это делается в hbedit ?

SergKis: Pasha пишет Кто как вызывает компиляцию из редактора В Notpad3 меню File => Запустить => Команда => окно с заданным именем (в ini) cmd\bat файла с кнопками <OK>, <Cancel>, <обзор выбора др.файла> Быстрый вызов окна Ctrl+R На экране отрабатывает cmd окно, выполняющее файл. В cmd, при ошибке сборки, ставлю вызов hmg программы с browse показом файла ошибок, пи выборе строки с ошибкой, запускаю редактор с установкой на строку ошибки. Из своей оболочки ведения проектов использую два редактора (по указанию в ini) AkelPad или Notepad3 (оба с расцветкой текста). cmd\bat сборки работает везде одинаково, только в оболочке можно задать список исп. файлов cmd, для сборки exe, lib разных, dll и выбрать нужный для исполнения. Файлы prg в основном в Utf8, под оболочкой перекодируются в однобайтовый файл в др.каталоге и они участвуют в сборке, причем только изменненые.

Pasha: Спасибо. т.е. файл ошибок компилятора, который создается переадресацией вывода компилятора >>, анализируются своей программой, которая вытаскивает из него строки с траблами, для дальнейшего анализа ? Неплохо.

alkresin: Pasha пишет: Кто как вызывает компиляцию из редактора, может есть способ получше ? Как это делается в hbedit ? В hbedit есть готовый плагин для hbp файлов. Открывается hbp, по Ctrl-F можно посмотреть список файлов проекта и открыть нужные, по Ctrl-L - сборка проекта, при этом результаты выводятся в отдельное окно, в котором можно, нажав Enter на строке с сообщением об ошибке, перейти к соответствующему файлу исходников в соответствующей строке. В принципе, аналогичный плагин можно было и для bat написать, но я выбрал hbp, поскольку он - кроссплатформенный.

SergKis: alkresin пишет Исправлены ошибки, о которых здесь говорилось. Не совсем: 1. При делении окна на подокна в окне Edit счетчик колонка теряет правый символ при позиции > 9 и 2а символа при > 99 2. hbedit.exe fedit.prg F9 a // если работал в русской кодировке, то меню не понимает ни а ни б, надо переключать для команды в EN потом обратно, лишние телодвижения 2 F9 a 1 Ctrl+w, w Ctrl+w, w // на окне с Edit F9 a 1 имеем четыре подокна, фокус на 4ом последнем Esc осталось три подокна, фокус на 1ом с Edit Esc переход фокуса на 3е подокно Esc hbedit с 3мя подокнами завершил работу, что не ожидано, т.к. хотелось убрать 3е подокно и работать дальше

alkresin: SergKis пишет: При делении окна на подокна в окне Edit счетчик колонка теряет правый символ при позиции > 9 и 2а символа при > 99 2. Странно, я это исправлял - у меня все нормально. Сколько колонок у вас задано в ini (screen_width)?

SergKis: alkresin пишет Странно, я это исправлял - у меня все нормально. Сколько колонок у вас задано в ini (screen_width)? screen_width=120 screen_height=30

SergKis: PS на 100, действительно, нормально.

SergKis: PPS Даже при делении окна на 2е части и фокус на Edit, Esc - завершает работу hbedit

alkresin: SergKis пишет: Даже при делении окна на 2е части и фокус на Edit, Esc - завершает работу hbedit Ну это так и было предусмотрено. Второе окно - как бы дочернее, readonly, поэтому при закрытии основного окна и это закрывается автоматически. А какой смысл расщеплять экран и потом закрывать основное редактируемое окно и оставлять такое же readonly?

SergKis: alkresin пишет А какой смысл расщеплять экран и потом закрывать основное редактируемое окно и оставлять такое же readonly? Процесс работы с подокнами предполагает, перенос текста в окно Edit и нажатие Esc чисто рефлекторное или специально нажатое Esc (в примере с 4мя подокнами переход по Esc на последнее дочернее - хорошее решение, понравилось). Работа по Ctrl+w, w абсолютно не привычна. Наличие подокон похоже на работу с директорией, пока файлы в ней есть, удалить затруднительно. Т.е. убираем подокна, потом можно думать о закрытии hbedit, а могут быть и child окна с др. файлами. Получается подготовленная оконная среда для работы закроется по случайному Esc

alkresin: SergKis пишет: в примере с 4мя подокнами переход по Esc на последнее дочернее - хорошее решение, понравилось Вообще-то это случайный побочный эффект ошибки. Возможность иметь больше двух окон я еще не рассматривал. Работа по Ctrl+w, w абсолютно не привычна Можно и мышкой. Получается подготовленная оконная среда для работы закроется по случайному Esc Нажатому в основном окне. Впрочем, можно alert поставить - если ESC нажат в основном окне при наличии дочерних.

alkresin: Обновил hbedit. Исправлено несколько ошибок. Временно запрещено открытие дочернего окна из дочернего.

alkresin: Обновил hbedit. Упорядочено управление окнами - вроде бы нормально теперь.

SergKis: alkresin Нет времени модификации TimeStamp в oEdit, что бы при Save отслеживать изменение файла внешней программой с сообщением.

alkresin: Обновлен hbedit. Добавлена проверка времени модификации перед сохранением. Добавлена команда V в Vim-режиме.

SergKis: alkresin hbedit.exe fedit.prg (выравниваем подмассив на одинаковое смещение слева по 1ой строке)[pre2] FUNCTION mnu_Windows( oEdit, aXY, n ) LOCAL aMenu := { {"Switch window",Nil,Nil,"Ctrl-w,w"}, ; {"Add window horizontally",Nil,Nil,"Ctrl-w,s"}, ; {"Add window vertically",Nil,Nil,"Ctrl-w,v"} } курсор в первой позиции строки {"Add window horizontally",Nil,Nil,"Ctrl-w,s"}, ; жмем 3и раза VK_TAB + 2а раза VK_SPACE - строки 1, 2 выровняли жмем стрелку вниз - курсор отпрыгивает влево, а не вниз в той же колонке жмем стрелку вверх - курсор отпрыгивает вправо, опять не в той же колонке для строки {"Add window vertically",Nil,Nil,"Ctrl-w,v"} } добавим пробелы слева, выравнивая по 2ой сир. левый край перескоки остаются при перемещении. Наверно, так не должно быть ? [/pre2]

alkresin: SergKis пишет: жмем 3и раза VK_TAB... Поставьте в ini опцию (а я добавлю ее в ini закомментированную) tabtospaces=On тогда tab будет преобразовываться в определенное tablen количество пробелов. А по умолчанию tab - это именно tab.

SergKis: alkresin пишет А по умолчанию tab - это именно tab. Претензий к TAB нет, думается колонка на экране, в любом случае, должна сохранятся (tabtospace=On или Off не важно). Т.е. если она 40, то при движении вверх вниз, должна оставаться 40, не перепрыгивая. Именно такое поведение (прыгание курсора) Notepad3 мешает использовать его на 100%

alkresin: SergKis пишет: Т.е. если она 40, то при движении вверх вниз, должна оставаться 40, не перепрыгивая. Если 40, то - да. Надо будет подправить это дело. А вот если, скажем, 37, и в следующей строке здесь как раз tab, то курсор скакнет на 36.

SergKis: alkresin пишет А вот если, скажем, 37, и в следующей строке здесь как раз tab, то курсор скакнет на 36. Не должен курсор менять самопроизвольно позицию, т.е. был на 37 и остался на ней же, не зависимо есть или нет в строке TAB

alkresin: SergKis пишет: Не должен курсор менять самопроизвольно позицию, т.е. был на 37 и остался на ней же, не зависимо есть или нет в строке TAB Если перед 37 стоит tab, то на 38 (так будет точнее) курсор никак не может встать - там ничего нет, следующая позиция - 41 (при tablen=4). Это стандартное и естественное поведение для всех редакторов - хоть Far, хоть vscode, ...

SergKis: alkresin пишет Это стандартное и естественное поведение для всех редакторов - хоть Far, хоть vscode, ... Проделанное выравнивание массива (схема выше), в Far, AkelPad и даже Notepad3 позицию курсора после TAB не меняют, т.е. после TAB + 2 SPACE, полученная позиция курсора при движении вверх вниз не меняется (нет перескоков). В Notepad3 перескок идет по концу строки, при условии предыдущая позиция больше конца строки.

alkresin: SergKis пишет: после TAB + 2 SPACE, полученная позиция курсора при движении вверх вниз не меняется Возможно, мы не вполне понимаем друг друга. Я сделал кое-какие правки - теперь курсор движется как в Far.

alkresin: Обновлен hbedit. Поправлено вертикальное перемещение в тексте с tab'ами. Добавлен плагин CharTable - таблица символов.

alkresin: Обновил hbedit. Добавлены команды Vim ZZ и ZQ. Добавлен плагин "Калькулятор" - открывается отдельное субокно, там можно проводить вычисления (F5 вычисляет значене выражения в текущей строке) и копировать результаты, если надо.

alkresin: Обновил hbedit. Добавлена поддержка вертикальных блоков: Ctrl-F3 в режиме редактирования и Ctrl-v в режиме Vim (Ctrl-F3 здесь тоже работает). Небольшие исправления.

alkresin: Обновлен hbedit. Небольшие исправления. В ini в секции [LANG_...], где это надо, добавлены строки brackets=On - включение подсветки парных скобок (по умолчанию - выключено). В Ini добавлена секция [LANG_1C]. Добавлен плагин plug_prg_run1c.prg, который позволяет запускать на исполнение Harbour-программы, подключающиеся к 1с через соответствующий COM-объект. Если кого интересует, можно обсудить в разделе "Для флейма". У меня есть еще один плагин - для запуска из редактора программ на языке 1с через веб-сервис. Я не стал его включать в hbedit, т.к. он требует дополнительных телодвижений на стороне 1с.

alkresin: Обновлен hbedit. Добавлена команда o в режиме выделения ( чтобы менять направление выделения, как в vim). Добавлена группа команд vim - в hbedit.help все есть. Исправления.

alkresin: Обновлен hbedit. Добавлена группа команд vim - см. hbedit.help Добавлен плагин "Тетрис" - игра открывается в отдельном окне, можно выходить оттуда / возвращаться туда через Ctrl-Tab - как и с обычными окнами.

SergKis: alkresin Имеем demo.hbp[pre2] # Keys compile -prgflag=-w2 -es1 # Enable multi/single-thread Harbour VM -mt # Incremental-compilation mode -inc # folder where are all * .obj -workdir=OBJ # Name EXE-module -odemo.exe # to list all * .prg demo.prg demo_misc.prg MsgEdit.prg util_fonts.prg # project Resources demo.rc # paths to the main and extension *.Lib -lminigui 1. Ctrl+F -> приводит к ошибке apps.err 06/24/19 10:14:35 Error BASE/1132 Bound error: array access Called from _HBP_GET_FILES(156) Called from _HBP_INIT_FILES(119) Called from _HBP_INIT_ONKEY(60) Called from (b)PLUG_HBP_INIT(33) Called from TEDIT:ONKEY(524) Called from TEDIT:EDIT(348) Called from MAIN(144) 2. Как запустить на исполнение этот hbp, если в Far запускается по ассоциации C:\MiniGui\BATCH\hbmk2.bat !.! ? [/pre2]

alkresin: SergKis пишет: 1. Ctrl+F -> приводит к ошибке apps.err Была там маленькая ошибка, исправил. 2. Как запустить на исполнение этот hbp, если в Far запускается по ассоциации C:\MiniGui\BATCH\hbmk2.bat !.! Можно будет ini-файл для плагина сделать с командной строкой запуска hbmk.

alkresin: Обновлен hbedit. Добавлена поддержка разных цветовых схем, добавлены новые цветовые схемы. Менять текущую можно через меню (Palette). Основная схема устанавливается в ini [OPTIONS]: palette=... Можно также установить отдельные схемы для разных языков (palette= в соответствующем [LANG_...] Небольшие правки.

SergKis: alkresin Ctrl-F3 выделение вертикального блока Привычнее Shift+Alt+стрелки

alkresin: SergKis пишет: Привычнее Shift+Alt+стрелки Добавил и такой вариант.

SergKis: alkresin пишет Добавил и такой вариант. Будут ли режимы (в выделенном верт. блоке): - замена первого символа на upper\lower - сортировка строк в блоке Для prg авто завершение строк ?

alkresin: SergKis пишет: - замена первого символа на upper\lower - сортировка строк в блоке С выделением много чего можно интересного еще сделать - сумму посчитать, например, или, как в vim, добавить подстроку слева или справа к каждой выделенной строке. Думаю об интерфейсе. Можно повесить каждое действие на клавишу. Можно сделать меню, вызывая его, например, буквой m, ... Стоит, наверное, сделать возможность подключать плагин для дополнительных вариантах обработки выделенного текста. Для prg авто завершение строк ? Может быть. Ничего против не имею, но и большой пользы не вижу. Что завершать-то, if / endif ?

SergKis: alkresin пишет Что завершать-то, if / endif ? В notepad3 набираю de или DE и получаю список default DEFAULT define DEFINE defined DELETEALLITEMS DELETECOLUMN DeletedCount DELETAIMAGE DeleteItem DELETEITEM DeleteObject DELETEPAGE DelteRow DeltaCol details Determine ... набираю hb получаю список ф-ий использованных ранее При if IFARRAY ifdef IFEMPTY ifndef IFNUMERIC и т.д. по мере добавления букв список уменьшается



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