CtrlX и CtrlV "как в Windows"

Здесь обсуждается всё, что касается макросов.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

CtrlX и CtrlV "как в Windows"

Post by sToLp »

Latest post of the previous page:

John Doe wrote:Возможно вас ввело в заблуждение, что в шапке не описан макрос на Ctrl-C
Да, подзапутался, кажись.
Убедительная просьба, по возможности, сопровождать текст макросов комментариями и приводить поясняющие description.
John Doe wrote:После Ctrl-X с файлом физически ничего не происходит, для перемещения необходимо следом выполнить Ctrl-V при пустой командной строке.
Это я, кажется, понимаю. Ведь это, вроде бы, и есть главная фишка конструкции. И, по-моему, весьма полезная.
John Doe wrote: но о чём вы пытаетесь спросить до сих пор непонятно
Правильно ли я понимаю, что:
Пока что связка макросов Ctrl-X — Ctrl-V работает так, что после переноса файлов можно по ShiftIns в комстроку вставить полные (с путями, но старыми, бывшими до переноса) имена вырезанных файлов?
И Вы с HaRT`ом добиваетесь того, чтобы пути вставлялись новые, и не только по ShiftIns, а, при определённых условиях, и по Ctrl-V?
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

CtrlX и CtrlV "как в Windows"

Post by HaRT »

sToLp wrote: в комстроку вставить полные (с путями, но старыми, бывшими до переноса) имена вырезанных файлов
Да
sToLp wrote: чтобы пути вставлялись новые
Нет
sToLp wrote: не только по ShiftIns, а, при определённых условиях, и по Ctrl-V
Да
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CtrlX и CtrlV "как в Windows"

Post by John Doe »

sToLp wrote: при определённых условиях, и по Ctrl-V?
Да, при непустой командной строке пути вставляются туда.
Сейчас при вставке имена с пробелами (и пр.) не берутся в кавычки, но это можно исправить, об этом и разговор.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

CtrlX и CtrlV "как в Windows"

Post by sToLp »

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

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

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

По Ctrl-V:
Если комстрока не пуста — она дополняется содержимым буфера (последним результатом, полученным по Ctrl-C или Ctrl-X), а если пуста, то на панель копируются файлы из буфера, при этом те файлы, которые занесены в буфер по Ctrl-X, со старого места удаляются.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

CtrlX и CtrlV "как в Windows"

Post by HaRT »

sToLp, что касается командной строки, Вы упускаете возможность наличия в ней собственного выделения текста, а также влияние положения в ней каретки при вставке.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

CtrlX и CtrlV "как в Windows"

Post by sToLp »

HaRT
Спасибо за уточнения!
С течением времени постараюсь и их осознать и усвоить. А пока с благодарностью к соавторам данных макросов потихоньку осваиваю то, что на текущий момент понял.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

CtrlX и CtrlV "как в Windows"

Post by DV »

Обновил скрипт: теперь проверяется CF_HDROP вместо CF_TEXT; также добавлены описания макросов.
Проверку на реальную панель не добавлял, так как сам EMenu в этом случае выдаёт "Can't show the menu", что выглядит более наочно. (Хотя, да, было бы красивее выдавать собственное сообщение типа "Can't drop files here".)
Насчёт добавления кавычек вокруг имён файлов - это интересно, но пока не знаю, как сделать. (Если придётся использовать FFI, чтобы достать имена файлов, то как-то сложновато это для такой вроде бы простой задачи.)
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

CtrlX и CtrlV "как в Windows"

Post by HaRT »

DV wrote: Насчёт добавления кавычек вокруг имён файлов
Строго говоря, это уже не относится к обозначенной теме. Поэтому-то я и сделал в своём варианте, чтобы можно было вставку в командную строку обрабатывать отдельным макросом.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CtrlX и CtrlV "как в Windows"

Post by John Doe »

DV wrote: Если придётся использовать FFI, чтобы достать имена файлов
Имена в клипборде, ffi не понадобится.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

CtrlX и CtrlV "как в Windows"

Post by DV »

В первом приближении макрос для CtrlV - как часть HotkeyClipboard.lua - может выглядеть так:
  1. local EnquoteFileNames = true
  2.  
  3.  
  4.  
  5. Macro {
  6.  
  7.   area="Shell";
  8.  
  9.   key="CtrlV";
  10.  
  11.   description="Clipboard: Paste text to CmdLine or files to APanel";
  12.  
  13.   flags="";
  14.  
  15.   action = function()
  16.  
  17.     if CmdLine.Empty and APanel.Visible and IsClipboardContainingFiles() then
  18.  
  19.       EMenuCommand("paste \"" .. APanel.Path .. "\"")
  20.  
  21.     else
  22.  
  23.       if EnquoteFileNames then
  24.  
  25.         local fnames = ""
  26.  
  27.         local fname
  28.  
  29.         for fname in string.gmatch(mf.clip(0), "[^\r\n]+") do
  30.  
  31.           if fnames:len() > 0 then
  32.  
  33.             fnames = fnames .. " "
  34.  
  35.           end
  36.  
  37.           if fname:find(" ") ~= nil then
  38.  
  39.             fnames = fnames .. '"' .. fname .. '"'
  40.  
  41.           else
  42.  
  43.             fnames = fnames .. fname
  44.  
  45.           end
  46.  
  47.         end
  48.  
  49.         mf.print(fnames)
  50.  
  51.       else
  52.  
  53.         Keys("ShiftIns")
  54.  
  55.       end
  56.  
  57.     end
  58.  
  59.   end;
  60.  
  61. }
Дальше можно попробовать применить парвила "закавычивания" самого FAR (не знаю, как).
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CtrlX и CtrlV "как в Windows"

Post by John Doe »

DV wrote: В первом приближении макрос для CtrlV - как часть HotkeyClipboard.lua - может выглядеть так:
На lua подобные задачи удобно решать с помощью gsub, и в сложных случаях в качестве repl можно использовать функцию.
DV wrote: (не знаю, как)
Открываем far:config, фильтруем по quote, жмём ShiftF1.
Хотя на практике наверно можно и всё подряд заключать в кавычки
User avatar
Sim
Posts: 435
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 11 times
Been thanked: 2 times
Contact:

CtrlX и CtrlV "как в Windows"

Post by Sim »

спасибо за макрос, работает как надо.
кстати его можно было бы включить в стандартную поставку Far в составе Emenu.
жаль только что при этом блокируется интерфейс фара, интересно а с этим можно что-то сделать?
Случайности не случайны.
gerser
Posts: 58
Joined: Tue 11 Oct, 2005 20:13
Location: Сургут
Contact:

CtrlX и CtrlV "как в Windows"

Post by gerser »

ух ты... всё готово уже, оказывается. А я пытался такое сделать через menu.select. Только в текстовом меню от emenu оно не срабатывает. Кто-нить объяснит мне, почему ?
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

CtrlX и CtrlV "как в Windows"

Post by ccaid »

наткнулся на особенность предложенных макросов, которая заставила пару минут потупить. простой юзкейс: зашёл в папку, выделил файлы, нажал CtrlC или CtrlV, пошёл вставлять — вставляется не то.
оказывается в макросах проверка упрощена, и нельзя стоять на "..", даже если есть выделенные файлы.
Фар делают добрые люди
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

CtrlX и CtrlV "как в Windows"

Post by DV »

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
Внёс эти изменения в скрипт на первой странице темы.
SergD73
Posts: 7
Joined: Sun 28 Feb, 2021 19:49

CtrlX и CtrlV "как в Windows"

Post by SergD73 »

John Doe wrote: Wed 01 Jul, 2015 15:44 Так немного проще:
Подскажите пожалуйста, как использовать эти макросы? Куда их надо поместить?
Не понятно где искать описание. Заранее спасибо
Post Reply

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