Набор макросов от SimSU

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Набор макросов от SimSU

Post by SUSim »

Вычисление математических выражений. © SimSU
Календарь. © SimSU
Выполнение команды через меню пользователя. © SimSU
Получение названия клавиши. © SimSU
Ускорение скроллинга колёсиком мышки. © SimSU
Меню плагинов с последнего пункта. © SimSU
Вставка разделённых путей и имён файлов. © SimSU
Редактирование строки ввода диалога в редакторе. © SimSU
Первая строка всегда на экране полезно в качестве заголовков столбцов. © SimSU
Создание резервной копии редактируемого файла. © SimSU
Открытие редактора из редактора. © SimSU
Вставка шаблона мароса. / Insert macro template. © Shmuel SimSU
Простое импортирование макроса FAR. © SimSU
Список завершения LuaMacro. © SimSU
Работа мышкой с выделением в редакторе. © SimSU
Перемещение строк в редакторе. © SimSU
Два синхронных редактора. © SimSU
Быстрый поиск в редакторе. © SimSU
Комментирование/разкомментирование помеченного блока. © SimSU
Памятливый редактор. © SimSU
Работа с помеченным блоком в редакторе. © SimSU
Подсветка табуляции и перевода строк. © SimSU
Умный Del. © SimSU
Умные Home & End. © SimSU
Лёгкое изменение размеров табуляции. © SimSU
Транспонирование (строки превращаются в столбцы) текста. © SimSU
Удаление конечных пробелов и символов табуляции и пустых строк. © SimSU
Завершения слов в редакторе. © SimSU
Запуск приложения в DOSBox [http://www.dosbox.com]. © SimSU
Работа с файлами через контекстное меню (плагин EMenu). © SimSU
Работа с файлами через FastCopy (FastCopy.exe © http://ipmsg.org/tools/fastcopy.html). © SimSU
работа с LNK-файлами (плагин LnkView). © SimSU
Переход по вкладкам плагина Panel Tabs (плагин Panel Tabs © Максим Русов) © SimSU"
Работа с файлами через TeraCopy (TeraCopy.exe © http://www.codesector.com). © SimSU
Визуальное сравнение файлов (плагин VisualCompare © Максим Русов). © SimSU
Работа с псевдонимами (синонимами). © SimSU
Смена диска активной панели RCtrl+стрелки. © SimSU
Работа в командной строке. © SimSU
Удаление резервных и временных файлов. © SimSU
Редактирование описания в файле. © SimSU
Фавориты (избранные папки и плагины) в меню дисков. © SimSU
Работа с датой/временем файлов/папок. © SimSU
Возврат в предыдущую папку, отмена возврата. © SimSU
Включение/отключение поиска на панели после отпускания RAlt. © SimSU
Сохранение/восстановление выделения файлов. © SimSU
Такой же путь & Текущая папка. © SimSU
Выделение файлов аля Explorer. © SimSU
Работа с пометкой файлов. © SimSU
Расширение функциональных клавиш копирования, переноса, создания папки. © SimSU
При смене панели ширина активной панели остается постоянной. © SimSU
Attachments
SimSU20230526.7z
(83.62 KiB) Downloaded 185 times
SimSU20230324.7z
(78 KiB) Downloaded 141 times
Last edited by SUSim on Fri 26 May, 2023 19:11, edited 22 times in total.
SimSU ··· ·· -- ··· ··-
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Набор макросов от SimSU v2014.10

Post by buniak_a_h »

Latest post of the previous page:

SUSim
Вроде, довёл до идеала Ваш скрипт Editor_QuickSearch. С включенной VeryQuick не смотрел внимательно, но с выключенной работает как в большинстве редакторов. Если Вы готовите новую версию библиотеки - посмотрите, пожалуйста.
Текст процедуры исправлен в следующем посте...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Набор макросов от SimSU v2014.10

Post by buniak_a_h »

Сорри, господа, вкралась мелкая ошибка, проявляется при нажатии клавиши с символом после поиска предыдущего-следующего слова. Лечится одной строкой. В процедуре SimSU.Editor_QuickSearch.Go после блока, содержащего ColoredLine = nil добавить строку:
if QSearch == nil then return end
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Набор макросов от SimSU v2014.10

Post by buniak_a_h »

SUSim
Нашёл ещё 2 ошибки (присутствовавшие в первоначальном тексте макроса):
1. После поиска в обратном направлении (Direction=-1) поиск следующего вхождения слова становился невозможным, только предыдущее вхождение. Причина в функции SimSU.Editor_QuickSearch.NextWord: не указано направления в параметрах вызова функции SimSU.Editor_QuickSearch.Find. Необходимо указать 1.
2. При инкрементальном поиске в обратном направлении (SimSU.Editor_QuickSearch.Back) образец искался при каждом нажатии на клавишу с символом, независимо от параметра VeryQuick. Т.е. макрос при обратном поиске вёл себя также, как при прямом поиске с VeryQuick=true, независимо от значения VeryQuick. Как я уже писал, это может привести к пропуску искомого.
В результате получился макрос (см. вложение), который эти вещи отрабатывает правильно. Хотел бы, чтобы Вы (или ещё кто-нибудь) проверил. Возможно, некоторые куски можно резко сократить (я до сих пор не могу привыкнуть к логическим and и or, возвращающим результат любого типа).
Editor_QuickSearch.lua
(11.21 KiB) Downloaded 170 times
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Набор макросов от SimSU v2014.10

Post by SUSim »

Вы правите не последнюю редакцию макроса,
в текущей редакции макрос не содержит указанных вами недостатков.
В нём только не реализованы Ваши пожелания:
1) при поиске слов ищутся и вхождения - нам это удобно, так как часто ищем не только слова, но и выделенное вхождение.
2) сбрасывается выделение - для нас это не критично, т.к. у всех нас выделение не постоянное.
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Набор макросов от SimSU v2014.10

Post by SUSim »

Я тут с FFI баловался, причём методом тыка, посмотрите, сильно ли я накосячил?
т.к. Си я читаю то со словарём, а по ФФИ док под рукой не было (кстати посоветуйте небольшую, но понятную доку по FFI).
  1. -------------------------------------------------------------------------------
  2.  
  3. -- Работа с датой/временем файлов/папок. © SimSU
  4.  
  5. -------------------------------------------------------------------------------
  6.  
  7.  
  8.  
  9. ---- Настройки
  10.  
  11. local function Settings()
  12.  
  13. -- Начало файла Profile\SimSU\Shell_FileTime.cfg
  14.  
  15. return{
  16.  
  17.   Key="AltD"; --Prior=50;
  18.  
  19. }
  20.  
  21. -- Конец файла Profile\SimSU\Shell_FileTime.cfg
  22.  
  23. end
  24.  
  25.  
  26.  
  27. ---- Локализация
  28.  
  29. _G.far.lang=far.lang or win.GetEnv("farlang")
  30.  
  31. -- Встроенные языки / Buildin laguages
  32.  
  33. local function Messages()
  34.  
  35. if far.lang=="Russian" then
  36.  
  37. -- Начало файла Profile\SimSU\Shell_FileTimeRussian.lng
  38.  
  39. return{
  40.  
  41.   Descr="Обновление даты/времени записи родительских папок. © SimSU";
  42.  
  43. }
  44.  
  45. -- Конец файла Profile\SimSU\Shell_FileTimeRussian.lng
  46.  
  47. else--if far.lang=="English" then
  48.  
  49. -- Begin of file Profile\SimSU\Shell_FileTimeEnglish.lng
  50.  
  51. return{
  52.  
  53.   Descr="Обновление даты/времени записи родительских папок. © SimSU";
  54.  
  55. }
  56.  
  57. -- End of file Profile\SimSU\Shell_FileTimeEnglish.lng
  58.  
  59. end end
  60.  
  61.  
  62.  
  63. -------------------------------------------------------------------------------
  64.  
  65. local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Shell_FileTime"..far.lang..".lng") or Messages)()
  66.  
  67. local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Shell_FileTime.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Shell_FileTime.cfg") or Settings)()
  68.  
  69.  
  70.  
  71. local SimSU=_G.SimSU or {}
  72.  
  73. SimSU.Shell_FileTime={}
  74.  
  75. -------------------------------------------------------------------------------
  76.  
  77.  
  78.  
  79. local ffi = require "ffi"
  80.  
  81. local C = ffi.C
  82.  
  83.  
  84.  
  85. ffi.cdef [[
  86.  
  87.  
  88.  
  89. int GetFileTime(
  90.  
  91.   DWORD    hFile,
  92.  
  93.   FILETIME *lpCreationTime,
  94.  
  95.   FILETIME *lpLastAccessTime,
  96.  
  97.   FILETIME *lpLastWriteTime
  98.  
  99. );
  100.  
  101.  
  102.  
  103. BOOL SetFileTime(
  104.  
  105.   DWORD    hFile,
  106.  
  107.   FILETIME *lpCreationTime,
  108.  
  109.   FILETIME *lpLastAccessTime,
  110.  
  111.   FILETIME *lpLastWriteTime
  112.  
  113. );
  114.  
  115.  
  116.  
  117. DWORD CreateFileW(
  118.  
  119.   LPCTSTR  lpFileName,
  120.  
  121.   DWORD    dwDesiredAccess,
  122.  
  123.   DWORD    dwShareMode,
  124.  
  125.   void     *lpSecurityAttributes,
  126.  
  127.   DWORD    dwCreationDisposition,
  128.  
  129.   DWORD    dwFlagsAndAttributes,
  130.  
  131.   DWORD    hTemplateFile
  132.  
  133. );
  134.  
  135.  
  136.  
  137. BOOL CloseHandle(
  138.  
  139.   DWORD hObject
  140.  
  141. );
  142.  
  143.  
  144.  
  145. ]]
  146.  
  147.  
  148.  
  149. local function FileTime2Msec(FileTime)
  150.  
  151.   return (FileTime.dwLowDateTime + 0x100000000 * FileTime.dwHighDateTime) / 10000
  152.  
  153. end
  154.  
  155.  
  156.  
  157. local function Msec2FileTime(Msec)
  158.  
  159.   local result = ffi.new("FILETIME")
  160.  
  161.   local h,l = math.modf(Msec * 10000 / 0x100000000);
  162.  
  163.   result.dwHighDateTime = h
  164.  
  165.   result.dwLowDateTime  = l * 0x100000000
  166.  
  167.   return result
  168.  
  169. end
  170.  
  171.  
  172.  
  173. function SimSU.Shell_FileTime.Get(FileName)
  174.  
  175.   local str = ffi.cast("LPCTSTR",win.Utf8ToUtf16(FileName.."\0"))
  176.  
  177.   local hFile = C.CreateFileW(
  178.  
  179.     str,
  180.  
  181.     0x80000000,
  182.  
  183.     0x00000001,
  184.  
  185.     nil,
  186.  
  187.     3,
  188.  
  189.     0x02000000,
  190.  
  191.     0
  192.  
  193.   );
  194.  
  195.   if hFile~=ffi.cast("HANDLE",-1) then
  196.  
  197.     local ftCreate = ffi.new("FILETIME")
  198.  
  199.     local ftAccess = ffi.new("FILETIME")
  200.  
  201.     local ftWrite  = ffi.new("FILETIME")
  202.  
  203.     C.GetFileTime(hFile, ftCreate, ftAccess, ftWrite)
  204.  
  205.     C.CloseHandle(hFile)
  206.  
  207.     return FileTime2Msec(ftWrite), FileTime2Msec(ftAccess), FileTime2Msec(ftCreate)
  208.  
  209.   end
  210.  
  211. end
  212.  
  213.  
  214.  
  215. function SimSU.Shell_FileTime.Set(FileName, ftWrite, ftAccess, ftCreate)
  216.  
  217.   local str = ffi.cast("LPCTSTR", win.Utf8ToUtf16(FileName.."\0"))
  218.  
  219.   local hFile = C.CreateFileW(
  220.  
  221.     str,
  222.  
  223.     0x80000000 + 0x40000000,
  224.  
  225.     0x00000001 + 0x00000002,
  226.  
  227.     nil,
  228.  
  229.     3,
  230.  
  231.     0x02000000,
  232.  
  233.     0
  234.  
  235.   );
  236.  
  237.   if hFile~=ffi.cast("HANDLE",-1) then
  238.  
  239.     C.SetFileTime(hFile, Msec2FileTime(ftCreate), Msec2FileTime(ftAccess), Msec2FileTime(ftWrite))
  240.  
  241.     C.CloseHandle(hFile)
  242.  
  243.     return true
  244.  
  245.   end
  246.  
  247. end
  248.  
  249.  
  250.  
  251. function SimSU.Shell_FileTime.UpdateBranch()
  252.  
  253.   if Area.Shell then
  254.  
  255.     local Path = APanel.Path0
  256.  
  257.     local File = Path.."\\"..APanel.Current
  258.  
  259.     local ftWrite, ftAccess, ftCreate = SimSU.Shell_FileTime.Get(File)
  260.  
  261.     local result
  262.  
  263.     repeat
  264.  
  265.       result = SimSU.Shell_FileTime.Set(Path, ftWrite, ftAccess, ftCreate)
  266.  
  267.       Path = Path:match("(.*)\\[^\\]+$")
  268.  
  269.     until (Path:find(":$") ~= nil and result)
  270.  
  271.     Keys("CtrlR")
  272.  
  273.     return result
  274.  
  275.   end
  276.  
  277. end
  278.  
  279. -------------------------------------------------------------------------------
  280.  
  281. if not Macro then return {Shell_FileTime=SimSU.Shell_FileTime} end
  282.  
  283.  
  284.  
  285. local ok, mod = pcall(require,"SimSU.Shell_FileTime"); if ok then SimSU=mod else _G.SimSU=SimSU end
  286.  
  287. -------------------------------------------------------------------------------
  288.  
  289. Macro {area="Shell"; key=S.Key; priority=S.Prior; description=M.Descr;
  290.  
  291.   action=function() SimSU.Shell_FileTime.UpdateBranch() end;
  292.  
  293. }
SimSU ··· ·· -- ··· ··-
Volodya
Posts: 268
Joined: Thu 31 Mar, 2005 19:41
Has thanked: 30 times

Набор макросов от SimSU v2014.10

Post by Volodya »

Странное поведение макроса календарь: При вызове календаря, отмеченным является 19 января. Я думаю, что это дата, когда был запущен Фар. Ожидалось увидеть сегодняшнюю дату
Volodya
Posts: 268
Joined: Thu 31 Mar, 2005 19:41
Has thanked: 30 times

Набор макросов от SimSU v2014.10

Post by Volodya »

Нельзя ли добавить в макрос "Расширенная выборка" возможность выбора всех файлов с датой как у текущего файла? Подобный макрос есть тут, но он для Far 2 Дополнительно, если выбрано несколько файлов, то выбрать все файлы с датами как у этих файлов. Ну и последняя хотелка: Добавить в макрос Shell_Shift_F5F6F7.lua возможность автоматического раскидывания этих файлов по директориям на пасивной панеле. То есть, выбраны файлы с датами 10.01.2016 и 20.01.2016 Автоматически создаются директории 10.01.2016 и 20.01.2016 на пасивной панеле и соответствующие файлы копируются/переносятся туда
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Набор макросов от SimSU v2014.10

Post by SUSim »

В этом мире всё возможно!
Подумаю, это интерееесно...
SimSU ··· ·· -- ··· ··-
User avatar
dimfish
Posts: 179
Joined: Fri 29 Apr, 2016 13:18
Location: Saint-Petersburg
Has thanked: 1 time
Been thanked: 36 times

Набор макросов от SimSU v2014.10

Post by dimfish »

Не успел отследить с какой версии начались проблемы но макрос выхода (AltX) вызывает "F10 Enter" и far виснет на выходе, причем если нажать F10 - не виснет... Причем на старых версиях < 4100 всё работает ок. Есть у кого какие мысли?
User avatar
Vertigo
Posts: 85
Joined: Tue 13 Apr, 2010 12:04
Location: Moscow, Russia
Has thanked: 11 times
Been thanked: 4 times

Набор макросов от SimSU v2014.10

Post by Vertigo »

Воспроизводимо? А то проблема с зависанием на выходе обсуждается здесь: http://forum.farmanager.com/viewtopic.php?f=9&t=10207.
User avatar
dimfish
Posts: 179
Joined: Fri 29 Apr, 2016 13:18
Location: Saint-Petersburg
Has thanked: 1 time
Been thanked: 36 times

Набор макросов от SimSU v2014.10

Post by dimfish »

Да, конечно, у меня воспороизводится на всех компах 2 десктопа,1 ноут, 2 vmware. И форум уже весь облазил и ту ветку видел - но там симптомы похожие, но говорится про другое - они там запускают проги или чего то делают...
Поставить макрос AltX - находится SimSU/trivial/Shell_AltX.lua - просто запустить свежий фар - сразу AltX - far выходит и остется висеть консоль. Если запустить и нажать F10 - закрыватся как надо. Воспроизводится у меня в 100% случаев. На Far <4100 проблемы нету.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Набор макросов от SimSU v2014.10

Post by Shmuel »

dimfish, у меня не воспроизводится. Специально ставил этот макрос для проверки. Может от OS зависит или ещё от чего.
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Набор макросов от SimSU v2014.10

Post by 2useven10 »

dimfish wrote: у меня воспороизводится на всех компах
Без плагинов и макросов тоже?
add: Хотя, без макросов нельзя, тогда только с одним макросом...
User avatar
dimfish
Posts: 179
Joined: Fri 29 Apr, 2016 13:18
Location: Saint-Petersburg
Has thanked: 1 time
Been thanked: 36 times

Набор макросов от SimSU v2014.10

Post by dimfish »

2useven10 wrote:Без плагинов и макросов тоже?
Удалил все плагины кроме LuaMacro, взял чистый profile всё также...Правда у меня везде win 10... Приду 4 мая на работу посмотрю на win 8...
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Набор макросов от SimSU v2014.10

Post by 2useven10 »

dimfish wrote: Правда у меня везде win 10
У меня тоже, но не воспроизводится...
PS: проверяю только на транке...
User avatar
dimfish
Posts: 179
Joined: Fri 29 Apr, 2016 13:18
Location: Saint-Petersburg
Has thanked: 1 time
Been thanked: 36 times

Набор макросов от SimSU v2014.10

Post by dimfish »

Специально скачал последний 4660 x64 - на чистой виртуалке 8.1 также не закрывается консоль по AltX, а по F10 всё ок...
На win 10 build 4660 x64 всё также - ладно спасиб всем, будет время - скомпилю в debug посмотрю
Post Reply

Return to “Полезные макросы и скрипты”