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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
SUSim
Posts: 1543
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 10 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
SimSU20200404.7z
(73.42 KiB) Downloaded 41 times
Last edited by SUSim on Sun 05 Apr, 2020 10:12, edited 13 times in total.
SimSU ··· ·· -- ··· ··-

DVall
Posts: 83
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: 12814
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

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

Post by John Doe »

SUSim wrote: Проверьте, пожалуйста.
Правильнее было бы обновить исходный пост: http://forum.farmanager.com/viewtopic.p ... 266#p93266

User avatar
SUSim
Posts: 1543
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 10 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: 12814
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 286 times

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

Post by John Doe »

SUSim wrote: напомни, пожалуйста, ведь что-то серьёзное/полезное было!
Тему и почитать можно.
Я что-то фиксил, это знаю (новую версию ещё не посмотрел)

User avatar
SUSim
Posts: 1543
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 10 times

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

Post by SUSim »

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

(не по делу - макросам разговор {удали это и предыдущее сообщение} извини)
SimSU ··· ·· -- ··· ··-

buniak_a_h
Posts: 1839
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 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-компании

buniak_a_h
Posts: 1839
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

SUSim
Ещё ошибочка: процедуры NextWord, PrevWord ищут не только слово, а вхождение слова в другое. Надо бы делать проверку, что найденное - именно слово.
Ну, и хотелось бы настройку "отмечать найденное". Если не включена - восстанавливать отмеченный перед началом поиска блок. Объясню: стандартная задача - отметить блок, найти следующее вхождение слова над курсором и скопировать отмеченное туда. Отсюда - и ещё одна (не знаю, настройка ли, или надо сделать на постоянной основе) - не брать в качестве искомого отмеченный блок.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 1839
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

SUSim
И уж совсем ошибка в скрипте: по мере набора поиск вперёд продолжается. Т.е. если указатель уже стоит на слове, начинающемся с искомой строки, то при продолжении набора текущее найденное слово пропускается и поиск продолжается. В результате в некоторых случаях невозможно найти искомое, т.к. оно пропускается при наборе. Т.е. нужно все время смотреть на экран (не найдено ли уже то, что нужно). Это - неудобно и очень отличается от логики работы старого плугина
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe »

buniak_a_h wrote:SUSim
И уж совсем ошибка в скрипте: по мере набора поиск вперёд продолжается.
Это настраивается: VeryQuick=true; -- Очень быстрый поиск :)
(Вам надо false)

buniak_a_h
Posts: 1839
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

John Doe wrote:
buniak_a_h wrote:SUSim
И уж совсем ошибка в скрипте: по мере набора поиск вперёд продолжается.
Это настраивается: VeryQuick=true; -- Очень быстрый поиск :)
(Вам надо false)
Установил. В результате перестала работать кнопка "повторить поиск".
Скрипт
Видимо, по команде "Следующее совпадение" надо сначала увеличивать Pos
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 1839
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

SUSim
Вроде, довёл до идеала Ваш скрипт Editor_QuickSearch. С включенной VeryQuick не смотрел внимательно, но с выключенной работает как в большинстве редакторов. Если Вы готовите новую версию библиотеки - посмотрите, пожалуйста.
Текст процедуры исправлен в следующем посте...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 1839
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

Сорри, господа, вкралась мелкая ошибка, проявляется при нажатии клавиши с символом после поиска предыдущего-следующего слова. Лечится одной строкой. В процедуре SimSU.Editor_QuickSearch.Go после блока, содержащего ColoredLine = nil добавить строку:
if QSearch == nil then return end
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 1839
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 116 times
Been thanked: 165 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 147 times
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
SUSim
Posts: 1543
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 10 times

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

Post by SUSim »

Вы правите не последнюю редакцию макроса,
в текущей редакции макрос не содержит указанных вами недостатков.
В нём только не реализованы Ваши пожелания:
1) при поиске слов ищутся и вхождения - нам это удобно, так как часто ищем не только слова, но и выделенное вхождение.
2) сбрасывается выделение - для нас это не критично, т.к. у всех нас выделение не постоянное.
SimSU ··· ·· -- ··· ··-

User avatar
SUSim
Posts: 1543
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 10 times

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

Post by SUSim »

Я тут с FFI баловался, причём методом тыка, посмотрите, сильно ли я накосячил?
т.к. Си я читаю то со словарём, а по ФФИ док под рукой не было (кстати посоветуйте небольшую, но понятную доку по FFI).
  1. -------------------------------------------------------------------------------
  2. -- Работа с датой/временем файлов/папок. © SimSU
  3. -------------------------------------------------------------------------------
  4.  
  5. ---- Настройки
  6. local function Settings()
  7. -- Начало файла Profile\SimSU\Shell_FileTime.cfg
  8. return{
  9.   Key="AltD"; --Prior=50;
  10. }
  11. -- Конец файла Profile\SimSU\Shell_FileTime.cfg
  12. end
  13.  
  14. ---- Локализация
  15. _G.far.lang=far.lang or win.GetEnv("farlang")
  16. -- Встроенные языки / Buildin laguages
  17. local function Messages()
  18. if far.lang=="Russian" then
  19. -- Начало файла Profile\SimSU\Shell_FileTimeRussian.lng
  20. return{
  21.   Descr="Обновление даты/времени записи родительских папок. © SimSU";
  22. }
  23. -- Конец файла Profile\SimSU\Shell_FileTimeRussian.lng
  24. else--if far.lang=="English" then
  25. -- Begin of file Profile\SimSU\Shell_FileTimeEnglish.lng
  26. return{
  27.   Descr="Обновление даты/времени записи родительских папок. © SimSU";
  28. }
  29. -- End of file Profile\SimSU\Shell_FileTimeEnglish.lng
  30. end end
  31.  
  32. -------------------------------------------------------------------------------
  33. local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Shell_FileTime"..far.lang..".lng") or Messages)()
  34. local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Shell_FileTime.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Shell_FileTime.cfg") or Settings)()
  35.  
  36. local SimSU=_G.SimSU or {}
  37. SimSU.Shell_FileTime={}
  38. -------------------------------------------------------------------------------
  39.  
  40. local ffi = require "ffi"
  41. local C = ffi.C
  42.  
  43. ffi.cdef [[
  44.  
  45. int GetFileTime(
  46.   DWORD    hFile,
  47.   FILETIME *lpCreationTime,
  48.   FILETIME *lpLastAccessTime,
  49.   FILETIME *lpLastWriteTime
  50. );
  51.  
  52. BOOL SetFileTime(
  53.   DWORD    hFile,
  54.   FILETIME *lpCreationTime,
  55.   FILETIME *lpLastAccessTime,
  56.   FILETIME *lpLastWriteTime
  57. );
  58.  
  59. DWORD CreateFileW(
  60.   LPCTSTR  lpFileName,
  61.   DWORD    dwDesiredAccess,
  62.   DWORD    dwShareMode,
  63.   void     *lpSecurityAttributes,
  64.   DWORD    dwCreationDisposition,
  65.   DWORD    dwFlagsAndAttributes,
  66.   DWORD    hTemplateFile
  67. );
  68.  
  69. BOOL CloseHandle(
  70.   DWORD hObject
  71. );
  72.  
  73. ]]
  74.  
  75. local function FileTime2Msec(FileTime)
  76.   return (FileTime.dwLowDateTime + 0x100000000 * FileTime.dwHighDateTime) / 10000
  77. end
  78.  
  79. local function Msec2FileTime(Msec)
  80.   local result = ffi.new("FILETIME")
  81.   local h,l = math.modf(Msec * 10000 / 0x100000000);
  82.   result.dwHighDateTime = h
  83.   result.dwLowDateTime  = l * 0x100000000
  84.   return result
  85. end
  86.  
  87. function SimSU.Shell_FileTime.Get(FileName)
  88.   local str = ffi.cast("LPCTSTR",win.Utf8ToUtf16(FileName.."\0"))
  89.   local hFile = C.CreateFileW(
  90.     str,
  91.     0x80000000,
  92.     0x00000001,
  93.     nil,
  94.     3,
  95.     0x02000000,
  96.     0
  97.   );
  98.   if hFile~=ffi.cast("HANDLE",-1) then
  99.     local ftCreate = ffi.new("FILETIME")
  100.     local ftAccess = ffi.new("FILETIME")
  101.     local ftWrite  = ffi.new("FILETIME")
  102.     C.GetFileTime(hFile, ftCreate, ftAccess, ftWrite)
  103.     C.CloseHandle(hFile)
  104.     return FileTime2Msec(ftWrite), FileTime2Msec(ftAccess), FileTime2Msec(ftCreate)
  105.   end
  106. end
  107.  
  108. function SimSU.Shell_FileTime.Set(FileName, ftWrite, ftAccess, ftCreate)
  109.   local str = ffi.cast("LPCTSTR", win.Utf8ToUtf16(FileName.."\0"))
  110.   local hFile = C.CreateFileW(
  111.     str,
  112.     0x80000000 + 0x40000000,
  113.     0x00000001 + 0x00000002,
  114.     nil,
  115.     3,
  116.     0x02000000,
  117.     0
  118.   );
  119.   if hFile~=ffi.cast("HANDLE",-1) then
  120.     C.SetFileTime(hFile, Msec2FileTime(ftCreate), Msec2FileTime(ftAccess), Msec2FileTime(ftWrite))
  121.     C.CloseHandle(hFile)
  122.     return true
  123.   end
  124. end
  125.  
  126. function SimSU.Shell_FileTime.UpdateBranch()
  127.   if Area.Shell then
  128.     local Path = APanel.Path0
  129.     local File = Path.."\\"..APanel.Current
  130.     local ftWrite, ftAccess, ftCreate = SimSU.Shell_FileTime.Get(File)
  131.     local result
  132.     repeat
  133.       result = SimSU.Shell_FileTime.Set(Path, ftWrite, ftAccess, ftCreate)
  134.       Path = Path:match("(.*)\\[^\\]+$")
  135.     until (Path:find(":$") ~= nil and result)
  136.     Keys("CtrlR")
  137.     return result
  138.   end
  139. end
  140. -------------------------------------------------------------------------------
  141. if not Macro then return {Shell_FileTime=SimSU.Shell_FileTime} end
  142.  
  143. local ok, mod = pcall(require,"SimSU.Shell_FileTime"); if ok then SimSU=mod else _G.SimSU=SimSU end
  144. -------------------------------------------------------------------------------
  145. Macro {area="Shell"; key=S.Key; priority=S.Prior; description=M.Descr;
  146.   action=function() SimSU.Shell_FileTime.UpdateBranch() end;
  147. }
SimSU ··· ·· -- ··· ··-

Volodya
Posts: 239
Joined: Thu 31 Mar, 2005 19:41
Has thanked: 2 times

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

Post by Volodya »

Странное поведение макроса календарь: При вызове календаря, отмеченным является 19 января. Я думаю, что это дата, когда был запущен Фар. Ожидалось увидеть сегодняшнюю дату

Post Reply

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