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

Hbedit - текстовый редактор (продолжение)

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

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

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 - вставка вертикального блока от позиции курсора и ниже, даже если явзял не вертикальный блок, а блок строк, главное, нет искажения, типа с середины строки пошла первая строка вставки, а остальные прыгнули с первой позиции в след. строках, которые в большинсве случаев надо исправлять.



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