Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

yozhic wrote:
\K
Не работает что-то у меня этот ключик в правилах подсветки. Так что пока оставил ретроспективную проверку.
Ну, собственно, там выигрыш может быть и незначительным... но оба варианта от этого не перестают быть верными, а мой может ещё и привнести некорректную подсветку, если будут пересекающиеся шаблоны, в том смысле, что использование ключа \K надо проверять на захват символов (пусть даже этот ключ и отбрасывает найденное), в отличие от lookbehind - он точно их не захватывает.
Но работоспособность метасимвола \K вполне проверена, он работает - возможно Вам необходимо обновить AP и/или плагин.
yozhic wrote: А может проще (и эффективней) сделать три пары скобок и только одну из них подсветить?
Сомневаюсь, что это будет эффективнее.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Исправлено: получение окна редактирования, имеющего фокус.

Fixed: getting focused edit window.


Coder plugin v15.7

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

Прошу прощения за большой текст этого поста и за слишком подробное и педантичное описание. Возможно все происходит из-за моих собственных ошибок. Пост лучше удалить в таком случаи.
Итак.
1.
панель CodeFold открыта; открыт файл.js;

Code: Select all

//  *** Открыть выделенный или весь текст в новой вкладке. ***
//  Call("Scripts::Main", 1, "OpenTextInNewTab.js")

var hWndEdit = AkelPad.GetEditWnd();
var hWndEditNew = 0;
var pText;

if (hWndEdit) {

  if (pText = AkelPad.GetSelText() || AkelPad.GetTextRange(0, -1)) {

    if (hWndEditNew = CreateNewTab(hWndEdit)) {

      AkelPad.ReplaceSel(pText);
      AkelPad.SetSel(0, 0);

      if (AkelPad.IsPluginRunning("Coder::HighLight"))
        AkelPad.CallW("Coder::Settings", 6, GetAlias(hWndEdit, 0));
    }
  }
}

function CreateNewTab(hWndEdit) {

  var hWndMain    = AkelPad.GetMainWnd();
  var nNewLine    = AkelPad.GetEditNewLine(hWndEdit);
  var nCodePage   = AkelPad.GetEditCodePage(hWndEdit);
  var nBOM        = AkelPad.GetEditBOM(hWndEdit);
  var hWndEditNew = 0;

  AkelPad.SendMessage(hWndMain, 273 /*WM_COMMAND*/, 4101 /*IDM_FILE_NEW*/, 1);
  AkelPad.SaveFile(0, "", nCodePage, nBOM);
  AkelPad.SendMessage(hWndMain, 1230 /*AKD_SETNEWLINE*/, 0, nNewLine);

  if (hWndEditNew = AkelPad.GetEditWnd()) {
    if (hWndEditNew != hWndEdit)
      return hWndEditNew;
  }
  return hWndEditNew;
}

function GetAlias(hWndEdit, hDocEdit) {

  var pAlias = "";
  var lpAlias;

  if (lpAlias = AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/)) {

    AkelPad.CallW("Coder::Settings", 18, hWndEdit, hDocEdit, lpAlias, 0);
    pAlias = AkelPad.MemRead(lpAlias, 1 /*DT_UNICODE*/);
    AkelPad.MemFree(lpAlias);
  }
  return pAlias;
}

открывается новая вкладка с текстом;
в CodeFold щелкаю два раза по имени любой функции - открывается предыдущая вкладка с этой функцией;
правой кнопкой мыши на новой вкладке - Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.SendMessage(AkelPad.GetMainWnd(),1229,0,false);AkelPad.Command(4318);`).
AkelPad падает.
2.
панель CodeFold открыта; открыт файл.js; :)
выделяем весь текст, копируем;
открываем новую вкладку - Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.Command(4101);AkelPad.Call("Coder::Settings", 1, "js");`);
вставляем текст - панель CodeFold пуста. Возвращаемся в файл.js - пусто (если вернуться, скажем в файл.vbs (другое имя), то все нормально).
3.
панель CodeFold открыта; открыт файл.js; :)
выделяем пару функций (обязательно больше одной), вырезаем в буфер, вставляем в другом месте текста (потом можно попробовать отменить)...
Щелкайте в панели по старым и новым именам. Если файл сохранен, то его можно "переоткрыть" и панель обновится.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Kley
Не воспроизводится. Выложите/вышлите свою папку с AkelPad'ом.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Исправлено: удаление нескольких блоков могло оставлять один в списке CodeFold.
Исправлено: возможный сброс указателя на активный документ при использовании внешних вызовов с кодом 1 и 6 (Coder::Settings).

Fixed: deleting several blocks could leave one in CodeFold list.
Fixed: possible active document pointer reset when using external calls with code 1 and 6 (Coder::Settings).


Coder plugin v15.8

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

Instructor
Восхищен вашей оперативностью. Правда.
Очередной, и думаю не последний :), раз Спасибо.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Хм, а давно сломались штуки типа

Code: Select all

Call("Coder::HighLight", 2, 0, "#BCF3BC", 1, 0, -1)
?
А вот с явным указанием ID уже работает:

Code: Select all

Call("Coder::HighLight", 2, 0, "#BCF3BC", 1, 0, 1000)

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher
См. новые версии ContextMenu, Hotkeys, Scripts, ToolBar.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor
Спасибо, заработало. :)

Offline
Posts: 1
Joined: Wed Jul 01, 2015 4:10 pm

Post by foruman »

Каким образом для правой границы фолдинга указать пустую строку, т.е. когда в тексте попадается строка вообще без содержимого, даже без пробелов?
Хочу удобно отображать файлы логов, скрывая кучу технических деталей после слов Exception. Пример файла логов

Code: Select all

Jun 29, 2015 9:23:07 AM hudson.model.Executor run
java.lang.IllegalStateException:
	at hudson.model.RunMap.put(RunMap.java:189)
	at jenkins.model.lazy.LazyBuildMixIn.newBuild(LazyBuildMixIn.java:178)
	at hudson.model.Queue.withLock(Queue.java:1218)
	at hudson.model.Executor.run(Executor.java:310)

SEVERE: Unexpected executor death
java.lang.InterruptedException
	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:639)
	at hudson.model.Executor.run(Executor.java:374)
Caused by: java.io.InterruptedIOException
	at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:979)
	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:610)
	... 6 more
Caused by: java.lang.InterruptedException
	at hudson.scm.subversion.CheckoutUpdater$1.perform(CheckoutUpdater.java:122)
	at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:972)
	... 14 more
Caused by: org.tmatesoft.svn.core.SVNCancelException: svn: E200015: E200015: ISVNAuthentication provider did not provide credentials; HTTP authorization cancelled.
svn: E200015: ISVNAuthentication provider did not provide credentials; HTTP authorization cancelled.
	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:60)
	at hudson.scm.subversion.CheckoutUpdater$1.perform(CheckoutUpdater.java:115)
	... 17 more
Caused by: org.tmatesoft.svn.core.SVNCancelException: svn: E200015: ISVNAuthentication provider did not provide credentials; HTTP authorization cancelled.
	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:689)
	... 35 more

Jun 30, 2015 2:34:22 AM hudson.scm.SubversionSCM buildEnvVars
WARNING: no revision found 
Хочу получить такой результат

Code: Select all

  Jun 29, 2015 9:23:07 AM hudson.model.Executor run
+ java.lang.IllegalStateException:

  SEVERE: Unexpected executor death
+ java.lang.InterruptedException

Jun 30, 2015 2:34:22 AM hudson.scm.SubversionSCM buildEnvVars
WARNING: no revision found 
Использую такие настройки

Code: Select all

Folds:
;===
; 8224 = 8192 + 32
8224	0	0	0	"Exception"        "..."         ""
Такие настройки худо-бедно работают. Худо потому что три точки бывают не всегда, и если не нашлось трех точек, как перед строкой SEVERE: Unexpected executor death, тогда сворачивается все до конца файла. И такое поведение для всех случаев, когда после слова Exception три точки не попали в лог. А в панели Coder::CodeFold в результате отображается список безумной вложенности - файл лога довольно длинный. Если в правилах фолдинга заменяю три точки "..." на пустую строку "", тогда вообще любой фолдинг в качестве правой границы использует конец файла.

Такие настройки абсолютно бесполезны, правая граница всегда в конце файла

Code: Select all

Folds:
;===
; 8288 = 8192 + 64 + 32
8288	0	0	0	"Exception"        ""         ""

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

foruman

Вот так, например:

Code: Select all

;3146153=1+8+32+128+256+1048576+2097152
3146153	0	0	0	"[A-Z][a-z]{2}+ [0-9]{2}+"	"[A-Z][a-z]{2}+ [0-9]{2}+"	""
или поточнее:

Code: Select all

;3146153=1+8+32+128+256+1048576+2097152
3146153	0	0	0	"[A-Z][a-z]{2}+ [0-9]{2}+, [0-9]{4}+"	"[A-Z][a-z]{2}+ [0-9]{2}+, [0-9]{4}+"	""
?

Возможно, нужно делать больше правил, если дата без ведущего нуля, т.е. не Jun 09, а Jun 9, что-нибудь вроде:

Code: Select all

;3146153=1+8+32+128+256+1048576+2097152
3146153	0	0	0	"[A-Z][a-z]{2}+ [0-9], [0-9]{4}+"	"[A-Z][a-z]{2}+ [0-9], [0-9]{4}+"	""
3146153	0	0	0	"[A-Z][a-z]{2}+ [0-9], [0-9]{4}+"	"[A-Z][a-z]{2}+ [0-9]{2}+, [0-9]{4}+"	""
3146153	0	0	0	"[A-Z][a-z]{2}+ [0-9]{2}+, [0-9]{4}+"	"[A-Z][a-z]{2}+ [0-9], [0-9]{4}+"	""
3146153	0	0	0	"[A-Z][a-z]{2}+ [0-9]{2}+, [0-9]{4}+"	"[A-Z][a-z]{2}+ [0-9]{2}+, [0-9]{4}+"	""
Upd: Не совсем то получается. Если только попробовать дополнительно ввести правила с "SEVERE: ", "WARNING: " и что там ещё?
Типа:

Code: Select all

;4109=1+4+8+4096
4109	0	0	0	"java.lang."	"Exception"	""
4109	0	0	0	"java.lang."	"Exception:"	""
4109	0	0	0	"WARNING:"	" "	""
4109	0	0	0	"SEVERE:"	" "	""
4109	0	0	0	"Caused by:"	" "	""
Тогда в панели Coder::CodeFold увидите что-то вроде:

Code: Select all

- Jun 29, 2015 9:23:07 AM hudson.model.Executor run
...java.lang.IllegalStateException: 
...SEVERE: Unexpected executor death
...java.lang.InterruptedException
...Caused by: java.io.InterruptedIOException
...Caused by: java.lang.InterruptedException 
...Caused by: org.tmatesoft.svn.core.SVNCancelException: svn: E200015: E200015: ISVNAuthentication provider did not provide credentials; HTTP authorization cancelled.

+ Jun 30, 2015 2:34:22 AM hudson.scm.SubversionSCM buildEnvVars
- переход по дате и вложенным предупреждениям внутри.

Upd2: Хотя получается скорее удобство навигации, чем сворачивание.
Last edited by Skif_off on Thu Jul 02, 2015 6:22 am, edited 2 times in total.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

foruman

Code: Select all

Folds:
;===============================================================
;Flags  Font    Color   Color   Fold         Fold     Delimiters
;       style   text    bkgrnd  start        end
;===============================================================
;2097664=512+2097152
2097664	0	0	0	"Exception"  ".\n\n"  ""

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Instructor
Без точки в Fold end не заработало, так и задумано?

P.S. Не сообразил и понесло, свернул предыдущий пост под More.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Instructor
а вы не планируете приделать настройку, позволяющую задавать отображать ли нижнюю строку свёрнутого блока?

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Skif_off
Начало блока в конце строки не проверяется.

Drugmix
С версии AkelPad 4.9.5 и Coder 16.0 будет доступна возможность скрывать строку содержащую закрывающий тег.
Locked