Condensed View

Здесь выкладываются готовые к использованию макросы и скрипты.
Post Reply
buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Condensed View

Post by buniak_a_h » Fri 24 Jul, 2015 02:43

В фаре 1.7 был замечательный плугин - Condenced view. Он "скрывал" строки, информация в которых начиналась правее позиции курсора в момент вызова, что очень удобно для разработчиков софта (скрыть вложенные блоки). Я попытался сделать аналог в виде макроса на LUA.
  1. --[[ Буняк А.Х., ©BAX
  2. Макрос, переводящий редактор в "сжатый" режим
  3. (аналогично плагину Condenced View). Показывает только те строки.
  4. у которых первый непробельный символ находится на позиции курсора
  5. или левее.
  6. --]]
  7.  
  8. -- +
  9. -- Константы
  10. -- -
  11. local F = far.Flags
  12. local color={Flags=bit64.bor(F.FCF_FG_4BIT,F.FCF_BG_4BIT),ForegroundColor=0,BackgroundColor=0x3}
  13.  
  14. -- +
  15. -- Настройки
  16. local function Settings()
  17. return{
  18.   OnKey="AltF4",
  19.   OffKey="F10 Esc",
  20.   GoKey="Enter",
  21.   SetupKey='AltF4'
  22. }
  23. end
  24. local function MergeSettings(Old, New)
  25.  if New then
  26.   for i,v in pairs(New) do
  27.    Old[i]=v
  28.   end
  29.  end
  30.  return Old
  31. end
  32.  
  33. local CfgName=(...):match("(.*)%.lua")..'.cfg'
  34. local CfgProc=loadfile(CfgName)
  35. local S=MergeSettings( Settings(), CfgProc and CfgProc() or nil)
  36. -- -
  37.  
  38. -- Список параметров характеристик редакторов,
  39. -- у которых включён Condensed режим
  40. local EditorsCondView={}
  41.  
  42. -- +
  43. -- Проверка, активен ли макрос (редактор в сжатом виде).
  44. -- -
  45. local function IsMacroActive()
  46.  local ei=editor.GetInfo()
  47.  if not ei then return end;
  48.  return EditorsCondView[ei.EditorID]
  49. end;
  50. --
  51. local OnProcess = {}
  52. --
  53. -- +
  54. local function GoToLinePos(EID, ln, cl, tsl, lpc)
  55.  editor.SetPosition(EID, ln, -1, cl, tsl , lpc)
  56.  editor.Redraw(EID)
  57. end
  58. -- -
  59. -- +
  60. -- Установка режима R/O
  61. -- -
  62. local function SetReadOnly(EID, abRO) -- abRO - True или False
  63.  editor.SetParam(EID, F.ESPT_LOCKMODE, abRO)
  64. end -- SetReadOnly
  65.  
  66. local function ProcessEditorInput()
  67.  local ei=editor.GetInfo()
  68.  if not ei then return end
  69.  local EID=ei.EditorID
  70.  local jj=ei.CurLine;
  71.  local ii
  72.  if not EditorsCondView[EID] then
  73.   return
  74.  end;
  75.  if EditorsCondView[EID].Ends then
  76.   return
  77.  end;
  78.  if EditorsCondView[EID].LastColored then
  79.   if EditorsCondView[EID].LastColored == jj then
  80.    return;
  81.   end;
  82.   editor.DelColor(EID,EditorsCondView[EID].LastColored, nil)
  83.   EditorsCondView[EID].LastColored = nil
  84.  end;
  85.  ii = EditorsCondView[EID].Lines[jj]
  86.  EditorsCondView[EID].LastColored = jj
  87.  editor.SetTitle(EID, string.gsub(editor.GetFileName(EID),".*\\(.*)","%1")..string.char(17)..ii)
  88.  editor.AddColor(EID, jj, 1, ei.WindowSizeX, 0, color, 200)
  89.  editor.Redraw(EID)
  90. end; -- ProcessEditorInput
  91.  
  92. -- +
  93. -- Включить сжатый режим
  94. -- -
  95. local function CondViewOn(ei, EID)
  96.  local x0,y0,yTopl, xLeftC = ei.CurTabPos,ei.CurLine,ei.TopScreenLine, ei.LeftPos
  97.  local need
  98.  local bReadOnly = band(ei.CurState,F.ECSTATE_LOCKED)~=0
  99.  local bProcessed=false
  100.  if OnProcess[EID] or EditorsCondView[EID] then return false end -- редактор занят или уже овраплен? уйдём
  101.  OnProcess[EID] = true -- запомним, что в работе
  102.  EditorsCondView[EID] =
  103.    {Id=EID, ColPos=x0,LinePos=y0, TopScreenLine=yTopl, LeftPos=xLeftC,
  104.     processed=false, ReadOnly0=bReadOnly,
  105.     SelectInfo=editor.GetSelection(EID), Lines={},
  106.     Bookmarks=editor.GetBookmarks(EID)
  107.    }
  108.  SetReadOnly(EID, false)
  109.  editor.UndoRedo(EID,F.EUR_BEGIN) -- начнём блок отмены
  110.  -- Удаление строк {
  111.  local y1=y0
  112.  -- Заполнение таблицы исходных номеров строк
  113.  for i=1,ei.TotalLines do
  114.   EditorsCondView[EID].Lines[i]=i
  115.  end
  116.  for i=ei.TotalLines,1,-1 do
  117.   editor.ExpandTabs(EID, i)
  118.   local sss = editor.GetString(EID,i,1)
  119.   if string.match(sss.StringText, "^%s*$") then
  120.    need=i<ei.TotalLines
  121.   else
  122.    need=true
  123.    for j =1,x0 do
  124.     if string.byte(sss.StringText, j)~=32 then
  125.      need=false
  126.      break
  127.     end
  128.    end
  129.   end
  130.   if need then
  131.    editor.DeleteString(EID, i)
  132.    table.remove(EditorsCondView[EID].Lines, i)
  133.    bProcessed = true
  134.    if i < y1 then
  135.     y1 = y1 - 1
  136.    end
  137.   end
  138.  end -- for i=ei.TotalLines,1,-1
  139.  if bProcessed then
  140.   editor.Redraw(EID)
  141.   EditorsCondView[EID].processed = true
  142.   GoToLinePos(EID, y1, x0, EditorsCondView[EID].TopScreenLine, EditorsCondView[EID].LeftPos)
  143.  end
  144.  -- Удаление строк }
  145.  editor.UndoRedo(EID,F.EUR_END) -- закроем блок отмены
  146.  SetReadOnly(EID, true)
  147.  editor.SetTitle(EID, editor.GetFileName(EID).." Condenced")
  148.  OnProcess[EID] = nil -- процесс обработки окончен
  149.  ei = editor.GetInfo(EID)
  150.  if ei then
  151.   ProcessEditorInput();
  152.  end
  153.  return true
  154. end -- CondViewOn(ei, EID)
  155. -- +
  156. -- Выключить сжатый режим
  157. -- -
  158. local function CondViewOff(ei, EID, bNewPos)
  159.  --local ei=editor.GetInfo()
  160.  --if not ei then return end
  161.  --local EID=ei.EditorID
  162.  local lnp,clp, tsl, lpc
  163.  local ScrPos=ei.CurLine-ei.TopScreenLine
  164.  if EditorsCondView[EID].LastColored then
  165.   editor.DelColor(EID,EditorsCondView[EID].LastColored, nil)
  166.   editor.Redraw(EID)
  167.   EditorsCondView[EID].LastColored = nil
  168.  end;
  169.  EditorsCondView[EID].Ends = true;
  170.  if bNewPos and ei then
  171.   -- Заношу новый номер строки в EditorsCondView[EID]
  172.   EditorsCondView[EID].LinePos = EditorsCondView[EID].Lines[ei.CurLine]
  173.  end
  174.  if OnProcess[EID] or not EditorsCondView[EID] then -- редактор занят или не овраплен? уйдём
  175.   return false
  176.  end
  177.  OnProcess[EID] = true -- запомним, что в работе
  178.  if EditorsCondView[EID].processed then
  179.   SetReadOnly(EID, false)
  180.   editor.UndoRedo(EID, F.EUR_UNDO)
  181.  end
  182.  SetReadOnly(EID, EditorsCondView[EID].ReadOnly0)
  183.  editor.SetTitle(EID, editor.GetFileName(EID))
  184.  
  185.  lnp=EditorsCondView[EID].LinePos
  186.  clp=EditorsCondView[EID].ColPos
  187.  tsl = lnp - ScrPos
  188.  lpc = EditorsCondView[EID].LeftPos
  189.  
  190.  OnProcess[EID] = nil -- процесс обработки окончен
  191.  -- Восстановление закладок
  192.  for i,v in pairs(EditorsCondView[EID].Bookmarks) do
  193.   if v.Line>0 and v.Cursor>0 then
  194.    editor.SetPosition(EID, v.Line, -1, v.Cursor, v.Line-v.ScreenLine+1, v.LeftPos)
  195.    Keys('RCtrl'..tostring(i-1))
  196.   end
  197.  end
  198.  if EditorsCondView[EID].SelectInfo then
  199.   editor.Select(EID, EditorsCondView[EID].SelectInfo.BlockType,
  200.                      EditorsCondView[EID].SelectInfo.StartLine,
  201.                      EditorsCondView[EID].SelectInfo.StartPos,
  202.                      EditorsCondView[EID].SelectInfo.EndPos-EditorsCondView[EID].SelectInfo.StartPos+1,
  203.                      EditorsCondView[EID].SelectInfo.EndLine-EditorsCondView[EID].SelectInfo.StartLine+1
  204.                )
  205.  end
  206.  GoToLinePos(EID, lnp, clp, tsl, lpc)
  207.  EditorsCondView[EID] = nil
  208.  return true
  209. end -- CondViewOff
  210. -- +
  211. -- Процедура обработки событий при сжатом виде (запрет на сохранение)
  212. -- -
  213.  
  214. local function ProcessEditorEvent(EID,event)
  215.  local ei=editor.GetInfo(EID)
  216.  if not EditorsCondView[EID] then return end
  217.  if event==F.EE_CLOSE then -- Приберёмся перед уходом
  218.   EditorsCondView[EID] = nil -- уничтожим управляющую структуру
  219.  end
  220.  if event == F.EE_SAVE then
  221.   -- Несмотря на явный запрет F2, ShiftF2 остаётся возможность
  222.   -- сохранения файла (например, макрокоманда CtrlS вызывает сохранение)
  223.   -- В этом случае просто отменяю сжатый режим.
  224.   CondViewOff(ei, EID, false)
  225.  end;
  226. end -- ProcessEditorEvent
  227. -- +
  228. -- Процедура сброса всех сжатых режимов
  229. -- -
  230. local function ExitScript()
  231.  local ei, EID
  232.  for ii in pairs(EditorsCondView) do
  233.   if EditorsCondView[ii] then
  234.    EID = ii
  235.    ei = editor.GetInfo(ii)
  236.    CondViewOff(ei, EID, false)
  237.   end
  238.  end
  239. end -- ExitScript
  240.  
  241. -- +
  242. -- ФУнкция настроек
  243. local function CondViewSetting()
  244.  local I, ID, y = {}, {}
  245.  local SS=nil
  246.  local guid = win.Uuid("212f0e54-459c-41f7-ab9c-6473f0bcc338")
  247.  table.insert(I, { F.DI_DOUBLEBOX, 1, 1, 60, 15, 0, 0, 0, 0, 'Настройки горячих клавиш для макроса CondView' })
  248.  
  249.  y=3
  250.  table.insert(I, { F.DI_TEXT, 3, y, 0, y, 0, 0, 0, 0, '&1. Включение «сжатого» режима' })
  251.  table.insert(I, { F.DI_EDIT, 37, y, 58, y, 0, "", 0, 0, S.OnKey })
  252.  ID.OnKey=#I
  253.  
  254.  y=y+2
  255.  table.insert(I, { F.DI_TEXT, 3, y, 0, y, 0, 0, 0, 0, '&2. Выключение «сжатого» режима' })
  256.  table.insert(I, { F.DI_EDIT, 37, y, 58, y, 0, "", 0, 0, S.OffKey })
  257.  ID.OffKey=#I
  258.  y=y+1
  259.  table.insert(I, { F.DI_TEXT, 6, y, 0, y, 0, 0, 0, 0, 'с возвратом на прежнюю позицию' })
  260.  
  261.  y=y+2
  262.  table.insert(I, { F.DI_TEXT, 3, y, 0, y, 0, 0, 0, 0, '&3. Выключение «сжатого» режима' })
  263.  table.insert(I, { F.DI_EDIT, 37, y, 58, y, 0, "", 0, 0, S.GoKey })
  264.  ID.GoKey=#I
  265.  y=y+1
  266.  table.insert(I, { F.DI_TEXT, 6, y, 0, y, 0, 0, 0, 0, 'с переходом на новую позицию' })
  267.  
  268.  y=y+2
  269.  table.insert(I, { F.DI_TEXT, 3, y, 0, y, 0, 0, 0, 0, '&4. Настройка «горячих» клавиш' })
  270.  table.insert(I, { F.DI_EDIT, 37, y, 58, y, 0, "", 0, 0, S.SetupKey })
  271.  ID.SetupKey=#I
  272.  
  273.  y=y+2
  274.  table.insert(I, { F.DI_BUTTON, 15, y, 0, y, 0, 0,0, F.DIF_DEFAULTBUTTON,"Сохранить" })
  275.  ID.SaveBtn = #I
  276.  table.insert(I, { F.DI_BUTTON, 45, y, 0, y, 0, 0,0, 0,"Отмена" })
  277.  
  278.  local function DlgProc(hDlg, Msg, _, _)
  279.   local function __GetDialogData()
  280.    SS.OnKey = far.SendDlgMessage(hDlg, "DM_GETTEXT", ID.OnKey, 0)
  281.    SS.OffKey  = far.SendDlgMessage(hDlg, "DM_GETTEXT", ID.OffKey, 0)
  282.    SS.GoKey = far.SendDlgMessage(hDlg, "DM_GETTEXT", ID.GoKey, 0)
  283.    SS.SetupKey  = far.SendDlgMessage(hDlg, "DM_GETTEXT", ID.SetupKey, 0)
  284.   end
  285.   if not SS then
  286.    SS={}
  287.    __GetDialogData()
  288.   end
  289.   local function __tableFind(tbl, itm)
  290.    for _,v in pairs(tbl) do
  291.     if v==itm then return true end
  292.    end
  293.    return false
  294.   end
  295.   if __tableFind({F.DN_BTNCLICK, F.DN_EDITCHANGE}, Msg) then
  296.    __GetDialogData()
  297.   end
  298.  end
  299.  local dRes = far.Dialog(guid, -1, -1, 63, 17, nil, I, 0 , DlgProc)
  300.  if dRes == ID.SaveBtn then
  301.   MergeSettings(S, SS)
  302.   local sSet='return {\n'
  303.   for i,v in pairs(S) do
  304.    sSet = sSet .. i .. '=' .. string.format('%q', v) .. ',\n'
  305.   end
  306.   sSet = sSet .. '}'
  307.   local fCfg=io.open(CfgName, 'w')
  308.   fCfg:write(sSet)
  309.   fCfg:close()
  310.   if far.Message("Новые назначения вступят в силу после перезагрузки макросов\n"..
  311.               "Перезагрузить ВСЕ макросы сейчас?", "", ";YesNo", "w") == 1 then
  312.    ExitScript()
  313.    local msg = Far.GetConfig('Language.Help')=="Russian" and "Перезагрузка макросов" or "Reload macros"
  314.    far.Message(msg,"","")
  315.    far.MacroLoadAll()
  316.    win.Sleep(200)
  317.    far.AdvControl("ACTL_REDRAWALL")
  318.   end
  319.  end
  320. end -- CondViewSetting
  321. -- -
  322. Macro {
  323.   description="Condenced View"; area="Editor"; key=S.OnKey or "AltF4";
  324.   condition=function()
  325.    return not IsMacroActive()
  326.   end;
  327.   action=
  328.   function()
  329.    local ei=editor.GetInfo()
  330.    if ei == nil then return end
  331.    local EID=ei.EditorID
  332.    --return EditorsCondView[EID] and CondViewOff(ei, EID, false) or CondViewOn(ei, EID)
  333.    return CondViewOn(ei, EID)
  334.   end;
  335. }
  336.  
  337. Macro {
  338.   description="Condenced View - Escape"; area="Editor"; key=S.OffKey or "Esc F10";
  339.   condition=IsMacroActive;
  340.   action=
  341.   function()
  342.    local ei=editor.GetInfo()
  343.    if not ei then return end
  344.    local EID=ei.EditorID
  345.    CondViewOff(ei, EID, false)
  346.   end;
  347. }
  348.  
  349. Macro {
  350.   description="Condenced View - ignore SaveFile"; area="Editor"; key="F2 ShiftF2";
  351.   condition=IsMacroActive;
  352.   action=
  353.   function()
  354.    far.Message('Сохранение файла в режиме\nсжатого просмотра невозможно','Condenced View',';Ok','w')
  355.   end;
  356. }
  357.  
  358. Macro {
  359.   description="Condenced View - ignore ReadOnly mode off CtrlL)"; area="Editor"; key="CtrlL";
  360.   condition=IsMacroActive;
  361.   action=
  362.   function()
  363.   end;
  364. }
  365.  
  366. Macro {
  367.   description="Condenced View - GoTo NewPos"; area="Editor"; key=S.GoKey or "Enter";
  368.   condition=IsMacroActive;
  369.   action=
  370.   function()
  371.    local ei=editor.GetInfo()
  372.    if not ei then return end
  373.    local EID=ei.EditorID
  374.    CondViewOff(ei, EID, true)
  375.   end;
  376. }
  377.  
  378. Macro {
  379.   description="Condenced View - Settings"; area="Editor"; key=S.SetupKey;
  380.   condition=IsMacroActive;
  381.   action=CondViewSetting;
  382. }
  383. Event {
  384.   group="EditorEvent";
  385.   condition=
  386.     function(id)
  387.      return EditorsCondView[id]
  388.     end;
  389.   action=ProcessEditorEvent;
  390. }
  391. Event {
  392.   group="EditorInput";
  393.   condition=IsMacroActive;
  394.   action=ProcessEditorInput;
  395. }
  396. Event {
  397.   group="ExitFAR";
  398.   condition=
  399.     function()
  400.      return EditorsCondView and table.maxn(EditorsCondView) > 0
  401.     end;
  402.   action=ExitScript;
  403. }
«Горячие» клавиши:
  • Включение «сжатого» режима AltF4
    Выключение «сжатого» режима с возвратом на прежнюю позицию F10 Esc
    Выключение «сжатого» режима с переходом на новую позицию Enter
    Настройка «горячих» клавиш AltF4

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

Реализация CondView

Post by Shmuel » Fri 24 Jul, 2015 03:11

buniak_a_h wrote:В фаре 1.7 был замечательный плугин - CondView. Он "скрывал" строки, информация в которых начиналась правее позиции курсора в момент вызова, что очень удобно для разработчиков софта (скрыть вложенные блоки). Я попытался сделать аналог в виде макроса на LUA. Некоторые вещи я не смог использовать (в частности, вместо Editor.SetPosition пришлось писать клавиатурную последовательность). Но в общем и целом макрос работает. Сам макрос можно скачать по ссылке. Если кто-нить из знатоков сможет проверить-исправить-улучшить и закачать на PlugRing - я думаю, многим это покажется удобным...
editor.SetPosition работает, но не перерисовывает редактор. Если нужна немедленная перерисовка, нужно вызвать editor.Redraw.

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

Реализация CondView

Post by John Doe » Fri 24 Jul, 2015 08:36

buniak_a_h wrote: Сам макрос можно скачать по ссылке
Если действительно нужны отзывы, то лучше выложить прямо здесь, в первом сообщении прямым текстом, в теге

Code: Select all

, или аналогичном.

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

Реализация CondView

Post by John Doe » Fri 24 Jul, 2015 10:49

buniak_a_h wrote: В фаре 1.7 был замечательный плугин - CondView.
Кстати что за плагин?
Видимо речь о Condenced view?

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Реализация CondView

Post by buniak_a_h » Fri 24 Jul, 2015 13:03

John Doe wrote:
buniak_a_h wrote: В фаре 1.7 был замечательный плугин - CondView.
Кстати что за плагин?
Видимо речь о Condenced view?
Да, этот плугин. На юникодной версии не работает, Некоторые перешли на 64-разрядную Windows - пришлось переходить на Far3. Очень не хватало этого плугина...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Реализация CondView

Post by buniak_a_h » Fri 24 Jul, 2015 13:04

John Doe wrote:
buniak_a_h wrote: Сам макрос можно скачать по ссылке
Если действительно нужны отзывы, то лучше выложить прямо здесь, в первом сообщении прямым текстом, в теге

Code: Select all

, или аналогичном.[/quote]
Извините, 180 строк кода... Неужто такие макросы сюда пропускают?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Реализация CondView

Post by buniak_a_h » Fri 24 Jul, 2015 13:20

Shmuel, Может, объясните такую странность: конструкция

Code: Select all

 editor.SetTitle(editor.FileName.."?") 
(editor со строчной буквы) вызывает ошибку (что-то вроде "требуется число, а задается строка), а конструкция

Code: Select all

Editor.SetTitle(Editor.FileName.."?")
(Editor - с прописной) работает нормально. При этом в конструкции

Code: Select all

editor.UndoRedo(...)
(editor - строчными) работает нормально. В документации обе конструкции описаны начинающимися со строчной буквы. Есть какое-нибудь правило, когда надо писать с прописной, а когда - со строчной?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

Реализация CondView

Post by John Doe » Fri 24 Jul, 2015 13:35

buniak_a_h wrote: Извините, 180 строк кода... Неужто такие макросы сюда пропускают?
Конечно.
Если большой, то можно вложением, или использовать тег [Codebox]
buniak_a_h wrote: Может, объясните такую странность: конструкция
Это 2 разные функции, параметры отличаются, описаны в разных мануалах:
luafar_manual.chm
macroapi_manual.ru.chm
И настоятельно рекомендую изучить шапки тем, прилепленных в этом подфоруме.

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

Реализация CondView

Post by Shmuel » Fri 24 Jul, 2015 14:07

buniak_a_h wrote: Shmuel, Может, объясните такую странность:
Читайте документацию, тогда такие вопросы и возникать не будут.
В LuaFAR API все имена библиотек начинаются со строчных букв, а в Macro API - с прописных.

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Реализация Condensed View

Post by buniak_a_h » Fri 24 Jul, 2015 14:27

Shmuel, осталось только выяснить, какой API я использую, когда вызываю функции из макроса... Потому что эти API описаны в разных документах, и какой интерфейс надо использовать - я не понял. На самом деле вопрос закрыт.
На самом деле мне жаль, что настоящие гуру не занялись таким нужным плугином. В макросе некоторые вещи я не смог реализовать.
Last edited by buniak_a_h on Sun 26 Jul, 2015 03:29, edited 1 time in total.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

Shmuel
Posts: 5234
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

Реализация CondView

Post by Shmuel » Fri 24 Jul, 2015 14:37

buniak_a_h wrote: какой интерфейс надо использовать - я не понял
В макросах вы можете использовать оба интерфейса в любой пропорции.

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Реализация CondView

Post by buniak_a_h » Fri 24 Jul, 2015 14:56

Shmuel wrote:
buniak_a_h wrote: какой интерфейс надо использовать - я не понял
В макросах вы можете использовать оба интерфейса в любой пропорции.
Да это я уже понял. Просто не понял, что (1) для полноты картины надо читать оба мануала; (2) не заметил сразу, что в мануалах разные регистры; (3) не знал вообще, что LUA - регистрозависимый язык (извините, избалован паскалем :oops: ).
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

Реализация CondView

Post by John Doe » Fri 24 Jul, 2015 15:20

buniak_a_h wrote: В макросе некоторые вещи я не смог реализовать.
Спрашивайте, подскажем.

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Реализация CondView

Post by buniak_a_h » Fri 24 Jul, 2015 15:36

John Doe!
Из всего, что хотелось бы видеть в реализации, остались 4 вещи:
  1. 1. В статусной строке (сверху) отображать не номер сжатой строки, а исходный номер. Таблица соответствия {сходный<->сжатый} имеется.
    2. При включенном сжатом режиме отмечать цветом всю текущую строку
    3. Не устанавливать признак изменения файла (в начале работы макроса я просто удаляю строки, которые не должны быть видны).
    4. Запрещать сохранение сжатого файла.
Насколько я понимаю, пп.1,2 и 4 можно реализовать через подписку на события. И хотя я предусмотрел блокировку повторного вызова обработчика события, но судя по всему, он всё равно вызывается. Во всяком случае, возникает переполнение стэка.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

Реализация CondView

Post by John Doe » Fri 24 Jul, 2015 15:46

buniak_a_h wrote: В статусной строке (сверху) отображать не номер сжатой строки, а исходный номер.
Есть апи для изменения статусной строки, но только левой части, где отображается имя файла.
Не исключаю, что можно "рисовать" что-то и в правой части вручную (far.Text), но мне кажется игра не стоит свеч.
buniak_a_h wrote: При включенном сжатом режиме отмечать цветом всю текущую строку
Есть апи раскраски, есть примеры несложных скриптов на форуме, см. например "Cross" в подфоруме полезных скриптов.
buniak_a_h wrote: Не устанавливать признак изменения файла
Вряд ли это возможно...
buniak_a_h wrote: Во всяком случае, возникает переполнение стэка.
Покажите код, посмотрим что не так.
Но для начала оформите первый пост темы.

P.S.
Находить ошибки в коде неплохо помогает luacheck.

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 40 times
Been thanked: 5 times
Contact:

Реализация Condensed View

Post by buniak_a_h » Fri 24 Jul, 2015 17:19

John Doe wrote: Есть апи для изменения статусной строки, но только левой части, где отображается имя файла
Я это и имел в виду. Сейчас я вывожу вместо имени файла «<Имя_файла> Condenced». Туда же после двоеточия можно было бы писать номер исходной строки. Проблема в том, как отследить перемещение по файлу.
John Doe wrote: Есть апи раскраски
Это я тоже уже видел. Проблема та же: как обнаружить перемещение по файлу, чтобы отменить раскраску предыдущей строки и раскрасить нынешнюю.
John Doe wrote: buniak_a_h писал(а):
Источник цитаты Не устанавливать признак изменения файла
Вряд ли это возможно...
Возможно, есть способ не удалять строки, а просто делать их как-то невидимыми... Это решило бы многие проблемы.
John Doe wrote: Покажите код,
В тексте макроса закомментировано Event {...} и подписка.
И главное
John Doe wrote: для начала оформите первый пост темы
Я никогда не имел дело с форумами. Что значить "оформить первый пост"? Закачать в него исходный текст макроса? Все почти 200 строк? "Добавить файл" - не пускают (неверно расширение). Где хоть прочитать, какие можно, какие нельзя?
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

Post Reply

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