Smart End — переход на последний непробельный символ строки

Здесь выкладываются готовые к использованию макросы и скрипты.
Shmuel
Posts: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

Smart End — переход на последний непробельный символ строки

Postby Shmuel » Sun 19 May, 2013 13:32

В другой теме был предложен Source of the postмакрос "smart end". Не удержался, сделал свой вариант:
  1. Macro {
  2.   description="Smart End"; area="Editor"; key="End";
  3.   action = function()
  4.     local inf, s = editor.GetInfo(), editor.GetString(nil,nil,2)
  5.     local p1, p2 = s:cfind("%s*$"), s:len()+1
  6.     editor.SetPosition(nil,nil,inf.CurPos>=p1 and inf.CurPos~=p2 and p2 or p1)
  7.   end;
  8. }
Last edited by Shmuel on Sun 19 May, 2013 14:03, edited 1 time in total.

User avatar
Wave
Posts: 1693
Joined: Thu 04 Aug, 2005 18:47
Location: Харьков, Украина
Has thanked: 2 times
Been thanked: 9 times
Contact:

Re: Smart end

Postby Wave » Sun 19 May, 2013 13:53

Если в том макросе заменить string.len(s) на s:len(), он работает правильно. В этом макросе курсор улетает за пределы строки. Кстати, дошло, улетает в строках, содержащих русский текст в утф8. Где только латиница, там уходит в конец строки.
Пользуюсь ФАРом больше 15 лет © собирательный.

Shmuel
Posts: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

Re: Smart end

Postby Shmuel » Sun 19 May, 2013 14:03

Исправил, спасибо.

User avatar
Wave
Posts: 1693
Joined: Thu 04 Aug, 2005 18:47
Location: Харьков, Украина
Has thanked: 2 times
Been thanked: 9 times
Contact:

Re: Smart end

Postby Wave » Sun 19 May, 2013 14:06

А чем этот макрос лучше того? Или только другой-свой?
Пользуюсь ФАРом больше 15 лет © собирательный.

Shmuel
Posts: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

Re: Smart end

Postby Shmuel » Sun 19 May, 2013 14:11

Wave wrote:А чем этот макрос лучше того? Или только другой-свой?

Намного короче, легче в понимании и поддержке.
Ну и другой-свой тоже.

User avatar
SUSim
Posts: 1471
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 3 times

Re: Smart end

Postby SUSim » Sun 19 May, 2013 18:58

У мне имхо ещё понятнее :)
  1. local Str=Editor.Value
  2. local Pos=Editor.RealPos
  3. local Last=Str:cfind("%s*$")
  4. local Len=Str:len()
  5. Editor.Pos(1,2,Pos~=Last and Last or Len+1)
ну SmartHome для комплекта
  1. local Str=Editor.Value
  2. local Pos=Editor.RealPos
  3. local First=Str:find("[^%s]+")
  4. Editor.Pos(1,2,Pos~=First and First or 1)
SimSU ··· ·· -- ··· ··-

User avatar
zg
zero-gravity
Posts: 5181
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 38 times
Contact:

Re: Smart end

Postby zg » Sun 19 May, 2013 19:03

SUSim wrote:У мне имхо ещё понятнее :)
  1. Editor.Pos(1,2,Pos~=Last and Last or Len+1)
понятность зашкаливает, да.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Postby John Doe » Wed 18 Dec, 2013 12:48

Из темы выделено отдельно обсуждение Smart Home/End © Denis

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Re: Smart End

Postby John Doe » Wed 18 Dec, 2013 13:53

Для коллекции, хочу указать, что в пакете fl_scripts (автор темы имеет к нему непосредственное отношение) среди прочего есть smartkeys.lua, реализующий другую функцию — Smart Home:
  1. -- Sets position to the first nonspace character
  2. local function smarthome()
  3.     local p = editor.GetInfo().CurPos
  4.     local p_S = editor.GetString(nil,nil,2):find('%S') or 1
  5.     editor.SetPosition(nil,nil,(p==1 or p>p_S) and p_S or 1,nil,nil,1)
  6.     editor.Redraw()
  7. end
  8.  
  9. Macro { description="SmartHome"; area="Editor"; key="Home"; action=smarthome;}


P.S.
Там же реализованы и другие smartkeys: SmartTab и SmartBS.
Но код SmartBS закомментирован и неиспользуется, а SmartTab работает на мой взгляд неочевидно (возможно я просто не разобрался).

Shmuel
Posts: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

Re: Smart End

Postby Shmuel » Wed 18 Dec, 2013 14:24

John Doe wrote:Для коллекции хочу указать, что в пакете fl_scripts (автор темы имеет к нему непосредственное отношение) среди прочего есть smartkeys.lua, реализующий другую функцию — Smart Home:

Автор темы в основном поддерживает этот пакет (например, перевод на API Far3/LuaFAR3), но не развивает. SmartHome из этого пакета использую.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Smart End — переход на последний непробельный символ строки

Postby John Doe » Thu 13 Nov, 2014 09:27

Скрипт не учитывает что при непостоянных блоках выделение должно сбрасываться.

Denis
Posts: 1383
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 2 times
Been thanked: 2 times

Smart End — переход на последний непробельный символ строки

Postby Denis » Thu 13 Nov, 2014 09:47

Есть вариант с поддержкой:
Denis @ Smart Home/End © Denis


Return to “Полезные макросы и скрипты”

Who is online

Users browsing this forum: No registered users and 3 guests