CtrlX и CtrlV "как в Windows"

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 01 Jul, 2015 17:57

Latest post of the previous page:

HaRT wrote:в Фаре не поддерживается цепочка макросов на одно и то же кнопкосочетание
Расскажите как вы это представляете (может оказаться что всё поддерживается).
HaRT wrote: где ещё и реализовывать моё предложение, как тут в макросе на CtrlV.
Например полно других сочетаний.
Во всяком случае мне пока не ясно как именно вы предлагаете на одной и той же клавише совместить два на первый взгляд несовместимых действия.

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

CtrlX и CtrlV "как в Windows"

Post by HaRT » Wed 01 Jul, 2015 18:09

John Doe wrote: как вы это представляете
Некий аналог наследования функциональности или делегирования функций: обработчик (макрос) верхнего уровня может выполнить действия до/после/вместо перехватываемого действия. При этом перехватываемое действие может само являться подобным обработчиком, который оборачивает следующий и т.д.
Насколько я знаю, сейчас подобной функциональности можно частично добиться использованием условий и приоритетов. Кстати, сейчас попробуй задействовать условие, чтобы можно было на вставку в командную строку навесить отдельный макрос…
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 01 Jul, 2015 18:19

Для начала, в фаре нет даже самого понятия "действие", и это действительно неудобно.
(обсуждалось, например тут: http://forum.farmanager.com/viewtopic.php?f=54&t=6270)
HaRT wrote: можно частично добиться использованием условий и приоритетов.
А если отвлечься от деталей реализации?
Какого конкретно поведения вы хотите достичь?
Не вообще, а в контексте вашей практической задачи.

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

CtrlX и CtrlV "как в Windows"

Post by HaRT » Wed 01 Jul, 2015 19:00

John Doe wrote: Какого конкретно поведения вы хотите достичь?
Чтобы вставку файлов как файлов (на панель) и как их путей (в командную строку) можно было настраивать разными макросами.
Впрочем, первого я уже достиг, несколько модифицировав Ваш вышеприведённый макрос:
Code: [Select all] [Expand/Collapse] [Download] (Shell_Clipboard.lua)
  1. local function AllBitsSet( val, mask )
  2.  
  3.   return mask == band( val, mask )
  4.  
  5. end
  6.  
  7.  
  8.  
  9. local function APanelRealFiles()
  10.  
  11.   local PANEL_OPIFLAGS_REGULAR, PANEL_OPIFLAGS_REALNAMES = 0, 0x20
  12.  
  13.   return APanel.Visible and
  14.  
  15.     ( APanel.OPIFlags == PANEL_OPIFLAGS_REGULAR or
  16.  
  17.       AllBitsSet( APanel.OPIFlags, PANEL_OPIFLAGS_REALNAMES ) )
  18.  
  19. end
  20.  
  21.  
  22.  
  23. local function APanelPasteOK()
  24.  
  25.   return APanel.Visible and APanelRealFiles()
  26.  
  27. end
  28.  
  29.  
  30.  
  31. local function ClipboardDropAvailable()
  32.  
  33.   local CF_HDROP = 15
  34.  
  35.   return C.IsClipboardFormatAvailable( CF_HDROP ) ~= 0
  36.  
  37. end
  38.  
  39.  
  40.  
  41. Macro {
  42.  
  43.   area="Shell"; key="CtrlV";
  44.  
  45.   condition = function()
  46.  
  47.     return CmdLine.Empty and APanelPasteOK() and ClipboardDropAvailable()
  48.  
  49.   end;
  50.  
  51.   action = function()
  52.  
  53.     EMenuCommand( 'paste "' .. APanel.Path .. '"' )
  54.  
  55.   end;
  56.  
  57. }
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 01 Jul, 2015 20:00

HaRT wrote: APanelRealFiles
Кстати да, макросы в шапке этого пока не учитывают.
HaRT wrote: разными макросами.
Т.е. вставку в командную строку отдельно, а не на CtrlV?

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

CtrlX и CtrlV "как в Windows"

Post by HaRT » Wed 01 Jul, 2015 20:05

John Doe wrote: вставку в командную строку отдельно, а не на CtrlV?
Да, отдельно, но как раз таки тоже на [b]CtrlV[/b].
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 01 Jul, 2015 20:12

В одном случае я хочу запустить paste, в другом просто вставить в командную строку.
В обоих случаях в клипборде содержится CF_HDROP.

Откуда машине знать чего я хочу?

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

CtrlX и CtrlV "как в Windows"

Post by HaRT » Wed 01 Jul, 2015 20:14

John Doe wrote: Откуда машине знать чего я хочу?
Так ведь на то и есть condition'ы, чтобы я, человек, объяснил тупой машине, когда что.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 01 Jul, 2015 20:19

HaRT wrote: Так ведь на то и есть condition'ы
Так каковы же они, в вашем случае?

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

CtrlX и CtrlV "как в Windows"

Post by HaRT » Wed 01 Jul, 2015 20:34

John Doe wrote: каковы же они
Для вставки файлов, как и написано в моём коде выше,

Code: Select all

  condition = function()
    return CmdLine.Empty and APanelPasteOK() and ClipboardDropAvailable()
  end;
А макрос на вставку путей я ещё не делал.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

CtrlX и CtrlV "как в Windows"

Post by sToLp » Wed 01 Jul, 2015 21:01

Возможно я чего то не понимаю, но ведь, кажется, после сабжевого макроса на CtrlX в комстроку по ShiftIns можно вставить имя вырезанного файла с путём к нему.

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Wed 01 Jul, 2015 21:28

HaRT wrote: как и написано в моём коде выше
Действительно, проглядел.
sToLp wrote: после сабжевого макроса на CtrlX в комстроку по ShiftIns можно вставить имя вырезанного файла с путём к нему.
И?

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

CtrlX и CtrlV "как в Windows"

Post by sToLp » Wed 01 Jul, 2015 22:18

HaRT wrote: А макрос на вставку путей я ещё не делал.
John Doe wrote:
sToLp wrote: после сабжевого макроса на CtrlX в комстроку по ShiftIns можно вставить имя вырезанного файла с путём к нему.
И?
Например, пишу в комстроке: 'goto:', запускаю сабжевый же CtrlV и потом запускаю команду. Или же надо ещё что-то другое?

Упс! Кажется дошло: адрес файла то после его переноса изменился. Речь ведь об этом?

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

CtrlX и CtrlV "как в Windows"

Post by John Doe » Thu 02 Jul, 2015 11:54

sToLp wrote: адрес файла то после его переноса изменился. Речь ведь об этом?
Возможно вас ввело в заблуждение, что в шапке не описан макрос на Ctrl-C, но о чём вы пытаетесь спросить до сих пор непонятно.
После Ctrl-X с файлом физически ничего не происходит, для перемещения необходимо следом выполнить Ctrl-V при пустой командной строке.

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

CtrlX и CtrlV "как в Windows"

Post by sToLp » Thu 02 Jul, 2015 15:08

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: 7985
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 98 times

CtrlX и CtrlV "как в Windows"

Post by HaRT » Thu 02 Jul, 2015 15:58

sToLp wrote: в комстроку вставить полные (с путями, но старыми, бывшими до переноса) имена вырезанных файлов
Да
sToLp wrote: чтобы пути вставлялись новые
Нет
sToLp wrote: не только по ShiftIns, а, при определённых условиях, и по Ctrl-V
Да
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

CtrlX и CtrlV "как в Windows"

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

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

Post Reply

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

Who is online

Users browsing this forum: No registered users and 2 guests