Форум » [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: 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 (этот может и фонты менять на выделениях. не только цвета). Но, Вам, виднее.



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