CtrlX и CtrlV "как в Windows"
CtrlX и CtrlV "как в Windows"
Вроде бы простой вопрос - а готового решения для FAR3 не нашёл.
Задача:
1) CtrlX в командной строке "вырезает" выделенный текст в буфер обмена; CtrlX в панели "вырезает" (для последующего перемещения) выделенные файлы в буфер обмена.
2) CtrlV в командной строке "вставляет" текст из буфера обмена; CtrlV в панели "вставляет" (с копированием) файлы из буфера обмена.
Задача:
1) CtrlX в командной строке "вырезает" выделенный текст в буфер обмена; CtrlX в панели "вырезает" (для последующего перемещения) выделенные файлы в буфер обмена.
2) CtrlV в командной строке "вставляет" текст из буфера обмена; CtrlV в панели "вставляет" (с копированием) файлы из буфера обмена.
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
CtrlX и CtrlV "как в Windows"
1. Работа с выделением вроде бы тривиальна.
2. Работа с файлами — через emenu или clipcopy (макросы в дистрибутиве, или соответствующих темах)
Остаётся совместить 1+2
2. Работа с файлами — через emenu или clipcopy (макросы в дистрибутиве, или соответствующих темах)
Остаётся совместить 1+2
CtrlX и CtrlV "как в Windows"
Вот, вспомнил, что плохо в стандартном макросе от EMenu:
Если активным элементом в панели является файл, то вместо ожидаемого по CtrlV копирования файлов получаем неожиданное сообщение:
Code: Select all
Macro {
area="Shell"; key="CtrlV"; flags=""; action = function()
Keys("Esc") Far.DisableHistory(0) print("rclk_cmd:paste") Keys("Enter")
end;
}
Code: Select all
╔═══════ EMenu ════════╗
║ Can't show the menu. ║
╟──────────────────────╢
║ { OK } ║
╚══════════════════════╝
CtrlX и CtrlV "как в Windows"
Добавил в первое сообщение получившийся скрипт.
А есть ли в скрипте Lua возможность определить тип объекта в Clipboard? Чтобы, если это текст, по CtrlV автоматически делать вставку текста в командную строку?
А есть ли в скрипте Lua возможность определить тип объекта в Clipboard? Чтобы, если это текст, по CtrlV автоматически делать вставку текста в командную строку?
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
CtrlX и CtrlV "как в Windows"
Встроенной нет.
Но через ffi можно использовать winapi. Тогда и emenu не понадобится.
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
CtrlX и CtrlV "как в Windows"
Code: Select all
local ffi = require("ffi")
local C = ffi.C
ffi.cdef[[
int IsClipboardFormatAvailable(unsigned int fmt);
]]
local CF_TEXT = 1
local CF_OEMTEXT = 7
local CF_UNICODETEXT = 13
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
CtrlX и CtrlV "как в Windows"
Так немного проще:
Code: Select all
Macro {
area="Shell";key="CtrlV";
action = function()
if CmdLine.Empty and APanel.Visible and C.IsClipboardFormatAvailable(15)~=0 then --CF_HDROP
EMenuCommand('paste "'..APanel.Path..'"')
else
Keys("ShiftIns")
end
end;
}
Code: Select all
Macro {
area="Shell"; key="CtrlC";
condition=function()
return not CmdLine.Empty or APanel.Current:match"^%.%.?$"
end;
action = function()
if UseWholeCmdLineWhenNoSelection or CmdLine.Selected then
Keys("CtrlIns")
end
end;
}
- HaRT
- Moderator
- Posts: 10823
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
CtrlX и CtrlV "как в Windows"
При вставке нескольких файлов в командную строку хорошо бы закавычивать в соответствии с
System.QuotedSymbols
…Фар есть инструмент, а не нянька. © 2009 DrKnS
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
CtrlX и CtrlV "как в Windows"
@HaRT
Пожелание интересное, но имеет ли оно отношение к сабжу?
Насколько я понимаю у предлагаемых макросов обратная цель: при наличии в клипборде списка файлов запускать paste.
Пожелание интересное, но имеет ли оно отношение к сабжу?
Насколько я понимаю у предлагаемых макросов обратная цель: при наличии в клипборде списка файлов запускать paste.
- HaRT
- Moderator
- Posts: 10823
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
CtrlX и CtrlV "как в Windows"
Да, но поскольку в Фаре не поддерживается цепочка макросов на одно и то же кнопкосочетание, где ещё и реализовывать моё предложение, как тут в макросе на
CtrlV
.Фар есть инструмент, а не нянька. © 2009 DrKnS