#
Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 5)

Модерирует : gyra, Maz

Maz (15-01-2020 17:38): FAR Manager (часть 6)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Предыдущие топики:  1 2 3 4
 
Где взять последнюю версию?
На странице загрузки скачайте MSI-инсталлятор стабильной сборки нужной вам разрядности (32 или 64 бита) или дистрибутив в виде 7z-архива и установите/распакуйте в любую папку (FAR портабелен и может работать без установки).
Там же на свой страх и риск можно взять наиболее свежую "ночную" сборку (в ночных сборках устраняются выявленные недоработки, добавляются новые функции, но могут содержаться и серьёзные ошибки).
Архив всех предыдущих ночных сборок FAR
Last release на github - собирается практически сразу (в течение получаса) после каждого коммита.
 
Общие сведения о совместимости FAR и плагинов
 
Можно воспользоваться одной из пользовательских сборок FAR Manager
Вопросы, касающиеся сборок, следует задавать непосредственно их авторам, а не на официальном форуме.
 
Где взять дополнительные плагины, скрипты и макросы?
Плагринг. В настоящее время большинство авторов (возможно, уже и все) выкладывают плагины здесь. Кроме плагинов здесь появляется всё относящиеся к FAR: дополнения, консольные шрифты, скрипты и пр.
Анонсы плагинов на официальном форуме. Даже если автор не выкладывает по каким-либо причинам плагин на плагринге, он может дать анонс в этой теме.
Полезные скрипты и макросы.
 
Инструкции по сборке ФАРа из исходников
Набор для самостоятельной сборки ФАРа
Как собрать FAR самостоятельно (старая инструкция)  
 
Ссылки на устаревшие версии
Выдержка из Far Manager Site and Forum ‹ FAQ :
Отличия FAR 3 от FAR 2
Отличия FAR 2 от FAR 1.7
 
Примечания
 
* 13 декабря 2008 г. произошло переименование веток: ANSI-ветка 1.71 превратилась в 1.75, а Unicode-ветка получила номер версии 2.0 (вместо 1.80). Т.е. версии 1.хх это ANSI ("старый" FAR), а версии 2.хх – Unicode ("новый" FAR). Эти ветки сильно различаются по способу взаимодействия с плагинами и системой!
* При обновлении ANSI-ветки 1.хх более старые версии плагинов могут работать в более новом FAR, но более новые плагины в большинстве случаев требуют обновления FAR (см. документацию).
* Unicode-плагины в ANSI-версии FAR не работают – у них иной способ взаимодействия (API) с Far.exe, поэтому даже не пытайтесь их использовать в FAR версии ниже 1.80.
* При обновлении Unicode-версии FAR 1.80/2.0/3.0 обращайте внимание на номер сборки: следует обязательно обновить все плагины для сборок 677/680/684, иначе они не будут работать. ANSI-плагины (кроме тех, которые работают в редакторе) можно применять в Unicode-версии FAR, в меню плагинов (вызываемом по F11) они будут помечены значком [A] справа от их имени. Unicode-плагины в FAR 1.80/2.x/3.х никаким значком после имени не помечаются.
* Unicode-версия FAR 1.80/2.x/3.х требует как минимум Windows 2000, т.е. она работает только в Windows 2000/XP/2003/Vista/2008/7/8/10.
* Плагины от FAR 2 несовместимы с FAR 3 и не запустятся.
* В FAR 3 выборочно могут работать плагины от FAR 1, однако не стоит брать от FAR 1 плагины для редактора или работающие с дисками: первые портят текст в Юникоде, вторые – файловую систему.
* В любом случае разрядность плагинов должна совпадать с разрядностью FAR, иначе плагин не будет загружен.
* Блондинку на скриншоте зовут Tommie Jo.

 
Принципиальные различия между hard link, symlink и junction
Как устранить взаимное влияние запущенных копий FAR в памяти
Как запустить Lua/MoonScript из FAR
Как правильно добавить в программу нужную DLL (или иную зависимость), чтобы при обновлении ОС или иных программ она не перестала работать
Патч для ansi-плагинов для хранения настроек плагинов в папке профиля, а не в реестре
Как распаковать UUE/XXE файлы патчей и использовать их?
 
ВНИМАНИЕ!
 
Правильное (корректное) завершение Far: всегда завершайте сеанс работы с Far по F10! Подробнее на форуме - Различие выхода из Far по F10 и крестиком
 
Общие правила обращения за помощью
  1. Решаете задачу самостоятельно, при необходимости ищете ответы в теме и других источниках. Предварительное изучение документации обязательно!
  2. Если ваших знаний не хватает, то задаёте вопрос в форуме и строго следуете инструкциям тех людей, которые вам помогают.
  3. Если решить задачу, следуя пунктам 1 и 2, не удалось, то задаёте вопрос разработчикам.

Невыполнение этих правил ведёт к тому, что никто не станет помогать решать вашу задачу.

Всего записей: 36399 | Зарегистр. 26-02-2002 | Отправлено: 18:55 23-11-2017 | Исправлено: Victor_VG, 10:00 09-09-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wseventeen
не, после использования обоих версий драйверу плохеет, иногда помогает перезапуск фара, а иногда только перезагрузка ХП.

Всего записей: 2120 | Зарегистр. 16-06-2007 | Отправлено: 20:22 21-11-2019
wseventeen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
после использования обоих версий драйверу плохеет

будьте более конкретны.
от такого фидбэка пользы 0.

Всего записей: 1123 | Зарегистр. 20-12-2007 | Отправлено: 21:34 21-11-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wseventeen
а как конкретнее? - начинает глючить инициализация вывода звука в других плейерах - RarmaRadio PCM на bass, AlbumPlayer ASIO на ffmpeg, закрываешь фар - перезагружаешь плейера - играют. Словно AudioPlayer не освобождает звуковое устройство

Всего записей: 2120 | Зарегистр. 16-06-2007 | Отправлено: 21:37 21-11-2019 | Исправлено: Alexyz21, 21:41 21-11-2019
wseventeen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уже конкретнее.
Если ещё будут детали - всегда или нет, если нет - выявить плохую-хорошую последовательность действий... Кроме вас похоже других пользователей ASIO нет, по крайней мере отзывов больше нет.
 
Добавлено:
Кроме того ASIO на XP, думаю не слишком распространённый вариант.

Всего записей: 1123 | Зарегистр. 20-12-2007 | Отправлено: 21:55 21-11-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ASIO на XP, думаю не слишком распространённый вариант

Как раз наоборот, KS в отличие от wasapi полуподпольный.

Всего записей: 2120 | Зарегистр. 16-06-2007 | Отправлено: 22:08 21-11-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Получение списка файлов в директории
 
Задача решается двумя возможными способами:
 
1) через far.GetDirList(<dir>) в цикле for :

Код:
local dir,itm,atr,list = far.GetDirLst(dirname),{},{},"";
 
for  j = 1,#dir do
 list = list..dir[j].FileName.."  "..dir[j].FileAttributes.."\n"
end
 
list = mf.trim(list)
far.Show(list)

результат:  
 
в переменную list будет помещено полное дерево каталогов от указанной директории с путями и буквенными значениями атрибутов файлов и каталогов, отладочная функция far.Show() выведет его на экран в виде своего единственного многострочного аргумента с разделителями "перевод каретки" ("новая строка");
 
2) через функции панелей, свойства APanel.ItemCount/PPanel.ItemCount и свойство "имя файла на панели" получаемое вызовом  Panel.Item(0,<index>,0), на примере активной панели:

Код:
local list = "";
 
for j=1,APanel.ItemCount do
   list = list..Panel.Item(0,j,0).."  "..win.GetFileAttr(Panel.Item(0,j,0)).."\n"
end
 
list = mf.trim(list)
far.Show(list)

в списке будут указаны только имена файлов и каталогов в текущем каталоге т.к. цикл не рекурсивный;
 
атрибуты в обоих случаях выводятся в виде строки символов и будут иметь значения:
 
  a - архивный
  c - сжатый (только на NTFS, ReFS)
  d - каталог
  e - точка повторного анализа (точка монтирования)
  h - скрытый
  i - не индексируемый
  n - зашифрованный
  o - оффлайн
  p - разреженный
  r - только для чтения
  s - системный
  t - временный
  u - нет данных очистки
  v - виртуальный

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")

Всего записей: 25545 | Зарегистр. 31-07-2002 | Отправлено: 22:41 22-11-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG

Цитата:
1) через far.GetDirList(<dir>) в цикле for :

Всегда лезет в подпапки. Если это не нужно, может выполняться в тысячи раз дольше, чем необходимо для текущей задачи.

Цитата:
2) через функции панелей

А если нужно получить файлы из произвольной папки, значит нужно её сначала вывести на панель? Это тоже может занять кучу времени, с раскраской и сортировкой.
 
Самое универсальное в контексте Фара решение - функция far.RecursiveSearch.

Всего записей: 1246 | Зарегистр. 09-03-2012 | Отправлено: 23:10 22-11-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz
 
Я эту задачу решал в IntChecker.Run через семафор управления рекурсией chex() поскольку случай "только в текущем каталоге" для неё частный, а вот случай типа "для файлов в текущем каталоге и во всех вложенных подкаталогах" довольно типичный. Но, коли KotSerg хватит только текущего каталога, то и far.GetDirList() ему не нужна.

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")

Всего записей: 25545 | Зарегистр. 31-07-2002 | Отправлено: 23:54 22-11-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я эту задачу решал в IntChecker.Run через семафор управления рекурсией chex()

А что это за зверь "семафор управления рекурсией chex()" ? Для меня это китайская грамота.

Всего записей: 1246 | Зарегистр. 09-03-2012 | Отправлено: 00:34 23-11-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz
 
логическая переменная которая управляет возможностью входить в подкаталоги:

Код:
local function chex(hn,pth,ft,r)
local ICId = "E186306E-3B0D-48C1-9668-ED7CF64C0E65";
--[[
The function for calculating file checksums with support full or relative
UNC paths specified relative to the current panel directory, controlled
recursive processing of directories, partial correction of input errors
for UNC paths and checking the availability of the target object (the user
may not have access rights to it).
 
User can break calculation if pressed ESC key then returned ErrCode = 4.
 
Input parameters:
 
hn  - is hash algorithm name, string
pth - target UNC path, string
ft  - output record format code, false - GNU (default), true - BSD, boolean;
r   - recursion flag true - enable, false - disable (default), boolean;
 
Returned table included fields by order:
 
ErrCode    - Error code, integer, value is:
              0 - Success, no errors, HashSumm is valid;
              1 - Empty folder, recursion is disabled or no files found, HashSumm
                  is empty and ObjPath is UNC path;
              2 - Target not exist, HashSumm is invalid and ObjPath is UNC path;
              3 - File Access Denied, FileErrCnt greater 0, HashSumm exclude this files;
              4 - User press break hotkey, FileSucCnt is valid, DirCnt is wrong,
                  HashSumm last string is "Cancel";
HashSumm   - calculated hash sum, string, substring separator is "\n";
ObjPath    - UNC path to object, string;
DirCnt     - scaned directories count, integer;
FileAllCnt - files all count, integer;
FileSucCnt - files success count, integer;
FileErrCnt - files error count, integer;
--]]
 
   local r0,sum0,s0,f0,d0,p,pnt,dc,ec,err,fc,fa,ft0 = false,"","","","","","",0,0,0,0,0,false;
   r = tostring(r)
   if r:find("true") then r0 = true elseif r:find("false") then r0 = false else r0 = false end;
   if pth:find("\\$") then p = pth:sub(0,-2) elseif pth:find("/$") then
    p = pth:sub(0,-2) else p = pth end;
   ft = tostring(ft)
    if ft:find("true") then ft0 = true elseif ft:find("false") then ft0 = false end;
   if mf.fexist(p) then
    if #mf.fsplit(p,1) == 0 then p = far.ConvertPath(p); pnt = win.GetFileInfo(p).FileName.."\\"; else pnt = "" end
    local dr,da,dn = far.GetDirList(p),{},{};
    if #dr == 0 then
     f0 = win.GetFileInfo(p).FileName
     d0 = p:sub(0, - #f0 - 2);
     fc = 1
     dc = 0
     sum0 = tostring(Plugin.SyncCall(ICId,"gethash",""..hn.."",""..p.."",true));
     if sum0:find("nil") then
      ec = 1
      err = 3
     elseif sum0:find("userabort") then
      ec = 1
      err = 4
      sum0 = "Cancel"
     else
      if ft0 then s0 = hn.." ("..f0..") = "..sum0 else s0 = sum0.." *"..f0; end;
      fa = 1
     end;
    else
     local sem = false;
     d0 = p
     dc = #dr;
     for j = 1,#dr do
      da[j] = dr[j].FileAttributes
      dn[j] = dr[j].FileName
      if not da[j]:find("d") then
       f0 = dn[j]:sub(#p + 2)
       if r0 then sem = true else if not dn[j]:find("\\",#p + 2) then sem = true else sem = false end end;
       if sem then
        fa = fa + 1
         sum0 = tostring(Plugin.SyncCall(ICId,"gethash",""..hn.."",""..dn[j].."",true));
        if sum0 == "userabort" then
         ec = ec + 1
         err = math.max(err,4)
         sum0 = "Cancel"
         break
        elseif sum0 == "nil" then
         ec = ec + 1
         err = math.max(err,3)
        else
         fc = fc + 1
         if ft0 then s0 = s0..hn.." ("..pnt..f0..") = "..sum0.."\n" else s0 = s0..sum0.." *"..pnt..f0.."\n" end;
        end
       end
      end;
     end
      if r0 then dc = dc - fa else dc = 0 end
    end
     if #s0 == 0 and r0 then err = math.max(err,1) end
   else
     err = 2
     s0 = ""
     d0 = p
   end
   local ret = { ErrCode = err, HashSumm = mf.trim(s0), ObjPath = d0, DirCnt = dc, FileAllCnt = fa, FileSucCnt = fc, FileErrCnt = ec };
   return ret;
 end;

если r == false то подкаталоги игнорируются фильтром по атрибуту "d":

Код:
       if r0 then sem = true else if not dn[j]:find("\\",#p + 2) then sem = true else sem = false end end;
       if sem then
  .....
 

который в этом случае пропускает текущий элемент дерева. Можно было бы использовать и far.RecursiveSearch() но я в тот момент не стал с ней возится, хотя не исключаю её использование если она упростит и ускорит логику chex(). Пока я не готов к очередному циклу переделок - получил "подарок" от Seagate Expansion+ - если подключить этот HDD то результат либо паника ядра, либо не видна файловая система других дисков. Похоже его придётся весь нулями чистить а не только сектора с 0, 62 - 87. Или обратно по гарантии волочь и доказывать что этот диск неисправен...

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")

Всего записей: 25545 | Зарегистр. 31-07-2002 | Отправлено: 01:32 23-11-2019
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Когда обсуждали упавшую производительность lua, кто-то затихарился и не отсвечивал "Общественность" рассчитывала на экспертные замечания по вопросу.

Всего записей: 2120 | Зарегистр. 16-06-2007 | Отправлено: 11:06 23-11-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
Ну и где управление рекурсией? Вижу вызов far.GetDirList(), а эта функция такого управления не предусматривает.
 
Добавлено:
Вы, похоже, отфильтровываете папки уже после вызова far.GetDirList(), но это не есть управление рекурсией. Время исполнения этой функции может исчисляться минутами, а нерекурсивный вызов far.RecursiveSearch() при этом может занять доли секунды.

Всего записей: 1246 | Зарегистр. 09-03-2012 | Отправлено: 11:11 23-11-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz
 
Да, отлов происходит после считывания дерева по атрибуту d, а сам фильтр имеет вход запрета - обычная логика по "И" - Y=X(namej)&R. В конце концов это же простейший цифровой автомат и почему бы не применить к нему правила булевой логики?  
 
А насчёт быстродействия far.RecursiveSearch() я не знал. Надо поглядеть насколько она окажется удобнее. Ранее я с ней не работал.


----------
Жив курилка! (Р. Ролан, "Кола Брюньон")

Всего записей: 25545 | Зарегистр. 31-07-2002 | Отправлено: 12:03 23-11-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG

Цитата:
А насчёт быстродействия far.RecursiveSearch() я не знал.

В ней нет никакого чудесного быстродействия, просто есть контроль исполнения:
а) можно заранее указать флаг нерекурсивности, если рекурсивность не требуется. В этом случае функция не будет обходить вложенные папки.
б) поскольку для каждого найденного элемента вызывается callback, то скрипт может завершить функцию на любом элементе, если дальнейший поиск не имеет смысла.

Всего записей: 1246 | Зарегистр. 09-03-2012 | Отправлено: 12:13 23-11-2019
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21

Цитата:
Когда обсуждали упавшую производительность lua, кто-то затихарился и не отсвечивал "Общественность" рассчитывала на экспертные замечания по вопросу.

"Упавшая производительность lua" - а с чего бы это ей упасть, непонятно.
В Фаре  используется LuaJIT 2.1, его автор вроде в этом форуме не участвует.

Всего записей: 1246 | Зарегистр. 09-03-2012 | Отправлено: 18:51 23-11-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz
 
Погляжу, far.GetDirList() по идее действительно может дольше считывать дерево, хотя она и проще в применении. Есть идея, надо подумать как реализовать.

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")

Всего записей: 25545 | Зарегистр. 31-07-2002 | Отправлено: 21:46 23-11-2019
reversecode



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ctrl enter добавляет пробел так и должно разве быть ?

Всего записей: 1717 | Зарегистр. 06-03-2008 | Отправлено: 08:19 24-11-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reversecode
 
Вроде давно так, равно как и по Ctrl-F, Ctrl-J. Я уже и привык - обычно это даже удобно когда вставляешь что-то в набираемую команду, но иногда приходится сей пробел руками удалять...

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")

Всего записей: 25545 | Зарегистр. 31-07-2002 | Отправлено: 09:14 24-11-2019
reversecode



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот именно пробел очень часто приходится удалять

Всего записей: 1717 | Зарегистр. 06-03-2008 | Отправлено: 14:16 24-11-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reversecode
 
Так можно макрос прикрутить типа такого (пример):

Код:
Macro{
  id="A8C21BB5-C12F-437D-987F-D9AF7DCC2C72";
  area="Shell";
  key="CtrlEnter";
  description="Trim commandline form end";
  condition=function(key) return not CmdLine.Empty end;
  action=function() mf.print(mf.trim(CmdLine.Value,2)) end;
}

 и пусть он это делает. А почему бы и нет? левый пробел ему трогать нечего, а правый пусть обрубает чтоб под ногами не путался.

----------
Жив курилка! (Р. Ролан, "Кола Брюньон")

Всего записей: 25545 | Зарегистр. 31-07-2002 | Отправлено: 14:48 24-11-2019
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 5)
Maz (15-01-2020 17:38): FAR Manager (часть 6)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru