CtrlX и CtrlV "как в Windows"

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

CtrlX и CtrlV "как в Windows"

Post by John Doe » Thu 02 Jul, 2015 17:26

Latest post of the previous page:

sToLp wrote: при определённых условиях, и по Ctrl-V?
Да, при непустой командной строке пути вставляются туда.
Сейчас при вставке имена с пробелами (и пр.) не берутся в кавычки, но это можно исправить, об этом и разговор.

User avatar
sToLp
Posts: 763
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 56 times
Been thanked: 5 times

CtrlX и CtrlV "как в Windows"

Post by sToLp » Thu 02 Jul, 2015 18:40

HaRT, John Doe
Большое спасибо за разъяснения! Теперь, кажется, и роль макроса на Ctrl-C вкупе с двумя другими становится мне ясна.
Сейчас весь комбайн я понимаю так:

По Ctrl-C:
Если комстрока не пуста — она (её содержание) копируется в буфер, а если пуста — в буфер заносятся выделенные файлы (или файл под курсором) и вместе с тем полные пути к ним.

По Ctrl-X:
Если комстрока не пуста — удаляется и заносится в буфер её содержание, а если пуста — в буфер заносятся выделенные файлы (или файл под курсором) и вместе с тем полные пути к ним, но сами файлы при этом остаются пока на месте.

По Ctrl-V:
Если комстрока не пуста — она дополняется содержимым буфера (последним результатом, полученным по Ctrl-C или Ctrl-X), а если пуста, то на панель копируются файлы из буфера, при этом те файлы, которые занесены в буфер по Ctrl-X, со старого места удаляются.

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

CtrlX и CtrlV "как в Windows"

Post by HaRT » Thu 02 Jul, 2015 18:55

sToLp, что касается командной строки, Вы упускаете возможность наличия в ней собственного выделения текста, а также влияние положения в ней каретки при вставке.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
sToLp
Posts: 763
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 56 times
Been thanked: 5 times

CtrlX и CtrlV "как в Windows"

Post by sToLp » Thu 02 Jul, 2015 19:27

HaRT
Спасибо за уточнения!
С течением времени постараюсь и их осознать и усвоить. А пока с благодарностью к соавторам данных макросов потихоньку осваиваю то, что на текущий момент понял.

DV
Posts: 308
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 2 times
Been thanked: 2 times

CtrlX и CtrlV "как в Windows"

Post by DV » Wed 08 Jul, 2015 11:59

Обновил скрипт: теперь проверяется CF_HDROP вместо CF_TEXT; также добавлены описания макросов.
Проверку на реальную панель не добавлял, так как сам EMenu в этом случае выдаёт "Can't show the menu", что выглядит более наочно. (Хотя, да, было бы красивее выдавать собственное сообщение типа "Can't drop files here".)
Насчёт добавления кавычек вокруг имён файлов - это интересно, но пока не знаю, как сделать. (Если придётся использовать FFI, чтобы достать имена файлов, то как-то сложновато это для такой вроде бы простой задачи.)

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

CtrlX и CtrlV "как в Windows"

Post by HaRT » Wed 08 Jul, 2015 12:03

DV wrote: Насчёт добавления кавычек вокруг имён файлов
Строго говоря, это уже не относится к обозначенной теме. Поэтому-то я и сделал в своём варианте, чтобы можно было вставку в командную строку обрабатывать отдельным макросом.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 08 Jul, 2015 12:11

DV wrote: Если придётся использовать FFI, чтобы достать имена файлов
Имена в клипборде, ffi не понадобится.

DV
Posts: 308
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 2 times
Been thanked: 2 times

CtrlX и CtrlV "как в Windows"

Post by DV » Wed 08 Jul, 2015 14:02

В первом приближении макрос для CtrlV - как часть HotkeyClipboard.lua - может выглядеть так:
  1. local EnquoteFileNames = true
  2.  
  3. Macro {
  4.   area="Shell";
  5.   key="CtrlV";
  6.   description="Clipboard: Paste text to CmdLine or files to APanel";
  7.   flags="";
  8.   action = function()
  9.     if CmdLine.Empty and APanel.Visible and IsClipboardContainingFiles() then
  10.       EMenuCommand("paste \"" .. APanel.Path .. "\"")
  11.     else
  12.       if EnquoteFileNames then
  13.         local fnames = ""
  14.         local fname
  15.         for fname in string.gmatch(mf.clip(0), "[^\r\n]+") do
  16.           if fnames:len() > 0 then
  17.             fnames = fnames .. " "
  18.           end
  19.           if fname:find(" ") ~= nil then
  20.             fnames = fnames .. '"' .. fname .. '"'
  21.           else
  22.             fnames = fnames .. fname
  23.           end
  24.         end
  25.         mf.print(fnames)
  26.       else
  27.         Keys("ShiftIns")
  28.       end
  29.     end
  30.   end;
  31. }
Дальше можно попробовать применить парвила "закавычивания" самого FAR (не знаю, как).

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 08 Jul, 2015 14:57

DV wrote: В первом приближении макрос для CtrlV - как часть HotkeyClipboard.lua - может выглядеть так:
На lua подобные задачи удобно решать с помощью gsub, и в сложных случаях в качестве repl можно использовать функцию.
DV wrote: (не знаю, как)
Открываем far:config, фильтруем по quote, жмём ShiftF1.
Хотя на практике наверно можно и всё подряд заключать в кавычки

User avatar
Sim
Posts: 365
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 1 time
Contact:

CtrlX и CtrlV "как в Windows"

Post by Sim » Wed 25 Nov, 2015 06:06

спасибо за макрос, работает как надо.
кстати его можно было бы включить в стандартную поставку Far в составе Emenu.
жаль только что при этом блокируется интерфейс фара, интересно а с этим можно что-то сделать?
Случайности не случайны.

gerser
Posts: 58
Joined: Tue 11 Oct, 2005 20:13
Location: Сургут
Contact:

CtrlX и CtrlV "как в Windows"

Post by gerser » Thu 28 Jan, 2016 14:20

ух ты... всё готово уже, оказывается. А я пытался такое сделать через menu.select. Только в текстовом меню от emenu оно не срабатывает. Кто-нить объяснит мне, почему ?

ccaid
Posts: 805
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 9 times
Been thanked: 5 times

CtrlX и CtrlV "как в Windows"

Post by ccaid » Wed 03 Aug, 2016 08:07

наткнулся на особенность предложенных макросов, которая заставила пару минут потупить. простой юзкейс: зашёл в папку, выделил файлы, нажал CtrlC или CtrlV, пошёл вставлять — вставляется не то.
оказывается в макросах проверка упрощена, и нельзя стоять на "..", даже если есть выделенные файлы.
Фар делают добрые люди

DV
Posts: 308
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 2 times
Been thanked: 2 times

CtrlX и CtrlV "как в Windows"

Post by DV » Sat 06 Aug, 2016 23:45

ccaid wrote:оказывается в макросах проверка упрощена, и нельзя стоять на "..", даже если есть выделенные файлы.
Полагаю, условия

Code: Select all

if APanel.Current ~= ".." and APanel.Current ~= "." then
нужно заменить на

Code: Select all

if APanel.Selected or (APanel.Current ~= ".." and APanel.Current ~= ".") then
29.08.2016
Внёс эти изменения в скрипт на первой странице темы.

Post Reply

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