Smart Home/End © Denis

Здесь обсуждается всё, что касается макросов.
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Smart Home/End © Denis

Post by Denis »

С поддержкой ShiftHome, ShiftEnd:


upd
да уж, по сравнению с остальными - размер кода просто огромный :)
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

Так сказать, рефакторинг:


upd
замена табов на пробелы
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Post by HaRT »

Denis
Обратите внимание на тэг “[codebox=lua file=untitled.lua]” в панели инструментов при создании/правке сообщения (по меньшей мере, в теме «prosilver»). Если отредактируете свои сообщения тут с использованием этого тэга, читаемость кода заметно улучшится.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

Спасибо, не знал.
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

А как в макросе получить значение опции, например, установленного флага "EOPT_PERSISTENTBLOCKS".
  1. local info = editor.GetInfo()
  2.  
  3. info.Options -- а как дальше?
upd
Можно ли из среды LuaMacro получить значение "EOPT_PERSISTENTBLOCKS"?
  1. function testflag(set, flag)
  2.  
  3.   return set % (2*flag) >= flag
  4.  
  5. end
upd4
Исправленная версия макроса.
Editor.SmartHomeEnd.lua.v5.7z
(831 Bytes) Downloaded 174 times
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Smart end

Post by Shmuel »

Denis wrote:
  1. function testflag(set, flag)
  2.  
  3.   return set % (2*flag) >= flag
  4.  
  5. end
Эта функция будет глючить на битах старше 52-го. Правильно так:
  1. function testflag(set, flag)
  2.  
  3.   return band(set,flag) ~= 0
  4.  
  5. end
(Естественно, можно и не заворачивать "band(set,flag) ~= 0" в функцию).
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

Спасибо
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Smart end

Post by Shmuel »

Denis, теперь у вас другая ошибка:

Code: Select all

elseif not band(info.Options, EOPT_PERSISTENTBLOCKS) ~= 0 then
Есть такая штука, как "приоритет операций" в языке программирования. В Lua приоритет операции not выше, чем у операции ~= , поэтому должно быть либо так:

Code: Select all

elseif not (band(info.Options, EOPT_PERSISTENTBLOCKS) ~= 0) then
либо так:

Code: Select all

elseif band(info.Options, EOPT_PERSISTENTBLOCKS) == 0 then
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

Да, точно, спасибо!

А можно ли из среды LuaMacro получить значение "EOPT_PERSISTENTBLOCKS"?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Smart end

Post by Shmuel »

Denis wrote:А можно ли из среды LuaMacro получить значение "EOPT_PERSISTENTBLOCKS"?
far.Flags.EOPT_PERSISTENTBLOCKS
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

Обновление, поддержка AltShiftHome/AltShiftEnd:
https://github.com/Firebie/FarScripts/b ... omeEnd.lua
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: Smart end

Post by ccaid »

Фар делают добрые люди
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

Обновление, исправлены баги, брать всё там же:
https://github.com/Firebie/FarScripts/b ... omeEnd.lua
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Smart end

Post by Denis »

Версия 1.4, в очередной раз исправлены все ошибки.
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Smart Home/End © Denis

Post by siberia-man »

Хороший скрипт. Но надо чуть-чуть доработать для поддержки цифровой клавиатуры.
  1. --- Editor.SmartHomeEnd-original.lua    2022-09-18 13:16:48.429280800 +0300
  2.  
  3. +++ Editor.SmartHomeEnd-modified.lua    2022-09-18 13:29:35.731270700 +0300
  4.  
  5. @@ -138,38 +138,38 @@
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  Macro {
  12.  
  13. -  area="Editor"; key="Home"; flags=""; action = function()
  14.  
  15. +  area="Editor"; key="/(Home|Num7)/"; flags=""; action = function()
  16.  
  17.      SmartHome(false)
  18.  
  19.    end;
  20.  
  21.  }
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  Macro {
  28.  
  29. -  area="Editor"; key="ShiftHome"; flags=""; action = function()
  30.  
  31. +  area="Editor"; key="/Shift(Home|Num7)/"; flags=""; action = function()
  32.  
  33.      SmartHome(true)
  34.  
  35.    end;
  36.  
  37.  }
  38.  
  39.  
  40.  
  41.  Macro {
  42.  
  43. -  area="Editor"; key="AltShiftHome"; flags=""; action = function()
  44.  
  45. +  area="Editor"; key="/AltShift(Home|Num7)/"; flags=""; action = function()
  46.  
  47.      SmartHome(true, far.Flags.BTYPE_COLUMN)
  48.  
  49.    end;
  50.  
  51.  }
  52.  
  53.  
  54.  
  55.  Macro {
  56.  
  57. -  area="Editor"; key="End"; flags=""; action = function()
  58.  
  59. +  area="Editor"; key="/(End|Num1)/"; flags=""; action = function()
  60.  
  61.      SmartEnd(false)
  62.  
  63.    end;
  64.  
  65.  }
  66.  
  67.  
  68.  
  69.  Macro {
  70.  
  71. -  area="Editor"; key="ShiftEnd"; flags=""; action = function()
  72.  
  73. +  area="Editor"; key="/Shift(End|Num1)/"; flags=""; action = function()
  74.  
  75.      SmartEnd(true)
  76.  
  77.    end;
  78.  
  79.  }
  80.  
  81.  
  82.  
  83.  Macro {
  84.  
  85. -  area="Editor"; key="AltShiftEnd"; flags=""; action = function()
  86.  
  87. +  area="Editor"; key="/AltShift(End|Num1)/"; flags=""; action = function()
  88.  
  89.      SmartEnd(true, far.Flags.BTYPE_COLUMN)
  90.  
  91.    end;
  92.  
  93.  }
Last edited by siberia-man on Sun 18 Sep, 2022 11:32, edited 3 times in total.
Post Reply

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