CtrlX и CtrlV "как в Windows"

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 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: 8105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 103 times

CtrlX и CtrlV "как в Windows"

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

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

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

CtrlX и CtrlV "как в Windows"

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

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

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

CtrlX и CtrlV "как в Windows"

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

John Doe wrote: Какого конкретно поведения вы хотите достичь?
Чтобы вставку файлов как файлов (на панель) и как их путей (в командную строку) можно было настраивать разными макросами.
Впрочем, первого я уже достиг, несколько модифицировав Ваш вышеприведённый макрос:
  1. local function AllBitsSet( val, mask )
  2.   return mask == band( val, mask )
  3. end
  4.  
  5. local function APanelRealFiles()
  6.   local PANEL_OPIFLAGS_REGULAR, PANEL_OPIFLAGS_REALNAMES = 0, 0x20
  7.   return APanel.Visible and
  8.     ( APanel.OPIFlags == PANEL_OPIFLAGS_REGULAR or
  9.       AllBitsSet( APanel.OPIFlags, PANEL_OPIFLAGS_REALNAMES ) )
  10. end
  11.  
  12. local function APanelPasteOK()
  13.   return APanel.Visible and APanelRealFiles()
  14. end
  15.  
  16. local function ClipboardDropAvailable()
  17.   local CF_HDROP = 15
  18.   return C.IsClipboardFormatAvailable( CF_HDROP ) ~= 0
  19. end
  20.  
  21. Macro {
  22.   area="Shell"; key="CtrlV";
  23.   condition = function()
  24.     return CmdLine.Empty and APanelPasteOK() and ClipboardDropAvailable()
  25.   end;
  26.   action = function()
  27.     EMenuCommand( 'paste "' .. APanel.Path .. '"' )
  28.   end;
  29. }
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 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: 8105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 103 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: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 times

CtrlX и CtrlV "как в Windows"

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

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

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

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

CtrlX и CtrlV "как в Windows"

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

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

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

CtrlX и CtrlV "как в Windows"

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

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

User avatar
HaRT
Moderator
Posts: 8105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 103 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: 762
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 56 times
Been thanked: 5 times

CtrlX и CtrlV "как в Windows"

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

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

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

CtrlX и CtrlV "как в Windows"

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

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

User avatar
sToLp
Posts: 762
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 56 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: 11383
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 16 times
Been thanked: 100 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: 762
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 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: 8105
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 15:58

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

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

CtrlX и CtrlV "как в Windows"

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

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

Post Reply

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