xaizek / vifm (License: GPLv2+) (since 2018-12-07)
Vifm is a file manager with curses interface, which provides Vi[m]-like environment for managing objects within file systems, extended with some useful ideas from mutt.
vifm v0.10 beta ---------------
New version includes long awaited tabs and support for managing media.
The first one comes in two flavours: tabs either include layout or don't.
The latter relies on a helper script, whose job is to adapt existing tools to
make them usable by vifm.

The beta stage will last about two weeks.  In case any serious bugs are found
during this period, another beta version might be released.

Main changes:
 - added tabs which either operate on the level of layout or level of
   individual panes;
 - added ability to synchronize contents of registers among multiple
 - added menu for managing media (relies on helper that does the managing);
 - improved cursor positioning and control over it;
 - ability to colorize statusline.

More detailed list of changes.

Command-line mode:
 - added :tabc[lose] command that closes current tab unless it's the last one;
 - added :tabm[ove] command that moves tabs (thanks to filterfalse);
 - added :tabname command that updates name of the current tab;
 - added :tabnew command that creates a new tab (thanks to Cosmin Popescu,
   a.k.a. cosminadrianpopescu);
 - added :tabn[ext] and :tabp[revious] commands, which work as gt and gT normal
   mode shortcuts correspondingly (thanks to Cosmin Popescu, a.k.a.
 - added :qa[ll], :wqa[ll] and :xa[ll] commands that always try to exit vifm no
   matter how many tabs are open;
 - added :goto command that navigates to specified file/directory (thanks to
   mateusz28 and Dmitry Frank, a.k.a. dimonomid);
 - added :regular command that leaves custom view (thanks to gammaray);
 - :quit, :wq, :exit, :xit, ZZ and ZQ now try to close current tab before
   closing the application;
 - make :echo and :execute report parsing errors in more detail than just
   "invalid expression";
 - make :cabbrev and :cnoreabbrev always treat bar (`|`) as part of their
   arguments, just like :*map commands do (thanks to filterfalse);
 - make :tree! toggle view in and out of tree mode (thanks to gammaray);
 - more accurate error message on handling non directories passed to :cd.

:set command and options:
 - added 'tabscope' option that controls style of tabs (thanks to Cosmin
   Popescu, a.k.a. cosminadrianpopescu);
 - added 'showtabline' option that controls visibility of tab line;
 - added 'histcursor' option that gives partial control over when cursor is
   positioned in accordance with record of directory history (thanks to
   filterfalse and Dmitry Frank, a.k.a. dimonomid);
 - added 'quickview' option that controls visibility of quick view (:view)
   (thanks to Jochen Schweizer, a.k.a. durcheinandr);
 - added 'syncregs' option which defines group of instances that share registers
   (patch by Ma_Sys.ma);
 - added 'mediaprg' option that can be used to specify helper for managing
   removable media.  One such helper with support of udevil and udisks is
   provided.  Only for *nix systems;
 - added support for arbitrary expressions in 'statusline': '%{...}', e.g.
   '%{&sort}' evaluates to the value of the sort option (patch by Dmitry Frank,
   a.k.a. dimonomid);
 - added "M" flag to 'shortmess' option to control shortening of titles in
   windows of terminal multiplexers created by vifm down to file name instead of
   using full path (thanks to mateusz28).

File operations:
 - try to preserve file owner/group on copying (thanks to willemw12).

Normal and visual modes:
 - added gt and gT normal mode shortcuts that switch between tabs in both

Key bindings:
 - added <silent> :*map argument that postpones UI updates until RHS is
   completely processed.  Probably not all updates are postponed, to be improved
   as unhandled cases are discovered;
 - added <wait> :*map argument, which resolves prefix conflicts of user-defined
   mappings and builtin keys in favour of user-defined mappings (thanks to Paweł
   Smolak, a.k.a. psmolak).

Angle bracket notation:
 - added <insert> angle bracket notation (thanks to j-xella);
 - added <c-@> angle bracket notation making it possible to map Ctrl-Space key
   (thanks to anonymous at Vifm Q2A site).

File list:
 - use historical cursor position upon startup by default when 'autochpos' is
   on, this is now independent from "savedirs" in 'vifminfo' option (thanks to
 - use historical cursor position on navigating to a mark that doesn't specify a
   file by default when 'autochpos' is on (thanks to filterfalse);
 - move cursor after p and P to one of files that were moved or to a cause of
   last conflict (thanks to filterfalse and ranousse);
 - issue a warning if file system lists several files with identical names in
   the same directory.  It used to be assumed that it can't happen (thanks to
   Jose Riha, a.k.a. jose1711).

File preview:
 - support italics in quickview/view mode and in :highlight when curses
   implementation provides corresponding extension.  PDCurses doesn't implement
   it on Windows.  Fallback is to use "reversed" attribute (thanks to GeorgeHJ).

 - escape "=" at the beginning of paths (has special meaning in zsh) (thanks to

Menus and dialogs:
 - added :media menu that can list and perform basic operations on removable
   media (requires helper to be available, see 'mediaprg').  Only for *nix
   systems (thanks to Bruce Hunsaker, a.k.a. hunsakerbn and others);
 - added r key to :undolist menu, which resets position in the undo list to
   group under the cursor (thanks to mini-turtle);
 - sort entries of :bmarks menu (thanks to anonymous at Vifm Q2A site);
 - slightly better formatting in :undolist menu;
 - do not reset selection before executing a :command from :commands menu
   (thanks to Jose Riha, a.k.a. jose1711);
 - less strict parsing of output of external command by :[un]select commands.
   Similar to %u/%U and menus allow <file>[:[<line>:[<col>:]] <description>]
   format (thanks to j-xella).

Color schemes:
 - added TabLine highlight group for highlighting tab line;
 - added TabLineSel highlight group for highlighting tip of the selected tab on
   the tab line;
 - added User1..User9 highlight groups and corresponding %[0-9]* 'statusline'
   macro, which makes it possible to colorize parts of status line differently
   (thanks to GeorgeHJ).

 - added tabpagenr() function that retrieves number of current or last tab page
   (thanks to filterfalse);
 - added fnameescape() builtin function, which can be used to escape paths on
   construction of :commands (thanks to filterfalse);
 - added second optional parameter to filetype() builtin function that is
   treated as a boolean and specifies whether symbolic links should be resolved;
 - added addition and subtraction operations to the parser;
 - added grouping via parentheses to expressions (thanks to Konst Mayer, a.k.a.
 - allow passing numerical positions to filetype() function.

 - more explicit documentation about leaving custom views (thanks to tagwint).

Only on Windows:
 - fixed flickering on Windows (thanks to Alexandre Viau and
 - fixed graphical applications on Windows not being detected as such, which
   caused vifm to wait until they finish running.  Was broken since 0.9 (thanks
   to r0ck).

Important fixes:
 - fixed error messages from put operation being postponed until the next put
   operation.  Got broken in 0.9;
 - fixed confirmation not being requested on :delete (thanks to anonymous at
   Vifm Q2A site).

See change log for the full list of changes and by whom they were suggested.
Subject SHA-1 Author Date
Version v0.10-beta 97dadb22144f451c6a176ebeba140f82aecf542c xaizek 2018-10-28 13:58:09
Teach deploy to put date in ChangeLog 4ee31136a6d7b8461a29b6df1c9ddd9e9efe757f xaizek 2018-10-28 13:57:33
Update NEWS file for 0.10 beta 3fc69545d87dd249e39893f57e00a39716663429 xaizek 2018-10-28 11:23:03
Add missing includes to two test files 9eb894fd80f8cd22d57b851103235e793a93bd52 xaizek 2018-10-28 13:52:14
Add dates to entries of the ChangeLog 430ae39c3e6c5bc4aafa2f237d08e89d3cfda85c xaizek 2018-10-28 11:04:45
Correct formatting in NEWS file 3e53fad0d25bef59c419303ab645d23318cf633f xaizek 2018-10-28 11:04:07
Put new location after `:tabnew path` in history cd46ce451130b65775e377c3b797af37b54ed0a2 xaizek 2018-10-27 21:24:09
Use historical cursor position on `:tabnew path` 5c15efb3e55d8364915a90ca04044e7ab55ae431 xaizek 2018-10-27 21:16:11
Update history on `:tabnew` with path 596e4989b6676823ab40df08a7bbc2d95acfca1e xaizek 2018-10-27 15:39:38
Make tests/misc/viewport_movement more independent 0299fab938b48b2030f18c5aed1b5d0da416ee0e xaizek 2018-10-27 16:13:23

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vifm

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vifm

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master