Отображение правой фиксированной границы в редакторе

Здесь обсуждается всё, что касается макросов.
Post Reply
brigadir
Posts: 3
Joined: Sat 16 Jul, 2016 15:15
Has thanked: 3 times

Отображение правой фиксированной границы в редакторе

Post by brigadir » Sat 16 Jul, 2016 15:26

Используется Far Manager 3.0.

Вопрос следующий: есть ли возможность во внутреннем редакторе показать правую фиксированную границу (скажем, 80 символов)? То есть нужна вертикальная линия определённого цвета, отличного от цвета основного фона, шириной в один символ, расположенная в определённой колонке.

Покопался в документации к Far Colorer... ничего похожего не нашёл. Возможно плохо искал.

Спасибо!

User avatar
HaRT
Moderator
Posts: 8048
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

Отображение правой фиксированной границы в редакторе

Post by HaRT » Sat 16 Jul, 2016 15:58

Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5155
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 144 times

Отображение правой фиксированной границы в редакторе

Post by Shmuel » Sat 16 Jul, 2016 17:28

Можно скриптом. Если не нужно оперативно перемещать линию границы клавишами, то макрос внизу следует удалить или закомментировать.

brigadir
Posts: 3
Joined: Sat 16 Jul, 2016 15:15
Has thanked: 3 times

Отображение правой фиксированной границы в редакторе

Post by brigadir » Sat 16 Jul, 2016 17:48

@Shmuel Огромное спасибо! Легко и просто! То что надо! Спасибо!

Shmuel
Posts: 5155
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 144 times

Отображение правой фиксированной границы в редакторе

Post by Shmuel » Sat 16 Jul, 2016 18:03

brigadir
Скрипт поправлен (неправильно обрабатывались строки, содержащие табы).

brigadir
Posts: 3
Joined: Sat 16 Jul, 2016 15:15
Has thanked: 3 times

Отображение правой фиксированной границы в редакторе

Post by brigadir » Sat 16 Jul, 2016 18:13

@Shmuel Теперь всё работает! :-) Ещё раз большое спасибо за помощь!

IgorZ
Posts: 459
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 6 times
Been thanked: 9 times

Отображение правой фиксированной границы в редакторе

Post by IgorZ » Tue 18 Oct, 2016 06:02

Понадобилось на ходу временно менять позицию правой границы. В результате слегка доработал данный скрипт. Теперь при перемещении границы в течение секунды (настраивается) после последнего нажатия клавиши перемещения границы в заголовке редактора выводится новая позиция. Также добавлено кнопкосочетание AltShiftHome для возврата на изначальную позицию.
  1. -- Settings
  2. local FileMask = "*"
  3. local Color = 0xF0
  4. local Pos = 151
  5. local Period = 1000
  6. -- End of settings
  7. local F = far.Flags
  8. local colorFlags = F.ECF_TABMARKFIRST + F.ECF_TABMARKCURRENT + F.ECF_AUTODELETE
  9. --
  10. local StartPos,EdTitle,LastTime,Timer = Pos
  11. --
  12. local function OnTimer()
  13. if Far.UpTime-LastTime>Period then Timer.Close(Timer) Editor.SetTitle(EdTitle) EdTitle = nil end
  14. end
  15. --
  16. Event {
  17.   description="Add right border line";
  18.   group="EditorEvent";
  19.   filemask=FileMask;
  20.   action=function(EditorId, Event)
  21.     if Event==F.EE_REDRAW then
  22.       local Info = editor.GetInfo(EditorId)
  23.       local l1 = Info.TopScreenLine
  24.       local l2 = math.min(l1+Info.WindowSizeY-1, Info.TotalLines)
  25.       for line=l1,l2 do
  26.         local p = editor.TabToReal(EditorId,line,Pos)
  27.         editor.AddColor(EditorId,line,p,p,colorFlags,Color,100)
  28.       end
  29.     end
  30.   end
  31. }
  32. --
  33. Event{
  34.   group="ExitFAR"; description="Close timer at exit"; condition=function() return Timer end;
  35.   action=function() Timer.Close(Timer) mf.waitkey(Period+1) end;
  36. }
  37. --
  38. Macro {
  39.   description="Move border line";
  40.   area="Editor"; key="AltShiftLeft AltShiftRight AltShiftHome";
  41.   filemask=FileMask;
  42.   action=function()
  43.     local k = akey(1):sub(9) if k=="Home" then Pos=StartPos elseif k=="Left" then Pos=math.max(1,Pos-1) else Pos=Pos+1 end
  44.     if not EdTitle then EdTitle = editor.GetTitle() Timer = far.Timer(Period,OnTimer) end
  45.     Editor.SetTitle("VLine at : "..Pos.."   ") LastTime = Far.UpTime
  46.   end;
  47. }

Post Reply

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