Автоматически начинать выделение текста под панелями мышью

Здесь обсуждается всё, что касается макросов.
ujos
Posts: 220
Joined: Fri 27 Apr, 2012 15:10
Has thanked: 10 times

Автоматически начинать выделение текста под панелями мышью

Post by ujos »

Можно как-то настроить FAR включать автоматическое выделение текста мышью, если панели выключены? Т.е. когда панели выключены, я хотел бы иметь возможность сразу выделять текст на консоли, вместо того чтобы нажимать Alt+Ins или WindowMenu->Edit->Mark
Last edited by HaRT on Tue 20 Jul, 2021 17:45, edited 1 time in total.
Reason: Тема перенесена; улучшен Заголовок.
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Автоматические выделение текста под панелями

Post by John Doe »

Прямого нет, но можно предложить вот такой извращённый:

Code: Select all

--https://forum.farmanager.com/viewtopic.php?p=167553#p167553
local function far_in_window () --vertical only
  local f = far.AdvControl"ACTL_GETFARRECT"
  local w = win.GetConsoleScreenBufferInfo()
  local yDelta = f.Top-w.WindowTop
  return yDelta==0, yDelta
end

Macro {
  area="Shell QView Info Tree"; key="MSLClick";
  condition=function()
    return not APanel.Visible and far_in_window()
  end;
  id="36906AA6-B678-4C0C-AB52-0CF0AD603048";
  action=function()
    Far.Window_Scroll(-1)
  end;
}

Macro {
  area="Common"; key="CtrlO";
  condition=function()
    local outside, yDelta
    if outside then
      Far.Window_Scroll(-yDelta)
    end
  end;
  id="6E8B2D6A-C49E-437F-815F-83DC6EA84B42";
  action=function()end;
}
Суть: фар и сам разрешает выделение, если промотать буфер.
Используя это, при первом клике мыши макрос проматывает буфер на 1, и дальше можно выделять.
Ctrl или Esc восстанавливают положение буфера.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматические выделение текста под панелями

Post by HaRT »

John Doe wrote: Tue 20 Jul, 2021 16:20 при первом нажатии мыши макрос его скроллит на 1, а по следующему можно уже выделять
А не получается ли при соблюдении условий по нажатию мыши засылать AltIns и сам клик?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Автоматические выделение текста под панелями

Post by John Doe »

HaRT wrote: Tue 20 Jul, 2021 16:24 А не получается ли при соблюдении условий по нажатию мыши засылать AltIns и сам клик?
Или так, да.

Code: Select all

Macro {
  area="Shell QView Info Tree"; key="MSLClick";
  condition=function()
    return not APanel.Visible
  end;
  id="9D672477-BC4B-4710-AB5C-FF2FD6E8C2C0";
  action=function()
    Keys("AltIns")
  end;
}
Но тоже требуется второй клик, по первому выделяет блок между клавиатурным курсором, и мышиным.
Не знаю как побороть.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматические выделение текста под панелями

Post by HaRT »

John Doe wrote: Tue 20 Jul, 2021 16:31 по первому выделяет блок между клавиатурным курсором, и мышиным.
Не знаю как побороть.
Если бы нашёлся способ определить положение каретки, то можно было бы засылкой клавиш сместить её в положение мышиного курсора…
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматические выделение текста под панелями

Post by HaRT »

Code: Select all

--{ See https://forum.farmanager.com/viewtopic.php?p=167559#p167559
local function mouseInOrAbovePanel( panel )
  local x0 = panel.Left and 0           or Far.Width - panel.Width
  local x1 = panel.Left and panel.Width or Far.Width  -- exclusive
  local y1 = ( panel.Visible and panel.Height or 0 ) + ( Far.GetConfig'Interface.ShowMenuBar' and 1 or 0 )
  return Mouse.X >= x0 and Mouse.X < x1 and Mouse.Y < y1
end
local function mouseAboveCmdLine()
  return Mouse.Y < Far.Height - ( Far.GetConfig'Screen.KeyBar' and 2 or 1 )
end
local function mouseInOutputArea()
  return mouseAboveCmdLine() and not mouseInOrAbovePanel( APanel ) and not mouseInOrAbovePanel( PPanel )
end
local function mouseInTogglePanelsCell()  return Mouse.X == 0 and Mouse.Y == 0  end
Macro { description = 'Grab by mouse right away when over the output area (off other UI elements)';
  area = 'Shell Tree QView Info Desktop'; key = 'MSLClick'; id = '26964FEA-72B5-4EF4-9620-1BDE05180F7E';
  condition = function() return mouseInOutputArea() and not mouseInTogglePanelsCell() or Area.Desktop end;
  action = function()
    Keys( ('AltIns %d*Left %d*Up %d*Right %d*Down'):format( Far.Width, Far.Height, Mouse.X, Mouse.Y ) )
  end
}
--}
Итого, лишний щелчок не нужен, в моих тестах работает вполне интуитивно. @ujos, это то, что вам требовалось?
Last edited by HaRT on Sun 25 Jul, 2021 16:48, edited 4 times in total.
Reason: Запрещён захват с позиции (0,0), препятствовавший переключению видимости панелей.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматически начинать выделение текста под панелями мышью

Post by HaRT »

Думаю, макрос можно расширить, чтобы захват начинался с любого знакоместа, не занятого панелями, командной строкой, главным меню и строкой функциональных клавиш, — т.е. ниже панелей (потенциально разновысоких) и сбоку от активной панели, если пассивная выключена. Но сейчас мне лень это делать.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматически начинать выделение текста под панелями мышью

Post by HaRT »

В макрос добавлена поддержка области Scrollback (по недоразумению именуемой Desktop).
Фар есть инструмент, а не нянька. © 2009 DrKnS
ujos
Posts: 220
Joined: Fri 27 Apr, 2012 15:10
Has thanked: 10 times

Автоматически начинать выделение текста под панелями мышью

Post by ujos »

HaRT, работает отлично! Спасибо!
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматически начинать выделение текста под панелями мышью

Post by HaRT »

HaRT wrote: Tue 20 Jul, 2021 18:05 Думаю, макрос можно расширить, чтобы захват начинался с любого знакоместа, не занятого панелями, командной строкой, главным меню и строкой функциональных клавиш, — т.е. ниже панелей (потенциально разновысоких) и сбоку от активной панели, если пассивная выключена.
Сделал. Проверяйте со всевозможными конфигурациями перечисленного.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Автоматически начинать выделение текста под панелями мышью

Post by citRiks »

HaRT, у меня на линейке функциональных клавишах (которые внизу) не работает,
если начинать выделение именно с нижней линии этой.
если же начать выделение не с нижней, то выделяется.
Far Manager, version 3.0.5836.0 x86

Вопще, как мышь может быть удобней клавиатуры для подобной задачи?
ujos, на всякий случай сообщаю, что АльтИнс + Ктрл<Стрелки> дают шаг в 5 по вертикали и 10 по горизонтали позиций,
что решает задачу быстрого перехода в нужную позицию лучше чем мышь
Last edited by citRiks on Sun 25 Jul, 2021 10:19, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматически начинать выделение текста под панелями мышью

Post by HaRT »

citRiks wrote: Sun 25 Jul, 2021 10:18 у меня на линейке функциональных клавишах (которые внизу) не работает
И не должно — перечитайте в цитате из меня же, какая задача решалась.
Если научите вешать разные действия на нажатие–отпускание и нажатие–протяжку мыши, можно будет ещё усовершенствовать скрипт.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматически начинать выделение текста под панелями мышью

Post by HaRT »

В макросе запрещён захват с позиции (0,0), препятствовавший переключению видимости панелей.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10854
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Автоматически начинать выделение текста под панелями мышью

Post by HaRT »

Вместе с вышеприведённым макросом «авто-захвата» удобно использовать .
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13847
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Автоматически начинать выделение текста под панелями мышью

Post by John Doe »

Макрос "сноса" действительно удобен. Назначил себе на CtrlEnter.

Замечу только что восстанавливать оригинальный буфер на самом деле не требуется.
https://t.me/FarManager — Telegram чат
Post Reply

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