Far Manager for Linux
Да-да, этот тот самый Far Manager, который очень сильно облегчал жизнь пользователям в Виндовсе.
Всё то же самое, только в Линуксе. Far Manager работает непосредственно, без привлечения Wine и виртуальных машин.
Под катом — описание действий, как поиметь его у себя на компе.
Да. Конечно, было бы здорово, если бы можно было выполнить такую команду:
$ sudo apt-get install farmanager
, но, к сожалению, на данный момент такого пакета в репозитории Debian нет. Но зато на github-е имеется репозиторий проекта. Таким образом всё манипуляции сводятся к трём действиям:
- Клонировать проект
- Откомпилировать
- Установить
Но прежде чем клонировать и компилировать проект, нужно сначала установить несколько нужных для этого дела пакетов.
Произведём их установку одной командой
В зависимости от скорости вашего интернета, мощности вашего компа и предварительной укомплектованности вашей версии операционной системы, установка нужных пакетов займёт какое-то время — от нескольких секунд до нескольких минут.
Далее, если у вас ещё не создан поддиректорий del в вашем домашней папке, создайте его. Этот поддиректорий нужен для решения различных временных задач. Потом, когда задача будет решена, и файлы и поддиректории этой задачи уже будут не нужны, вы их тупо можете удалить или временно «похранить».
В общем, создаем поддиректорий и сразу же заходим в него:
1. Теперь выполняем клонирование проекта:
Я не засекал время, но по ощущениям, клонирование проекта у меня заняло менее минуты.
2. Теперь не заходя в поддиректорий проекта, создаём в нём поддиректорий для сборки программы. Он будет называться build.
Честно говоря, я не очень понимаю, зачем это нужно делать «руками», обычно это всё осуществляется автоматически. Но раз уж сами разработчики этой версии Far Manager-а просят, то пусть будет по ихнему.
Будьте внимательны! В имени директория far2l на конце не «двадцать один», а «два эль».
После создания поддиректория заходим в него:
Отлично! Теперь выполняем две команды. Первая сконфигурирует проект для оптимизации сборки под ваш конкретный комп, а вторая, собственно, будет как раз заниматься компиляцией и сборкой программы. Опять же, в зависимости от возможностей вашего компа это может занять несколько минут.
Параметр в команде make предполагает, что у вашего компа двухъядерный процессор. Если у вашего компа четыре, шесть или больше ядер, то укажите соответствующую цифру после «-j».
3. После компиляции и сборки программу нужно установить в систему. Для этого сначала заходим в поддиректорий install
и там выполняем команду
Если всё сделано без ошибок, то инсталляция пройдёт на «Ура!».
Ну и чтобы уж совсем облегчить себе жизнь, давайте встроим вызов Фар-Менеджера в систему. Иначе говоря, после этой операции мы будем вызывать его нажатием на Win-F.
Для этого запускаем утилиту Комбинации клавиш клавиатуры через системное меню:
В появившемся окне (внизу окна) нажимаем кнопку «Добавить».
Появится окно, в котором нужно ввести следующие данные:
После нажатия на кнопку «Применить» нужно присвоить действию (команде) горячую клавишу.
Я не долго думал, я выбрал комбинацию Win-F. Вы можете взять любую другую. Не принципиально.
Far manager for linux
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Linux port of FAR Manager v2 (http://farmanager.com/)
Works also on OSX/MacOS and BSD (but later not tested on regular manner)
ALPHA VERSION.
Currently interesting only for enthusiasts.
Plug-ins that are currently working: NetRocks (SFTP/SCP/FTP/FTPS/SMB/NFS/WebDAV), colorer, multiarc, tmppanel, align, autowrap, drawline, editcase, SimpleIndent, Python (optional scripting support)
Used code from projects
- gawk
- m4
- libwxgtk3.0-dev (or in Ubuntu 19.04+ — libwxgtk3.0-gtk3-dev)
- libssh-dev (needed for NetRocks/SFTP)
- libssl-dev (needed for NetRocks/FTPS)
- libsmbclient-dev (needed for NetRocks/SMB)
- libnfs-dev (needed for NetRocks/NFS)
- libneon27-dev (or later, needed for NetRocks/WebDAV)
- libarchive-dev (needed for better archives support in multiarc)
- libpcre2-dev (needed for custom archives support in multiarc)
- cmake ( >= 3.2.2 )
- g++
- git (needed for downloading source code)
Or simply on Debian/Ubuntu:
(if in Ubuntu 19.04+ or other that has missing libwxgtk3.0-dev — try libwxgtk3.0-gtk3-dev)
or with ninja (you need ninja-build package installed)
- Supported compiler: AppleClang 8.0.0.x or newer. Check your version, and install/update XCode if necessary.
One line OSX/MacOS install
Hard way OSX/MacOS install — with building from sources:
To build without WX backend (console version only): change -DUSEWX=yes to -DUSEWX=no
To build with Python plugin: add argument -DPYTHON=yes
Building with MacPorts (when wxWidgets.framework is not installed system-wide):
You can import the project into your favourite IDE like QtCreator, CodeLite, or any other, which supports cmake or which cmake is able to generate projects for.
- QtCreator: select «Open Project» and point QtCreator to the CMakeLists.txt in far2l root directory
- CodeLite: use this guide to setup a project: https://wiki.codelite.org/pmwiki.php/Main/TheCMakePlugin (to avoid polluting your source tree, don’t create your workspace inside of the far2l directory)
I implemented/borrowed from WINE some commonly used WinAPI functions. They are all declared in WinPort/WinPort.h and corresponding defines can be found in WinPort/WinCompat.h (both are included by WinPort/windows.h). Note that this stuff may not be 1-to-1 to corresponding Win32 functionality also doesn’t provide full-UNIX functionality, but it simplifies porting and can be considered as temporary scaffold.
However, only the main executable is linked statically to WinPort, although it also exports WinPort functionality, so plugins use it without the neccessity to bring their own copies of this code. This is the reason that each plugin’s binary should not statically link to WinPort.
While FAR internally is UTF16 (because WinPort contains UTF16-related stuff), native Linux wchar_t size is 4 bytes (rather than 2 bytes) so potentially Linux FAR may be fully UTF32-capable console interaction in the future, but while it uses Win32-style UTF16 functions it does not. However, programmers need to be aware that wchar_t is not 2 bytes long anymore.
Inspect all printf format strings: unlike Windows, in Linux both wide and multibyte printf-like functions have the same multibyte and wide specifiers. This means that %s is always multibyte while %ls is always wide. So, any %s used in wide-printf-s or %ws used in any printf should be replaced with %ls.
Update from 27aug: now it’s possible by defining WINPORT_DIRECT to avoid renaming used Windows API and also to avoid changing format strings as swprintf will be intercepted by a compatibility wrapper.
Plugins API based on FAR Manager v2 plus following changes:
Added following entries to FarStandardFunctions:
int Execute(const wchar_t *CmdStr, unsigned int ExecFlags); . where ExecFlags — combination of values of EXECUTEFLAGS. Executes given command line, if EF_HIDEOUT and EF_NOWAIT are not specified then command will be executed on far2l virtual terminal.
int ExecuteLibrary(const wchar_t *Library, const wchar_t *Symbol, const wchar_t *CmdStr, unsigned int ExecFlags) Executes given shared library symbol in separate process (process creation behaviour is the same as for Execute). symbol function must be defined as: int ‘Symbol'(int argc, char *argv[])
void DisplayNotification(const wchar_t *action, const wchar_t *object); Shows (depending on settings — always or if far2l in background) system shell-wide notification with given title and text.
int DispatchInterThreadCalls(); far2l supports calling APIs from different threads by marshalling API calls from non-main threads into main one and dispatching them on main thread at certain known-safe points inside of dialog processing loops. DispatchInterThreadCalls() allows plugin to explicitely dispatch such calls and plugin must use it periodically in case it blocks main thread with some non-UI activity that may wait for other threads.
Added following commands into FILE_CONTROL_COMMANDS:
- FCTL_GETPANELPLUGINHANDLE Can be used to interract with plugin that renders other panel. hPlugin can be set to PANEL_ACTIVE or PANEL_PASSIVE. Param1 ignored. Param2 points to value of type HANDLE, call sets that value to handle of plugin that renders specified panel or INVALID_HANDLE_VALUE.
Added following plugin-exported functions:
Устанавливаем FAR в Ubuntu, используя Wine
Любителям «священных войн» вход строго воспрещен!
Для многих людей FAR оставался и остается одной из самых любимых программ. Достоинств у нее много, недостатков тоже. Но этот топик не про это. Многие хотят продолжать использовать FAR и дальше, но уже под Linux’ом.
Что нам нужно?
- Ubuntu Lucid Lynx 10.04
- FAR manager 2.0 (я обычно качаю 7zip архив, и далее речь пойдет именно про него)
- Wine 1.2
Поехали? (Осторожно, много картинок)
Установка программы
Для начала нам нужно распаковать архив с программой. Для этого заходим в центр приложений (Applications > Ubuntu Software Center), в окне поиска набираем 7zip, и устанавливаем нужный нам пакет.
Потом устанавливаем wine. В центре приложений в окне поиска набираем wine. Устанавливать нужно Wine Microsoft Compatibility Layer (Beta release). Это более свежая версия этой программы.
В домашней директории я сделал папку wine, куда потом распаковал файлы FAR’a
Нажимаем правой кнопкой мыши на exe-файле FAR’а, и проверяем его свойства, установлен ли чекбокс «Allow executing file as program» (Разрешить запуск файла на исполнение) в правах доступа.
Если все нормально, то закрываем окно свойств, и запускаем наш любимый FAR.
Теперь берем напильник, и будем из комбайна делать танк. Для начала нужно восстановить привычные действия по правой кнопке мыши.
Нажимаем правую кнопку и устанавливаем галочку возле пункта Shift
Нажимаем кнопку Ok и говорим, что хотим сохранить параметры для всех сессий.
Повторно вызвать эту панель настроек можно будет при помощи правой кнопки мыши и Shift’а.
Настройку шрифтов пока не трогаем.
Проблема Alt+F1 и Alt+F2
Далее нас ждет следующая проблема. При нажатии Alt+F1 и Alt+F2 будут вызываться системные функции, а не привычные всем диалоговые окна. Эту проблему решаем путем переназначения этих кнопок в системе. Заходим в System > Preferences > Keyboard Shortcuts
Находим упоминание про Alt+F1 и Alt+F2, и переопределяем на другое сочетание клавиш. Убрать назначение клавиш можно при помощи backspace. Пункту «Show the panel’s main menu» лучше установить какое-то конкретное сочетание клавиш, иначе система будет использовать Alt+F1
Возвращаемся в наш FAR и пробуем смену дисков. Работает прекрасно.
Шрифты и их сглаживание
Займемся второй проблемой — шрифтами. Для начала открываем консоль (Applications > Accessories > Terminal или Ctrl+Alt+T).
Как я уже говорил, я создал папку wine в домашней директории.
Набираем в консоли
cd wine
потом
wget www.kegel.com/wine/winetricks
и потом
sh winetricks fontsmooth-rgb allfonts
Перезапускаем FAR, и заходим в свойства программы, нажав Shift + правая кнопка мыши. Меняем шрифт на более подходящий, например на Andale Mono или Liberation Mono. Сохраняем настройки как и указано выше.
Вот что у меня получилось
Красота, да не очень. Цвет диалоговых окон немного темнее, чем под Windows, и это, если сильно напрягает, можно исправить в настройках цветового оформления FAR’а.
Ассоциация файлов с родными приложениями Linux’а
В домашней директории создаем файлик с названием winenative
Его содержимое должно быть такое
#!/bin/sh
$1 «`wine winepath -u «$2″`»
Сохраняем его, потом делаем следующее
sudo chown root:root winanative
sudo chmod a+x winenative
sudo mv winenative /usr/bin/
Изменили владельца, поставили права на исполнение и перенесли в папку /usr/bin/
Далее, запускаем FAR и набираем в консоли regedit
В HKEY_CLASSES_ROOT ищем ключ pngfile, в нем будет shell > open
В open может быть ddeexec, который я удалял. Нам необходимо создать или изменить ключ command
Значением ключа вставляем start /Unix /usr/bin/winenative eog «%1»
Должно получиться вот так:
Аналогично повторяем для других типов, заменяя «Eye of Gnome» (eog) на другие приложения.
Ложка дегтя
- Плагин WinSCP не работает, но он и не нужен. Можно спокойно примонтировать удаленную файловую систему через fuse и работать дальше.
- Я так и не смог найти способ, как в консоли FAR’а выполнять команды linux консоли. Windows ищет команду в неком списке доступных команд, и по определенному пути. Как заставить это все транслировать в тот же bash, я не нашел.
- Иногда FAR крошится на редактировании файлов.
UPD: Указал в требованиях к установке wine