Форум » [x]Harbour » Hbedit - текстовый редактор » Ответить

Hbedit - текстовый редактор

alkresin: Довел, наконец, свой текстовый редактор до того состояния, когда можно показать его общественности. Я начал писать его сначала как замену Memoedit(), но потом увлекся) и решил сделать что-то помощнее, как нормальный редактор для повседневного использования. Мне приходится в течение дня работать и под виндами, и под Линуксом - использую Far и mc, соответственно. Иногда Vim - но к некоторым вещам в нем так и не привык. Но хочется иметь что-то одно для всех платформ - не слишком навороченный, но чтоб было все что надо. Сегодня выложил на github: https://github.com/alkresin/hbedit. F9 (или мышкой по соответствующей надписи) - главное меню. В ближайших планах: - Lower/Upper для utf8 - новые режимы подсветки ( директивы препроцессора и пр. ) - скобки - подсветка парных и переход на парные - undo - решить проблемы с табуляцие - сохранение истории открытых файлов, поиска - написать help (hbedit.help) Если есть идеи для реализации - буду рад услышать.

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

SergKis: alkresin Привычно 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с) , где можно поставить или убрать для блока Поставить вначале /* и в конце */ проще, чем тащить пометкой блок и вспоминать "какую то" команду. А ставить автоматом в выделенном блоке в каждую стоку // ? Зачем ? Но это по мне, как другим ... на любителя.



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