CtrlX и CtrlV "как в Windows"

Здесь обсуждается всё, что касается макросов.
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 »

Latest post of the previous page:

John Doe wrote: при наличии в клипборде списка файлов запускать paste
Да, но поскольку в Фаре не поддерживается цепочка макросов на одно и то же кнопкосочетание, где ещё и реализовывать моё предложение, как тут в макросе на CtrlV.
Фар есть инструмент, а не нянька. © 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 »

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

John Doe 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 »

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

John Doe wrote: Какого конкретно поведения вы хотите достичь?
Чтобы вставку файлов как файлов (на панель) и как их путей (в командную строку) можно было настраивать разными макросами.
Впрочем, первого я уже достиг, несколько модифицировав Ваш вышеприведённый макрос:
  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: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CtrlX и CtrlV "как в Windows"

Post by John Doe »

HaRT wrote: APanelRealFiles
Кстати да, макросы в шапке этого пока не учитывают.
HaRT wrote: разными макросами.
Т.е. вставку в командную строку отдельно, а не на CtrlV?
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 »

John Doe wrote: вставку в командную строку отдельно, а не на CtrlV?
Да, отдельно, но как раз таки тоже на CtrlV.
Фар есть инструмент, а не нянька. © 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 »

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

Откуда машине знать чего я хочу?
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 »

John Doe wrote: Откуда машине знать чего я хочу?
Так ведь на то и есть condition'ы, чтобы я, человек, объяснил тупой машине, когда что.
Фар есть инструмент, а не нянька. © 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 »

HaRT wrote: Так ведь на то и есть condition'ы
Так каковы же они, в вашем случае?
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 »

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

Code: Select all

  condition = function()
    return CmdLine.Empty and APanelPasteOK() and ClipboardDropAvailable()
  end;
А макрос на вставку путей я ещё не делал.
Фар есть инструмент, а не нянька. © 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 »

Возможно я чего то не понимаю, но ведь, кажется, после сабжевого макроса на CtrlX в комстроку по ShiftIns можно вставить имя вырезанного файла с путём к нему.
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 »

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

Упс! Кажется дошло: адрес файла то после его переноса изменился. Речь ведь об этом?
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-C, но о чём вы пытаетесь спросить до сих пор непонятно.
После Ctrl-X с файлом физически ничего не происходит, для перемещения необходимо следом выполнить 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 »

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?
Post Reply

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