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

alkresin: SergKis пишет: DELETEALLITEMS DELETECOLUMN DeletedCount DELETAIMAGE DeleteItem DELETEITEM DeleteObject DELETEPAGE DelteRow DeltaCol details Determine ... Я большую часть этих слов и не знаю. Это точно Harbour) ?

SergKis: alkresin пишет Я большую часть этих слов и не знаю. Это точно Harbour) ? Как я понял notepad3, при включенном режиме авто завершения, набирает словарь исп. слов (слово применялось > 1 раза). К примеру, набираю nR получаю список nRetVal nRGB2Arr nRow при nC nCell nCol nColumn nControlWidth при cf cFileNoExt cFileNoPath cFilePath cFooter cFormat CFORMAT cFormName т.е. по 2м символам (и более) получаем список ранее использованных слов, это как имена ф-ий, так и имена переменных. В целом удобно.

SergKis: PS Не знаю (не интересовался), где словарь хранится, но он не связан с ini и как его сбросить\очистить\изменить (с ошибками набранные слова пару раз появляются в списке, что мешает). Включается режим по галочке в меню настроек


alkresin: Подумаю на эту тему.

alkresin: Обновлен hbedit. Добавлена пара vim-команд. В режиме выделения теперь вызывается меню ( по F9 или 'm' ), там 4 существовавших пункта (конверсия регистра и сдвиг) и три новых - добавление введенной подстроки слева или справа от каждой строки выделенного текста и сортировка текста по выделенному вертикальному блоку. В это меню можно добавлять свои пункты, написав специальный плагин (образец - добавленный plug_selection.prg) И поместив строчку sele_plugin=plug_selection.hrb в секцию [OPTIONS] ini-файла. Исправлено кое-что.

SergKis: alkresin Выделяем блок по Shift+Alt+... текст 2е строки LOCAL[pre2] METHOD WriteTopPane( lClear ) CLASS TEdit LOCAL y := ::y1 - 1, nCol := Col(), nRow := Row(), nF9 := 0 LOCAL cLen := Ltrim(Str(Len(::aText))), nchars := Len(cLen) IF ::bWriteTopPane != Nil [/pre2] Shift+Alt+-> Shift+Alt+стрелка вниз Shift+Alt+End и держим Shift+Alt, закраска ok, отпускаем, закраска выделенного перемещается на блок до LOCAL в строках

alkresin: У меня никуда не перемещается. Shift+Alt+стрелка вправо Shift+Alt+стрелка вниз Shift+Alt+End - закрашены две строки. Отпускаем Shift+Alt - закраска остается на месте.

SergKis: alkresin пишет - закрашены две строки. Отпускаем Shift+Alt - закраска остается на месте. Закрашены две строки, отпускаю, закраска пробелов до LOCAL у этих строк. Ситуация стабильна, т.е. всегда. Закрасить данные от LOCAL и до конца строк не получается. Win 8.1 hbedit.ini screen_width=121 screen_height=30

SergKis: PS Если красить только стрелками, без End, то все ok

alkresin: А End какой нажимаете, на основной клавиатуре, или на numpad? Я сейчас попробовал на numpad (обычно ее не использую) - там происходит вами описанный эффект. Почему - еще не разбирался.

SergKis: alkresin пишет А End какой нажимаете, на основной клавиатуре, или на numpad? Это ноутбук, клавиши совмещены, но Num Lock не включен

alkresin: Это проблема gtwvt. Он почему-то после нажатия End на numpad и отпускания Shift+Alt генерирует дополнительное событие с кодом клавиши 1 - K_HOME. Поэтому рекомендую при использовании Shift-Alt не нажимать End, или, что лучше, пользоваться Ctrl-F3. а еще лучше - Ctrl-v в Vim-режиме).

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

alkresin: SergKis пишет: Пробую на hbedit.exe с вашего сайта, готовую сборку. Она собрана с gtwvt - отсюда и проблема. Это какой-то косяк в gtwvt, а, может быть, и фича). Собирал с gtwin - такого не наблюдается.

alkresin: Обновлена страница hbedit Добавлено описание опций командной строки и подробное описание опций ini-файла.

alkresin: Обновлен hbedit. Добавлены операции над выделенным блоком (плагин plug_selection): подсчет суммы для вертикального блока - это было когда-то в Дос Навигаторе и мне до сих пор иногда недостает, и Surround - заключить выделенный текст в кавычки, скобки или html-тэг. Исправлено кое-что.

alkresin: Обновлен Hbedit. Добавлена команда .(точка) для Vim-режима и для режима выделения - она выполняет последнюю операцию редактирования еще раз. Так, например, если вы в режиме выделения выбрали из меню операцию Surround и в ответ на приглашение ввели символ i (в результате выделенная область будет заключена в тэги <i>,</i>), вы можете выделить другой фрагмент текста, нажать "." - и этот фрагмент будет заключен в те же тэги.

SergKis: alkresin пишет Добавлена команда .(точка) для Vim-режима и для режима выделения В режиме выделенного блока удобно попасть в начало блока выделения (в hbedit этого нет) В notepad3 после выделения (любого) нажатие <- или Home сбрасывает выделение (Ctrl+C не важно было\нет) и ставит курсор в начало выделения, а -> в конец выделения. Что часто удобно, особенно, при больших блоках

SergKis: PS Может мелочь, конечно, но не привычно. Выделение верт. блока при разной ширине концовок строк, закрашивается только содержимое, у более коротких строк (курсор правее) пустые места не закрашены. Ощущение, что Alt к Shift не добавил

alkresin: SergKis пишет: В режиме выделенного блока удобно попасть в начало блока выделения (в hbedit этого нет) Есть. Если выделение делается с F3, Ctrl-F3 или в Vim-режиме (v, V, Ctrl-v), то клавиша 'o' переводит курсор в начало выделения и обратно - и можно продолжить выделение в другом направлении.

SergKis: alkresin пишет Есть. Если выделение делается с F3, Ctrl-F3 или в Vim-режиме Понятно. Это не windows штуки.

alkresin: SergKis пишет: Понятно. Это не windows штуки. Непонятно, при чем тут Windows? Можно это же реализовать и для Shift-Alt - пару строчек добавить, а то и меньше. Просто 'o' - это команда Vim.

SergKis: alkresin пишет Можно это же реализовать и для Shift-Alt - пару строчек добавить, а то и меньше. Просто 'o' - это команда Vim. Ставлю defmode=-1, т.е. без Vim Менять, наверно, можно, но столько "лишнего" текста, что желание пропадает. Непонятно, при чем тут Windows? Помню dos редактор, замечательный, 46К весил, работал в в похожей схеме (F3, Ctrl+F3). Клавиши переназначались, но ... Осталось все там ... в dos

alkresin: SergKis пишет: Менять, наверно, можно, но столько "лишнего" текста, что желание пропадает. Не понял, о чем вы. Помню dos редактор, замечательный, 46К весил, работал в в похожей схеме (F3, Ctrl+F3). Клавиши переназначались, но ... Осталось все там ... в dos Каким образом используемые клавиши связаны с Dos или Windows? Почему в Windows F3 можно использовать как продолжение поиска, но нельзя как начало выделения текста? А F7 и Shift-А7 тоже нельзя использовать в Windows для поиска? F3, кстати, я взял из линуксового Midnight Commander, Ctrl-F3 добавил сам по аналогии с Vim'овским v и Ctrl-v.

SergKis: alkresin пишет Не понял, о чем вы. Надо визуально вычленять из кода prg, строки относящиеся к Vim (с выпуском новой модификации), т.к. нет скобок, к примеру, #ifdef VIM_MODE ... #endif Почему в Windows F3 можно использовать как продолжение поиска, но нельзя как начало выделения текста? А F7 и Shift-А7 тоже нельзя использовать в Windows для поиска? Можно, но это ломать человеку привычки (переучивать). На лучшее ли ? В windows редакторах, чаще используют Ctrl+F - поиск Ctrl+R - замена Ctrl+O - open Ctrl+N - New ... F3, кстати, я взял из линуксового Midnight Commander, Ctrl-F3 добавил сам по аналогии с Vim'овским v и Ctrl-v. Я и сказалЭто не windows штуки.

alkresin: SergKis пишет: Надо визуально вычленять из кода prg, строки относящиеся к Vim Для чего? Чтобы 'o' заработало и при Shift-Alt, или вы о чем-то другом? В windows редакторах, чаще используют... Hbedit позволяет настроить это под себя - вы знаете. Ну а что где чаще используют... Для меня, например, единственный Windows редактор - это Far, теперь еще hbedit), другими не пользовался, разве что для ознакомления. Я о другом. У меня сложилось впечатление, что у части наших коллег выработался комплекс по отношению к консольным приложениям, может, потому что долго приходилось писать для консоли , когда вокруг все перешли на GUI. Дескать, это Дос, это безнадежно устарело и пр. Но Дос тут ни при чем. Консоль - это вид интерфейса, не зависящий от ОС. Консоль не устарела и не устареет, она очень удобна во многих случаях - в частности, когда много ввода с клавиатуры и желателен "слепой набор", которому мышка только мешает. Ну а при удаленном доступе по ssh это часто единственный вариант интерфейса. В IT есть немало сообществ, занимающихся современной разработкой, где вас нехорошими тряпками погонят, если вы заикнетесь о том, что GUI было бы удобнее - это я к тому, что разговоры о том, что консоль устарела, просто нелепы.

SergKis: alkresin пишет У меня сложилось впечатление, что у части наших коллег выработался комплекс по отношению к консольным приложениям Комплекс сложился у клиентов и довольно давно. Если предлагаешь не GUI, то теряешь деньги. Клиент не берет консольную прогу или уходит к тому, кто предлагает GUI разработку, в не лучшей комплектации. В учебных заведениях доклады, рефераты, ..., готовят в Word, Excel. На работу приходят с этими знаниями и консоль для них ... это мамонт какой то. Становятся средним звеном и выбирают соответственно своим знаниям - не консоль. Для чего? Чтобы 'o' заработало и при Shift-Alt, или вы о чем-то другом? Об этом. Что бы добавить #ifndef VIM_MODE ... #endif Для меня, например, единственный Windows редактор - это Far, теперь еще hbedit), другими не пользовался, разве что для ознакомления Если используется RU1251, RU866, Utf8, то Far годится. В нашей деревне LV866 (EN, латышский LV, RU) и Far отдыхает (Для просмотра используется в основном). В работе Akelpad для Utf8 (основной режим), Notpad3 своей сборки для LV866 (у клиентов ставится) и пробую hbedit на предмет замены Far и возможно остальных. Возможно, у клиентов hbedit использовать на текстовых данных с подсветкой слов, т.е. надо походить на GUI приложение. это я к тому, что разговоры о том, что консоль устарела, просто нелепы. Сами используем сервисные проги с VWT - проще режимы делать чем с GUI

SergKis: PS Консоль не устарела и не устареет, она очень удобна во многих случаях - в частности, когда много ввода с клавиатуры и желателен "слепой набор", которому мышка только мешает. В GUI программах для клиентов приходится все операции раскладывать по клавишам (это была убедительная просьба клиентов, поработавших на приложениях clipper), мышка это доп. вспомогательный атрибут, для кого то наоборот, конечно.

alkresin: SergKis пишет: Об этом. Что бы добавить #ifndef VIM_MODE ... #endif Тогда все гораздо проще, я уже сделал - там реально одну строчку поменять пришлось, чтобы нажатие 'o' не сбрасывало :lShiftKey - флаг, указывающий на использование Shift+клавиши перемещения.

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

alkresin: ММК пишет: Наличие специфических задач и мир пользователей сравнивать нет смысла Пользователи - они разные, это не только менеджеры с бухгалтерами. В научной среде, например, активно пользуются TeX - и соответствующими текстовыми редакторами (Vim, в том числе). Мы, программисты, чем только не пользуемся. С xml и его многочисленными производными тоже не в Word'е работают. И еще есть немало сфер, о которых мы даже не знаем. Вы скажете, что это все специфические задачи, но из таких вот специфических задач и состоит мир.

alkresin: Обновлен hbedit. Команда 'o' теперь работает и при Shift, Shift-Alt выделении. Реализован режим переноса строк (wrap mode) - меню/View/Set wrap on - очень полезно при редактировании, например, книг в txt или fb2 формате.

SergKis: alkresin пишет Команда 'o' теперь работает и при Shift, Shift-Alt выделении. Как заменить 'o' на -> и <- (закраску можно сбрасывать при этом, главное переместить в конец или начало выделения) ? Др. людям трудно понять, почему надо нажимать 'o', а не стрелки ?

alkresin: SergKis пишет: Как заменить 'o' на -> и <- ? Только если написать свой плагин, обрабатывающий нажатия клавиш. Др. людям трудно понять, почему надо нажимать 'o', а не стрелки ? А почему надо нажимать стрелки? Др.люди настолько привыкли именно к notepad3?

PSP: alkresin пишет: Др.люди настолько привыкли именно к notepad3? Выделение Shift+стрелки (а еще Shift-Home/End/PgUp/PgDn/...) на мой взгляд для Windows-оообщества (а это - большинство) - стандарт де-факто, выработанный годами. Это используется в всех windows-based текстовых редакторах, а не только notepad3.

alkresin: PSP пишет: Выделение Shift+стрелки... Речь не об этом. Hbedit поддерживает выделение с помощью Shift+клавиши перемещения (стрелки, Home, End и пр.). Мы здесь говорим о редко встречающейся возможности переместить курсор в процессе выделения с одного конца в другой и продолжить выделение в другом направлении. В Vim и hbedit это делается нажатием 'o'.

PSP: alkresin пишет: Мы здесь говорим о редко встречающейся возможности переместить курсор в процессе выделения с одного конца в другой и продолжить выделение в другом направлении Понятно. Поспешил я с комментарием))

SergKis: alkresin пишет:Мы здесь говорим о редко встречающейся возможности переместить курсор в процессе выделения с одного конца в другой и продолжить выделение в другом направлении. Продолжать выделение не требуется. Говорил, сбрасывать выделение и перемещать курсор в точку. Знаю 2а редактора, которые перемещения не делают - это notepad и Far. Akelpad, Notepad3, Notepad++ и др. (правда пробовал их давно) делают такие операции (при выделенном блоке перемещают курсор в начало\в конец блока) и это не "редко встречающейся возможности переместить курсор", а удобный механизм, особенно при работе с вертикальными блоками. Просто hbedit заточен на Vim операции.

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

alkresin: Обновлен hbedit. Добавлена стрелочка при выделении (см. предыдущие посты). Изменена логика работы с clipboard: в vim-режиме реализовано использование регистров, в режиме редактирования вставка из дополнительных буферов clipboard (регистров) теперь производится с помощью Ctrl-p.

SergKis: alkresin пишет Добавлена стрелочка при выделении Спасибо. Работает. А закраска, при блочном выделении, что бы была прямоугольником (до курсора), а не по убранным правым пробелам (только содержимое) ?

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

SergKis: alkresin пишет Прямоугольник, конечно, красивее Скорее нагляднее, по тем ли символам идет курсор (курсор хуже видно, надо приглядываться)

alkresin: Обновлен hbedit. Добавлена группа Vim-команд yy, yiw, ... Небольшие исправления.

SergKis: alkresin перестала реагировать установка :y2 (на экране последняя строка не доступна) [pre2] TEdit():bNew := {|oe| oe:lTopPane := .F., ; oe:y1 := 0, ; oe:y2 := MaxRow()-1, ; oe:bOnKey := {|o,n| EdOnKey(o, n) }, ; oe:bWriteTopPane := {|o,n| StbLine(o, n) } } [/pre2] Можно ставить MaxRow()+10 или - 10, на экране, всегда, последняя строка не доступна (пусто в ней).

SergKis: PS ini [pre2] fontname=Liberation Mono fontheight=24 fontwidth=12 screen_width=121 screen_height=30 cp=LV866 ... [OPTIONS] defmode=-1 ;incsearch=off autoindent=on ;syntax=On ; savehis: 0 - don't save the history, 1 (default) - save in hbedit directory, ; 2 - save in a current directory. ;savehis=1 ;cmdhismax=20 ;seahismax=20 edithismax=30 ; eol: 0 - auto, 1 - Linux, 2 - Dos ;eol=0 trimspaces=on palette=solarized light ... [/pre2]

alkresin: SergKis пишет: перестала реагировать установка :y2 (на экране последняя строка не доступна) Если у вас :y2 - Maxrow()-1, то это как раз исключает последнюю строку. Поставьте oEdit:bNew := oe:y2 := MaxRow()

SergKis: Спасибо, получилось.

alkresin: Обновлен hbedit. Добавлена возможность устанавливать в ini-файле сочетания клавиш на плагины, в Ini поставлен Alt-L на список функций и Alt-R на запуск на исполнение.

alkresin: Обновлен hbedit. Некоторые исправления и улучшения. Добавлен плагин WebServices для получения данных с некоторых публичных веб сервисов. Сейчас их там 3 - определение своего внешнего ip (он копируется в clipboard), получение справки по слову под курсором (русские, увы, не поддеоживаются) и поучение уникального текста типа 'lorem ipsum. Для работы этого плагина необходимо наличие curl.

alkresin: Обновлен hbedit. Добавлена команда Ctrl-w,o - делает из дочернего окна полноценное. Добавлен init плагин для prg - он прописан в [LANG_PRG] и запускается при открытии каждого prg. В настоящее время он выводит по Alt-D список функций HwGUI и при выборе любой из них открывает дочернее окно с информацией о функции. Тип информации (описание, записи из Changelog, исходники) задаются в открывающемся диалоговом окне. Ту же информацию можно получить по Alt-I над функцией в редактируемом тексте. Информация берется из моего web-сервиса, так что для того, чтобы это работало, нужен curl.

alkresin: Обновлен hbedit. Теперь prg init плагин дает информацию и по всем Harbour функциям - тем, что входят в ядро (не contrib), их чуть больше полутора тысяч. Описания есть для части из них. Если нет описания, можно составить представление о функции, просмотрев соответствующие записи в Changelog и исходники - я обычно так и делаю, когда нужно с чем-то разобраться. Теперь это можно посмотреть быстро в одном месте, используя hbedit.

SergKis: alkresin 1. имеем[pre2] SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON ставлю курсор в самую первую позицию SET DATE TO GERMAN и жму Enter (новую строку вставляю перед) получаю SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON [/pre2] 2. имеем[pre2] SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON SET DELETED ON SET AUTOPEN OFF [/pre2]

SergKis: PS не ту кнопку нажал, отвлекли 1.помечаю вертикальный блок перед 3ими словами всех строк, состоящий из одной позиции (один пробел) 2.делаю Ctrl+C, стрелку влево встал курсор перед TO 2000 делаю Ctrl+V (хочу увеличить кол-во пробелов) вставляется из буфера, что было в нем до пункта 1,2 Если взять верт. блок из 2х позиций, то все ок

SergKis: PPS В ini screen_width=121 screen_height=30 palette=solarized light При завершении работы, т.е. выхода из hbedit происходит закраска всего окна с hbedit цветом детской неожиданности и потом окно уходит. Очень бросается в глаза. Может можно поправить ?

alkresin: Действительно, странно. Поправлю. Кстати, чтобы сдвинуть тест влевл/вправо, можно выделить его и затем Shift->, Shift-<.

SergKis: alkresin пишет Кстати, чтобы сдвинуть тест влевл/вправо, можно выделить его и затем Shift->, Shift-< Это не привычно + закраска окончания строк выделенния (ранее писал), затрудняет понимание окончания блока. Проще, по мне, действовать, как описал выше

alkresin: Обновлен hbedit. Исправления всякие.

SergKis: alkresin Тут https://TransFiles.ru/2xcy7 файл txt, hbedit.ini, файл err 1 С такой настройкой ini нет выравнивания колонки (рус. название) с исп. кл. TAB (было сделано в Far). Попытка выровнять первые строки рус. колонки (добавлением пробелов в строках до Кирибати) и потом выровнять верт. блоком из пробела до начала рус. колонки, на уровень позиции Китай, привело к снятию. Файл прилагается

alkresin: Воспроизвести не удалось, но добавил проверку в месте возникновения ошибки. Обновил hbedit. В plug_selection добаввил новые возможности - теперь выделенный вертикальный блок можно выровнять по левой или правой границе. Shift-> и Shifn-<, если делаются с вертикальным блоком, перемещают теперь не строки целиком, а только выделенный блок.

SergKis: alkresin текстовый файл из архива hbedit.ini tablen=3 tabtospaces=Off последняя колонка все ровненько, как и в Far (выравнивание сделано TAB символом) tabtospaces=On последняя колонка "скачет" начало слов, нет выравнивания при замене TAB пробелами. Если выровнять последнюю колонку (несколько строк), добавлением пробелов и посмотреть полученное в Far, то колонка скачет в нем. Может добавить еще режим физической замены TAB на пробелы (не сохраняя TAB) ?

SergKis: PS Если верт. выделенный блок больше, чем строк окна hbedit и нажимаем <- (переход в начало выделения), курсор уходит в начало выд. блока, а отображение остается прежним и курсора не видно - "потеряли". Перемещения стрелками покажет курсор только, когда он "вернется" по координатам на тек. отображение. Notepad3 возвращает курсор в начало выделенного блока и отображает окно как было при начале выделения.

alkresin: SergKis пишет: tabtospaces=Off ... tabtospaces=On ... У меня там не вполне корректно сделано преобразование tab to spaces и обратно - я просто заменяю tab на tablen пробелов. Это правильно работает для начала строки, а середине надо менять на значение щт 1 до tablen, в зависимости от положения tab. Надо будет поправить как-нибудь. Может добавить еще режим физической замены TAB на пробелы (не сохраняя TAB) ? Добавил опцию в диалог сохранения. Если верт. выделенный блок больше, чем строк окна hbedit и нажимаем < Исправил.

SergKis: alkresin hbedit от 12.08.2019 Список по Alt+L получается в 2х вариантах 1. Типа "маленький", кол-во функций от 0- t (есть второй экран списка) нумерация слева и нет возможности поиска по имени, надо высматривать листая нужную функцию 2. Нормальный вариант с поиском по имени Что сделать, что бы всегда был 2ой вариант ?

SergKis: PS Странно работает подсветка многострочного, создаваемого блока /* ... */ иногда засвечивает сразу после /*, но чаще нет после */ не засвечивает блок, надо сделать новые строки. иногда после ввода новой строки засветка срабатывает, иногда только после второй новой строки

alkresin: Обновлен hbedit. Кое-какие исправления, в т.ч. - подсветка многострочных комментариев. Список функций теперь выводится с опцией поиска при количестве ф-й больше трех.

SergKis: alkresin Если строка длинная и выходит за пределы окна, к примеру, на 10 символов и жмем Enter (new line), то курсор убегает в первые позиции и "теряется" из показа, т.к. мы остались на отображении конца строки. Надо, наверно, переместить показ.

SergKis: PS Можно сделать установку в ini для показа в заголовке окна (где hbedit) рабочий каталог (путь) загрузки 1го файла ? Что бы различать версии (по каталогам) одного и того же файла.

alkresin: SergKis пишет: Можно сделать установку в ini для показа в заголовке окна (где hbedit) рабочий каталог (путь) загрузки 1го файла ? Может, лучше менять режим отображения имени файла по щелчку по нему - тогда он будет изменен в конкретном окне и тогда, когда это надо?

alkresin: Обновлен Hbedit. Кое-какие исправления. Добавлен плагин для интеграции Git и Fossil - можно смотреть историю изменения файла, извлечь любую его версию, посмотреть изменения (diff) в специальном окне. Добавлен режим сравнения файлов. Это можно сделать двумя способами: 1) Открыть первый файл, потом при открытии второго указать опцию Diff. 2) hbedit -d file1 file2 В этом режиме можно переключать способ отображения во втором окне - только diff, full (весь текст с - и +), Version From (исходная версия файла).

SergKis: alkresin пишет Может, лучше менять режим отображения имени файла по щелчку по нему - тогда он будет изменен в конкретном окне и тогда, когда это надо? Не совсем удобно, имя файла одинаковое, разные пути и в полске где F9-Menu ... надо высматривать. В title окна удобнее смотреть. Повесил в Far hbedit на Alt+F4 и к примеру, смотрю TsBrowse.prg в 3х каталогах (версиях) одновременно в разных окнах 1 - C:MiniGui\SOURCE\TsBrowse\TsBrowse.prg // тек. версия 2 - C:MiniGui_1906_2\SOURCE\TsBrowse\TsBrowse.prg // предыдущая 3 - C:MiniGui_207\SOURCE\TsBrowse\TsBrowse.prg // рабочая версия т.е. есть в каждом окне текущий каталог, вот его бы и видеть в Title, т.к. взятые др. файлы в это окно так же будут из тек. каталога. Можно в команду запуска добавить параметр, не в ini. hbedit.exe -dir к примеру

SergKis: PS А щелкнуть по режиму <Edit> и сделать его <ReadOnly> (комбинация клавиш), было бы хорошо, т.к. из 3х править один надо, как правило.

SergKis: alkresin Вопрос по переназначению клавиш. Как переназначить для окна ? Ctrl-w, w=>Ctrl-1 Ctrl-w, s=>Ctrl-2 Ctrl-w, v=>Ctrl-3 в ini стоит keymap=Ctrl-N=>Shift-F4,Ctrl-O=>Ctrl-F4,Ctrl-F=>F7,Ctrl-G=>Alt-F8,Ctrl-R=>Ctrl-F7 и дописать в keymap

alkresin: Ok, сделаю в ini. А щелкнуть по режиму <Edit> и сделать его <ReadOnly> Что-то не нравится мне такой вариант. Вопрос по переназначению клавиш. Сейчас на клавишу можно повесить только одну клавишу, но можно будет сделать и для сочетания клавиш.

SergKis: alkresin пишет Что-то не нравится мне такой вариант. Это, скорее, образно " щелкнуть по режиму <Edit> и сделать его <ReadOnly>", лучше клавиши и меню. Сейчас перевести из Edit в ReadOnly загруженный текст нет возможности и попадался, что начинаешь править не тот текст.

SergKis: PS Команды можно добавить в меню "Windows" с клавишами, например Ctrl-w, r - ReadOnly Ctrl-w, e - Edit

SergKis: alkresin При вставке блока строк Ctrl+V в нижнюю часть окна hbedit, происходит передергивание показа после операции - курсор и строки показа перепрыгивают в верхнюю часть окна. Можно оставить показ в тех же координатах, как было перед вставкой (rкак в Far, к примеру) ?

alkresin: SergKis пишет: Можно оставить показ в тех же координатах Если курсор после вставки остается в пределах экрана - посмотрю.

alkresin: Обновлен hbedit. Поправлены ошибки. Изменен заголовок в окне сравнения. Добавлена возможность сравнивать фрагменты файлов. Для этого надо выделить и поместить в clipboard первый фрагмент, затем выделить второй, вызвать меню (F9 или m) и выбрать опцию "Compare" - появятся два новых окна с результатом сравнения. В ini добавлена опция pathinhead - если On, то в заголовке отображается полный путь к файлу. Как и некоторые др. опции, это можно поменять в командном режиме с помощью set pathinhead.

SergKis: alkresin До этой версии не собирал свою, использовал текущую hbedit.exe сp=RU1251 Пересобрал и у себя сделал для vwt так [pre2] hbedit.prg ------------ #include "hbgtinfo.ch" REQUEST HB_CODEPAGE_LV866 REQUEST MSGBOX, MSGINFO, MSGYESNO, MSGYESNOCANCEL, MESSAGEBOXINDIRECT #define GTWVT 1 ... #ifdef GTWVT ANNOUNCE HB_GTSYS REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT * ------------------------------------ hb_gtInfo( HB_GTI_CODEPAGE, 866 ) hb_cdpSelect( "LV866" ) * ------------------------------------ bkInit( cIniName ) #endif ... bkInit.prg ----------- #include "hbgtinfo.ch" FUNCTION bkInit( cIniName ) Local cPath := hb_curDrive() + ":\" + Curdir() + '\' Local cName := hb_ProgName(), cTmp Local cExe := Lower(hb_fnameName(cName)) LOCAL cCapt := cExe cTmp := Lower(gIniC7(cIniName, [OPTIONS], 'PathInHead', 'off')) If 'off' $ cTmp cCapt := cPath + '...' + space(2) + '-' + space(2) + cExe EndIf CLS hb_gtInfo( HB_GTI_WINTITLE, cCapt ) RETURN Nil [/pre2] Вроде нормальненько.

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

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

alkresin: Была просто полоска и работа в разделенном окне. :bWriteTopPane := {|o,l,y| LOCAL nCol := Col(), nRow := Row() SetColor( o:cColorPane ) Scroll( y, o:x1, y, o:x2 ) IF o:oParent != Nil .AND. o:x1 == o:oParent:x2 + 2 Scroll( o:y1, o:x1-1, o:y2, o:x1-1 ) ENDIF SetColor( o:cColor ) DevPos( nRow, nCol ) RETURN Nil } В 0 ой строке полоски нет, весь вывод данных на StatusBar из нее и при разделении окна на части тоже Ничего не понял.

SergKis: alkresin пишет Ничего не понял. Имеется ввиду, что нет строки 0 с F9-Menu ... Данные из этой строки перенесутся в StatusBar, который будет организован в дальнейшем. Вопрос разделения работы по разделенному на части окну hbedit и вывода данных на строку горизонтальную разделения. :bWriteTopPane := {|o,l,y| LOCAL nCol := Col(), nRow := Row() SetColor( o:cColorPane ) Scroll( y, o:x1, y, o:x2 ) IF o:oParent != Nil .AND. o:x1 == o:oParent:x2 + 2 Scroll( o:y1, o:x1-1, o:y2, o:x1-1 ) ENDIF SetColor( o:cColor ) DevPos( nRow, nCol ) RETURN Nil } Не решило задачу разделения окна командами Ctrl-w, s или Ctrl-w, v Тут пример сборки https://TransFiles.ru/my9x2

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

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

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

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

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

SergKis: PS Если сделаю пустой блок[pre2] TEdit():bNew := {|oe| oe:lTopPane := .F., ; oe:y1 := 0, ; oe:y2 := MaxRow(), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } FUNCTION StbLine( o, l, y ) LOCAL nCol := Col(), nRow := Row() /* SetColor( o:cColorPane ) Scroll( y, o:x1, y, o:x2 ) IF o:oParent != Nil .AND. o:x1 == o:oParent:x2 + 2 Scroll( o:y1, o:x1-1, o:y2, o:x1-1 ) ENDIF SetColor( o:cColor ) DevPos( nRow, nCol ) */ RETURN Nil [/pre2] то работы с разделенным окном (Ctrl-w, s или v) совсем не будет. а мы только вывод в статусную строку отключили, а координаты работы в окне\окнах должны были остаться и по Ctrl+TAB (переключение фокуса) окна (позиция курсора) переключаться, а этого нет совсем. Т.е. нет разделения окна на части, а похоже есть 2а полноэкранных окна, т.к. передвинув курсор в одном и сделав Ctrl+TAB видим разницу позиций курсора.

alkresin: SergKis пишет: oe:y1 := 0, ; oe:y2 := MaxRow(), ; ... мы только вывод в статусную строку отключили, а координаты работы в окне\окнах должны были остаться Как же они могли остаться, если вы их установили самостоятельно в полный размер?

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

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

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

SergKis: alkresin пишет Если есть подокна, то основное окно занимает уже не все пространство, а только то, что осталось от подокон. И устанавливать для него координаты не надо - это делается автоматически. Вопрос остался, как убрать строку с F9-Menu и на месте этой строки была строка текста, т.е как убрать статусную строку ? В windows редакторах в меню "Настройки" есть опции - показывать панель инструментов - показывать строку статуса - показывать колонку нумерации строк текста Если панель инструментов нету, то остальные пункты интересны в работе. :bWriteTopPane - самое подходящее место для вывода какой-то информации в др.место Это как раз понятно, более менее

alkresin: SergKis пишет: Вопрос остался, как убрать строку с F9-Menu и на месте этой строки была строка текста, т.е как убрать статусную строку ? Самый простой способ - при вызове TEdit():New(cText, cFileName, y1, x1, y2, x2, cColor, lTopPane) установить 8-й параметр lTopPane в .F. Другой - прописать в :bNew o:lTopPane := .F. o:y1 --

SergKis: alkresin пишет Другой - прописать в :bNew o:lTopPane := .F. o:y1 -- Это сработало. Спасибо. Работает даже Ctrl-w,v , есть разделитель вертикальный. При Ctrl-w,s нет горизонтального разделителя, но окно\подокно работает

alkresin: При Ctrl-w,s нет горизонтального разделителя, но окно\подокно работает Значит, для этих подокон lTopPane должно быть .T., это можно сделать в bNew, например, так: if o:oParent == nil o:lTopPane := .F. o:y1 -- endif т.е., не убирать панель статуса для дочерних окон. Или: if o:y1 == o:aRectFull[1]+1 ... чтобы панели статуса не было у верхних окон.

SergKis: alkresin делал так [pre2] TEdit():bNew := {|oe| iif( oe:oParent == Nil, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } [/pre2] не изменило от пред. поста, т.е. нет горизонтальной полосы-разделителя

SergKis: alkresin пишет В keymap из hbedit.ini теперь можно задавать сочетания клавиш, разделяя клавиши символом | Например, Alt-1=>Ctrl-W|s Такое сочетание работает, а через Ctrl-1 или Ctrl-~ нет. keymap=Ctrl-N=>Shift-F4,Ctrl-O=>Ctrl-F4,Ctrl-F=>F7,Ctrl-G=>Alt-F8,Ctrl-R=>Ctrl-F7,Alt-1=>Ctrl-w|v,Ctrl-1=>Ctrl-w|v,Ctrl-~=>Ctrl-w|s Ctrl+<клавиша> рядом и "роднее" и удобнее, чем Alt+<клавиша> Ctrl+TAB -переключить окна Ctrl+~ - горизонтальное разделение Ctrl+1 - вертикальное

alkresin: не изменило от пред. поста, т.е. нет горизонтальной полосы-разделителя Точно, oParent устанавливается после вызова TEdit():New(), по нему нельзя проверить. Значит, сработает другое условие: o:y1 == o:aRectFull[1]+1 Такое сочетание работает, а через Ctrl-1 или Ctrl-~ нет. Ctrl-1, Ctrl-2,... в Harbour в консоли вообще не работают - нет реакции на эти нажатия, не генерируется событие.

SergKis: alkresin пишет Ctrl-1, Ctrl-2,... в Harbour в консоли вообще не работают - нет реакции на эти нажатия, не генерируется событие. Понятно. А в WVT ? Значит, сработает другое условие: o:y1 == o:aRectFull[1]+1 Горизонтальная строка появляется со смещением (где должно, в обычном режиме, находится "F9-Menu" ) и лишней информацией "Harbour plugins: Alt-D ...". Хотелось бы пустую полосу в ширину окна

alkresin: А в WVT ? Да. Моя сборка hbedit в нем построена. Сделаю gt hwgui - там будет работать). Горизонтальная строка появляется со смещением (где должно, в обычном режиме, находится "F9-Menu" ) и лишней информацией "Harbour plugins: Alt-D ...". Горизонтальная разделительная строка появляется на месте строки статуса, потому что это она и есть. Какое это смещение? "Harbour plugins: Alt-D ..." появляется только вначале, потом там пусто - это предупреждение, что для открытого в окне файла подключен Harbour плагин. Вы можете это отключить, если в :bNew пропишете o:bStartEdit := Nil или установите свой bStartEdit.

SergKis: alkresin пишет Вы можете это отключить, если в :bNew пропишете o:bStartEdit := Nil или установите свой bStartEdit. Сделал[pre2] TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bStartEdit := Nil , ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } [/pre2] результат такой же, как был описан ранее. Пример, своя сборка, тут (смещение вправо линии на длину "F9-Menu", так понимаю) https://my-files.ru/zn3jdl Если убираю в ini ;plugin=plug_prg_init.hrb то горизонтальная линия разделения окна пропадает совсем А можно сделать, что то типа oEdit:lStatusLine := .T.\.F. ?

SergKis: PS Разговор о командах Ctrl-w,v - нормальное разделение Ctrl-w,s - не нормальное разделение

alkresin: SergKis пишет: Пример, своя сборка, тут (смещение вправо линии на длину "F9-Menu", так понимаю) https://my-files.ru/zn3jdl Файл по ссылке удален - пишут, вредоносное ПО)

SergKis: alkresin пишет Файл по ссылке удален - пишут, вредоносное ПО) Да, удалили, но не сразу, я сначала проверил ссылку. Тут https://TransFiles.ru/pzqj9

SergKis: PS в bkInit я убрал oe:bStartEdit := Nil, т.к. с ним при Ctrl-w,s совсем нет горизонтальной разд. строки, а так она есть, но из plugin init. Если комментируем в ini (как выше), то опять совсем нет горизонтальной разд. строки

SergKis: PPS И как для меня, plugin=plug_prg_init.hrb в таком виде, нужен как пример, т.е. в работе ( Far Alt+F4 ) он отключен

alkresin: Ну так вы же сами убрали из :bWriteTopPane отрисовку разделительной линии. Надо, чтоб было: [pre] IF ::lTopPane DispBegin() SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF DispEnd() ENDIF[/pre]

SergKis: alkresin пишет Ну так вы же сами убрали из :bWriteTopPane отрисовку разделительной линии. Да, убрал, т.к. если делать прорисовку в :bWriteTopPane (в том виде как в StbLine(...), была ваша рекомендация), то начинает появляться и жить закраска в 0ой строке, при вертикальном разделении Ctrl-w,v Если сделать по последней рекомендации, то все хорошо, как хотелось и при ;plugin=plug_prg_init.hrb Спасибо. Может тогда вынести прорисовку вертикальной\горизонтальной строки разделения до :bWriteTopPane[pre2] < сюда, к примеру > IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, lClear, y ) ELSE IF ::lTopPane DispBegin() SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF [/pre2]

alkresin: SergKis пишет: Может тогда вынести прорисовку вертикальной\горизонтальной строки разделения до :bWriteTopPane Можно.

SergKis: alkresin Можно добавить в hbedit ? - если имя плагина (без расширения .hrb) есть как функция, выполнить ее (плагин перенесен в тело hbedit), что бы не править базовый текст при смене модификации hbedit - в плагин plug_prg_spis.prg включить определения INIT WINDOW ... и DEFINE WINDOW ..., что бы не править плагин базовый, т.к. до этих определений, после FUNCTION, может находится достаточно строк

alkresin: SergKis пишет: если имя плагина (без расширения .hrb) есть как функция, выполнить ее (плагин перенесен в тело hbedit), Проблематично. Надо менять логику работы в нескольких местах - многое заточено под номер плагина в массиве, сформированном из секции [PLUGINS], в т.ч. - назначение горячих клавиш. И, честно говоря, не вижу смысла в переносе плагина в тело основной программы - впрочем, мы об этом уже говорили. в плагин plug_prg_spis.prg включить определения INIT WINDOW ... и DEFINE WINDOW Тогда уж лучше завести ini-файл для этого плагина, который будет располагаться рядом с hrb - чтобы там можно было определить все ключевые слова, которые вам захочется отловить для списка функций.

SergKis: alkresin пишет Надо менять логику работы в нескольких местах - многое заточено под номер плагина в массиве, сформированном из секции [PLUGINS], в т.ч. - назначение горячих клавиш Потому и поднял вопрос, т.к. придется каждый раз менять свой код при смене версии hbedit. Из всех плагинов нужно максимум 3 и без изменений, каталог plugins, как бы, лишний, а иногда мешающий, при уст. на разных местах (pc) Тогда уж лучше завести ini-файл для этого плагина, который будет располагаться рядом с hrb - чтобы там можно было определить все ключевые слова, которые вам захочется отловить для списка функций. Это хорошее решение, но уже несколько лет в своем проекте работает набор определений как у вас и плюс 2а про которые написал. Есть ли смысл усложнять с доп. ini ?

SergKis: PS [pre2] FUNCTION edi_RunPlugin( oEdit, xPlugin ) LOCAL i, cPlugin, cFullPath IF Valtype( xPlugin ) == "N" i := xPlugin ELSEIF Valtype( xPlugin ) == "C" i := Ascan( TEdit():aPlugins, {|a|a[1]==xPlugin} ) ENDIF IF i > 0 IF Empty( TEdit():aPlugins[i,4] ) cPlugin := TEdit():aPlugins[i,1] IF !Empty( cFullPath := edi_FindPath( "plugins" + hb_ps() + cPlugin ) ) TEdit():aPlugins[i,4] := hb_hrbLoad( cFullPath ) TEdit():aPlugins[i,5] := cFullPath ENDIF ENDIF IF !Empty( TEdit():aPlugins[i,4] ) hb_hrbDo( TEdit():aPlugins[i,4], oEdit, hb_fnameDir( TEdit():aPlugins[i,5] ) ) ENDIF ENDIF RETURN Nil [/pre2] Может достаточно изменить выделенное цветом, остальное не трогать, т.к. в ini список плагинов будет и нужно перед выполнением проверть наличие ф-ии и выполнить, если есть. И работа с номером плагина в др. местах останется

alkresin: Недостаточно. В массив TEdit():aPlugins добавляются не все плагины, перечисленные в ini, а только те, для которых найдены соответствующие hrb - иначе в меню по F11 могут попасть несуществующие плагины.

SergKis: alkresin пишет Недостаточно. В массив TEdit():aPlugins добавляются не все плагины... Понял. Тогда можно перенести edi_RunPlugins() к edi_Alert() в falert.prg. В реальной работе нет F11 (меню плагинов, будет блокирована или исп. для другого), т.к. используется только 1 плагин (мах будет 3) и все на клавишах. Каталог Plugins с фиктивными hrb можно оставить.

alkresin: Что-то запутали вы меня). Проблема для вас была в наличии каталога plugins, который "как бы, лишний, а иногда мешающий" - из-за этого вы хотели перенести плагин в основной текст. А теперь пишете, что для обеспечения работы схемы "каталог Plugins с фиктивными hrb можно оставить"... Впрочем, если перенос edi_RunPlugins() в falert.prg вас выручит, я не сильно против.

SergKis: alkresin пишет Что-то запутали вы меня) Совершенно не хотел этого делать. Если плагины уходят в текст hbedit, то каталог plugins, как бы лишний, но если отсутствие каталога мешает нормальной работе hbedit в др. кусках кода, то пусть каталог остается для меню, индекса и т.д., а hrb плагинов пусть лежат. Если текст плагина включен в код hbedit выполнится он, нет - выполнится плагин, если назначен в ini. У себя в работе с prg, надолго, нужен только 1 плагин, возможно, в дальнейшем еще +2а и все. С последней сборки (вашими рекомендациями) на Alt+F4 в Far повесил hbedit и практически перестал использовать Notepad3 на Enter и F4 (фаровский edit). Работа вся на клавишах, никакое меню (кроме уст. кодовой страницы) не вызывал не разу. При смене версии правится только hbedit.prg и очень немного. Как бы все устаканивается с исп. LV866 и др. кодовых страниц. Спасибо.

SergKis: alkresin Можно вызов меню выбора кодовых страниц, сделать на клавиши и комбинацию их задавать в ini ?

SergKis: alkresin В параметры командной строки можно добавить кодовую страницу для файла (из списка ini указанные)

SergKis: alkresin Добавил в параметры командной строки (своя сборка) -cp=<кодовая страница> -his=<режим savehis = 0> Это понадобилось при подключении hbedit в проектах вместо Akelpad, дополнительно к Far Alt+F4 режиму. Возможно, похожее надо в вашей сборке hbedit.exe ? К примеру, когда prg файлы в кодировках RU866, RU1251, Utf8

SergKis: PS Far Alt+F4 режим работает с savehis=1 и cp=RU1251, а запуски из проекта savehis=0 и cp=LV866, при этом prg Utf8 с bom отлично понимаются.

SergKis: alkresin Можно ли уст. palette из параметра командной строки ? Например в ini palette=solarized light из командной строки поставить far или notepad

alkresin: SergKis пишет: отсутствие каталога мешает нормальной работе hbedit в др. кусках кода Отсутствие каталога plugins/ мешает только работе плагинов. В обсуждаемом случае это вызов плагина по горячей клавише. Можно вызов меню выбора кодовых страниц, сделать на клавиши и комбинацию их задавать в ini ? Так ведь Shift-F8 для этого предназначен - в help'е и на сайте про это написано. Ну а комбинацию эту можно переназначить в ini, если надо.

SergKis: alkresin пишет Так ведь Shift-F8 для этого предназначен - в help'е и на сайте про это написано Пропустил, не увидел. Все работает. Спасибо.Отсутствие каталога plugins/ мешает только работе плагинов Понятно

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

SergKis: alkresin пишет По поводу добавления новых параметров командной строки: сделать-то можно, но, по моему, более универсальным решением было бы просто указать в командной строке другой ini - так можно задать любую комбинацию нужных параметров. В проектах свои ini и в них все есть. Размножать доп. ini не очень хочется. Попробовал 2а каталога с hbedit и запуски в Far с одного, в проектах с другого. Уже не очень удобно, т.к. чувствую где то понадобится savehis=2. Смотрел на замену Palete, вроде, на уровне TEdit сложновато получается. Если не делать в вашей сборке (может кроме меня никому не нужно), то перекиньте FUNCTION edi_IniRead( cFileName ) в файл falert.prg. Буду делать подмену на этом уровне (разбор строк в секциях)

alkresin: Хорошо, добавлю. Смотрел на замену Palete, вроде, на уровне TEdit сложновато получается. Если не делать в вашей сборке (может кроме меня никому не нужно), то перекиньте FUNCTION edi_IniRead( cFileName ) в файл falert.prg. Я пока не вижу проблемы с объявлением в комадной строке palette (вы ведь об этом?). А вот edi_IniRead() нельзя - она пользуется статическими переменными.

SergKis: alkresin пишет edi_IniRead() нельзя - она пользуется статическими переменными. Нельзя edi_ReadIni( xIni ) из fedit.prg, edi_iniRead() из ffiles.prg там нет статик переменных

SergKis: PS Для Palette параметра начал набирать (не доделал пока) так, сам параметр -clr=0\1\2\3\4 по именам секций [PALETTE_0], ..., [PALETTE_4], что бы не привязываться к длинным именам Значение palette=far секции [OPTIONS] брать из name=... [PALETTE_?]

alkresin: Зачем так сложно-то? Добавил я три параметра (залил на github): -cp= -his= -pal=

SergKis: alkresin пишет Зачем так сложно-то? По мне, наоборот, просто. Не надо помнить длинные названия. Тут текст мой (сделал как у вас -pal=<только тут число>) [pre2] #include "hbgtinfo.ch" FUNCTION bkInit( cIniName, aParams ) Local cPath := hb_curDrive() + ":\" + Curdir() + '\' Local cName := hb_ProgName(), cTmp, cCP, nHis Local cExe := Lower(hb_fnameName(cName)) LOCAL cCapt := cExe LOCAL aPal := {}, cPal, nPal FOR nPal := 0 TO 9 cTmp := Lower( gIniC7(cIniName, [PALETTE_]+hb_ntos(nPal), 'Name', '') ) IF Empty(cTmp) EXIT ENDIF AAdd(aPal, cTmp) NEXT FOR EACH cTmp IN aParams IF Left( cTmp,4 ) == "-cp=" cCP := Upper( Substr( cTmp, 5 ) ) ELSEIF Left( cTmp,4 ) == "-his=" nHis := Val( Substr( cTmp, 6 ) ) IF nHis < 0 .OR. nHis > 2 nHis := Nil ENDIF ELSEIF Left( cTmp,5 ) == "-pal=" nPal := Val( Substr( cTmp, 6 ) ) + 1 IF nPal > 0 nPal := iif( nPal > Len(aPal), Len(aPal), nPal ) cPal := aPal[ nPal ] ENDIF ENDIF NEXT IF !Empty(cCP) hb_cdpSelect( cCP ) ENDIF IF nHis != NIL TEdit():options["savehis"] := nHis ENDIF IF !Empty(cPal) TEdit():cDefPal := cPal ENDIF cTmp := Lower(gIniC7(cIniName, [OPTIONS], 'PathInHead', 'off')) If 'off' $ cTmp cCapt := cPath + Repl(' .', 3) + space(1) + '-' + space(1) + cExe EndIf CLS ; hb_gtInfo( HB_GTI_WINTITLE, cCapt ) TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } RETURN Nil [/pre2] Добавил я три параметра (залил на github): Спасибо, буду использовать.

SergKis: alkresin Нарушилась прорисовка разделения окна по Ctrl-w,s, Ctrl-w,v (вся клиентская область в работе edit) Добавка из пред. версии в METHOD WriteTopPane( lClear ) [pre2] METHOD WriteTopPane( lClear ) CLASS TEdit LOCAL y := ::y1 - 1, nCol := Col(), nRow := Row(), nF9 := 0 LOCAL cLen := Ltrim(Str(Len(::aText))), nchars := Len(cLen) IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF If ::lTopPane DispBegin() SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF SetColor( ::cColor ) DevPos( nRow, nCol ) DispEnd() EndIf IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, lClear, y ) ELSE IF ::lTopPane DispBegin() /* SetColor( ::cColorPane ) Scroll( y, ::x1, y, ::x2 ) */ IF Empty( lClear ) DevPos( y, ::x1 ) IF ::x2 - ::x1 > 54 DevOut( "F9-menu" ) DevPos( y, ::x1+8 ) nF9 := 8 ENDIF DevOut( Iif( hb_hGetDef(::options,"pathinhead",.F.), NameShortcut(::cFileName,::nTopName,'~'), ; cp_Left( ::lUtf8, hb_fnameNameExt(::cFileName), ::nTopName ) ) ) IF !Empty( cDopMode ) DevPos( y, ::x1 ) DevOut( Padr( cDopMode, 8 ) ) ENDIF DevPos( y, ::x1 + nF9 + ::nTopName + 2 ) DevOut( Iif( ::lUpdated, "* ", " " ) + Lower( ::cp ) ) DevPos( y, ::x1 + nF9 + ::nTopName + 12 ) DevOut( PAdl(Ltrim(Str(::nLine)),nchars) + "/" + cLen ) DevPos( y, ::x1 + nF9 + ::nTopName + 12 + nchars*2 + 3 ) DevOut( "[" + Ltrim(Str(::PosToCol()-::x1+::nxFirst)) + "]" ) SetColor( ::cColorWB ) DevPos( y, ::x2-3 ) IF ::lF3 .OR. (::nby1 >= 0 .AND. ::nby2 >= 0) DevOut( "Sele" ) ELSE DevOut( Iif( ::nMode == 0, Iif( ::lReadOnly, "View", "Edit" ), ; Iif( ::nMode == 1, " Vim", " Cmd" ) ) ) ENDIF ENDIF SetColor( ::cColor ) DevPos( nRow, nCol ) DispEnd() ENDIF ENDIF RETURN Nil [/pre2] восстановила прорисовку только горизонтальное разделения при вертикальном, прорисовка делается и убирается, видно мелькание

alkresin: Там просто вертикальный разделитель не прорисовывался . Поправил.

SergKis: alkresin пишет Там просто вертикальный разделитель не прорисовывался . Поправил. Вертикальный разделитель прорисовался, а горизонтальный нет, пропал Моих правок нет. :New такой и StbLine() - пустышка пока [pre2] TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } [/pre2]

SergKis: PS добавил, вроде, стало прорисовывать как надо[pre2] SetColor( ::cColorPane ) IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) ENDIF IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF IF ::bWriteTopPane != Nil [/pre2]

alkresin: SergKis пишет: TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y) } } Вы берете прорисовку панели статуса на себя, но функция соответствующая у вас пустая... Вставьте в нее хотя бы [pre2]IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) ENDIF[/pre2]

SergKis: alkresin пишет Вы берете прорисовку панели статуса на себя, но функция соответствующая у вас пустая... В функции будет вывод в windows StatusBar по item-ам, а прорисовка разделителей экрана (полос) - как бы свойство TEdit. Что выводить в StatusBar и сколько item-ов не определился пока, т.к. нет загрузок нескольких файлов (всегда 1) для работы и переключения между окнами по Ctrl+TAB (исп. только при разделении окна на части для работы в др. местах загруженного текста). Сейчас пробую вывод полного имени и cdp в Title окна - вроде неплохо Строки [pre2] IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) [/pre2] повторяться будут и в блоке кода и без блока, потому вынес эти строки к вашим

SergKis: alkresin При savehis=1 и первый экран отображения (ничего не делали) отображение row, col не совпадает с позицией курсора (правильно стоит). Стоит сделать перемещение и все ok

SergKis: PS Возможно, будет интересно, сборка hbedit с cdp LV866 и StatusBar https://TransFiles.ru/87bmx LV866 и RU866 практически одинаковые, лат. буквы в псевдографике

SergKis: alkresin Можно ли, например, строке keywords4 присвоить цвет подсветки quotes (подсветка текста в кавычках) ?

alkresin: SergKis пишет: При savehis=1 и первый экран отображения (ничего не делали) отображение row, col не совпадает с позицией курсора (правильно стоит). Отображение координат в панели статуса? У меня вроде все правильно. Можно ли, например, строке keywords4 присвоить цвет подсветки quotes (подсветка текста в кавычках) ? А почему нельзя? Любой цвет присваивайте. Или я что-то недопонял?

SergKis: alkresin пишет Любой цвет присваивайте. Или я что-то недопонял? Скорее я не очень понимаю, как присвоить цвет строке keywords4=... Цвет keywords1 отличается от keywords2\3, но как поменять, что то не найду, т.е. ключевым словам в keywords4 назначить цвет другой, чем keywords2\3, к примеру как quotes. У меня вроде все правильно В вашей сборке идет сообщение из плагина и нажав что то, все становится ok. В моей сборке видно, значения row,col при первом входе одни, при нажатии перемещения - другие.

SergKis: PS при организации подокон (Ctrlw-w,s \ Ctrlw-w,v ) происходит то же самое при Ctrl-TAB (переключение по окнам)

SergKis: SergKis пишет Скорее я не очень понимаю, как присвоить цвет строке keywords4=... Обыскался в исходниках, а оказалось совсем просто в ini [PALETTE_?] секции

Andrey: А в редактор можно добавить кнопки для сборки проекта ? Чтобы править и собирать и запускать проект без Far'a ?

SergKis: alkresin Можно добавить keywords5 с цветом startline ? Просится некоторые слова выделить поярче. Попробовал добавить LOCAL aHiliOpt := { "keywords1","keywords2","keywords3","keywords4","keywords5","quotes","scomm","startline","mcomm","block" } В ini секции [PALETTE_?] добавил keywords5=B+/GR (значения из startline=B+/GR) [LANG_PRG] добавил keywords5=modal child main activate center mdi но что то не срослось, что не понимаю ? Или так нельзя ?

SergKis: Andrey пишет А в редактор можно добавить кнопки для сборки проекта ? Чтобы править и собирать и запускать проект без Far'a ? Раньше было окошечко для запуск bat\cmd файла, что то сейчас его не вижу ?

SergKis: Andrey пишет Чтобы править и собирать и запускать проект без Far'a ? Прочитай http://www.kresin.ru/hbedit.html#Plug есть plug_hbp_init.prg - init плагин для hbp-файлов (hbmk2), обеспечивающий навигацию по файлам проекта и сборку проекта. Т.е. загружаешь hbp файл и можешь загружать\работать собирать Alt+R

Andrey: Запустил HBEDIT.EXE, нажал F1, вижу такое: SergKis пишет: Прочитай http://www.kresin.ru/hbedit.html#Plug есть plug_hbp_init.prg - init плагин для hbp-файлов (hbmk2), обеспечивающий навигацию по файлам проекта и сборку проекта. Т.е. загружаешь hbp файл и можешь загружать\работать собирать Alt+R Понял. Буду смотреть. А для старых терминальных проектов в DOC кодировке (866) сборку можно будет настроить для хХарбора ? И чтобы псевдографика использовалась. Там проект собирается через родную сборку проекта: z:\xHarbour\bin\hbmake MyPrj4.bc Сам проект правиться до сих пор в ME 7.01. Терминал хХарбора GTWVT 1.2 А ME 7.01 дружит только с 32бит виндой + раздел винта маленький должен быть, иначе он не запускается. Пытаюсь прекратить поддержку терминалки - юзера не дают ! Видать до самой пенсии придётся сопровождать.

SergKis: Andrey пишет А для старых терминальных проектов в DOC кодировке (866) сборку можно будет настроить для хХарбора ? У тебя внизу справа кодировка RU1251, переключи Shift+F8 или F9-Menu В ini по умолчанию стоит [SCREEN] cp=RU1251 можешь поставить cp=RU866 почитай сайт с описанием и посмотри ini

SergKis: PS Help не использовал, переименовал hbedit.help -> hbedit_ru.help hbedit_en.help -> hbedit.help скачай с сайта родной hbedit (данные ini из моего можно перенести в родной)

SergKis: PPS разобрался. Для просмотра help ставится кодировка по умолчанию, она в моем ini cp=RU1251 Если гружу prg, кодировка RU1251, меняю кодировку на RU866, на prg установилась и показывает Нажимаю F1, окно help на экране, видно, что это 2ое окно и кодировка RU1251 Потому и кракозяблики при русском hbedit.help Лучше было бы hbedit.help иметь в Utf8 c bom.

alkresin: SergKis пишет: В вашей сборке идет сообщение из плагина и нажав что то, все становится ok. В моей сборке видно, значения row,col при первом входе одни, при нажатии перемещения - другие. Проверял без плагина (просто переместил его временно из plugins/) - все нормально.

alkresin: Andrey пишет: А в редактор можно добавить кнопки для сборки проекта ? Чтобы править и собирать и запускать проект без Far'a ? Как Сергей уже сказал, если открыть редактором соответствующий .hbp, его можно исполнить (построить проект) по Ctrl-L. Если у вас не .hbp, а .bat, его можно запустить на выполнение из командного режима. Переключаетесь в командный режим, нажав два раза Ctrl-Q (при этом курсор должен перейти в нижнюю строчку - она очистится), введите ! и имя bat-файла и жмите Enter: !bld.bat Кстати, из командного режима можно с помощью ! исполнить любую консольную программу, результат будет выведен в отдельное подокно.

alkresin: SergKis пишет: Раньше было окошечко для запуск bat\cmd файла, что то сейчас его не вижу ? Не помню такого окошечка. Внешние программы запускаются из командного режима, как в Vim).

alkresin: SergKis пишет: Можно добавить keywords5 с цветом startline ? Надо менять hilight.prg, класс Hili - там определены 4 набора keywords.

Andrey: alkresin пишет: Если у вас не .hbp, а .bat, его можно запустить на выполнение из командного режима. Переключаетесь в командный режим, нажав два раза Ctrl-Q (при этом курсор должен перейти в нижнюю строчку - она очистится), введите ! и имя bat-файла и жмите Enter: Andrey пишет: Там проект собирается через родную сборку проекта: z:\xHarbour\bin\hbmake MyPrj4.bc Файлы проекта в хХарборе имеют расширение .bc Насчёт батника понял. Спасибо !

SergKis: alkresin пишет: Переключаетесь в командный режим, нажав два раза Ctrl-Q defmode=-1 Vim режим отключен и не будет командной строки Не помню такого окошечка. Внешние программы запускаются из командного режима, как в Vim).. "Хорошо бы пива", что бы окошечко было, т.к. консоли нет, есть wvt совсем чуть-чуть и hmg Надо менять hilight.prg, класс Hili - там определены 4 набора keywords. Можно добавить, п о ж а л у й с т а ? Раскрасил hmg команды (получилось хорошо), но не хватает цвета поярче от #define ..., #include ..., т.е. startline для некоторых слов

SergKis: alkresin пишет Проверял без плагина (просто переместил его временно из plugins/) - все нормально. У меня убран из ini (убирал hrb), результат одинаков. Вот сборка моя https://TransFiles.ru/50low на ней видно разные значения row, col после загруженного (через параметры командной строки) файла и при организации под окон Ctrl-w,s\v Подскажите, как правильно исправить ситуацию ?

SergKis: alkresin Еще просьба - сделать список his по F4 с поиском, а не с ключом слева - добавить в edi_SeleFile() маску для файлов, тогда без доп. окна можно организовать запуск bat\cmd файлов не только компиляции (hbp у меня нет, кроме hmg, есть местами), но и др. вариантов, например, запуск notepad3 в режиме сбора инф. буфера клавиатуры - вынести меню с текстами и тексты с запросов окон в hbedit.prg для языковых вариантов, сейчас для своей сборки меняется только hbedit.prg, хотелось бы сохранить эту традицию

SergKis: PSдобавить в edi_SeleFile() маску для файлов Просмотрел, параметр маски есть в функции. Снимается вопрос.

SergKis: PS Можно сделать при выделении текста F3 и блоковом по Ctrl+F3 при повторном нажатии (конец выделения) не выбрасывать меню с предложением выбрать буфер клавиатуры (к примеру, по переменной в TEdit .T.\.F.) ? Режим удобен при работе одной рукой

SergKis: PPS даже если ставлю #define MAX_CBOARDS 1 #define MAX_EDIT_CBOARDS 1 #define CBOARD_MINUS 1 меню с одной строкой вываливается

SergKis: alkresin SergKis пишет на ней видно разные значения row, col после загруженного (через параметры командной строки) файла и при организации под окон Ctrl-w,s\v Подскажите, как правильно исправить ситуацию ? Исправил так [pre2] TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bOnKey := {|o,n| EdOnKey(o, n) }, ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y,cExe) }, ; __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) } [/pre2] Может не очень красиво, но работает.

SergKis: alkresin При создании под окна Ctrl-w,s и Ctrl-w,o (полное окно) меняется поведение клавиши Esc и не переключаются окна по Ctrl-w,w. Так должно быть ?

SergKis: alkresin Как вызвать из подключаемого блока кода плагин, вызываемый по Alt-L (Function list) ? TEdit():bNew := ... постом выше. Исходный текст обработки тут [pre2] STATIC FUNCTION h_KeyInit() h_Key := { ; 1004 => {| | Nil }, ; // K_RBUTTONDOWN 30101 => {| | edi_KeyCToN( "Shift-F4" ) }, ; // New file 30102 => {| | edi_KeyCToN( "Ctrl-F4" ) }, ; // Open file 30103 => {| | edi_KeyCToN( "F2" ) }, ; // Save 30104 => {| | edi_KeyCToN( "Shift-F4" ) }, ; // Save as 30105 => {| | edi_KeyCToN( "Shift-F8" ) }, ; // Code page 30109 => {| | edi_KeyCToN( "F9" ) }, ; // F9-Menu 30201 => {| | edi_KeyCToN( "F7" ) }, ; // Find... 30202 => {| | edi_KeyCToN( "Shift-F7" ) }, ; // Find Next 30203 => {| | edi_KeyCToN( "Alt-F7" ) }, ; // Find Prev 30204 => {| | edi_KeyCToN( "Ctrl-F7" ) }, ; // Replace... 30205 => {| | edi_KeyCToN( "Alt-F8" ) }, ; // Goto... 30206 => {| | edi_KeyCToN( "Alt-B" ) }, ; // Goto the previous position 30207 => {| | edi_KeyCToN( "Alt-L" ) }, ; // Function list 30301 => {| | edi_KeyCToN( "F12" ) }, ; // List of open files 30302 => {|o,n| Window_OnKey(o, n) }, ; // Split window horizontally 30303 => {|o,n| Window_OnKey(o, n) }, ; // Split window vertically 30304 => {|o,n| Window_OnKey(o, n) }, ; // Switch window 30305 => {|o,n| Window_OnKey(o, n) }, ; // Open window fully 30306 => {|o,n| Window_OnKey(o, n) }, ; // Close window 30999 => {| | (-1) } ; // dummy } RETURN Nil STATIC FUNCTION Window_OnKey( o, n ) LOCAL r := -1 IF n == 30302 // Split window horizontally j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 2, Int( (o:y2-o:y1)/2 ) ) j:lReadOnly := .T. ELSEIF n == 30303 // Split window vertically j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 3, Int( (o:x2-o:x1)/2 ) ) j:lReadOnly := .T. ELSEIF n == 30304 // Switch window IF Len(o:aWindows) > 1 r := edi_KeyCToN( "Ctrl-Tab" ) // mnu_ToBuf( o, edi_FindWindow( o, .T. ) ) ENDIF ELSEIF n == 30305 // Open window fully IF o:oParent != Nil edi_CloseWindow( o, .F. ) o:oParent := Nil o:y1 := o:aRect[1] := o:aRectFull[1] o:x1 := o:aRect[2] := o:aRectFull[2] o:y2 := o:aRect[3] := o:aRectFull[3] o:x2 := o:aRect[4] := o:aRectFull[4] IF o:lTopPane o:y1 ++ ENDIF o:TextOut() edi_SetPos( o ) __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) ENDIF ELSEIF n == 30306 // Close window ( fully window ) IF o:oParent != Nil mnu_Exit( o ) ELSEIF Len(o:aWindows) > 1 r := K_ESC ENDIF ENDIF RETURN r FUNCTION EdOnKey( o, n ) LOCAL m := n, b, i, j, k LOCAL s := hb_BitAnd( n, SHIFT_PRESSED ) != 0 LOCAL a := hb_BitAnd( n, ALT_PRESSED ) != 0 LOCAL c := hb_BitAnd( n, CTRL_PRESSED ) != 0 LOCAL p := hb_keyStd( n ) LOCAL r := -1 // ToLog(.T., n, s, a, c, p) IF p == K_F1 // help RETURN r ELSEIF p == K_F8 // colored syntaxis enabled\disabled RETURN r ELSEIF p == K_F10 // exit RETURN r ENDIF b := hb_HGetDef( h_Key, n, Nil ) If b != Nil If HB_ISBLOCK( b ) .and. ( k := EVal( b, o, n ) ) != Nil n := k Else n := b EndIf EndIf RETURN n [/pre2] Цветом выделена попытка вернуть Alt+L в обработчик, не срабатывает попытка через __Keyboard(chr(K_ALT_L)) и возврат -1 в обработчик, не срабатывает Как правильно надо ?

Andrey: SergKis пишет: Раскрасил hmg команды (получилось хорошо), но не хватает цвета поярче от #define ..., #include ..., т.е. startline для некоторых слов Я посмотрел раскраску под МиниГуи. Что то блеклая она какая то ... А поярче нельзя ?

SergKis: alkresin При работе с xml, html файлами, возможно, надо читать кодировку и при Utf-8 включать автоматом utf8 в hbedit

Andrey: Можно сделать переход на редактирование сразу в меню ?

SergKis: Andrey пишет Я посмотрел раскраску под МиниГуи. Что то блеклая она какая то ... А поярче нельзя ? В ini Александр уже подготовил несколько вариантов раскраски секции [PALETTE_0],[PALETTE_1],[PALETTE_2],[PALETTE_3],[PALETTE_4]. Я взял готовый [PALETTE_4] (для моих глаз хорошо), про добавку еще цвета, который поярче и есть, я просил выше. В hbedit можно создать палитру цветов свою и применить к keywords1-4 самостоятельно и довольно не трудно.

Andrey: Ещё по умолчанию хотелось бы иметь выход из редактора по Alt+X и Alt+Q (с сохранением всех файлов) как в ME7.

SergKis: Andrey пишет Можно сделать переход на редактирование сразу в меню ? Стремлюсь к мах возможному переносу в меню windows режимов hbedit. То что кидал теме и выкладывал тут выше - состояние на сегодня

Andrey: В ME7 очень удобное меню по правому Ctrl+Enter В нём можно сделать свои настройки по компиляции и запуску проекта. Всё сразу сохраняется в настройках и при переносе ничего заново настраивать не надо. Вот такое меню по по правому Ctrl+Enter: Можно ли сделать такое же меню запуска ?

SergKis: alkresin Можно сделать, чтобы edi_SeleFile() понимала массив на входе ? К примеру[pre2] FUNCTION edi_SeleFile( oEdit, cPath, y1, x1, y2, x2 ) LOCAL aMenu := iif( HB_ISARRAY( cPath ), AClone( cPath ), edi_Directory( cPath ) ), i, nPos, arr [/pre2] для формирования массива из нескольких масок ф-ей edi_Directory( cPath ) в цикле

SergKis: alkresin SergKis пишет Исправил так TEdit():bNew := {|oe| iif( oe:y1 == oe:aRectFull[1]+1, ( oe:lTopPane := .F., oe:y1-- ), ), ; oe:bOnKey := {|o,n| EdOnKey(o, n) }, ; oe:bWriteTopPane := {|o,l,y| StbLine(o,l,y,cExe) }, ; __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) } Может не очень красиво, но работает. Оказалось не везде работает. Обработка сообщений меню [pre2] STATIC FUNCTION Window_OnKey( o, n ) LOCAL r := -1 IF n == 30302 // Split window horizontally j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 2, Int( (o:y2-o:y1)/2 ) ) j:lReadOnly := .T. // работает показ координат правильно ELSEIF n == 30303 // Split window vertically j := edi_AddWindow( o, MemoRead(o:cFileName), o:cFileName, 3, Int( (o:x2-o:x1)/2 ) ) j:lReadOnly := .T. // работает показ координат правильно ELSEIF n == 30304 // Switch window IF Len(o:aWindows) > 1 // r := edi_KeyCToN( "Ctrl-Tab" ) mnu_ToBuf( o, edi_FindWindow( o, .T. ) ) __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) // переключение работает правильно из меню. Ctrl+Tab, Ctrl+w,w - показ // неверный координат после переключения, после стрелки - все правильно ENDIF ELSEIF n == 30305 // Open window fully IF o:oParent != Nil edi_CloseWindow( o, .F. ) o:oParent := Nil o:y1 := o:aRect[1] := o:aRectFull[1] o:x1 := o:aRect[2] := o:aRectFull[2] o:y2 := o:aRect[3] := o:aRectFull[3] o:x2 := o:aRect[4] := o:aRectFull[4] IF o:lTopPane o:y1 ++ ENDIF o:TextOut() edi_SetPos( o ) __KeyBoard( chr(K_RIGHT)+chr(K_LEFT) ) // работает показ координат правильно ENDIF ELSEIF n == 30306 // Close window ( fully window ) IF o:oParent != Nil mnu_Exit( o ) ELSEIF Len(o:aWindows) > 1 r := K_ESC ENDIF ENDIF RETURN r [/pre2] Как это побороть ?

SergKis: PS Показ неверных координат по колонке ошибка. Row = 184, Col = 4 . Создаем под окно Ctrl-w,s, значение Row = 184, Col = 4 в под окне. Переходим в позицию Row = 192, Col = 7 Переключение по Ctrl-w,w пошаговое - жмем Ctrl-w => Row = 192, Col = 7 добавляем w, Row = 184, Col = 8 жмем -> Row = 184, Col = 5 жмем <- Row = 184, Col = 4 - жмем Ctrl-w => Row = 184, Col = 4 (правильно) добавляем w, Row = 192, Col = 29 (должна быть Col = 7) - жмем Ctrl-w => Row = 192, Col = 7 (правильно) добавляем w, Row = 184, Col = 8 (должна быть Col = 4) - жмем Ctrl-w => Row = 184, Col = 4 (правильно) добавляем w, Row = 192, Col = 29 (должна быть Col = 7) и т.д. При нажатии Ctrl-Tab получаем сразу конечные значения Row = 192, Col = 29 (должна быть Col = 7) и Row = 184, Col = 8 (должна быть Col = 4)

SergKis: SergKis пишет Как это побороть ? Ларчик просто открывался Поменялись способы добычи Row, Col в :WriteTopPane() (еле высмотрел) Перенес в свою процедуру. Убрал добавки с __keyBoard() тоже, все заработало Блин столько времени ... УРА!

SergKis: alkresin При выделенном блоке Shift+стрелки, Ctrl+C и вставка в Far этого блока, происходит искажение данных, при тех же действиях из Far в hbedit аналогично искажаются данные, т.е.[pre2] Far выделенный блок kod provodki na pribilj LV kod provodki na pribilj ES kod provodki na pribilj OT kod provodki Pvn hbedit строки LOCAL cProvPr := gProp( ProvPr ) // LOCAL cProvPrE := gProp( ProvPrE ) // LOCAL cProvPrO := gProp( ProvPrO ) // LOCAL cProvPvn := gProp( ProvPvn ) // блок из Far по Ctrl+V вставляем за первым // и получаем LOCAL cProvPr := gProp( ProvPr ) // kod provodki na pribilj LV kod provodki na pribilj ES kod provodki na pribilj OT kod provodki Pvn LOCAL cProvPrE := gProp( ProvPrE ) // LOCAL cProvPrO := gProp( ProvPrO ) // LOCAL cProvPvn := gProp( ProvPvn ) // из hbedit в Far аналогично Между Akelpad, Notepad3 этого не происходит + из них и в Far переносится правильно [/pre2] Можно ли привести к такому же поведению hbedit, как Akelpad и Notepad3 ?

SergKis: PS На окне "Open file" может есть клавиши, для вызова списка файлов ? Как то удобно хвататься за мышь. Если нет назначенной клавиши, может, сделать как у combobox кл. F4 - развертка списка

SergKis: PPS По F4 и через меню F9 вкл. режим списка файлов истории. Пожелания: - сделать, как где то уже делали, если длина массива <= 3, то список с ключом слева (как сейчас), при > 3 список с поиском. - увеличить правую границу с 67 (стоит в некоторых местах кода) до MaxCol() - x1 - 1, тогда больше файлов (возможно все) пойдут с нормальным именем, а не с укороченным через функцию

Andrey: alkresin Большое пожелание сделать удобное меню по правому Ctrl+Enter. Как писал в Пост N: 6442 Заранее большое спасибо !

alkresin: Andrey пишет: Файлы проекта в хХарборе имеют расширение .bc Тогда в том же командном режиме: !z:\xHarbour\bin\hbmake MyPrj4.bc Исполненные команды сохраняются, так что в следующий раз жмете стрелку вверх для выбора команды из истории.

alkresin: SergKis пишет: defmode=-1 Vim режим отключен и не будет командной строки Ну так включите, ничего плохого с вами не случится - он же не по умолчанию будет. "Хорошо бы пива", что бы окошечко было, т.к. консоли нет, есть wvt совсем чуть-чуть и hmg Согласитесь, это более чем странно - добавлять альтернативный интерфейс для уже реализованной функции. В крайнем случае, если не можете жить с мыслью о том, что при нажатии Ctrl-Q может появиться Vim-режим, в ваш обработчик :bOnKey добавьте клавишу какую-нибудь, чтобы напрямую в командный режим переходить. В принципе, я могу сделать, чтобы при defmode=-1 Ctrl-Q переключала в командный режим. Можно добавить, п о ж а л у й с т а ? Раскрасил hmg команды (получилось хорошо), но не хватает цвета поярче от #define ..., #include ..., т.е. startline для некоторых слов Ok.

alkresin: SergKis пишет: Вот сборка моя https://TransFiles.ru/50low на ней видно разные значения... Прямо сейчас transfiles.ru не отзывается, может позже. сделать список his по F4 с поиском, а не с ключом слева Пожалуй, да. Сам подумывал об этом. вынести меню с текстами и тексты с запросов окон в hbedit.prg для языковых вариантов Не получится. Hbedit используется и как встроенный редактор для других приложений, а hbedit.prg туда не включается. Если нужно свое меню, сажайте его на F9 в своем :bOnKey.

SergKis: alkresin пишет Ну так включите, ничего плохого с вами не случится - он же не по умолчанию будет. Vim режим надо отключать, при включенном, что то нажал, случайно и попал в него и он начинает жить ..., т.е. пытаешься делать одно, а он что то свое, пока не выключишь. По поводу командной строки, по мне она не нужна (есть и хорошо для кого то), т.к. bat\cmd файлов, как правило, несколько и подходит, скорее, вариант от Андрея Ctrl+Enter ( меню запусков ) больше нравится для работы. Я просил (ранее) сделать для функции edi_SeleFile( oEdit, cPath, y1, x1, y2, x2 ) сделать cPath параметр и массивом именно с целью масками самому собирать список, к примеру, cmd+bat файлов (есть еще варианты списков) и его отрабатывать в :bOnKey.

alkresin: SergKis пишет: Vim режим надо отключать, при включенном, что то нажал, случайно Довольно сложно, мне кажется, случайно нажать Ctrl-Q. подходит, скорее, вариант от Андрея Ctrl+Enter Я еще не добрался до варианта от Андрея, но мое предложение переключаться в командный режим по Ctrl-Q напрямую при defmode=-1 остается в силе. Учитывая, что можно ходить по истории команд, это то же самое меню, к тому же пополняемое в процессе эксплуатации.

SergKis: PS Вот тестовый вариант, правда, только для одной маски, но получил, что хотел [pre2] STATIC FUNCTION bkDir( o, n, cMask ) LOCAL cDir := hb_DirBase()+cMask LOCAL y1 := 2 LOCAL x1 := 6 LOCAL y2 := o:aRectFull[3]-2 LOCAL x2 := 67 LOCAL i := y2 - y1 - 1 LOCAL aDir := edi_Directory( cDir ) LOCAL xFil, cWnd, k, l := 0, m := 12 AEval(aDir, {|a,p| l := Max( Len(a[1]), l ) }) l := Max( m, l ) l += 4 * 2 + 1 k := iif( Len(aDir) < i, Len(aDir), i ) + 1 y2 := iif( y1 + k > y2, y2, y1 + k ) x2 := iif( x1 + l > x2, x2, x1 + l ) cWnd := sv_wnd( y1-1, x1-1, y2+1, x2+1 ) xFil := edi_SeleFile( o, cDir, y1, x1, y2, x2 ) rs_wnd(cWnd) RETURN Nil [/pre2]

alkresin: SergKis пишет: Можно сделать при выделении текста F3 и блоковом по Ctrl+F3 при повторном нажатии (конец выделения) не выбрасывать меню с предложением выбрать буфер клавиатуры Нет необходимости повторно нажимать F3/Ctrl-F3. Закончили выделение - забираете в буфер (Ctrl-C, Ctrl-Ins) и все.

SergKis: alkresin пишет Учитывая, что можно ходить по истории команд, это то же самое меню, к тому же пополняемое в процессе эксплуатации. У меня в базовом варианте работы уже стоит 100 строк истории и это не предел, потому просил увеличить ширину окна списка до MaxCol()-x1-1 или до самой правой границы (по коротким именам файлов ничего не понять по проектам одинаково организованным). Стоят настройки окна hbedit fontheight=21 fontwidth=10 screen_width=129 screen_height=32 по размеру шрифта и размерам очень близко к Akelpad и Notepad3.

SergKis: alkresin пишет Нет необходимости повторно нажимать F3/Ctrl-F3. Закончили выделение - забираете в буфер (Ctrl-C, Ctrl-Ins) и все. Без повторного нажатия продолжает красить блок, нажав esc вылетаешь из окна с текстом.

alkresin: SergKis пишет: При создании под окна Ctrl-w,s и Ctrl-w,o (полное окно) меняется поведение клавиши Esc и не переключаются окна по Ctrl-w,w. После Ctrl-w,o окно перестает быть дочерним, это обычное, равноправное окно, переключение по Ctrl-Tab. А Ctrl-w,w - только для дочерних окон.

alkresin: SergKis пишет: Без повторного нажатия продолжает красить блок, нажав esc вылетаешь из окна с текстом. Хм... Действительно, после Ctrl-C продолжает красить, а после Ctrl-Ins (я им обычно пользуюсь) - все нормально. Проверю, в чем дело.

SergKis: alkresin пишет После Ctrl-w,o окно перестает быть дочерним, это обычное, равноправное окно, переключение по Ctrl-Tab. А Ctrl-w,w - только для дочерних окон. Да, увидел по текстам. Только возникает "визуальная" путаница окна Edit и копии View. В моем полно экранном варианте при горизонтальном делении и перевода доч. окна в полный экран, остается в 0 строке полоса разделения, что очень хорошо для понимания доч.окна.

SergKis: alkresin пишет Не получится. Hbedit используется и как встроенный редактор для других приложений, а hbedit.prg туда не включается. Если нужно свое меню, сажайте его на F9 в своем :bOnKey. Я имел ввиду ваши меню + тексты вынести, к примеру, в PUBLIC (hbedit.prg) STATIC переменные в каждом своем prg файле с функциями получения адреса, чтобы в своеем варианте, ключи (значения) "родных" значений можно было подменить языковыми данными из языковых файлов utf8 кодировки. Т.е. нужен доступ к данным, чтобы не трогать базовые тексты hbedit Прямо сейчас transfiles.ru не отзывается, может позже. С ситуацией неправильной подсветки разобрался. В WriteTopPane поменялся вариант отображения row, col, а у меня остался старый, расчетный. Смотрел, но глаз замылился и не как не мог увидеть изменения. Сейчас поправил и все ok!

SergKis: alkresin пишет Я еще не добрался до варианта от Андрея, но мое предложение переключаться в командный режим по Ctrl-Q напрямую при defmode=-1 остается в силе Привычнее, Notepad3, Ctrl+R => окно запроса запуска, но лучше список запусков без окна, Ctrl+Q будет занята, наверно, списком проекта, т.к. hbp не использую

alkresin: SergKis пишет: Как вызвать из подключаемого блока кода плагин, вызываемый по Alt-L (Function list) ? Горячие клавиши для плагинов хранятся в hKeyMap - там же, где переназначения клавиш, и обрабатываются в :Edit() до вызова :onKey(), поэтому ваши варианты не сработают. Надо просто напрямую запустить нужный плагин.

SergKis: alkresin пишет Горячие клавиши для плагинов хранятся в hKeyMap - там же, где переназначения клавиш, и обрабатываются в :Edit() до вызова :onKey(), поэтому ваши варианты не сработают. Надо просто напрямую запустить нужный плагин. Возможно, это не очень хорошо, т.к. я повторил (ф-я Window_OnKey()) для Ctrl-w,.. (они тоже не срабатывают замену на Alt-1,.. по той же причине) часть кода из меню mnu_Windows() по обработке, т.е. я повторяю ваши алгоритмы обработчика и если, в какой то, версии hbedit они изменятся, то будет "мило", с начала определить изменения и потом перенести\перестроить алгоритмы в свою часть. Может, :OnKey, сможет определить возврат (команды) из :bOnKey и выполнить плагины и др. не исполняемые сейчас команды ?

alkresin: SergKis пишет: Может, :OnKey, сможет определить возврат (команды) из :bOnKey и выполнить плагины и др. не исполняемые сейчас команды ? :onKey() отрабатывает после того, как будет разобран hKeyMap и переопределенные клавиши преобразуются в предопределенные. :onKey() получает предопределенные в программе клавиши - такова логика программы. Alt-L и прочие определены в ini-файле, :onKey() о них ничего не знает.

alkresin: Andrey пишет: Можно сделать переход на редактирование сразу в меню ? Не понял, что означает "переход на редактирование" ? "Попасть в редактирование этой настройки" - тоже не понял, что имеется ввиду. Ещё по умолчанию хотелось бы иметь выход из редактора по Alt+X и Alt+Q (с сохранением всех файлов) как в ME7. Вы можете переопределить клавиши в ini-файле: Alt-X=>F10

alkresin: Andrey пишет: В ME7 очень удобное меню по правому Ctrl+Enter В нём можно сделать свои настройки по компиляции и запуску проекта. ... В hbedit для таких вещей есть плагины. Напишите свой плагин, который реализует такое меню (помогу, если надо) и пропишите его в ini-файле с нужной горячей клавишей.

alkresin: SergKis пишет: Можно сделать, чтобы edi_SeleFile() понимала массив на входе ? Я так понимаю, что нужен массив масок, а не путей?

alkresin: SergKis пишет: При выделенном блоке Shift+стрелки, Ctrl+C и вставка в Far этого блока, происходит искажение данных, А что искажается? Я из вашего примера ничего не увидел.

alkresin: SergKis пишет: На окне "Open file" может есть клавиши, для вызова списка файлов ? Как то удобно хвататься за мышь Ctrl+стрелка вниз.

SergKis: alkresin пишет Я так понимаю, что нужен массив масок, а не путей? Со списком масок не надо, т.к. кроме строк от масок, можно подсунуть ключевые слова и после меню их отрабатывать. Скорее, общий вариант вызова меню на массив с поиском, какой это будет массив, от путей полученный или др. способом, это не важно. Надо что бы он формировался по координатам от max длины строк и кол-ва строк массива, не выходя за пределы MaxRow(), MaxCol(). К примеру у меня будет (если дойдет до этого по планам) hbedit.cfg формата ini utf8 кодировки, с языковыми секциями и секциями, которые хочет Андрей на Ctrl+Enter, т.е. Название пункта меню и что выполнить (bat,cmd,...) и как выполнить типа RunWait или Run В hbedit для таких вещей есть плагины. Напишите свой плагин, который реализует такое меню (помогу, если надо) и пропишите его в ini-файле с нужной горячей клавишей. По мне, плагин тут не нужен, нужно просто меню выше описанное, команда меню и гор. клавиша. Ctrl+стрелка вниз. Понял, а то жму все время стрелку вверх (типа получить пред. значение) или F4. По стрелке вниз идет переключение фокуса (это еще надо увидеть - не очень наглядно) на [^] и надо еще жать SPACE для получения списка, по мне лишнее тело движение. В задачах делаю Enter на пустом поле или F5 -> сразу список. А что искажается? Я из вашего примера ничего не увидел Искажалась подсветка Row, Col при первом входе и переключении окон Crtl-Tab. После любого перемещения подсветка становилась правильной. Сейчас это исправлено, новыми вариантами из WriteTopPane (у меня был вариант из первых версий) Вы можете переопределить клавиши в ini-файле: Alt-X=>F10 Имеется ввиду алгоритм выхода из всех загруженных окон сразу :onKey() отрабатывает после того, как будет разобран hKeyMap и переопределенные клавиши преобразуются в предопределенные. :onKey() получает предопределенные в программе клавиши - такова логика программы. Alt-L и прочие определены в ini-файле, :onKey() о них ничего не знает. Может можно перестроить, сначала исполнить :bOnKey и потом возврат и исполнение того о чем написали.

alkresin: Обновлен hbedit. Добавлена опция keywords5 и еще разные исправления и улучшения, сделанные за прошедшее время.

alkresin: SergKis пишет: Имеется ввиду алгоритм выхода из всех загруженных окон сразу В vim-режиме для этого есть команды ZZ (выход из всех окон с сохранением) и ZQ (без сохранения). Можно добавить в keymap в ini, например: Alt-F10=>Ctrl-Q|Z|Z Ну и разрешить активацию vim-режима, конечно.

SergKis: alkresin пишет Добавлена опция keywords5 Спасибо, работает

SergKis: alkresin Поправьте у себя [pre2] METHOD WriteTopPane( lClear ) CLASS TEdit LOCAL y := ::y1 - 1, nCol := Col(), nRow := Row(), nF9 := 0 LOCAL cLen := Ltrim(Str(Len(::aText))), nchars := Len(cLen) SetColor( ::cColorPane ) IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) ENDIF IF ::oParent != Nil .AND. ::x1 == ::oParent:x2 + 2 Scroll( ::y1, ::x1-1, ::y2, ::x1-1 ) ENDIF IF ::bWriteTopPane != Nil Eval( ::bWriteTopPane, Self, lClear, y ) ELSE IF ::lTopPane DispBegin() // Scroll( y, ::x1, y, ::x2 ) IF Empty( lClear ) [/pre2]

SergKis: PS или так[pre2] IF ::bWriteTopPane != Nil IF ::lTopPane Scroll( y, ::x1, y, ::x2 ) ENDIF Eval( ::bWriteTopPane, Self, lClear, y ) ELSE [/pre2]

SergKis: alkresin SergKis пишет:При выделенном блоке Shift+стрелки, Ctrl+C и вставка в Far этого блока, происходит искажение данных, alkresin пишет А что искажается? Я из вашего примера ничего не увидел. [pre2] Far выделенный блок kod provodki na pribilj LV kod provodki na pribilj ES kod provodki na pribilj OT kod provodki Pvn hbedit строки LOCAL cProvPr := gProp( ProvPr ) // LOCAL cProvPrE := gProp( ProvPrE ) // LOCAL cProvPrO := gProp( ProvPrO ) // LOCAL cProvPvn := gProp( ProvPvn ) // блок из Far по Ctrl+V вставляем за первым // и получаем LOCAL cProvPr := gProp( ProvPr ) // kod provodki na pribilj LV kod provodki na pribilj ES kod provodki na pribilj OT kod provodki Pvn LOCAL cProvPrE := gProp( ProvPrE ) // LOCAL cProvPrO := gProp( ProvPrO ) // LOCAL cProvPvn := gProp( ProvPvn ) // должно быть LOCAL cProvPr := gProp( ProvPr ) // kod provodki na pribilj LV LOCAL cProvPrE := gProp( ProvPrE ) // kod provodki na pribilj ES LOCAL cProvPrO := gProp( ProvPrO ) // kod provodki na pribilj OT LOCAL cProvPvn := gProp( ProvPvn ) // kod provodki Pvn [/pre2] синим цветом искажение, строки вставки справа за // разорвали последовательность 4х строк, образовав новые строки

SergKis: PS Akelpad, Notepad3 делают операцию правильно + в Far блок выделенный, как выше, из них переносится тоже правильно, т.е. получаем строки как "должно быть" без искажений

SergKis: PPS Far между собой, по F4 делает правильно, в hbedit, akelpad, notepad3 переносит искажая hbedit искажает и между собой, 2а запуска hbedit, и в akelpad, notepad3, far переносит искажая

alkresin: Обновлен hbedit. Несколько мелких правок. Добавлено два плагина, игра Сокобан (передвигаем ящики по лабиринту в конечные позиции) и игра StarTrek (помнится, лет 35 назад мы резались в нее еще на СМ-4).

SergKis: SergKis пишет [pre2] Far выделенный блок kod provodki na pribilj LV kod provodki na pribilj ES kod provodki na pribilj OT kod provodki Pvn hbedit строки LOCAL cProvPr := gProp( ProvPr ) // LOCAL cProvPrE := gProp( ProvPrE ) // LOCAL cProvPrO := gProp( ProvPrO ) // LOCAL cProvPvn := gProp( ProvPvn ) // блок из Far по Ctrl+V вставляем за первым // и получаем LOCAL cProvPr := gProp( ProvPr ) // kod provodki na pribilj LV kod provodki na pribilj ES kod provodki na pribilj OT kod provodki Pvn LOCAL cProvPrE := gProp( ProvPrE ) // LOCAL cProvPrO := gProp( ProvPrO ) // LOCAL cProvPvn := gProp( ProvPvn ) // должно быть LOCAL cProvPr := gProp( ProvPr ) // kod provodki na pribilj LV LOCAL cProvPrE := gProp( ProvPrE ) // kod provodki na pribilj ES LOCAL cProvPrO := gProp( ProvPrO ) // kod provodki na pribilj OT LOCAL cProvPvn := gProp( ProvPvn ) // kod provodki Pvn [/pre2] синим цветом искажение, строки вставки справа за // разорвали последовательность 4х строк, образовав новые строки Такая правка в fedit.prg FUNCTION cb2Text( oEdit, nReg, lToText, s, lVert ) ... IF Chr(13) $ s s := Strtran( s, Chr(13), "" ) ENDIF lVert := lVert .or. oEdit:nPos > 1 IF lVert oEdit:Undo( oEdit:nLine, oEdit:nPos,,, UNDO_OP_START ) ... исправила ситуацию. Из Far так же правильно столбиком переносит.

SergKis: PS Правка небольшая lVert := lVert .or. ( oEdit:nPos > 1 .and. chr(10) $ s )

alkresin: Выделяю Far'ом вертикальный блок, вставляю в Akelpad и в Notepad3 (взял тексты из вашего примера) - и вставляется как обычный блок, не как вертикальный. Или я что-то не так понял? В предложенной вами правке есть та проблема, что любой многострочный блок будет вставляться как вертикальный, если он вставляется не с первой позиции, что в общем случае неправильно. Возможно, стоит еще посчитать количество символов в каждой строке блока - если оно одинаково, то считать блок вертикальным.

SergKis: alkresin пишет Выделяю Far'ом вертикальный блок, вставляю в Akelpad и в Notepad3 То же происходит и из hbedit в Akelpad и в Notepad3, а между Akelpad и Notepad3 и Notepad2 вставки вертикальных блоков происходят нормально, без эффекта как из Far. Сделанные мной изменения, работаю с того времени и решили проблему, для меня на все 100%, т.е. Если курсор в позиции > 1 - вставка вертикального блока от позиции курсора и ниже, даже если явзял не вертикальный блок, а блок строк, главное, нет искажения, типа с середины строки пошла первая строка вставки, а остальные прыгнули с первой позиции в след. строках, которые в большинсве случаев надо исправлять.

SergKis: PS И такая вставка в hbedit, текст, который правим, правильно происходит и из Far, из Akelpad и Notepad3

SergKis: PPS Т.к. уже ~70% работу делаю в hbedit, то перенос из hbedit в Akelpad, Notepad3 почти не актуален, обратный перенос работает как мне надо. В проектах подключен вызов 2х редакторов Akelpad и hbedi.t + hbedit в Far подключен на Alt+F4, на новой pc и на Enter. Родной Far редактор на F4 - привычка. Словом спасибо за hbedit !

SergKis: alkresin Можно добавить\разделить в палитру цвет режима readonly, т.е. на примере palette=solarized light тот фон на котором работаем отнести к режиму readonly, другой, более светлый, сделать фоном работы редактора ?

alkresin: SergKis пишет: Можно добавить\разделить в палитру цвет режима readonly, Т.е., добавить в ini опцию типа palette_ro=solarized dark ? Можно.

SergKis: alkresin пишет Т.е., добавить в ini опцию типа palette_ro=solarized dark Возможно так [pre2] [PALETTE_4] name=solarized light ; ReadOnly как было colors= #?????? #002B36, #073642, #586E75, #657B83, #839496, #93A1A1, #EEE8D5, #FDF6E3, #B58900, #CB4B16, #DC322F, #D33682, #6C71C4, #268BD2, #2AA198, #859900 ... [/pre2] т.е. опция как была name=solarized light, так и осталась, но при запуске hbedit.exe -ro ... цвет фона берется для указанного под ?????, в режиме edit как было или как вариант colorROnly=RB/B colormain=RB/B ...

SergKis: PS Т.е. делаем 17 palette цветов (берем всегда 16), только меняем цвет для фона при -ro из 1го элемента, иначе со 2го

alkresin: 17-й цвет добавить в палитру нельзя, не может быть в харборовской палитре больше 16 цветов, это ограничение gt-системы. Если мы определяем 17-й цвет - это значит, что мы добавляем новую палитру. По сути, это то, что я предлагал (palette_ro=solarized xxx ). Можно вместо этого в определение палитры в ini добавить, например, bgReadOnly=W т.е., цвет фона для ro режима меняем на W, но этот W - один из 16 цветов текущей палитры.

SergKis: alkresin пишет 17-й цвет добавить в палитру нельзя, не может быть в харборовской палитре больше 16 цветов ... т.е., цвет фона для ro режима меняем на W, но этот W - один из 16 цветов текущей палитры. Режим ReadOnly с цветом это повторный запуск hbedit и 17 цвет может быть, его как раз и использовать вместо фона режима Edit, т.е. харбору мы скармливаем всегда 16 цветов палитры, подменяя цвет фона. Режим ReadOnly в подокнах hbedit не меняет цвет фона. Т.е. работа как было. Смена цвета для ReadOnly только для др. запуска hbedit. Можно, конечно, дублировать полностью секции и запускать экз. hbedit для ReadOnly с новой секцией, но очень плодятся секции в ini

alkresin: SergKis пишет: Режим ReadOnly с цветом это повторный запуск hbedit и 17 цвет может быть, его как раз и использовать вместо фона режима Edit, ... Режим ReadOnly в подокнах hbedit не меняет цвет фона. Т.е., это все только для запуска с переключателем -ro? Вводить 17-й цвет в палитры, который будет использоваться только при определенном параметре командной строки? Это как-то странно, на мой взгляд. Тогда уж логичнее при запуске с -ro и -f задать - с другим ini-файлом, в котором будет определена спец.палитра.

SergKis: alkresin пишет Тогда уж логичнее при запуске с -ro и -f задать - с другим ini-файлом, в котором будет определена спец.палитра. Из за одного цвета фона, создавать отдельные ini или секции + доп. параметры запуска, по мне, это лишнее, но возможное.

SergKis: PS Хочу сделать поиск handle окна с именем загруженного файла в hbedit и если есть, запускать в режиме readonly и др.цветом Наличие др. ini или секций тут лишнее, т.к. ini могут быть относительными по отношению к проекту

alkresin: Выложен новый релиз HbEdit: http://www.kresin.ru/hbedit.html В него вошли разные мелкие исправления и дополнения, сделанные за прошедшее время. Сделано автодополнение - пока для Harbour и частично для C файлов. В hbedit.ini должен стоять 'autocomplete=on', можно также включить/выключить это через меню View. Работает это так: набираем пару или больше символов и жмем Tab - выскакивает список для выбора вариантов, если они есть. Для prg постоянная часть списка формируется из набора ключевых слов ( "FUNCTION", "RETURN", ... ) и списка функций в plugins/hb_funcs.txt. Дополнительная часть списка формируется из названий функций в текущем файле, статических переменных, #define и Memvar в начале файла, Local, Memvar, Static в текущей функции.

alkresin: Выложен новый релиз HbEdit: http://www.kresin.ru/hbedit.html Поправлено кое-что. В ini добавлена опция autodelay, она задает время в секундах (можно и нецелое - 0.8, например), после которого появляется список вариантов. Сейчас она закомментирована. Если ее раскомментировать, то для появления подсказки можно не жать Tab, а подождать заданное время.

alkresin: Кстати, в состав HbEdit включена маленькая библиотека - хотя это, наверное сильно сказано - скорее, модуль, написанный на С, который реализует prefixed tree (trie), структуру хранения строк, облегчающую их поиск. Здесь он используется для хранения ключевых слов, используемых в автодополнении, но может применяться и в других случаях, когда требуется хранилище строк с быстрым поиском.

Dima: alkresin Можно парочку примеров для понимания работы этой библиотеки ? Спасибо !

alkresin: Dima пишет: Можно парочку примеров для понимания работы этой библиотеки ? Ну например, [pre2] FUNCTION Main() LOCAL arr := { "FUNCTION", "PROCEDURE", "RETURN", "hb_FNameName", "hb_FNameDir", "hb_FNameExt" } LOCAL trie LOCAL i, iCou, cBuff ? "Start" trie := trie_Create() ? "Trie created" FOR i := 1 TO Len( arr ) ? i, arr[ i ] trie_Add( trie, arr[ i ] ) NEXT ? "-------------" // Проверяем, есть ли эти слова в хранилище ? trie_Exist( trie, "FUNCTION" ), trie_Exist( trie, "PROCEDURE" ), trie_Exist( trie, "RETURN" ), trie_Exist( trie, "hb_FNameName" ), trie_Exist( trie, "hb_FNameDir" ), trie_Exist( trie, "hb_FNameExt" ) ? trie_Exist( trie, "GONE" ) // Проверяем, сколько имеется слов с заданным префиксом ? trie_Count( trie, "hb_FNameDir" ), trie_Count( trie, "hb_FNam" ) // Выводим строку - список слов, разделенных \n с заданным префиксом cBuff := trie_List( trie, "hb_", @iCou ) ? iCou IF iCou > 0 ? cBuff ENDIF // Закрываем хэндл хранилища, освобождаем соответствующие ресурсы trie_Close( trie ) ? "End" RETURN Nil [/pre2]

alkresin: Квадратные скобки съедает почему-то, там должно быть в цикле arr и в квадратных скобках i

Dima: alkresin пишет: Квадратные скобки съедает почему-то Поправил ...... а писать в коде надо так [ i ]

alkresin: Спасибо. Боюсь, что все-равно забуду до следующего раза.

Dima: alkresin Есть тег ITALIC для строки [ i ][ /i ] (без пробелов разумеется) , так вот если в выложенном сырце встречается [ i ] (без пробелов) то движок форума это понимает как начало шрифта ITALIC

alkresin: Выложен новый релиз HbEdit: http://www.kresin.ru/hbedit.html Исправлена ошибка в модуле trie, которая иногда приводила к вылету программы.

SergKis: alkresin пишет Выложен новый релиз HbEdit Выделение верт. блока и вставка его в позицию больше 1, как и раньше, работает (вставляет) неправильно, я раньше писал об этом. Far делает эту операцию правильно.

SergKis: PS При работе с одним файлом (из одного места в другое) верт. блок вставка работает правильно, но между 2-мя запусками hbedit нет и если выйти из hbedit и перезапуститься, то блок из буфера так же будет вставлен неправильно.

alkresin: Т.е., проблема именно при работе с разными сеансами (копиями, запусками) редактора? Это понятно, ведь информация о том, что блок - вертикальный, хранится только во время сеанса. Я раскопал, как это делает Far. Он регистрирует новый формат Clipboard: Far_VerticalBlock_Unicode, в Winapi есть такая возможность, и сохраняет блок в этом формате, т.е. данные хранятся вместе с соответствующей пометкой в системном буфере Windows. Мне не хотелось бы идти по этому пути, т.к. он только для Windows, ну и возни много. Можно при копировании в буфер вертикального блока помещать перед текстом какой-нибудь непечатный символ, типа Chr(31). Тогда hbedit будет это дело обрабатывать правильно и между запусками, а в другие редакторы вертикальный блок попадет как обычный и с лишним символом. Может, это и нормально - вряд ли кто часто передает вертикальный блок между разными редакторами, да и удалить лишний символ нетрудно.

SergKis: alkresin пишет Может, это и нормально - вряд ли кто часто передает вертикальный блок между разными редакторами, да и удалить лишний символ нетрудно. Иметь в работе 3 Far с ассоциацией на запуск редакторов (F4 - родной, Alt+F4 - Akelpad, Enter - hbedit) вполне нормальная практика + прогр. ведения проекта с запуском hbedit. Для меня это нормальный процесс. Потому просил когда то и режим подсветки фона для readonly запуска, как доп. опция, а не полностью новая секция цветов. Сейчас для различия source и target prg сдвигаю один из hbedit, к примеру, в правый угол экрана. С akelpad и far этого делать не надо, т.к. цветовые гаммы разные. У себя решил проблему верт. блока (писал об этом ранее) добавкой строки (хотелось бы иметь текст оригинал без моих правок, иначе трудно вести свою версию с LV866 кодировкой)[pre2] FUNCTION cb2Text( oEdit, nReg, lToText, s, lVert ) ... IF Chr(13) $ s s := Strtran( s, Chr(13), "" ) ENDIF lVert := lVert .or. ( oEdit:nPos > 1 .and. chr(10) $ s ) IF lVert oEdit:Undo( oEdit:nLine, oEdit:nPos,,, UNDO_OP_START ) ... [/pre2] т.е. вставка не с 1ой позиции - это верт. блок вставка. Это работает правильно во всех случаях и с akelpad, far нет конфликта по переносу от них верт. блоков.

SergKis: PS Если делать вставку из буфера не с первой позиции, в вашей версии (разные запуски), будет искажение как для строк так и для верт. блока, т.е. по любому надо делать Ctrl+Z и мудрить как что делать, для строк перемещаться в 1ю позицию, для блока ... сейчас не работает, т.е не вставить

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

SergKis: alkresin пишет оно просто неверно. Не с 1-ой позиции можно вставлять и не вертикальный блок, в программном коде - реже, в обычном тексте - чаще. Не очень понимаю, что можно вставлять не 1-ой позиции ? Если во вставке есть chr(10) -> верт. блок, нет -> строка с позиции. Какие еще варианты ? Просто строки, так они сработают так же как и раньше, первая строка с позиции курсора, остальные вставятся с 1-ой позиции. Это обработка есть в команде lVert := lVert .or. ( oEdit:nPos > 1 .and. chr(10) $ s ) Если такое не катит, то лучше ничего не делать

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

SergKis: PS2 в Akelpad из Far верт. блок так же правильно переносится, т.е. если SergKis пишет то лучше ничего не делать Но осадочек остается

alkresin: Ладно, уговорили. Добавлю опцию в ini, которая разрешит подобное поведение.

alkresin: Выложен новый релиз hbedit - v2.0-17, http://www.kresin.ru/hbedit.html. В ini добавлена опция autovertical. Если ее раскомментировать и установить в On, то при вставке многострочного блоке не в первой позиции строки он будет рассматриваться как вертикальный. Эту опцию можно включить/отключить во время работы в меню View. Расширена база слов для автодополнения для Harbour и С: теперь туда включаются и все вызовы функций, найденные в редактируемом файле. Расширена база слов для автодополнения для Golang: теперь туда включаются методы и типы из импортируемых пакетов. Кроме того, для Golang - файлов теперь доступна помощь по пакетам и их функциям (Alt-I, как и для Harbour).

SergKis: alkresin У меня остался вопрос, как из OnKey вызвать работу скрипта конкретного plugins и списка по Alt+L ? У меня есть свои события для работы в ф-ии обработчике[pre2] STATIC FUNCTION EdOnKey( o, n ) LOCAL m := n, b, i, j, k LOCAL s := hb_BitAnd( n, SHIFT_PRESSED ) != 0 LOCAL a := hb_BitAnd( n, ALT_PRESSED ) != 0 LOCAL c := hb_BitAnd( n, CTRL_PRESSED ) != 0 LOCAL p := hb_keyStd( n ) LOCAL r := -1 // ToLog(.T., n, s, a, c, p) IF p == K_F1 // help RETURN r ELSEIF p == K_F8 // colored syntaxis enabled\disabled bkDir( o, n, '*.prg' ) RETURN r ELSEIF p == K_F10 // exit RETURN r ELSEIF p == K_ALT_X // close all n := 30110 ENDIF // мои события b := hb_HGetDef( h_Key, n, Nil ) If b != Nil If HB_ISBLOCK( b ) .and. ( k := EVal( b, o, n ) ) != Nil n := k Else n := b EndIf EndIf RETURN n // Список событий STATIC FUNCTION h_KeyInit() h_Key := { ; 1004 => {| | Nil }, ; // K_RBUTTONDOWN 30001 => {| | hb_keyPut( {K_RIGHT, K_LEFT} ) }, ; // 30101 => {| | edi_KeyCToN( "Shift-F4" ) }, ; // New file 30102 => {| | edi_KeyCToN( "Ctrl-F4" ) }, ; // Open file 30103 => {| | edi_KeyCToN( "F2" ) }, ; // Save 30104 => {| | edi_KeyCToN( "Shift-F4" ) }, ; // Save as 30105 => {| | edi_KeyCToN( "Shift-F8" ) }, ; // Code page 30109 => {| | edi_KeyCToN( "F9" ) }, ; // F9-Menu 30110 => {|o,n| Window_OnKey(o, n) }, ; // Close all window Alt+X 30201 => {| | edi_KeyCToN( "F7" ) }, ; // Find... 30202 => {| | edi_KeyCToN( "Shift-F7" ) }, ; // Find Next 30203 => {| | edi_KeyCToN( "Alt-F7" ) }, ; // Find Prev 30204 => {| | edi_KeyCToN( "Ctrl-F7" ) }, ; // Replace... 30205 => {| | edi_KeyCToN( "Alt-F8" ) }, ; // Goto... 30206 => {| | edi_KeyCToN( "Alt-B" ) }, ; // Goto the previous position 30207 => {| | edi_KeyCToN( "Alt-L" ) }, ; // Function list 30301 => {| | edi_KeyCToN( "F12" ) }, ; // List of open files 30302 => {|o,n| Window_OnKey(o, n) }, ; // Split window horizontally 30303 => {|o,n| Window_OnKey(o, n) }, ; // Split window vertically 30304 => {|o,n| Window_OnKey(o, n) }, ; // Switch window 30305 => {|o,n| Window_OnKey(o, n) }, ; // Open window fully 30306 => {|o,n| Window_OnKey(o, n) }, ; // Close window 30999 => {| | (-1) } ; // dummy } // 30110 => {|o,n| Window_CloseAll(o, n) }, ; // Close all window Alt+X RETURN Nil ... [/pre2] Выделенное цветом не работает, т.к. у вас работа плагина инициируется до ::OnKey()

alkresin: А edi_RunPlugin( oEdit, xPlugin ) не пробовали? Здесь xPlugin - номер плагина в списке или его имя.

SergKis: alkresin пишет А edi_RunPlugin( oEdit, xPlugin ) не пробовали? Спасибо, попробую

SergKis: alkresin пишет А edi_RunPlugin( oEdit, xPlugin ) не пробовали? Здесь xPlugin - номер плагина в списке или его имя. Работает, но надо обвешивать кодом от расширения загруженных файлов Сделал так[pre2] CLASS TEdit ... DATA nKeyExt INIT 0 ... METHOD Edit() CLASS TEdit ... DO WHILE ::lShow SetCursor( Iif( ::lIns, SC_NORMAL, SC_SPECIAL1 ) ) IF Empty( ::nKeyExt ) nKeyExt := Inkey( 0, HB_INKEY_ALL + HB_INKEY_EXT ) ELSE nKeyExt := ::nKeyExt ::nKeyExt := 0 ENDIF IF !Empty( hKeyMap ) .AND. !Empty( i := hb_hGetDef( hKeyMap, nKeyExt, 0 ) ) ... Тогда в своем боке кода делаю так, для работы ваших обработчиков STATIC FUNCTION h_KeyInit() h_Key := { ; 1004 => {| | Nil }, ; // K_RBUTTONDOWN 30001 => {| | hb_keyPut( {K_RIGHT, K_LEFT} ) }, ; // ... 30207 => {|o | o:nKeyExt := edi_KeyCToN( "Alt-L"), -1 }, ; // Function list ... 30999 => {| | (-1) } ; // dummy } ... [/pre2]

SergKis: alkresin Попытался собрать последнюю версию, получил[pre2] .\cfuncs.c(321) : warning C4996: 'freopen': This function or variable may be unsafe. Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. C:\BK32\MSVC\include\stdio.h(252): см. объявление 'freopen' c:\bk32\test\hbedit-master\source\trie.h(15) : error C2011: trieITEM: переопределение типа "struct" c:\bk32\test\hbedit-master\source\trie.h(15): см. объявление 'trieITEM' c:\bk32\test\hbedit-master\source\trie.h(25) : error C2011: trieBASE: переопределение типа "struct" c:\bk32\test\hbedit-master\source\trie.h(25): см. объявление 'trieBASE' [/pre2] Как с этим бороться ? А можно ли вкл. trie технику в сборку по переменной. Я в VO не пользовался, считал лишним, мешающим работе и мнение не поменялось (это нужно в незнакомом языке)

alkresin: Пока даже не знаю, что и сказать. Это обычная конструкция, она и в Harbour во многих местах. У меня без проблем компилится и с bcc и с gcc под Линукс. А можно ли вкл. trie технику в сборку по переменной. Ну это, наверное, неправильный подход к решению проблемы. Надо выяснить, в чем причина. Может, хоть это и диковато звучит, MSVS хочет, чтобы в typedef struct XXXX это XXXX было обязательно в верхнем регистре или начиналось с знака подчеркивания. Я в VO не пользовался, считал лишним, мешающим работе и мнение не поменялось (это нужно в незнакомом языке) По мне, автодополнение - чтоб по клавишам меньше бить. Меня, например, достало FUNCTION и RETURN целиком набивать)

SergKis: alkresin пишет Может, хоть это и диковато звучит, MSVS хочет, чтобы в typedef struct XXXX это XXXX было обязательно в верхнем регистре или начиналось с знака подчеркивания. Не помогло. Сообщение[pre2] c:\bk32\test\hbedit-master\source\trie.h(15) : error C2011: TRIEITEM: переопределение типа "struct" c:\bk32\test\hbedit-master\source\trie.h(15): см. объявление 'TRIEITEM' c:\bk32\test\hbedit-master\source\trie.h(25) : error C2011: TRIEBASE: переопределение типа "struct" c:\bk32\test\hbedit-master\source\trie.h(25): см. объявление 'TRIEBASE' [/pre2] MSVC208. Подключаю к сборке через prg файл[pre2] trie.prg #pragma BEGINDUMP #include "trie.c" #pragma ENDDUMP hbtrie.prg #pragma BEGINDUMP #include "hbtrie.c" #pragma ENDDUMP trie.h ... typedef struct TRIEITEM { char letter; struct TRIEITEM * right; struct TRIEITEM * next; char suffix[SUFFIX_LEN]; } TRIEITEM; typedef TRIEITEM TRIEPAGE[TRIE_PAGE_SIZE]; typedef struct TRIEBASE { //struct trieITEM ** [TRIE_PAGE_SIZE] pages; TRIEPAGE ** pages; int iPages; int iLastPage; int iLastItem; unsigned int iWords; int bUtf8; int bCase; } TRIE; ... [/pre2] Меня, например, достало FUNCTION и RETURN целиком набивать Посмотрел работу на вышей версии. При выборе по trie (клавиша TAB) менять надо все слово с первой позиции, иначе получаются funCTION retURN, для ф-ий также вместо MyGotFocus( получаем mygotFocus( и т.д. В список показа так же получается с искажением, т.е. Если берем по 2м буквам my... получаем myBrw1( myBrw2( ... Если берем по 3м буквам myb... получаем mybrw1( mybrw2( ... Функции набраны реально MyBrw1( MyBrw2( ... По мне, автодополнение - чтоб по клавишам меньше бить Это дело привычки. Еси работать событиями, то исп. имени ф-ии где то 2а раза 1. тело самой ф-ии 2. ф-я в событии, т.е. написав тело, переносим имя в событие (Ctrl+C, Ctlr+V) и далее исп. только событие Alt+L и потом Alt+B так же помогают в вопросе имен, Far на ваш файл hb_funcs.txt (или сайт) так же решают прав. написание имен Альтернатива есть для trie

SergKis: PS Если работать в классе, к примеру TEdit, то ::writ + TAB не работает, а writ + TAB дает writeTopPane( надо :: отдельно добавлять, что не есть удобно.

SergKis: SergKis пишет А можно ли вкл. trie технику в сборку по переменной Наверно, включать в hbedit trie надо через plugins, как и предусмотрено схемой работы, т.е. редактор сам по себе, а дополнения через plugins. Не подключил плагин и нет trie, подключил, есть. Разборка со struct в C будет, если понадобится trie.

alkresin: SergKis пишет: trie.prg #pragma BEGINDUMP #include "trie.c" #pragma ENDDUMP hbtrie.prg #pragma BEGINDUMP #include "hbtrie.c" #pragma ENDDUMP Вот тут, наверное, и причина. У вас дважды грузится trie.h, и на второй раз компилятор ругается, что trieITEM уже определен. Или собирайте нормальным способом, или добавьте в trie.h в самом начале #ifndef _TRIE_API #define _TIE_API и в конце: #endif чтобы предотвратить повторную компиляцию того, что между этими строками. P.S. Я тут приболел, похоже на корону.

alkresin: SergKis пишет: Наверно, включать в hbedit trie надо через plugins C-вставки не компилятся в hrb, там только p-cod.

SergKis: alkresin пишет чтобы предотвратить повторную компиляцию того, что между этими строками. Сделал в hbtrie.c //#include "trie.h" и trie.prg[pre2] #pragma BEGINDUMP #include "trie.c" #include "hbtrie.c" #pragma ENDDUMP [/pre2] Собрался hbedit.exe. Спасибо и выздоравливайте

SergKis: alkresin пишет C-вставки не компилятся в hrb, там только p-cod. Поступать как с языками, trie -> lib и request при использовании trie. Тогда можно иметь сборку "чистый" редактор

alkresin: Выложен новый релиз hbedit: v2.0-49, http://www.kresin.ru/hbedit.html. Кое-какие исправления, в т.ч. порядок смены окон по Ctrl-Tab, Shift-Tab при наличии дочерних окон, работа Alt-B (переход на предыдущую позицию). Добавлена поддержка lisp-синтаксиса и простенький lisp-интерпретатор. В hbedit.ini в языковые секции добавлена опция 'quotes', определяющая допустимые виды кавычек в языке, если они отличаются от стандартных. Для prg-файлов добавлена возможность перехода между ключевыми словами конструкций ( IF...ENDIF, FOR...NEXT, DO WHILE...ENDDO, SWITCH...ENDCASE ) по Ctrl-b (реализовано в плагине plug_prg_init).

alkresin: Выложил новый релиз hbedit: v2.1-1 Частично переписан модуль подсветки синтаксиса - кое-что переведено на С. Благодаря этому на больших файлах заметно существенное ускорение прорисовки (у меня есть большие fb2 - там была начальная задержка в несколько секунд, теперь ее практически нет). Мелкие исправления, уже не помню какие. Добавлена пара новых плагинов - игры life и шахматы. Выложена Linux-версия, собранная с GTHWG. Windows версию с GTHWG не выкладывал, т.к. она не имеет особых преимуществ.

alkresin: Выложил новый релиз hbedit: v2.1-11 Важные исправления в модуле подсветки синтаксиса. Исправления в плагине для golang (plug_go_run). Добавлена поддержка Java, в т.ч. плагин со списком функций, компиляцией и запуском на исполнение.

alkresin: Выложил новый релиз hbedit: v2.1-18 Модифицированы диалоги выбора и сохранения файла. Добавлены init-плагины для .bat и .sh файлов с запуском на выполнение, добавлена подсветка .sh файлов. Добавлена поддержка для многострочных комментариев как в Питоне (""" ... """) - раньше это отображалось как кавычки.

alkresin: Выложил новый релиз hbedit: v2.1-36 Исправлены некоторые ошибки. Добавлен плагин для создания и сопровождения андроид-проектов, в первую очередь - с HDroidGUI

SergKis: alkresin В методе [pre2] METHOD ToString( cEol, cp ) CLASS TEdit ... IF cp != Nil .AND. !( cp == ::cp ) s += hb_strToUtf8( Iif( ::lTabs, Strtran(::aText[ i ],cTabStr,cTab), ::aText[ i ] ), ::cp ) + cEol ELSE s += Iif( ::lTabs, Strtran(::aText[ i ],cTabStr,cTab), ::aText[ i ] ) + cEol ENDIF ... [/pre2] заложено искажение данных при tabtospaces=On, т.к. не зависимо были на входе chr(9) или нет, при сохранении произойдет замена пробелов на chr(9). Работа без chr(9) в текстах, но если он был, то заменился на входе, а надо и сохранять так же, как работали внутри. Заменяю в местах, отмеченных цветом, на LOCAL lTabs := .F. вместо ::lTabs, но ... Может режим в ini ?

alkresin: SergKis пишет: заложено искажение данных при tabtospaces=On, т.к. не зависимо были на входе chr(9) или нет, при сохранении произойдет замена пробелов на chr(9). ::lTabs устанавливается только если включен tabtospaces=On и символы табуляции уже имеются в тексте: [pre]METHOD SetText( cText, cFileName ) CLASS TEdit ... LOCAL lT2Sp := hb_hGetDef( TEdit():options,"tabtospaces", .F. ) ... IF lT2Sp .AND. cTab $ ::aText ::aText := Strtran( ::aText, cTab, cTabStr ) ::lTabs := .T.[/pre] Так что искажения данных не должно быть.

SergKis: alkresin пишет ::lTabs устанавливается только если включен tabtospaces=On и символы табуляции уже имеются в тексте: Ситуация такая, что на выходе НЕ ДОЛЖНО быть TAB, даже если они были на входе, т.е. беру тексты с TAB, правлю их и надо сохранять без TAB с установкой trimspaces=on и tabtospaces=On. Так что искажения данных не должно быть. Искажения происходят, т.к. на входе был TAB (::lTabs == .T.), а на выходе не надо TAB. Если брать текст др. редактором (TAB замена на пробелы исп. другие числа 4,8,... ) выглядит все кривовато

alkresin: Да, пожалуй, вы правы. Переделаю этот момент.

SergKis: alkresin пишет 13/10/2022 - Вышел новый релиз HbEdit. Что нового, какие изменения ? Нет файла change.log и трудно понимание новой версии

alkresin: В основном - мелкие правки, накопившиеся за истекшее время. Я их и не помню. Последняя - исправлена проблема с кодировкой при операциях с Clipboard в hbedit, собранном под Линукс и gthwg. Ну и добавлены новые плагины, игры Уголки и Судоку.

alkresin: Выложил очередную версию. Небольшие исправления. В режиме редактирования добавлены команды Alt-3, Alt-8 - аналоги Vim-команд # и * - поиск, соответственно, предыдущего и следующего вхождения слова, на котором стоит курсор. Очень удобная, кстати, вещь, я часто пользуюсь.

alkresin: Вышел очередной релиз - 2.2-8 Основное новшество - добавлен интегрированный модуль hbCommander - менеджер файлов. Его окно открывается или из меню, или, в том случае, если в редакторе открыто только одно - при старте, например, по Ctrl-Tab. Настройки - в hbc.ini F1 - help, F9 - меню Этот HbCommander я сделал для себя лет 7 назад для того, чтобы работать с файлами на сервере через netio. Расшаривать папки на серверах я не хотел - чтобы вирусы, в случае чего, не распространялись через них, ну и вообще, для большей безопасности.

alkresin: Обновил бинарники для Windows, v2.2-13 Переписал подсистему реализации консоли под Windows- теперь она работает гораздо лучше, почти как надо. Кстати, окно консоли доступно в HbCommander, как и в других коммандерах, по Ctrl-O. Все, что было выведено в консоль, можно потом посмотреть в специальном окне редактора, доступном из меню Stdout window.

alkresin: Выпустил новую версию, v2.2-26 Основные изменения - в файловом менеджере. Добавлена поддержка zip-архивов, расширена функциональность некоторых операций. В общем, приближается по возможностям к таким столпам индустрии, как Far)

alkresin: Еще обновление: v2.2-33 Изменения в файловом менеджере: исправления, изменения в меню, переписана подсистема реализации консоли под Linux.

alkresin: В консоли теперь можно запускать интерактивные приложения, например, питон ( python -i ), или даже gpt4all-lora-quantized-win64.exe. Удобно то, что, выбрав пункт меню Stdout window, который появляется после использования консоли, мы получаем консольный вывод в окне редактора, откуда его можно сохранить или скопипастить. С некоторыми консольными приложениями это, увы, не удается - например, с написанными на Harbour, если только вывод там не сделан через outStd(), потому что ввод/вывод реализован не через стандартные stdin/stdout.

alkresin: Новое обновление, v2.2-47 Небольшие исправления и улучшения. В том числе, из того, что помню сейчас: консоль по Ctrl-O можно открывать прямо из редактора, из консоли можно использовать Ctrl-Tab, Shift-Tab для переключения в окна редактора, Ctrl-Q - для показа Stdout window.

alkresin: Новое обновление, v2.2-63 Всякие исправления и улучшения в менеджере файлов

Vlad04: https://postimg.cc/PvqQrwS1 Ошибка при выборе по F4 файла

alkresin: Это вы, наверное, на [D] нажали - при пустой истории, действительно, вылетает ошибка. Спасибо, исправил. А вообще при нажатии в этом диалоге на [D] (можно Ctrl-D) выводится список каталогов, в которых были редактированные файлы (берется из истории, hbedit.his) - для ускорения поиска того, что нужно.

alkresin: Вышла версия v2.3. Помимо исправлений и улучшений в файловом менеджере добавлена поддержка libssh2 - а, значит, возможность связываться с серверами по sftp. Собирать hbedit можно как с поддержкой libssh2 ( bld_gcc_ssh.bat, bld_edit_hwg_ssh.sh ), так и без нее. Бинарники под Windows у меня на сайте - http://www.kresin.ru/hbedit.html - с поддержкой. Для тестирования можно использовать test.rebex.net - соответствующая строчка включена в hbc.ini и доступна по Alt-D. В числе прочих улучшений - история команд, help и меню в консоли, автодополнение в консоли, ... Описания разных возможностей редактора и файлового менеджера планирую выкладывать время от времени в заметках на сайте.

alkresin: Выложена новая версия, v2.3-22. Всякие исправления и улучшения в HbCommander. Сделан доступ к ftp-серверам, это оформлено в виде плагина plug_hbc_ftp.prg. Я его сделал на основе прямых вызовов hb_inet... функций. Можно было бы и через curl по той же общей схеме реализации плагина, но в этом случае пришлось бы заново коннектиться к серверу каждый раз при смене каталога или загрузки/выгрузки файла. Ничего страшного, конечно, но...

alkresin: Краткое описание текущего состояния HbCommander на текущий момент, скопировано из заметок. Итак, HbCommander - двухпанельный файловый менеджер а ля Far, встроенный в текстовый редактор HbEdit. Хотя, что во что встроено - это довольно спорный вопрос). В HbCommander'е реализован набор стандартных функций для такого класса программ: копирование файлов и каталогов, перемещение, переименование, удаление, просмотр и редактирование файлов, поиск файлов по названию и по содержанию. С помощью меню и горячих клавиш реализована удобная навигация между каталогами - это и список предопределенных каталогов, установленный в hbc.ini, и список каталогов, где были последние редактируемые файлы, а также возможность установки закладок на каталоги. Полный список горячих клавиш доступен по F1. Реализована также поддержка zip-архивов. В HbCommander, помимо навигации по локальным каталогам и файлам, обеспечен доступ к удаленным ресурсам по sftp и ftp протоколам, а также по netio (Harbour-программисты знают, что это такое). Есть также немного ограниченная поддержка консоли, подробнее см. в HbCommander: Консоль. HbCommander поддерживает плагины, написанные на Harbour. Это позволяет автоматизировать ряд действий над файлами. Так, например, уже готовый плагин plug_hbc_latin осуществляет преобразование имен файлов из кириллицы в латиницу - текущего файла, отмеченных файлов или всех файлов в каталоге. Доступ по ftp тоже реализован в виде плагина plug_hbc_ftp. По такой же схеме можно реализовать, например, плагины для разных типов архивов. Еще один готовый плагин, plug_hbc_menu, расширяет контекстное меню, добавляя туда команды для git, fossil, компиляции. Вы можете дописать этот плагин пол свои нужды. Удобство Harbour как языка для плагинов в том, что они не требуют наличия компилятора. Harbour-код компилируется прямо из редактора (HbEdit) с помощью встроенного компилятора. Ну и еще следует отметить, что HbCommander, как и HbEdit, кросс-платформенное приложение, выглядит и работает одинаково под Windows и Linux. Для тех, кто, как и я, регулярно работает на обех платформах, это может быть особенно удобно. Настройки программы осуществляются прямым редактированием файла hbc.ini. Выбор палитры, цветов, действий над файлами по Ctrl-F3, Ctrl-F4, список предопределенных каталогов и удаленных компьютеров для быстрого доступа, список программ для быстрого запуска, список плагинов - все там. В заключение - набор "killer features" - особенностей, которые отсутствуют в других аналогичных программах и могут подтолкнуть вас к использованию HbCommander: - доступ к удаленным компьютерам по netio; - удаленное выполнение команд на sftp серверах; - возможность написания и простой компиляции плагинов на Harbour; - закладки на каталоги; - окно Stdout, где собирается консольный вывод, который можно просмотреть целиком, сохранить и/или скопировать из него нужные фрагменты; - кроссплатформенность.

SergKis: alkresin Попытка запустить версию для windows выдает "... libgcc_s_dw2-1.dll was not found"

alkresin: Хм... Я и не знал, что она требуется. Оказывается, есть такая в каталоге bin от Mingw. Надо будет включить ее в дистрибутив

Dima: Если запускать как есть , у меня выпало вот так

alkresin: Мда... Эта libssh2 много за собой потянула.

alkresin: Но, если что, hbedit можно по-прежнему собрать и без поддержки ssh2. Собственно, все старые bat'ники, sh, hbp собирают без ssh2, только bld_gcc_ssh.bat и bld_edit_hwg_ssh.sh - с ssh2

Dima: Александр , почему бы в архив не вложить нужные DLL ? http://www.kresin.ru/down/hbedit_20230525.zip

alkresin: Да я так и сделаю. В понедельник.

Dima:

alkresin: Выложил очередную версию, v2.23-31 В Windows-дистрибутиве все нужные dll. Кое-какие исправления, в HbCommander добавлены 2 плагина - сравнение файлов и сравнение каталогов

alkresin: Выложил v2.23-34 Некоторые важные исправления, доработан плагин сравнения каталогов.

alkresin: v2.23-37 Всякие "улучшизмы" в sftp и ftp.



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