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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
SUSim
Posts: 1637
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 204 times
SimSU20230324.7z
(78 KiB) Downloaded 146 times
Last edited by SUSim on Fri 26 May, 2023 19:11, edited 22 times in total.
SimSU ··· ·· -- ··· ··-
DVall
Posts: 94
Joined: Tue 04 May, 2010 13:35

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

Post by DVall »

Latest post of the previous page:

SUSim
Не учёл
http://forum.farmanager.com/viewtopic.p ... 52#p127959
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

SUSim wrote: Проверьте, пожалуйста.
Правильнее было бы обновить исходный пост: http://forum.farmanager.com/viewtopic.p ... 266#p93266
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

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

Post by SUSim »

Да! забыл... прости! (про пустой файл и триммер поправлю!)
John Doe wrote:Правильнее было бы обновить исходный пост: http://forum.farmanager.com/viewtopic.p ... 266#p93266
Рано... сильно долго был изолирован от темы... и пропустил кучу вопросов и пожеланий :(

John Doe, напомни, пожалуйста, ведь что-то серьёзное/полезное было!
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

SUSim wrote: напомни, пожалуйста, ведь что-то серьёзное/полезное было!
Тему и почитать можно.
Я что-то фиксил, это знаю (новую версию ещё не посмотрел)
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

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

Post by SUSim »

John Doe wrote:Тему и почитать можно.
Тему я читаю дома раза два в неделю, если вспомню на работе, и если время будет, то поправлю-доработаю. А если времени не было неделю, то и забывается...

(не по делу - макросам разговор {удали это и предыдущее сообщение} извини)
SimSU ··· ·· -- ··· ··-
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

SUSim
То ли ошибка в макросе Editor_QuickSearch.lua, то ли изменилось что-то в FAR (у меня версия 3.0.4503), но макрос не реагирует на CtrlEnter (повторить поиск) и вообще на все кнопки с модификатором Ctrl. Исправилось заменой в начале функции SimSU.Editor_QuickSearch.Go строки
if Key=="\01" then return end -- [i]Глючит far InputRecordToName возвращает при отпускании модификаторов...[/i]
на строку
if (Key=="\01") or (Key == nil) then return end -- [i]Глючит far InputRecordToName возвращает при отпускании модификаторов...[/i]
В настоящее время по адресу https://code.google.com/p/simsufar/ написано, что плагины и макросы в разработке. В готовящейся версии учтите, пожалуйста, этот момент
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

SUSim
Ещё ошибочка: процедуры NextWord, PrevWord ищут не только слово, а вхождение слова в другое. Надо бы делать проверку, что найденное - именно слово.
Ну, и хотелось бы настройку "отмечать найденное". Если не включена - восстанавливать отмеченный перед началом поиска блок. Объясню: стандартная задача - отметить блок, найти следующее вхождение слова над курсором и скопировать отмеченное туда. Отсюда - и ещё одна (не знаю, настройка ли, или надо сделать на постоянной основе) - не брать в качестве искомого отмеченный блок.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

SUSim
И уж совсем ошибка в скрипте: по мере набора поиск вперёд продолжается. Т.е. если указатель уже стоит на слове, начинающемся с искомой строки, то при продолжении набора текущее найденное слово пропускается и поиск продолжается. В результате в некоторых случаях невозможно найти искомое, т.к. оно пропускается при наборе. Т.е. нужно все время смотреть на экран (не найдено ли уже то, что нужно). Это - неудобно и очень отличается от логики работы старого плугина
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

buniak_a_h wrote:SUSim
И уж совсем ошибка в скрипте: по мере набора поиск вперёд продолжается.
Это настраивается: VeryQuick=true; -- Очень быстрый поиск :)
(Вам надо false)
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

John Doe wrote:
buniak_a_h wrote:SUSim
И уж совсем ошибка в скрипте: по мере набора поиск вперёд продолжается.
Это настраивается: VeryQuick=true; -- Очень быстрый поиск :)
(Вам надо false)
Установил. В результате перестала работать кнопка "повторить поиск".
Скрипт
Видимо, по команде "Следующее совпадение" надо сначала увеличивать Pos
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

SUSim
Вроде, довёл до идеала Ваш скрипт Editor_QuickSearch. С включенной VeryQuick не смотрел внимательно, но с выключенной работает как в большинстве редакторов. Если Вы готовите новую версию библиотеки - посмотрите, пожалуйста.
Текст процедуры исправлен в следующем посте...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 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: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 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 172 times
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
SUSim
Posts: 1637
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: 1637
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 января. Я думаю, что это дата, когда был запущен Фар. Ожидалось увидеть сегодняшнюю дату
Post Reply

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