Макрос комментирования выделенных строк в редакторе

Здесь обсуждается всё, что касается макросов.
Post Reply
dix
Posts: 10
Joined: Tue 20 Mar, 2012 09:21
Location: Сумы, УКРАИНА
Contact:

Макрос комментирования выделенных строк в редакторе

Post by dix »

Комментирует строки от начала до конца выделенного блока символами //
Или удаляет символы комментирования, если начальная строка выделенного блока закомментирована.

Code: Select all

REGEDIT4

[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\/]
"Sequence"="$If(!Selected) $AKey $Else editor.undo(0); bm.push(); %n0=editor.sel(0,0); %n2=editor.sel(0,2); editor.sel(4); %fd=index(substr(Editor.Value,0,2),\"//\"); $While (%n0<=%n2) editor.pos(1,2,1); editor.pos(1,1,%n0); $If(%fd==-1) print(\"//\"); $Else $If(index(substr(Editor.Value,0,2),\"//\")!=-1) Del Del $End $End %n0=%n0+1; $End bm.pop(); editor.undo(1); $End"
"DisableOutput"=dword:00000001

Last edited by dix on Fri 23 Mar, 2012 16:04, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Макрос комментирования выделенных строк в редакторе

Post by John Doe »

Макросы тяжело воспринимать в таком неструктурированном виде
dix
Posts: 10
Joined: Tue 20 Mar, 2012 09:21
Location: Сумы, УКРАИНА
Contact:

Re: Макрос комментирования выделенных строк в редакторе

Post by dix »

Сервис

Code: Select all

$If(!Selected) 
  $AKey
$Else 
  editor.undo(0); 
  bm.push(); 
  %n0=editor.sel(0,0);
  %n2=editor.sel(0,2); 
  editor.sel(4);
  %fd=index(substr(Editor.Value,0,2),\"//\"); 
  $While (%n0<=%n2) 
    editor.pos(1,2,1); 
    editor.pos(1,1,%n0); 
    $If(%fd==-1) 
      print(\"//\"); 
    $Else 
      $If(index(substr(Editor.Value,0,2),\"//\")!=-1) Del Del $End 
    $End 
    %n0=%n0+1; 
  $End 
  bm.pop(); 
  editor.undo(1); 
$End
dix
Posts: 10
Joined: Tue 20 Mar, 2012 09:21
Location: Сумы, УКРАИНА
Contact:

Re: Макрос комментирования выделенных строк в редакторе

Post by dix »

Комментирование символами ' и ;
Оператор $AKey и функция akey для символов ' и ; работают не так, как нужно в данном случае, поэтому
приходится анализировать текущую раскладку.

Code: Select all

[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\;]
"Sequence"="$If(!Selected) $if(itoa(kbdLayout(),16) == 4090409) print(\";\"); $else print(\"ж\"); $end $Else editor.undo(0); bm.push(); %n0=editor.sel(0,0); %n2=editor.sel(0,2); editor.sel(4); %fd=index(substr(Editor.Value,0,1),\";\"); $While (%n0<=%n2) editor.pos(1,2,1); editor.pos(1,1,%n0); $If(%fd==-1) print(\";\"); $Else $If(index(substr(Editor.Value,0,1),\";\")!=-1) Del $End $End %n0=%n0+1; $End bm.pop(); editor.undo(1); $End"
"DisableOutput"=dword:00000001

[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\']
"Sequence"="$If(!Selected) $if(itoa(kbdLayout(),16) == 4090409) print(\"'\"); $else print(\"э\"); $end $Else editor.undo(0); bm.push(); %n0=editor.sel(0,0); %n2=editor.sel(0,2); editor.sel(4); %fd=index(substr(Editor.Value,0,1),\"'\"); $While (%n0<=%n2) editor.pos(1,2,1); editor.pos(1,1,%n0); $If(%fd==-1) print(\"'\"); $Else $If(index(substr(Editor.Value,0,1),\"'\")!=-1) Del $End $End %n0=%n0+1; $End bm.pop(); editor.undo(1); $End"
"DisableOutput"=dword:00000001
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Макрос комментирования выделенных строк в редакторе

Post by John Doe »

dix wrote:функция akey для символов ' и ; работают не так, как нужно в данном случае, поэтому
приходится анализировать текущую раскладку.
Как раз функция akey различает раскладку.
Перемудрили-с.
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Макрос комментирования выделенных строк в редакторе

Post by SUSim »

Интересный подход!
Но всё равно - стереотип сильнее: клавиша комментирования должна быть одна! - а вот символ/символы разные для разных типов файлов. Макросы конечно сложнее получаются, зато комментируют нужным символом/символами в зависимости от типа файла (.bat - rem или :: как настроить, *.pas - // и.т.д. начало макроса - - выбор символа/символов комментирования, не важно в %SimSUListValue будет символ/символы комментирования...
SimSU ··· ·· -- ··· ··-
User avatar
HaRT
Moderator
Posts: 10869
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Макрос комментирования выделенных строк в редакторе

Post by HaRT »

Есть ещё подход Surround Selection, который реализован в Visual Assist X и применим не только к комментированию. Я им пользовался — очень удобно, а вот в Фаре всё ленюсь сделать, хотя принципиальных препятствий нет.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Макрос комментирования выделенных строк в редакторе

Post by SUSim »

Кстати, да: отличная идея - пусть будут 2 клавиши: первая - строчное комментирование, а вторая - блочное... третья - четвертая скобки и т.д., но это всё равно от типа файла очень сильно зависит...

Я задумывался о таком поведении - если есть блочное комментирование и выделен обычный блок то применять его, а если есть только строчное или выделен вертикальный блок то применять строчное.
Как такой подход? (в фар2 у меня было строчное всегда, а при переносе на фар3 можно и доработать)
SimSU ··· ·· -- ··· ··-
dix
Posts: 10
Joined: Tue 20 Mar, 2012 09:21
Location: Сумы, УКРАИНА
Contact:

Re: Макрос комментирования выделенных строк в редакторе

Post by dix »

Макрос по мотивам VisualStudio. Приходится параллельно и последовательно работать в Far и VS. Не хватало.
Если в макросе анализировать расширение файла, то конечно лучше макрос назначить на одно сочетание или расширить
по видам: строчный, блочный и т.д.

А я на одну клавишу назначил и в связи с этим проблема с akey или $AKey
У меня не распознаёт раскладку (2.0 build 1807 x86).
Хотел тему создать - спросить о поведении akey, но изучил форум на этот предмет и решил - может это так задумано.
Поэтому прокомментируйте здесь, пожалуйста.
Задаю макрос на ; или ' или [ или ] и т.п.

Code: Select all

[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\']
"Sequence"="eval(akey(1,0)); print(akey(1,0)); $AKey"
"DisableOutput"=dword:00000001
Во всех раскладках - результат три апострофа.
Кроме того можно назначить макрос макрос на букву Э (большую или маленькую), но он будет срабатывать на обе, т.е.
не распознаёт Shift. Тоже и с другими буквами.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Макрос комментирования выделенных строк в редакторе

Post by John Doe »

dix wrote:У меня не распознаёт раскладку (2.0 build 1807 x86).
Этот билд нельзя считать стабильным.
Пользуйтесь более ранними, или более поздними (bis, или far 3)
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Макрос комментирования выделенных строк в редакторе

Post by SUSim »

я для FAR2 остановился на 2.1 build 1807 bis23 x86
для FAR3 3.0 build 2564 x86
SimSU ··· ·· -- ··· ··-
nh
Posts: 42
Joined: Fri 23 Dec, 2011 06:51

Re: Макрос комментирования выделенных строк в редакторе

Post by nh »

John Doe wrote:
dix wrote:У меня не распознаёт раскладку (2.0 build 1807 x86).
Этот билд нельзя считать стабильным.
Пользуйтесь более ранними, или более поздними (bis, или far 3)
Оп-па, интересно... А на офсайте разве основная ссылка в download -> stable не на 2.0 1807 x86?
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Макрос комментирования выделенных строк в редакторе

Post by John Doe »

Да, к сожалению официальную двойку бросили на полпути.
Post Reply

Return to “Обсуждение макросов”