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.
Commit d6f94a2c475216bf4183b52c04d2936e107d6961

Generate BUGS and TODO
From now on these files are snapshots of contents of something akin to
todo-management tool.

New files are a mix of old versions of these files and several other
similar sources. Eventually, everything should be imported into the
new system, which has proven to be effective, but it's too boring and
time consuming thing to do... hence this incomplete drop, which
nevertheless includes most of tracked TODO records.
Author: xaizek
Author date (UTC): 2016-01-17 10:10
Committer name: xaizek
Committer date (UTC): 2016-01-17 10:10
Parent(s): ac8d68f0e7b9c37681ac5ab95804c5b0543544db
Signing key:
Tree: 3f24ead73958ed593b6595247d16adc873cb61fd
File Lines added Lines deleted
BUGS 8 27
TODO 206 161
File BUGS changed (mode: 100644) (index 697e431d5..85310bacd)
1 Selection isn't cleared on keys in normal mode.
2
3 %s macro depends on undocumented external dependency (script called
4 screen-open-region-with-program).
5
6 When output of something like `:filter?` fills whole screen two character
7 positions filled with border color are left (in left and right top corners).
8 It also displays only beginning of a message, there is no way to scroll it.
9
10 gid/uid are displayed as -1 on some file systems.
11
12 :apropos command doesn't escape its arguments, thus characters like | are
13 passed directory to a shell.
14
15 :filetype checks doesn't expand ~ and environment variables.
16
17 Fix wildmenu case sensitivity on Windows (or maybe it's OK as it is).
18
19 Screen split title cannot be overwritten when it's run from `:shell`.
20
21 :change->Name renames only one file even when several are selected.
22
23 On OpenBSD there might be issues with non-ascii characters.
24
25 "*" at the beginning of a glob doesn't match empty string (e.g. "*doc" should
26 match "doc", but it won't). This is a limitation of turning list of globs into
27 single regular expression.
1 * On OpenBSD there might be issues with non-ascii characters.
2 * Duplicate detection lags in custom views on :substitute.
3 * :clone! is useless.
4 * :change->Name renames only one file even when several are selected.
5 * "*" at the beginning of a glob doesn't match empty string.
6 * :filetype checks don't expand ~ and environment variables.
7 * :apropos command doesn't escape its arguments.
8 * gid/uid are displayed as -1 on some file systems.
File TODO changed (mode: 100644) (index 5f6c5ee8a..fa92192e3)
1 Basic things that need to be done.
2 Termcap or terminfo support for keybindings (do we need this? curses does).
3 Backgrounding of commands with job control (pause/resume/kill).
4 Maybe remove 'trash' option, since we have two commands for deletion.
5 Templates for :touch.
6 Mouse support.
7 Wrapping of lines in the menus.
8 IPC among all running vifm instances (share settings among instances).
9 Make status bar able to display error and info messages at the same time.
10 Command to create multiple copies of selected one with ability to rename
11 it (e.g. a -> :hub b c -> a b c, a -> :hub! b c -> b c).
12 Add :increment and :decrement commands, which should work in two modes
13 in the same way as Ctrl-X/Ctrl-A and like their combination with :clone.
14 Improve ga and gA commands to recalculate sizes of modified directories
15 only, and maybe update size of all parent cached directories. And maybe
16 show somehow in the TUI calculation process. Maybe cache in vifminfo.
17 Better remove confirmation messages (should contain list of files).
18 Better failed operation messages (list of errors, not just one first error).
19 Process shell pause request for running in %s.
20 Filtering in menus.
21 Search match highlight in menus.
22 For 'syscalls', vifm should ask for standard retry/ignore/abort actions on
23 error (done for file/directory removal).
24 Queueing of file operations.
1 Basic things:
2 * Menu shortcut to put current line into command-line.
3 * Merged directory history for both panes.
4 * Improve ga and gA commands. (partially done)
5 * Queueing of file operations.
6 * Backgrounding of commands with job control (pause/resume/kill). (partially
7 done)
8 * Display parsing errors in dialog that indicate the error, don't rely on
9 status bar.
10 * Remove trash option, since we have two commands for deletion.
11 * Abort/retry/ignore kind of actions for i/o for 'syscalls'. (partially
12 done)
13 * Search match highlight in menus.
14 * Filtering in menus.
15 * Process shell pause request for running in %s.
16 * Responsive TUI during blocking operations.
17 * Better failed operation messages (partially done)
18 * Better removal confirmation messages.
19 * Make status bar able to display error and info messages at the same time.
20 * Command to create multiple copies of selected file
25 21
26 Documentation.
27 Better documentation.
28 Maybe divide vifm.txt in several files (if it becomes too big).
29 Document single and double quotes treating in the command-line mode.
30 Document name conflict resolution options.
22 Documentation:
23 * Document non-forking requirement for 'vicmd' on :rename and alike
24 commands.
25 * State the need of *nix tools on Windows more explicitly.
26 * Describe 'shell', $SHELL and `:shell` relationships.
27 * Document single and double quotes treating in the command-line mode.
28 * Divide docs into several files (as it's quite big now).
29 * Document name conflict resolution options.
30 * Generally better documentation. (partially done)
31 * Add separate section on bookmarks.
31 32
32 Windows.
33 Make :chmod accept arguments.
34 Make properties dialog change file attributes recursively.
35 Add a command to create .lnk files.
36 Follow targets of .lnk files.
37 Make 'fastrun' understand file extensions on Windows (to ignore them).
38 Maybe read first bytes of files and threat files as executable if first
39 two bytes equal to '#!'.
40 Make 'slowfs' option available on Windows and provide a support for builtin
41 file system time 'winnetwork', which will mean network resources.
42 Maybe sort completion items ignoring their case on Windows.
43 Handle numpad keys better, just like corresponding non-numpad keys.
33 Vi(m) specific features:
34 * Add support for directory completion for some of :set options.
35 * 'wildignore' ('wig') option
36 * Think about dot normal mode command.
37 * Completion based on global (when one enters pattern<tab>, e.g. *.c<tab>).
38 * Add support of n flag for :substitute command.
39 * :let mapleader and <leader> support.
40 * Ctrl-W F key.
41 * Add support of [count] for Ctrl-E/Ctrl-Y/H/M/L.
42 * nrformats option as in Vim.
43 * Better registers support. (partially done)
44 * Add support of ^= in :set command for more option kinds.
45 * Better ranges (add support for search patterns).
46 * :map without arguments.
47 * Lazy redraw support.
48 * Expand environment variables for :edit command.
49 * Don't move cursor on search failure.
50 * Completion of first argument for :map commands.
51 * Make gU2U and similar commands work as in Vim.
52 * Change file list filters to use fold levels.
53 * Quickfix list support
54 * /, ?, n, N as selectors.
55 * Fix '' to go back to all jumps G gg links (in one directory?).
56 * Maybe make zf and zd more Vim-like.
57 * Kinda macros like in Vim (qa ... q).
58 * Add =~ and !~ operators to expressions.
59 * Add titleold option.
60 * Support hex and octal numbers in :set.
61 * Add %p and %P macros to rulerformat option.
44 62
45 Vi(m) specific features that need to be added.
46 Fix '' to go back to all jumps G gg links (in one directory?).
47 Change file list filters to use fold levels instead of just
48 the dot filter and regular expression filter (what does this mean?).
49 Better registers support.
50 /, ?, n, N as selectors.
51 Make n, N, / and ? with count behave like Vim on nowrapscan and match fail
52 (this means "don't move cursor on search failure").
53 :map without arguments
54 Better ranges (add support for search patterns).
55 Ctrl-W F key.
56 'wildignore' ('wig') option (also think about it in context of file
57 filtering).
58 Kinda macros like in Vim (qa ... q).
59 Something like <silent> in Vim (no command blinking in the command-line)
60 :let mapleader and <leader> support.
61 Completion of first argument for :map commands.
62 Support hex and octal numbers in :set
63 Add support of ^= in :set command for more option kinds.
64 Add support for directory completion for some of :set options.
65 Add support of 'n' flag for :substitute command.
66 Expand environment variables for :edit command.
67 Think about dot normal mode command.
68 Add support of [count] for Ctrl-E/Ctrl-Y/H/M/L.
69 Completion based on global (when one enters pattern<tab>, e.g. *.c<tab>).
70 Quickfix list support (to navigate through file list produced by :find or
71 :locate with :cn, :cp and alike).
72 Maybe add 'titleold' option.
73 Maybe add "%p" and "%P" macros to 'rulerformat' option.
74 Make gU2U and similar commands work as in Vim.
75 Lazy redraw support (useful for mappings and udf).
76 'nrformats' option as in Vim.
63 Windows:
64 * Make properties dialog change file attributes recursively.
65 * Make :chmod accept arguments.
66 * Add command to create .lnk files.
67 * Sort completion items ignoring their case on Windows.
68 * Handle numpad keys better, just like corresponding non-numpad keys.
69 * Follow targets of .lnk files.
70 * Make 'fastrun' understand file extensions on Windows (to ignore them).
71 * Make 'slowfs' option available on Windows
72 * Support more of pdcurses specific keys (e.g. <a-bs>, <s-bs>).
73 * Read first bytes of files and treat '#!' files as executable.
77 74
78 Possible things to add.
79 Use system wide mimetypes file. /etc/mailcap?
80 Virtual File System - currently vifm can use fuse to mount most
81 file systems.
82 Make :undolist more interactive.
83 Maybe something like :g/.../com and :v/.../com in Vim.
84 Add g/ and g? commands (search, but don't select files).
85 Reverse searching (/ for search, g/ for selecting, g!/ for selecting
86 reverse)
87 Improve sorting (iext; choosing multiple sorting keys in dialog).
88 Add :mksession command and 'sessionoptions' option.
89 Position macros for user defined commands (%1, %2, ..., %9). Something
90 like %!1 could be used for mandatory parameters.
91 Some key to (un)select all files with extension of current file.
92 Maybe we should not reread configuration files on :restart when
93 --no-configs was passed on startup.
94 'wildmode' option.
95 A macro to redirect command output into view pane.
96 $_ env var and Alt-T combination as in bash shell.
97 Rename existing file option on name conflicts.
98 Support of command line arguments like ~/some.ssh/server/path (for FUSE).
99 Add search history for less-like mode.
100 Update visible symbolic links in the other pane on updating current pane
101 (to show broken links to the user).
102 Highlight first line of command-editing buffer of vifm in different
103 color, like gitcommit syntax file does.
104 Parse escape sequences in menus as in preview.
75 Possible things to add:
76 * Add macros for marks.
77 * Make package for Cygwin.
78 * Position macros for user defined commands (%1, %2, ..., %9).
79 * Improve sorting (iext; choosing multiple sorting keys in dialog).
80 (partially done)
81 * Consider escaping of tilde in paths.
82 * Wrapping of lines in the menus.
83 * Something like :g/.../com and :v/.../com in Vim.
84 * Don't reread config files on :restart for --no-configs session.
85 * Add tabs.
86 * Better renaming keys.
87 * Quad-view + tabs
88 * Add a general file preview script.
89 * A more convenient shortcut for the :filter command (at least :filt).
90 * Multiselect for items (menu and/or file list).
91 * inotify support on Linux. (partially done)
92 * :filter !filter-tool
93 * Add short description to key menu.
94 * Use system wide mimetypes file. /etc/mailcap?
95 * :select/unselect commands.
96 * Add "|" command to menu to process list with external tool.
97 * "Blow directory" command to replace directory with its content.
98 * Some key to (un)select all files with extension of current file.
99 * $_ env var and Alt-T combination as in bash shell.
100 * Select contents of a register "xgs, current behaviour on gs.
101 * Templates for :touch.
102 * Reverse searching
103 * Add g/ and g? commands (search, but don't select files).
104 * IPC among all running vifm instances (share settings among instances).
105 * More flexible control over displaying file size.
106 * { and } keys to skip to files/directories.
107 * Parse escape sequences in menus as in preview.
108 * Virtual File System - currently vifm can use FUSE to mount most file
109 systems.
110 * ]s/[s || ]t/[t || ]h/[h to go to the next/previous selected file.
111 * Add removable media managing.
112 * Something to control behaviour of menu picks.
113 * Like gv but to select just pasted files (gp?).
114 * Compare content of panes like C-x d in Midnight Commander.
115 * Option suggestions.
116 * g~<selector> and g?.
117 * Command autocompletion.
118 * Add trashes bang to list empty trashes or all of them.
119 * 'wildmode' option.
120 * Try to make it work in monochrome terminal.
121 * Support of command line arguments like ~/some.ssh/server/path (for FUSE).
122 * Treat `:filter pattern` as `:filter \<pattern\>`.
123 * Add search history for less-like mode.
124 * "Rename existing file" option on name conflicts.
125 * Make use of new job information in :jobs menu.
126 * Update visible symlinks in the other pane on updating current pane.
127 * Try drawing progress bar in progress dialog.
128 * Mouse support. (partially done)
129 * Possibility to make colorful background per column.
130 * Add a key to menu mode to repeat command and update menu.
131 * Extract vim plugin part of install to vifm.vim README.
132 * A macro to redirect command output into view pane.
133 * File access history.
134 * Make :alink, :copy, ... accept globs (e.g. :co *.c).
135 * Highlight first line of command-editing buffer in different color.
136 * Output numbers on :hi if it were numbers in color scheme.
137 * Add timestamps to history items.
105 138
106 Other (questionable) things.
107 Use mimetypes in FILETYPE.
108 %p/%I macro to prompt user for input.
109 Maybe inotify support on Linux.
110 Command like ' but that executes bookmark ?
111 Maybe we should add a command to view screen ?
112 Make directory stack menu interactive ?
113 Maybe add + and - commands to undo by commands, not command groups.
114 Remove items from :history command menu?
115 :edit, etc. in the menus.
116 :alias
117 Like gv but to select just pasted files (gp?).
118 Modify marks on rename operations.
119 :toupper and :tolower
120 Maybe accept regular expressions as second argument of :colo command.
121 Make :alink, :copy, ... accept globs (e.g. :co *.c).
122 Option to trigger completion on slash in command-line.
123 Live preview of color schemes.
124 "Blow directory" command to replace directory with its content.
125 Add file selector based on file extensions.
126 Add a key to menu mode to repeat command and update menu.
127 :edit - select the file after exiting editor?
128 Add a builtin function (or variable?) to get number of selected files
129 in a view (at least in current). To be used in udf commands to
130 make a choice between using %b and %f. Or maybe adding a macro
131 for this is a better way to go?
132 Use custom title for fuse mounts, e.g.:
133 - fuse://...
134 - /../fuse_file/...
139 Questionable things:
140 * Full client-server operation of vifm (separate core from TUI).
141 * %p/%I macro to prompt user for input.
142 * Maybe re-position cursor after :!ls%u.
143 * Remove items from :history command menu?
144 * Maybe use @path syntax to load custom views.
145 * Add + and - commands to undo by commands, not command groups.
146 * :edit, etc. in the menus.
147 * Modify marks on rename operations.
148 * Remove delay on file overwrite.
149 * Make :undolist more interactive.
150 * Add GUI interface one day.
151 * Use custom title for fuse mounts
152 * Option to trigger completion on slash in command-line.
153 * Add file selector based on file extensions.
154 * :edit - select the file after exiting editor?
155 * Ability to enter a mount with multiple vifm instances without
156 reunpacking/reconnecting.
157 * Consider conflict resolution for :move and alike.
158 * Builtin function (or variable?) to get number of selected files.
159 * Make directory stack menu interactive?
160 * Key like ' but that executes bookmark?
161 * Tree-like view with support of foldings (for each directory).
162 * Consider adding "da" to remove all elements in :bmarks menu.
163 * Add a command to view screen.
164 * Command like :run[ &].
165 * Add :set to menu mode command-line.
166 * Add :mksession command and 'sessionoptions' option.
167 * Add :keepsel prefix.
168 * Termcap or terminfo support for keybindings
169 * Use mimetypes for matching file types.
170 * Add :increment and :decrement commands.
171 * Consider changing "dd" to "d" in menus.
172 * Consider caching directory sizes in vifminfo.
173 * Shell alias execution (and completion)
174 * Decide whether redefining command shortcuts like :fil should be allowed.
175 * Ability to hide command line when not active.
176 * Add tags to angle bracket maps in vimdoc.
177 * :alias
178 * Live preview of color schemes.
179 * More customizable trash.
180 * Add :toupper and :tolower functions.
181 * More trash-like trash.
182 * Accept regexps as second argument of :colo command.
135 183
136 Code improvements.
137 Write more tests.
138 Improve logging (print back trace in some cases, increase verbosity).
139 Add logging levels.
140 Stay at the same file in some cases.
141 Replace a lot of fields in cmd_add_t struct with a set of bit flags.
142 Maybe move startup and initialization code out of config.c and vifm.c
143 to a separate file.
144 Get rid of repeatable `menu->win_rows - 3` in menu.c.
145 Get rid of repeatable `(menu->win_rows - 3 + 1)/2 - 1` in menu.c.
146 Think about window_rows and window_width members of FileView: why
147 do they contain (rows - 1) and (width - 1) ?
148 Reduce number of magic numbers.
149 List of errors, which are accumulated and shown at appropriate time (try
150 sourcing colorscheme with scripting errors to understand the issue).
151 Fix code duplication related to composing of undo messages.
152 Maybe show "An error occurred" message on fail to build menus like
153 apropos or locate instead of "No files found" (check that list is
154 empty AND an error occurred).
155 Continue replacing calls like `snprintf(foo, sizeof(foo), "%s", line)` with
156 copy_str().
157 Maybe allow specifying limit of input characters for command-line prompt
158 submode. Would it make conflict resolution prompt easier to use?
159 Maybe pass var by pointer to var_free and cleanup the structure.
160 Write more tests for get_lines functions in string_array.c
161 Add a function to count number of elements in a NULL terminated array of
162 pointers.
163 Separate filelist data from view data (extract into separate structure).
164 Create separate utilities for engine/ part to make them self-consistent.
165 Maybe extract history related code out of filelist.c to separate file.
166 Move all histories from configuration to status (they are not configuration,
167 right?).
184 Code improvements:
185 * Write more tests for get_lines functions in string_array.c
186 * Write more tests. (partially done)
187 * Replace calls like `snprintf(foo, sizeof(foo), "%s", line)` with
188 copy_str(). (partially done)
189 * Consider mentioning libncursesw5-dev in configuration error for
190 Debian-based systems.
191 * Extract history related code out of filelist.c to separate file.
192 * Reduce number of magic numbers. (partially done)
193 * Add function to count suze of NULL-terminated array.
194 * Think about window_rows and window_width members of FileView.
195 * Intermediate language for scripting. (partially done)
196 * Replace a lot of fields in cmd_add_t struct with a set of bit flags.
197 * Create separate utilities for engine/ part to make them self-contained.
198 * Fix code duplication related to composing of undo messages.
199 * Share common part of tests.
200 * Allow limiting input length for command-line prompt submode.
201 * Move all histories from config to status (they are not configs, right?).
202 * Get rid of repeatable `menu->win_rows - 3` in menu.c.
203 * Separate filelist data from view data (extract into separate structure).
204 * Improve logging (print back trace in some cases, increase verbosity).
205 * Try reimplementing cmd_core.c:line_pos by calling dispatch_line.
206 * Sane asynchronous signals handling.
207 * Move startup and init code out of config.c and vifm.c to separate file.
208 * Show "An error occurred" message on fail to build menus.
209 * Consider not using {} initializer.
210 * Note skipped tests in the tests output.
211 * Pass var by pointer to var_free and cleanup the structure.
212 * 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