Page 1 of 2

Релиз AkelPad 4.8.3

Posted: Thu May 09, 2013 7:19 am
by Instructor
С днем Великой Победы! Вечная слава Героям!


Добавлено: возможность задать кодировку для нового файла.
Добавлено: ручной параметр "UrlCommand" - определяет команду для запуска при клике по гиперссылке.

Исправлено: не срабатывало перетаскивание текста в некоторые программы.
Исправлено: восстановление типа новой строки из буфера отмены.
Исправлено: группирование элементов в шаблоне регулярных выражений.
Исправлено: подхватывание текста, при уже открытом диалоге поиска/замены, не восстанавливало пункт "С начала".


<<Скачать>>

Posted: Fri May 10, 2013 3:34 pm
by Andrey_A_A
Спасибо за новую версию.

Здесь viewtopic.php?p=21580#p21580 было написано:
В 4.8.3 можно будет назначать команду для запуска при клике по гиперссылке. Т.е. можно вызвать скрипт, а скрипт уже определяет, что со ссылкой делать.
Появилась ли такая возможность?
Если да, то можно примеры использования.

Posted: Fri May 10, 2013 3:45 pm
by opk44
Andrey_A_A wrote:Появилась ли такая возможность?
Если да, то можно примеры использования.
1. Смотрим первый пост: "Добавлено: ручной параметр "UrlCommand..."
2. Смотрим Главное меню -> Справка -> Руководство (или [/Plugins/exe/AkelFiles/Docs/AkelHelp-Rus.htm]) раздел "Ручные установки". Последним в таблице идет "UrlCommand" и, что характерно, с примером использования. Вот, как-то так. :wink:

Posted: Fri May 10, 2013 3:52 pm
by Andrey_A_A
opk44 wrote:
Andrey_A_A wrote:Появилась ли такая возможность?
Если да, то можно примеры использования.
1. Смотрим первый пост:
Всё это просмотрено - поэтому и возник вопрос.
Мне не нужно открывать ссылку каким-либо браузером - это у меня решено скриптами ещё год назад.

А вопрос был в этом
Andrey_A_A wrote:Работая с большими документами возникла такая мысль: можно ли сделать в AkelPad внутренний формат ссылок. К примеру в начале документа стоит типа _#1_ и в документе в нужном месте _#1_
и отображается на подобе сылки (может другим цветом) и по нажатию переходит к ней.
Мне нужен пример внутренних ссылок, чтобы перемещаться внутри документа, а не браузера.

Posted: Fri May 10, 2013 5:08 pm
by Instructor
Andrey_A_A
- При клике по ссылке с префиксом "goto:" осуществляется поиск текста в документе. Префикс goto: необходимо добавить в настройках программы на вкладке "Редактор 2".
- При клике по ссылке с клавишей Ctrl вызывается FireFox из указанного места.
- При обычном клике без клавиши Ctrl, открывается ссылка браузером по умолчанию.
AkelPad.ini wrote:UrlCommand=Call("Scripts::Main", 1, "UrlCommand.js", "%u")

Code: Select all

var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var pArgLine=AkelPad.GetArgLine();

if (pArgLine.substr(0, 5).toUpperCase() == "GOTO:")
{
  AkelPad.TextFind(0, pArgLine.substr(5), 0x08000001 /*FRF_DOWN|FRF_CYCLESEARCH*/);
}
else
{
  if (oSys.Call("user32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000)
    AkelPad.Exec(""C:\\Program Files\\Mozilla Firefox\\firefox.exe" " + pArgLine);
  else
    oSys.Call("shell32::ShellExecute" + _TCHAR, hMainWnd, "open", pArgLine, 0, 0, 1 /*SW_SHOWNORMAL*/);
}


Пример текста:

Code: Select all

abc _#1_ def

abc goto:_#1_ def

Posted: Fri May 10, 2013 5:30 pm
by Andrey_A_A
Instructor wrote:Andrey_A_A
- При клике по ссылке с префиксом "goto:" осуществляется поиск текста в документе. Префикс goto: необходимо добавить в настройках программы...
Отлично, теперь всё понятно! Спасибо!

Posted: Thu May 16, 2013 9:02 am
by [Yustas.NeO]
А если:

Code: Select all

abc goto:_#1_ def
abc _#1_ def
То "прыгает" на саму себя.


Я пока решил вот так:

Code: Select all

AkelPad.TextFind(0, "#" + pArgLine.substr(5), 0x00200001 /*FRF_DOWN|FRF_BEGINNING*/);

Code: Select all

goto:test
#test
но может у кого есть идеи более элегантного решения?

Posted: Thu May 16, 2013 10:02 am
by Andrey_A_A
но может у кого есть идеи более элегантного решения?
Для сборки написал такой вариант

Code: Select all

' GotoMarkOrOpenUrl.vbs
'=======================   Описание   ======================================
' Переход по внутренним ссылкам документа или открытие ссылки в браузере
'=======================   Дополнение   ====================================
' с версии AkelPad 4.8.3. можно использовать внутренние ссылки в документе и осуществлять навигацию
' что для этого нужно сделать:
' 1. В настройках программы на вкладке "Редактор 2 в "Префиксы" добавьте goto:
' 2. В AkelPad.ini в секции [Options] пропишите UrlCommand=Call("Scripts::Main", 1, "GotoMarkOrOpenUrl.vbs", "%u")
' 3. В документе создайте внутреннюие ссылки в документе, к примеру goto:##1 в начале и в середине
' Так же можно настроить вызов обычной ссылки любым браузером
'===========================================================================
' используется Functions.vbs, FunctionsINITextRWS.vbs который следует положить в ...AkelFiles\Plugs\Scripts\Include\

' Автор:           Аверин Андрей
' Версия:          1.0 (10.05.2013)
' Mail:            Averin-And@yandex.ru
' Site:            http://tc-image.3dn.ru/forum/9-846-6211-16-1368213090
'====================   Изменяемые пути   ==================================
With AkelPad
  .Include "Functions.vbs"
  URL = .GetArgLine()
  aT=Split(URL, ":")
  Select Case aT(0)
    Case "goto" EndLine : .TextFind 0, aT(1), &H00000001+&H08000000 : EndLine
    Case Else
      .Include "FunctionsINITextRWS.vbs"
      Program = GetPath(ReadINIText(.ReadFile(.GetAkelDir(0) & "\AkelPadImage.ini", 1), "Browser", "BrowserDefault"))
      If Len(Program) > 7 Then
        Pro = GetPathProcessName(Replace(GetOtherObjectFile(Program, 3), "Portable", ""))
        If Len(Pro) > 0 Then Program = Pro
        CreateObject("WScript.Shell").Run Chr(34) & Program & Chr(34) & Chr(32) & Chr(34) & URL & Chr(34)
      Else
        If .IsOldWindows() Then TCHAR = "A" Else TCHAR = "W" End If
       Call .SystemFunction().Call("shell32::ShellExecute" + TCHAR, .GetEditWnd(), "open", URL, 0, 0, 1)
      End If
  End Select
End With
Sub EndLine : E = PosEndLine : AkelPad.SetSel E,E : End Sub

Posted: Fri May 17, 2013 2:05 pm
by FeyFre
Буду просить фичу:
Увеличить число запоминаемых последних файлов на пару порядков. Настройка позволяет задать не более 999, а мне понадобилось пересмотреть глазами ~2500 текстовых файлов. В итоге история редактирования текстовых файлов годичной давности благополучно канула в Лету, что есть плохо.

Posted: Fri May 17, 2013 5:46 pm
by opk44
FeyFre wrote:история редактирования ... канула в Лету
Можно попробовать спасти. Создать текущую точку восстановления (1). Затем откатиться на точку восстановления "до того как". Слазать в реестр и экспортировать в файл ветку [HKEY_CURRENT_USER\Software\Akelsoft\AkelPad\Recent]. Затем снова откатиться на точку (1) и подпихнуть экспортированный reg-файл. Телодвижений только многовато с этой "машиной времени", но должно сработать. Или можно поискать/посмотреть сторонний софт чтения файлов реестра, тогда можно будет без откатов обойтись. Правда тут уже ничего конкретного посоветовать не могу. Работал с каким-то DOS-подобным редактором, но уж очень там ограниченно все (в наборе Win_XPE есть хорошее средство работы с удаленным реестром, но вроде бы только с "живым", а с Hiren я не работал).

Posted: Fri May 17, 2013 6:23 pm
by VladSh
FeyFre wrote:на пару порядков
Это в примерно 100 раз.

Posted: Fri May 17, 2013 6:42 pm
by FeyFre
Речь об восстановлении не идет. Точки восстановления не делаю по традиции с очень давних пор. Но суть не в этом, суть в том что нужно много истории. Действительно много.

Posted: Fri May 17, 2013 7:27 pm
by opk44
FeyFre wrote:не делаю по традиции с очень давних пор
:shock: Как говорил товарищ Пешков "безумству храбрых поём мы песню"... Но, хозяин-барин.

Появилась реплика не по сути вопроса. Вот у меня выбрана опция "сохранять настройки в INI", но все равно часть настроек хранится в реестре. Цель использования реестра как удобного хранилища вполне понятна - он как бы именно для того MS-ом и создавался. И все же хотелось бы "настоящей портабельности", а не частичной. К тому редактирование реестра, как правило, запрещено для не-Администратора компьютера, так что не все могут при случае туда слазать ("если что").

Posted: Sat May 18, 2013 6:35 pm
by private_joker
opk44 wrote:Вот у меня выбрана опция "сохранять настройки в INI", но все равно часть настроек хранится в реестре. Цель использования реестра как удобного хранилища вполне понятна - он как бы именно для того MS-ом и создавался. И все же хотелось бы "настоящей портабельности", а не частичной.
Заикался об этом (хранение истории не в реестре) три года назад. Заметил или нет хз, но как сказал сам Instructor "Не считаю нужным отвечать на пожелания." Значит знает, думает, помнит :lol:

Висит на открытии XML-файла

Posted: Tue May 21, 2013 3:04 pm
by FeyFre
Такая вот штука.
Есть XML-файл. Размер 2.5MiB. В лучших традициях машинно-генерированных XML-файлов он состоит из 2-х строк:
первая, стандартный XML-пролог - <?xml
вторая, собственно сам документ(весь).
Плагин сессий включен. Открыто пару документов, в т.ч. и этот. Т.е. при запуске АР вспоминаются документы(не важно какой из документов был активен при закрытии), всё норм.
Но если вдруг я откываю АР с этим файлом в качестве аргумента (по F4 Total Commander) - висяк. АР жрет весь процессор, ни на что не отвечает, и т.п. Крутится в процедуре AE_StackPointInsert(akeledit.c), в пределах адрессов цикла for(строки 6800-6806).(сборкам по архиву исходников 4.8.3 скачанному 5 минут назад) Стек вызовов предоставляю. Настройки тутечкы.

Code: Select all

>	NotePad.exe!AE_StackPointInsert(_AKELEDIT * ae=0x00b83088, _AECHARINDEX * ciPoint=0x040e3808)  Line 6802 + 0x3 bytes	C
 	NotePad.exe!AE_StackFoldInsert(_AKELEDIT * ae=0x00b83088, const _AEFOLD * lpFold=0x01d683e8)  Line 6088 + 0xf bytes	C
 	NotePad.exe!AE_EditProc(_AKELEDIT * ae=0x00b83088, unsigned int uMsg=3407, unsigned int wParam=0, long lParam=1240520)  Line 1960 + 0x9 bytes	C
 	NotePad.exe!AE_EditShellProc(HWND__ * hWnd=0x007d086a, unsigned int uMsg=3407, unsigned int wParam=0, long lParam=1240520)  Line 360 + 0xd bytes	C
 	user32.dll!_InternalCallWinProc@20()  + 0x28 bytes	
 	user32.dll!_UserCallWinProcCheckWow@32()  + 0xb7 bytes	
 	user32.dll!_CallWindowProcAorW@24()  + 0x51 bytes	
 	user32.dll!_CallWindowProcW@20()  + 0x1b bytes	
 	NotePad.exe!CallWindowProcWide(long (HWND__ *, unsigned int, unsigned int, long)* lpPrevWndFunc=0x00402225, HWND__ * hWnd=0x007d086a, unsigned int uMsg=3407, unsigned int wParam=0, long lParam=1240520)  Line 2076	C
 	NotePad.exe!EditProc(HWND__ * hWnd=0x007d086a, unsigned int uMsg=3407, unsigned int wParam=0, long lParam=1240520)  Line 5569 + 0x13 bytes	C
 	LineBoard.dll!00a34cd4() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for LineBoard.dll]	
 	SmartSel.dll!00a91e26() 	
 	Coder.dll!00ac55b6() 	
 	NotePad.exe!CommonEditProc(HWND__ * hWnd=0x007d086a, unsigned int uMsg=3407, unsigned int wParam=0, long lParam=1240520)  Line 5477 + 0x16 bytes	C
 	user32.dll!_InternalCallWinProc@20()  + 0x28 bytes	
 	user32.dll!_UserCallWinProcCheckWow@32()  + 0xb7 bytes	
 	user32.dll!_SendMessageWorker@20()  + 0xc8 bytes	
 	user32.dll!_SendMessageA@16()  + 0x49 bytes	
 	Coder.dll!00acea74() 	
 	Coder.dll!00ad1ee3() 	
 	Coder.dll!00ad3fb3() 	
 	comctl32.dll!_SBSetText@12()  + 0x92 bytes	


Собственно есть подозрение что это не висяк, не баг какой-нибудь, а просто так получилось обработка одной большой строки(фолдингом в данном случая) операция достаточно сложная. В любом случае дождаться не судьба. Да, есть ограничение на размер документа есть, но оно у меня чуть выше чем размер этого докумнта(часто бывает нужно) :) Может подумать над каким нибудь ограничением на длину строки?