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

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

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

articlebot (06-10-2016 09:08): Far Manager  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Где взять последнюю версию?
На странице загрузки скачайте MSI-инсталлятор стабильной сборки нужной вам разрядности (32 или 64 бита) или дистрибутив в виде 7z-архива и установите/распакуйте в любую папку (FAR портабелен и может работать без установки).
Там же на свой страх и риск можно взять наиболее свежую "ночную" сборку (в ночных сборках устраняются выявленные недоработки, добавляются новые функции, но могут содержаться и серьёзные ошибки).
 
Общие сведения о совместимости 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, иначе плагин не будет загружен.

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

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

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 17:33 12-10-2009 | Исправлено: 375, 08:35 29-03-2016
Capushon

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz: 11:41 03-08-2015
Цитата:
Имя файл-лога настраивается
упс...
 
Спасибо за хотелку.

Код:
[+] Editor: "Show all" menu scrolls the editor text to the current selected item.


Всего записей: 4317 | Зарегистр. 18-07-2006 | Отправлено: 10:22 03-08-2015
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересно, в FAR3 возможно организовать сортировку файлов в панели по именам с неразличием, либо полным игнорированием дефиса и подчёркивания в именах?

Всего записей: 3484 | Зарегистр. 16-06-2007 | Отправлено: 13:23 04-08-2015 | Исправлено: Alexyz21, 13:24 04-08-2015
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
В Фар 3 есть так называемая кастомная сортировка, позволяющая сортировку по любым правилам.
Читайте мануал macroapi. Также, на форуме Фара можно найти несколько готовых примеров.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 13:34 04-08-2015
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smuel, посмотрел ваши примеры-макросы кастомной сортировки - как реализовать неразличаемость заданных символов, так и не понял

Всего записей: 3484 | Зарегистр. 16-06-2007 | Отправлено: 14:00 04-08-2015 | Исправлено: Alexyz21, 15:00 04-08-2015
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
В функции Compare (которую вы сами пишете) можете реализовать любой алгоритм сравнения. Есть же примеры.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 15:15 04-08-2015
Alexyz21



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

Код:
 
  Compare = function(pi1,pi2,opt)
    local a,b,n=pi1.FileName,pi2.FileName,0
    a=a:gsub("_","-")
    b=b:gsub("_","-")
    if a>b then n=-1
    elseif a<b then n=1
    end
    return n
  end;
 

Ну мне Фар в вежливой форме и объяснил, что у меня лыжи не той системы

Всего записей: 3484 | Зарегистр. 16-06-2007 | Отправлено: 15:23 04-08-2015 | Исправлено: Alexyz21, 15:25 04-08-2015
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
Здесь используется LuaJIT FFI. Если можете с ним работать - хорошо, а делать вашу задачу за вас у меня времени нет.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 15:31 04-08-2015
Capushon

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А что можно сделать чтобы текст не сливался:
 

 
Добавлено:
Сделал, не совсем элегантно, но пока так:
 
   
 

 
По другому никак?

Всего записей: 4317 | Зарегистр. 18-07-2006 | Отправлено: 16:02 04-08-2015 | Исправлено: Capushon, 16:11 04-08-2015
Capushon

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А зачем Far.moon скрипты, если всё то же самое можно реализовать на Lua?
И синтаксис почти то же...
 
Например можно соединить:
HiddenCyr.Highlighting.moon и LuaSpell.lua, слегка переделав первый.

Всего записей: 4317 | Зарегистр. 18-07-2006 | Отправлено: 01:07 05-08-2015
shmuz

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

Цитата:
А зачем Far'у .moon скрипты, если всё то же самое можно реализовать на Lua?  
Far'у, конечно, безразлично, а вот человек-скриптописатель вполне может предпочитать MoonScript (так же как кто-то предпочитает говорить на французском, а кто-то - на русском).

Цитата:
И синтаксис почти то же...  
Это не так, отличия довольно существенные.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 02:29 05-08-2015
Capushon

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz
Ну вот например по мотивам, переделал кусок из .moon для компактности и удобочитаемости:

Код:
-------------------------------------------------------------------------------
-- [LR]Alt[0-9] - Альтернативные экраны Alt-0-9
-------------------------------------------------------------------------------
Event { group = "DialogEvent", description = "Удаляем из списка элемент Desktop", action = function(event, param)
 local F = far.Flags
    if event == F.DE_DLGPROCINIT and param.Msg == F.DN_INITDIALOG then
      local id = far.SendDlgMessage(param.hDlg, F.DM_GETDIALOGINFO)
      id = id and id.Id or ""
      if id == win.Uuid("72eb948a-5f1d-4481-9a91-a4bfd869d127") then
        far.SendDlgMessage(param.hDlg, F.DM_LISTDELETE, 1, {
          StartIndex = 1,
          Count = 1
        })
        do
          local _with_0 = far.SendDlgMessage(param.hDlg, F.DM_GETDLGRECT)
          far.SendDlgMessage(param.hDlg, F.DM_RESIZEDIALOG, 0, {
            X = _with_0.Right - _with_0.Left + 1,
            Y = _with_0.Bottom - _with_0.Top
          })
        end
        local item = far.SendDlgMessage(param.hDlg, F.DM_GETDLGITEM, 1)
        item[5] = item[5] - 1
        far.SendDlgMessage(param.hDlg, F.DM_SETDLGITEM, 1, item)
      end
    end
    return false
end;
}
 
Macro { area="Shell Editor Viewer"; key="/[LR]Alt[0-9]/"; description="Альтернативные экраны Alt-0-9"; action = function()
   Keys('F12', tostring(akey(1):sub(-1)+1))
end;
}
Macro { area="Editor Shell Viewer"; key="ShiftTab"; description="^Ctrl-Tab"; action = function()
   Keys('CtrlShiftTab')
end;
}

Вроде работает.

Всего записей: 4317 | Зарегистр. 18-07-2006 | Отправлено: 02:40 05-08-2015
shmuz

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

Цитата:
переделал кусок из .moon для компактности и удобочитаемости
Если для вас важна компактность, то надо было всё на MoonScript переводить.
Но давайте на этом закончим сравнение языков. На мой взгляд - оба хороши.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 03:22 05-08-2015
Capushon

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shmuz: 05:22 05-08-2015
Цитата:
Если для вас важна компактность, то надо было всё на MoonScript
Только привёл все свои скрипты в "общему знаменателю", теперь все LUA.
 
Ну а по-поводу компактности, зачем например делать так:

Код:
-------------------------------------------------------------------------------
--       Получение названия клавиши. © SimSU   Благодарность: Shmuel.
-------------------------------------------------------------------------------
 
---- Настройки
local function Settings()
-- Начало файла Profile\SimSU\Common_KeyName.cfg
return{
  Key="Ctrl/"; --Prior=50; -- Получение названия клавиши.
}
-- Конец файла Profile\SimSU\Common_KeyName.cfg
end
 
---- Локализация
_G.far.lang=far.lang or win.GetEnv("farlang")
-- Встроенные языки / Buildin laguages
local function Messages()
if far.lang=="Russian" then
-- Начало файла Profile\SimSU\SimSU\Common_KeyNameRussian.lng
return{
  Descr="Получение названия клавиши. © SimSU";
  Press=" Нажмите клавишу... ";
  Name="Название клавиши";
  Code="Код клавиши";
}
-- Конец файла Profile\SimSU\Common_KeyNameRussian.lng
else--if far.lang=="English" then
-- Begin of file Profile\SimSU\Common_KeyNameEnglish.lng
return{
  Descr="Get name of key. © SimSU";
  Press=" Press key... ";
  Name="Key name";
  Code="Key code";
}
-- End of file Profile\SimSU\Common_KeyNameEnglish.lng
end end
 
local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_KeyName"..far.lang..".lng") or Messages)()
local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Common_KeyName.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_KeyName.cfg") or Settings)()
 
local SimSU=SimSU or {}
-------------------------------------------------------------------------------
function SimSU.Common_KeyName() -- Получение названия клавиши.
  far.Message(M.Press,"","")
  local VK=mf.waitkey(0,1)
  VK=prompt(M.Name,("%s: %d (0x%X)"):format(M.Code,VK,VK),0x01+0x10,mf.key(VK))
  return VK
end
-------------------------------------------------------------------------------
if not Macro then return {Common_KeyName=SimSU.Common_KeyName} end
local ok, mod = pcall(require,"SimSU.Common_KeyName"); if ok then SimSU=mod else _G.SimSU=SimSU end
-------------------------------------------------------------------------------
 
Macro {area="Common"; key=S.Key; priority=S.Prior; description=M.Descr;
  action=function() local VK=SimSU.Common_KeyName(); if VK then print(VK) end end;
}

когда можно просто:

Код:
-------------------------------------------------------------------------------
-- Ctrl/ - Получение названия клавиши
-------------------------------------------------------------------------------
Macro { area="Common"; key="Ctrl/"; description="Получение названия клавиши"; action=function()
  far.Message(" Нажмите клавишу... ","","")
 local VK=mf.waitkey(0,1)
  VK=prompt("Название клавиши",("%s: %d (0x%X)"):format("Код клавиши",VK,VK),0x01+0x10,mf.key(VK))
end;
}

 
???

Всего записей: 4317 | Зарегистр. 18-07-2006 | Отправлено: 07:02 05-08-2015
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Capushon
Я не буду здесь обсуждать не свои скрипты, для которых есть отдельная тема на форуме Фара. Их надо обсуждать там, тогда и автор сможет получить обратную связь, а также ответить вам лично.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 08:17 05-08-2015 | Исправлено: shmuz, 08:25 05-08-2015
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Посмотрел MSDN - не вижу функций, позволяющих изменять содержимое строк (памяти), за безопасность что-ли так боролись? Уже подумал искать в строке игнорируемые символы и вырезать куски между ними, а затем склеивать их в одну строку... Или я функции замены просто не нашёл? - Не знаю.

Всего записей: 3484 | Зарегистр. 16-06-2007 | Отправлено: 11:54 05-08-2015
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
LuaJIT FFI - это низкоуровневое программирование, далеко не такое комфортное, как на "обычном" Lua. Для тех, у кого нет опыта программирования на C/Pascal/etc., оно обычно представляет значительную трудность. Так что не удивляйтесь, если у вас не получается.
 
Выбор FFI был продиктован соображениями производительности. Сначала я  реализовал кастомную сортировку просто на Lua - были сильные тормоза при сортировке большого количества файлов в папке.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 12:11 05-08-2015
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Была мысль заюзать StrStr, так Си-шного аналога strncpy не нашёл - на первый взгляд задача примитивней некуда, всех делов то - заменить "_" на "-", или например "." на "-" в именах файлов, содержащих даты, а оказалось всё не совсем так просто.

Всего записей: 3484 | Зарегистр. 16-06-2007 | Отправлено: 15:04 05-08-2015 | Исправлено: Alexyz21, 15:32 05-08-2015
shmuz

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

Код:
local ffi=require'ffi'
local C=ffi.C
local band,bor = bit.band,bit.bor
local DOT, BS = string.byte("."), string.byte("\\")
 
ffi.cdef[[
wchar_t* wcschr(const wchar_t*, wchar_t);
wchar_t* wcsrchr(const wchar_t*, wchar_t);
]]
 
local function getExt (name)
  local ext = C.wcsrchr(name,DOT)
  if ext ~= nil then
    local bs = C.wcschr(ext,BS)
    if bs~=nil then ext=nil end
  end
  return ext
end
 
local Mode, Desc = 110, "Custom: by name ignoring symbols"
 
Panel.LoadCustomSortMode (Mode, {
  Description = Desc; Indicator = "@#";
  Compare = function(p1,p2,opt)
    local ext1, ext2 = getExt(p1.FileName), getExt(p2.FileName)
    local len1 = ext1~=nil and ext1-p1.FileName or -1
    local len2 = ext2~=nil and ext2-p2.FileName or -1
    return -2 + C.CompareStringW(C.LOCALE_USER_DEFAULT,
      bor(C.NORM_IGNORECASE, C.SORT_STRINGSORT, C.NORM_IGNORESYMBOLS), p1.FileName, len1, p2.FileName, len2)
  end;
})
 
Macro {
  description = Desc; area="Shell"; key="CtrlShiftF2";
  action=function() Panel.SetCustomSortMode(Mode) end;
}

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 15:40 05-08-2015
Alexyz21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smuel, большое спасибо! Такое я бы не поборол.  
 
Проверил - работает, 7.000 файлов в папке сортирует мгновенно. То, что вы выбрали игнорирование целого класса символов вместо 2-х - связано с ограничениями FFI, или решили весь класс символов одним скриптом накрыть для более общего применения?

Всего записей: 3484 | Зарегистр. 16-06-2007 | Отправлено: 16:44 05-08-2015
shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexyz21
С ограничениями FFI не связано. Связано с ограничениями моего свободного времени.

Всего записей: 1861 | Зарегистр. 09-03-2012 | Отправлено: 16:47 05-08-2015
   

Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397

Компьютерный форум Ru.Board » Компьютеры » Программы » Far Manager (часть 3)
articlebot (06-10-2016 09:08): Far Manager


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru