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.
<root> / TODO (045b371ff09474d957d83a5380e702fbfc61e959) (7,906B) (mode 100644) [raw]
Basic things:
  * Middle ellipsis breaks search highlighting.
  * Improve ga and gA commands. (partially done)
  * Queueing of file operations.
  * Backgrounding of commands with job control (pause/resume/kill). (partially
    done)
  * Display parsing errors in dialog that indicate the error, don't rely on
    status bar. (partially done)
  * Remove trash option, since we have two commands for deletion.
  * Filtering in menus.
  * Process shell pause request for running in %s.
  * Responsive TUI during blocking operations.
  * Better failed operation messages. (partially done)
  * Make status bar able to display error and info messages at the same time.
  * Command to create multiple copies of selected file.

Documentation:
  * State the need of *nix tools on Windows more explicitly.
  * Document single and double quotes treating in the command-line mode.
  * Divide docs into several files (as it's quite big now).
  * Document name conflict resolution options.
  * Add separate section on bookmarks.

Vi(m) specific features:
  * Add support for directory completion for some of :set options.
  * 'wildignore' ('wig') option
  * Think about dot normal mode command.
  * Completion based on global (when one enters pattern<tab>, e.g. *.c<tab>).
  * Add support of n flag for :substitute command.
  * :let mapleader and <leader> support.
  * Ctrl-W F key.
  * Add support of [count] for Ctrl-E/Ctrl-Y/H/M/L.
  * nrformats option as in Vim.
  * Better ranges (add support for search patterns).
  * :map without arguments.
  * Consider adding support for sequences like \<cr>.
  * Completion of first argument for :map commands.
  * Make gU2U and similar commands work as in Vim.
  * Change file list filters to use fold levels.
  * /, ?, n, N as selectors.
  * Fix '' to go back to all jumps G gg links (in one directory?).
  * Maybe make zf and zd more Vim-like.
  * Kinda macros like in Vim (qa ... q).
  * Add =~ and !~ operators to expressions.
  * Add titleold option.
  * Support hex and octal numbers in :set.
  * Maybe add %p macro to rulerformat option.

Windows:
  * Make properties dialog change file attributes recursively.
  * Setup automatic Windows builds for master branch. (partially done)
  * Make :chmod accept arguments.
  * Add command to create .lnk files.
  * Sort completion items ignoring their case on Windows.
  * Handle numpad keys better, just like corresponding non-numpad keys.
  * Make 'fastrun' understand file extensions on Windows (to ignore them).
  * Make 'slowfs' option available on Windows
  * Support more of pdcurses specific keys (e.g. <a-bs>, <s-bs>).
  * Read first bytes of files and treat '#!' files as executable.

Possible things to add:
  * Add macros for marks.
  * Make package for Cygwin.
  * Position macros for user defined commands (%1, %2, ..., %9).
  * Improve sorting (iext; choosing multiple sorting keys in dialog).
    (partially done)
  * Merged directory history for both panes.
  * Wrapping of lines in the menus.
  * Something like :g/.../com and :v/.../com in Vim.
  * Don't reread config files on :restart for --no-configs session.
  * Better renaming keys.
  * Quad/multiple-views
  * Add a general file preview script.
  * A more convenient shortcut for the :filter command (at least :filt).
  * Multiselect for items (menu and/or file list).
  * inotify support on Linux. (partially done)
  * :filter !filter-tool
  * Use system wide mimetypes file. /etc/mailcap?
  * Add "|" command to menu to process list with external tool.
  * "Blow directory" command to replace directory with its content.
  * Emacs like Dired or Helm incremental search and complete
  * $_ env var and Alt-T combination as in bash shell.
  * Templates for :touch.
  * Reverse searching
  * Add g/ and g? commands (search, but don't select files).
  * Parse escape sequences in menus as in preview.
  * Virtual File System - currently vifm can use FUSE to mount most file
    systems.
  * Something to control behaviour of menu picks.
  * Like gv but to select just pasted files (gp?).
  * g~<selector> and g?.
  * Add trashes bang to list empty trashes or all of them.
  * 'wildmode' option.
  * Try to make it work in monochrome terminal.
  * Support of command line arguments like ~/some.ssh/server/path (for FUSE).
  * Treat `:filter pattern` as `:filter \<pattern\>`.
  * Add search history for less-like mode.
  * "Rename existing file" option on name conflicts.
  * Make use of new job information in :jobs menu.
  * Update visible symlinks in the other pane on updating current pane.
  * Mouse support. (partially done)
  * Possibility to make colorful background per column.
  * Add a key to menu mode to repeat command and update menu.
  * Consider preserving more on file copy (ACL, sparse files).
  * File access history.
  * Make :alink, :copy, ... accept globs (e.g. :co *.c).
  * Highlight first line of command-editing buffer in different color.
  * Output numbers on :hi if it were numbers in color scheme.

Questionable things:
  * Full client-server operation of vifm (separate core from TUI).
  * Maybe re-position cursor after :!ls%u.
  * Remove items from :history command menu?
  * Maybe use @path syntax to load custom views.
  * Add + and - commands to undo by commands, not command groups.
  * Modify marks on rename operations.
  * Remove delay on file overwrite.
  * Make :undolist more interactive.
  * Add GUI interface one day.
  * Use custom title for fuse mounts
  * Option to trigger completion on slash in command-line.
  * :edit - select the file after exiting editor?
  * Ability to enter a mount with multiple vifm instances without
    reunpacking/reconnecting.
  * Consider conflict resolution for :move and alike.
  * Make directory stack menu interactive?
  * Tree-like view with support of foldings (for each directory). (partially
    done)
  * Consider adding "da" to remove all elements in :bmarks menu.
  * Command like :run[ &].
  * Add :set to menu mode command-line.
  * Consider asking more often before performing file operations.
  * Termcap or terminfo support for keybindings
  * Shorten home path to ~ in item origins?
  * Add :increment and :decrement commands.
  * Consider changing "dd" to "d" in menus.
  * Consider caching directory sizes in vifminfo.
  * Shell alias execution (and completion) (partially done)
  * Decide whether redefining command shortcuts like :fil should be allowed.
  * Add a flag to 'grepprg' to enable parsing of `ag -H ...` output.
  * Ability to hide command line when not active.
  * Add tags to angle bracket maps in vimdoc.
  * :alias
  * Live preview of color schemes.
  * A way to scroll suggestion results.
  * More customizable trash.
  * Add :toupper and :tolower functions.
  * More trash-like trash.
  * Accept regexps as second argument of :colo command.

Code improvements:
  * Write more tests. (partially done)
  * Consider mentioning libncursesw5-dev in configuration error for
    Debian-based systems.
  * Reduce number of magic numbers. (partially done)
  * Create separate utilities for engine/ part to make them self-contained.
  * Fix code duplication related to composing of undo messages.
  * Allow limiting input length for command-line prompt submode.
  * Get rid of repeatable `menu->win_rows - 3` in menu.c.
  * Separate filelist data from view data (extract into separate structure).
  * Improve logging (print back trace in some cases, increase verbosity).
  * Try reimplementing cmd_core.c:line_pos by calling dispatch_line.
  * Write syscalls implementation of chgrp, chmod and chown.
  * Sane asynchronous signals handling.
  * Move startup and init code out of config.c and vifm.c to separate file.
  * Consider using curses panes, not just windows.
  * Show "An error occurred" message on fail to build menus.
  * Consider not using {} initializer.
  * Use timeout command to set time limit for tests on CI.
  * Logging levels.
Hints

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