Linux fork of FAR Manager v2 (http://farmanager.com/)
Works also on OSX/MacOS and BSD (but latter not tested on regular manner)
BETA VERSION.
Use on your own risk!
Plug-ins that are currently working: NetRocks (SFTP/SCP/FTP/FTPS/SMB/NFS/WebDAV), colorer, multiarc, tmppanel, align, autowrap, drawline, editcase, SimpleIndent, Calculator, Python (optional scripting support)
Note: Far2l uses keyboard shortcurts in the tradition of the Far Manager for Windows, but some of them (Alt-F1, Alt-F2, Alt-F7, Ctrl-arrows, etc.) usually exclusively used in desktop environment GNOME, KDE, Xfce, macOS etc. and in terminal emulators. To work with these keys in far2l you need to release keyboard shortcuts globally in the environment settings (see #2326) or use far2l lifehacks: Sticky controls via Ctrl-Space or Alt-Space or Exclusively handle hotkeys option in the Input settings (see details in buil-in far2l help).
FAR2L has base UI Backends (see details in build-in help section UI backends):
GUI (WX): uses wxWidgets, works in graphics mode, ideal UX (might add dependencies to your desktop environment, e.g. wxWidgets toolkit and related packages);
TTY|Xi: works in terminal mode, requires a dependency on pair X11 libraries (to access clipboard and to get state of all keyboard modifiers), almost perfect UX;
TTY|X: works in terminal mode, uses X11 to access clipboard, all keyboard works via terminal;
TTY: plain terminal mode, no X11 dependencies, UX with some restrictions (works fully when running in the terminal emulators, which provide clipboard access and has their advanced keyboard-protocols).
Mode (UI Backends) |
TTY (plain far2l) |
TTY\ | X | TTY\ | Xi | GUI |
---|---|---|---|---|---|---|
Works: | in console and in any terminal |
in terminal window under graphic X11 session |
in terminal window under graphic X11 session |
in Desktop environment (X11 or Wayland or macOS) via wxWidgets |
||
Binaries: | far2l | far2l far2l_ttyx.broker |
far2l far2l_ttyx.broker |
far2l far2l_gui.so |
||
Dependencies: | minimal | + libx11 | + libx11, libxi | + wxWidgets, GTK | ||
Keyboard: | Typical terminals: only essential key combinations KiTTY (putty fork), kitty (*nix one), iTerm2, Windows Terminal, far2l’s VT: full support |
Typical terminals: only essential key combinations KiTTY (putty fork), kitty (*nix one), iTerm2, Windows Terminal, far2l’s VT: full support |
Typical terminals: most of key combinations under x11; only essential key combinations under Wayland KiTTY (putty fork), kitty (*nix one), iTerm2, Windows Terminal, far2l’s VT: full support |
All key combinations |
||
Clipboard access: |
Typical terminals: via command line tools like xclip kitty (*nix one), iTerm2: via OSC52 Windows Terminal: via OSC52 or via command line tools under WSL KiTTY (putty fork), far2l’s VT: via far2l extensions |
Typical terminals, kitty (*nix one): via x11 interaction iTerm2: via OSC52 Windows Terminal: via OSC52 or via command line tools under WSL KiTTY (putty fork), far2l’s VT: via far2l extensions |
Typical terminals, kitty (*nix one): via x11 interaction iTerm2: via OSC52 Windows Terminal: via OSC52 or via command line tools under WSL KiTTY (putty fork), far2l’s VT: via far2l extensions |
via wxWidgets API via command line tools under WSL |
||
Typical use case: |
Servers, embedded (*wrt, etc) |
Run far2l in favorite terminal but with better UX |
Run far2l in favorite terminal but with best UX |
Desktop | ||
Debian packages: | none (use far2l due toauto downgrade) |
far2l |
far2l |
far2l-wx (since 2.6.4) |
||
Ubuntu packages: | none (use far2l due toauto downgrade) |
far2l |
far2l |
none | ||
Community PPA: | far2l |
far2l-ttyx |
far2l-ttyx |
far2l-gui |
Note: When running far2l automatically downgrade
if its components are not installed (or system libs are not available):
GUI ⇒ TTY|Xi ⇒ TTY|X ⇒ TTY.
To force run only specific backend use in command line:
for GUI: far2l --notty
;
for TTY|Xi use in command line: far2l --tty
;
for TTY|X: far2l --tty --nodetect=xi
;
for plain TTY: far2l --tty --nodetect=x
(see details via far2l --help
).
Note about use OSC 52 in TTY/TTY|X:
to interact with the system clipboard you must not forget to enable OSC 52
in both the FAR2L settings (Options
⇒Interface settings
⇒Use OSC52 to set clipboard data
,
which shown in the dialog only if far2l run in TTY/TTY|X mode and all other options for clipboard access are unavailable;
you can run far2l --tty --nodetect
to force not use others clipboard options),
and in terminal settings option OSC 52 must be allowed (by default, OSC 52 is disabled in some terminals for security reasons;
OSC 52 in many terminals is implemented only for the copy mode, and paste from the terminal goes by bracketed paste mode).
TTY X/Xi backends only (Debian / Ubuntu 23.10+)
apt install far2l
GUI backend (Debian since far2l 2.6.4)
apt install far2l-wx
Debian has far2 in sid-unstable / 13 trixie-testing / 12 bookworm-backports; Ubuntu since 23.10. Details about versions in the official repositories see in https://packages.debian.org/search?keywords=far2l or https://packages.ubuntu.com/search?keywords=far2l
Note: binaries in official repositories may be very outdated, actual binaries or portable see in Community packages & binaries.
You can install prebuilt package for x86_64 platform via Homebrew Cask, by command:
brew install --cask far2l
You can also manually download and install prebuilt package for x86_64 platform from Releases page: https://github.com/elfmz/far2l/releases
You can use containers to try far2l
without installing anything.
docker build . -l far2l
docker run -it far2l
See also Community packages & binaries
libwxgtk3.0-gtk3-dev
(or libwxgtk3.2-dev
in newer distributions, or libwxgtk3.0-dev
in older ones, optional - needed for GUI backend, not needed with -DUSEWX=no
)libx11-dev
(optional - needed for X11 extension that provides better UX for TTY backend wherever X11 is available)libxi-dev
(optional - needed for X11/Xi extension that provides best UX for TTY backend wherever X11 Xi extension is available)libxml2-dev
(optional - needed for Colorer plugin, not needed with -DCOLORER=no
)libuchardet-dev
(optional - needed for auto charset detection, not needed with -DUSEUCD=no
)libssh-dev
(optional - needed for NetRocks/SFTP)libssl-dev
(optional - needed for NetRocks/FTPS)libsmbclient-dev
(optional - needed for NetRocks/SMB)libnfs-dev
(optional - needed for NetRocks/NFS)libneon27-dev
(or later, optional - needed for NetRocks/WebDAV)libarchive-dev
(optional - needed for better archives support in multiarc)libunrar-dev
(optional - needed for RAR archives support in multiarc, see -DUNRAR
command line option)libpcre2-dev
(optional - needed for advanced custom archive formats support in multiarc)python3-dev
(optional - needed for python plugins support, see -DPYTHON
command line option)python3-cffi
(optional - needed for python plugins support, see -DPYTHON
command line option)cmake
( >= 3.2.2 )pkg-config
g++
git
(needed for downloading source code)or simply on Debian/Ubuntu:
apt-get install libwxgtk3.0-gtk3-dev libx11-dev libxi-dev libpcre2-dev libxml2-dev libuchardet-dev libssh-dev libssl-dev libsmbclient-dev libnfs-dev libneon27-dev libarchive-dev cmake pkg-config g++ git
In older distributions: use libwxgtk3.0-dev
instead of libwxgtk3.0-gtk3-dev
.
Clone current master
git clone https://github.com/elfmz/far2l
cd far2l
Checkout some stable release tag (master considered unstable): git checkout v_2.#.#
Prepare build directory:
mkdir -p _build
cd _build
Build: with make:
cmake -DUSEWX=yes -DCMAKE_BUILD_TYPE=Release ..
cmake --build . -j$(nproc --all)
or with ninja (you need ninja-build package installed)
cmake -DUSEWX=yes -DCMAKE_BUILD_TYPE=Release -G Ninja ..
cmake --build .
If above commands finished without errors - you may also install far2l, sudo cmake --install .
Also it's possible to create far2l_2.X.X_ARCH.deb or ...tar.gz packages in _build
directory by running cmake --build . --target package
command.
To build without WX backend (console version only): change -DUSEWX=yes
to -DUSEWX=no
also in this case dont need to install libwxgtk*-dev package
To force-disable TTY|X and TTY|Xi backends: add argument -DTTYX=no
; to disable only TTY|Xi - add argument -DTTYXI=no
To eliminate libuchardet requirement to reduce far2l dependencies by cost of losing automatic charset detection functionality: add -DUSEUCD=no
To build with Python plugin: add argument -DPYTHON=yes
but you must have installed additional packages within yours system:
python3-dev
,
python3-cffi
.
To control how RAR archives will be handled in multiarc:
-DUNRAR=bundled
(default) use bundled sources found in multiarc/src/formats/rar/unrar
-DUNRAR=lib
use libunrar and unrar utility, also build requires libunrar-dev to be installed
-DUNRAR=NO
dont use special unrar code, rar archives will be handled by libarchive unless its also disabled
There're also options to toggle other plugins build in same way: ALIGN AUTOWRAP CALC COLORER COMPARE DRAWLINE EDITCASE EDITORCOMP FARFTP FILECASE INCSRCH INSIDE MULTIARC NETROCKS SIMPLEINDENT TMPPANEL
To make custom/recent build use brew or MacPorts.
AppleClang 8.0.0.x
or newer. Check your version, and install/update Xcode if necessary.
clang++ -v
brew install --HEAD yurikoles/yurikoles/far2l
brew install --HEAD yurikoles/yurikoles/far2l --without-wxwidgets
--with-python@3.10
to the one of two above commands.Some issues can be caused by conflicting dependencies, like having two versions of wxWidgets, so avoid such situation when installing dependencies.
git clone https://github.com/elfmz/far2l
cd far2l
sudo port install cmake pkgconfig wxWidgets-3.2 libssh openssl libxml2 uchardet neon
export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
brew bundle -v
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(brew --prefix)/opt/openssl/lib/pkgconfig:$(brew --prefix)/opt/libarchive/lib/pkgconfig"
mkdir _build
cd _build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DUSEWX=yes -DCMAKE_BUILD_TYPE=Release ..
cmake --build . -j$(sysctl -n hw.logicalcpu)
or with ninja:
mkdir _build
cd _build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DUSEWX=yes -DCMAKE_BUILD_TYPE=Release -G Ninja ..
cmake --build .
cpack
command.
Note that this step sometimes fails and may succeed from not very first attempt.
Its recommended not to do anything on machine while cpack is in progress.
After .dmg successfully created, you may install it by running open ...path/to/created/far2l-*.dmg
After command
sudo codesign --force --deep --sign - /Applications/far2l.app
it is enough to confirm permission only once.
Details see in issue
.
For absolute minimum you need:
emerge -avn dev-libs/libxml2 app-i18n/uchardet dev-util/cmake
If you want to build far2l with wxGTK support also install it:
emerge -avn x11-libs/wxGTK
Additionally, for NetRocks you will need:
emerge -avn net-libs/neon net-libs/libssh net-fs/libnfs net-fs/samba
After installing, follow Clone and Build section above.
To install system-wide, add the far2l
package to your configuration.nix
environment.systemPackages
list. To run the application on-demand without affecting the system state, execute nix-shell -p far2l --command far2l
. These use a package version from your current channel.
The Far2l adaptation for nix is a small file on GitHub, it tells which Git revision from Far2l repo to fetch, with what dependencies to build it, and how to patch its references to other software to make it run in isolated fashion independently from other versions available in the system.
You can build and run far2l
package for any revision:
NixOS/nixpkgs
repo, or your own fork and branch):
nix-shell -I nixpkgs=https://github.com/<fork>/nixpkgs/archive/<revision-or-branch>.tar.gz -p far2l --command far2l
nix-shell -I nixpkgs=/path/to/nixpkgs -p far2l --command far2l
To advance the package to a new Far2l revision, edit the fetchFromGitHub
set attributes rev
(revision hash) and sha256
(revision content hash). Important! If you leave the old content hash, the old cached content for that hash might be used without attempting to download the new revision. If you're not expecting the build to break, the easiest would be to make a fork, push the change, and build straight from github.
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.
_build
; you can change in .vscode/settings.json
)Supporting extended far2l keyboard shortcuts and clipboard access
kovidgoyal's kitty (Linux, macOS, *BSD): https://github.com/kovidgoyal/kitty & https://sw.kovidgoyal.net/kitty (TTY|k backend: keys by kovidgoyal's kitty keyboard protocol; turn on OSC 52 in far2l and kitty for clipboard support)
Wez's Terminal Emulator (Linux, FreeBSD, Windows): https://github.com/wez/wezterm & https://wezfurlong.org/wezterm (TTY|k backend: keys in Linux, FreeBSD by kovidgoyal's kitty keyboard protocol; TTY|w backend: keys in Windows by win32-input-mode, enabled by default; turn on OSC 52 for clipboard support) [kitty keyboard protocol not supported in macOS & Windows]
iTerm2 (macOS): https://gitlab.com/gnachman/iterm2 & https://iterm2.com (TTY|a backend: keys by iTerm2 "raw keyboard" protocol; turn on OSC 52 for clipboard support)
Windows Terminal (TTY|w backend: keys by win32-input-mode; turn on OSC 52 for clipboard support; has mouse bug: https://github.com/microsoft/terminal/issues/15083 )
Original Putty does not correctly send some keyboard shortcuts. Please use putty forks with special far2l TTY extensions support (fluent keypresses, clipboard sharing etc):
Note: to full transfer extended keyboard shortcuts and the clipboard to/from the remote far2l one of the best way to initiate the connection inside local far2l-GUI (see details in build-in help section UI backends).
A collection of macros for far2l: https://github.com/corporateshark/far2l-macros
Turbo Vision, TUI framework supporting far2l terminal extensions: https://github.com/magiblot/tvision
turbo, text editor supporting far2l terminal extensions: https://github.com/magiblot/turbo
far2ltricks: https://github.com/unxed/far2ltricks
Community wiki & tips (in Russian; unofficial): https://github.com/akruphi/far2l/wiki
They are mainteined by enthusiasts and may be not exact with master: sometimes has extra plugins, sometimes has tweak, etc.
Flatpak: https://github.com/spvkgn/far2l-flatpak (access only to part of real filesystem via sandbox)
See also in https://github.com/elfmz/far2l/issues/647