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 f046e6a06b985bdf407bda3d38b9ae0304d4d7b7

Correct style and formatting for previous commit
Author: xaizek
Author date (UTC): 2025-12-20 11:24
Committer name: xaizek
Committer date (UTC): 2025-12-20 11:25
Parent(s): b9bdb83cdf030a1a04d717258dc426ad36346e8d
Signing key: 99DC5E4DB05F6BE2
Tree: 47a1bdf9e56fb5ed832c561e29ac63abfbbb9f9d
File Lines added Lines deleted
AUTHORS 3 0
ChangeLog 1 0
data/man/vifm.1 8 8
data/vim/doc/app/vifm-app.txt 9 9
data/vim/syntax/vifm.vim 6 6
src/cfg/config.h 2 1
src/fops_common.c 19 19
src/fops_common.h 3 6
src/opt_handlers.c 9 10
File AUTHORS changed (mode: 100644) (index 4b72f584c..2fb71410e)
... ... more up-to-date with modern recommendations.
186 186 Jan Palus (a.k.a. jpalus) fixed a crash when GLib doesn't return a file type and Jan Palus (a.k.a. jpalus) fixed a crash when GLib doesn't return a file type and
187 187 added a fallback to standard::fast-content-type if standard::content-type is added a fallback to standard::fast-content-type if standard::content-type is
188 188 missing. missing.
189
190 Kaspars Vandans implemented an option for automatically spawning external
191 editor for path prompts.
File ChangeLog changed (mode: 100644) (index 969c13ba1..18051648b)
28 28 default previewer for the current and similar files. default previewer for the current and similar files.
29 29
30 30 Added extpromptpath option to open path input boxes in external editor. Added extpromptpath option to open path input boxes in external editor.
31 Patch by Kaspars Vandans.
31 32
32 33 Updated utf8proc to v2.10.0. Updated utf8proc to v2.10.0.
33 34
File data/man/vifm.1 changed (mode: 100644) (index 0eb92232e..7085e2a3e)
... ... default: false
4319 4319 .br .br
4320 4320 Whether dot files are shown in the view. Can be controlled with z* bindings. Whether dot files are shown in the view. Can be controlled with z* bindings.
4321 4321 .TP .TP
4322 .BI "'extpromptpath'"
4323 type: boolean
4324 .br
4325 default: false
4326 .br
4327 When vifm prompts to amend paths or file names, use the external editor instead
4328 of the built-in line-prompt. This may happen, for example, during renaming.
4329 .TP
4322 4330 .BI 'fastrun' .BI 'fastrun'
4323 4331 type: boolean type: boolean
4324 4332 .br .br
 
... ... type: boolean
5672 5680 default: true default: true
5673 5681 .br .br
5674 5682 Searches wrap around end of the list. Searches wrap around end of the list.
5675 .TP
5676 .BI "'extpromptpath'"
5677 type: boolean
5678 .br
5679 default: false
5680 .br
5681 When vifm prompts to amend paths or file names, use the external editor instead
5682 of the built-in line-prompt. This may happen, for example, during renaming.
5683 5683 .\" --------------------------------------------------------------------------- .\" ---------------------------------------------------------------------------
5684 5684 .SH Mappings .SH Mappings
5685 5685 .\" --------------------------------------------------------------------------- .\" ---------------------------------------------------------------------------
File data/vim/doc/app/vifm-app.txt changed (mode: 100644) (index 5aa9a0940..afbea1eb5)
... ... default: false
3590 3590
3591 3591 Whether dot files are shown in the view. Can be controlled with z* bindings. Whether dot files are shown in the view. Can be controlled with z* bindings.
3592 3592
3593 *vifm-'extpromptpath'*
3594 extpromptpath
3595 type: boolean
3596 default: false
3597
3598 When vifm prompts to amend paths, use the external editor instead of the
3599 built-in line-prompt. This may happen, for example, during renaming.
3600
3593 3601 *vifm-'fastrun'* *vifm-'fastrun'*
3594 3602 fastrun fastrun
3595 3603 type: boolean type: boolean
 
... ... default: true
4791 4799
4792 4800 Searches wrap around end of the list. Searches wrap around end of the list.
4793 4801
4794 *vifm-'extpromptpath'*
4795 extpromptpath
4796 type: boolean
4797 default: false
4798
4799 When vifm prompts to amend paths, use the external editor instead of the
4800 built-in line-prompt. This may happen, for example, during renaming.
4801 -------------------------------------------------------------------------------
4802
4802 --------------------------------------------------------------------------------
4803 4803 *vifm-mappings* *vifm-mappings*
4804 4804
4805 4805 A user mapping like `nnoremap lhs rhs` defines a substitution of the A user mapping like `nnoremap lhs rhs` defines a substitution of the
File data/vim/syntax/vifm.vim changed (mode: 100644) (index 8f0be5199..bebad2d8e)
... ... syntax match vifmHiGroups contained
160 160 " Options " Options
161 161 syntax keyword vifmOption contained aproposprg autocd autochpos caseoptions syntax keyword vifmOption contained aproposprg autocd autochpos caseoptions
162 162 \ cdpath cd chaselinks classify columns co confirm cf cpoptions cpo \ cdpath cd chaselinks classify columns co confirm cf cpoptions cpo
163 \ cvoptions deleteprg dotdirs dotfiles dirsize fastrun fillchars fcs findprg
163 \ cvoptions deleteprg dotdirs dotfiles dirsize extpromptpath fastrun fillchars fcs findprg
164 164 \ followlinks fusehome gdefault grepprg histcursor history hi hloptions \ followlinks fusehome gdefault grepprg histcursor history hi hloptions
165 165 \ hlsearch hls iec ignorecase ic iooptions incsearch is laststatus lines \ hlsearch hls iec ignorecase ic iooptions incsearch is laststatus lines
166 166 \ locateprg ls lsoptions lsview mediaprg milleroptions millerview \ locateprg ls lsoptions lsview mediaprg milleroptions millerview
 
... ... syntax keyword vifmOption contained aproposprg autocd autochpos caseoptions
172 172 \ tabline tabprefix tabscope tabstop tabsuffix tal timefmt timeoutlen title \ tabline tabprefix tabscope tabstop tabsuffix tal timefmt timeoutlen title
173 173 \ tm trash trashdir ts tuioptions to uioptions undolevels ul vicmd \ tm trash trashdir ts tuioptions to uioptions undolevels ul vicmd
174 174 \ viewcolumns vifminfo vimhelp vixcmd wildinc wildmenu wmnu wildstyle \ viewcolumns vifminfo vimhelp vixcmd wildinc wildmenu wmnu wildstyle
175 \ wordchars wrap wrapscan ws extpromptpath
175 \ wordchars wrap wrapscan ws
176 176
177 177 " Disabled boolean options " Disabled boolean options
178 178 syntax keyword vifmOption contained noautocd noautochpos nocf nochaselinks syntax keyword vifmOption contained noautocd noautochpos nocf nochaselinks
179 \ nodotfiles nofastrun nofollowlinks nohlsearch nohls noiec noignorecase
179 \ nodotfiles noextpromptpath nofastrun nofollowlinks nohlsearch nohls noiec noignorecase
180 180 \ noic noincsearch nois nolaststatus nols nolsview nomillerview nonumber \ noic noincsearch nois nolaststatus nols nolsview nomillerview nonumber
181 181 \ nonu noquickview norelativenumber nornu noscrollbind noscb norunexec \ nonu noquickview norelativenumber nornu noscrollbind noscb norunexec
182 182 \ nosmartcase noscs nosortnumbers nosyscalls notitle notrash novimhelp \ nosmartcase noscs nosortnumbers nosyscalls notitle notrash novimhelp
183 \ nowildmenu nowmnu nowrap nowrapscan nows noextpromptpath
183 \ nowildmenu nowmnu nowrap nowrapscan nows
184 184
185 185 " Inverted boolean options " Inverted boolean options
186 186 syntax keyword vifmOption contained invautocd invautochpos invcf invchaselinks syntax keyword vifmOption contained invautocd invautochpos invcf invchaselinks
187 \ invdotfiles invfastrun invfollowlinks invhlsearch invhls inviec
187 \ invdotfiles invextpromptpath invfastrun invfollowlinks invhlsearch invhls inviec
188 188 \ invignorecase invic invincsearch invis invlaststatus invls invlsview \ invignorecase invic invincsearch invis invlaststatus invls invlsview
189 189 \ invmillerview invnumber invnu invquickview invrelativenumber invrnu \ invmillerview invnumber invnu invquickview invrelativenumber invrnu
190 190 \ invscrollbind invscb invrunexec invsmartcase invscs invsortnumbers \ invscrollbind invscb invrunexec invsmartcase invscs invsortnumbers
191 191 \ invsyscalls invtitle invtrash invvimhelp invwildmenu invwmnu invwrap \ invsyscalls invtitle invtrash invvimhelp invwildmenu invwmnu invwrap
192 \ invwrapscan invws invextpromptpath
192 \ invwrapscan invws
193 193
194 194 " Expressions " Expressions
195 195 syntax region vifmStatement start='^\(\s\|:\)*' syntax region vifmStatement start='^\(\s\|:\)*'
File src/cfg/config.h changed (mode: 100644) (index d9483d940..75628337e)
... ... typedef struct config_t
399 399 int auto_ch_pos; /* Weird option that drops positions from histories. */ int auto_ch_pos; /* Weird option that drops positions from histories. */
400 400 int ch_pos_on; /* List of cases when historical cursor position is used. */ int ch_pos_on; /* List of cases when historical cursor position is used. */
401 401
402 /* Whether to open path/filename amendment prompts in external editor */
402 /* Whether to open path/filename amendment prompts in external editor
403 * automatically. */
403 404 int ext_prompt_path; int ext_prompt_path;
404 405 } }
405 406 config_t; config_t;
File src/fops_common.c changed (mode: 100644) (index 0bcb34a5f..d10761eaa)
67 67 #include "utils/test_helpers.h" #include "utils/test_helpers.h"
68 68 #include "utils/utils.h" #include "utils/utils.h"
69 69 #include "background.h" #include "background.h"
70 #include "cmd_core.h"
70 71 #include "filelist.h" #include "filelist.h"
71 72 #include "flist_pos.h" #include "flist_pos.h"
72 73 #include "flist_sel.h" #include "flist_sel.h"
 
76 77 #include "trash.h" #include "trash.h"
77 78 #include "types.h" #include "types.h"
78 79 #include "undo.h" #include "undo.h"
79 #include "cmd_core.h"
80 80
81 81 /* 10 to the power of number of digits after decimal point to take into account /* 10 to the power of number of digits after decimal point to take into account
82 82 * on progress percentage counting. */ * on progress percentage counting. */
 
... ... TSTATIC char ** edit_list(struct ext_edit_t *ext_edit, size_t orig_len,
166 166 char *orig[], int *edited_len, int load_always); char *orig[], int *edited_len, int load_always);
167 167 TSTATIC progress_data_t * alloc_progress_data(int bg, void *info); TSTATIC progress_data_t * alloc_progress_data(int bg, void *info);
168 168 static long long time_in_ms(void); static long long time_in_ms(void);
169 static void fops_extedit_path(const char path[], fo_prompt_cb cb, void *cb_arg);
169 170
170 171 line_prompt_func fops_line_prompt; line_prompt_func fops_line_prompt;
171 172 options_prompt_func fops_options_prompt; options_prompt_func fops_options_prompt;
 
... ... fops_is_dir_writable(DirRole dir_role, const char path[])
1434 1435 return 0; return 0;
1435 1436 } }
1436 1437
1437 /* Queries prompt input using external editor.
1438 * Analogous to cmdline/extedit_prompt. */
1439 1438 void void
1439 fops_prompt_path(const char prompt[], const char path[], fo_prompt_cb cb,
1440 void *cb_arg, fo_complete_cmd_func complete)
1441 {
1442 if(cfg.ext_prompt_path)
1443 {
1444 fops_extedit_path(path, cb, cb_arg);
1445 }
1446 else
1447 {
1448 fops_line_prompt(prompt, path, cb, cb_arg, complete);
1449 }
1450 }
1451
1452 /* Prompts the user to amend path using the external editor. */
1453 static void
1440 1454 fops_extedit_path(const char path[], fo_prompt_cb cb, void *cb_arg) fops_extedit_path(const char path[], fo_prompt_cb cb, void *cb_arg)
1441 1455 { {
1456 /* XXX: modes/cmdline.c:extedit_prompt() is similar to this function. */
1457
1442 1458 char *ext_cmd = cmds_get_ext(path, /*line_pos=*/0, CIT_PROMPT_INPUT); char *ext_cmd = cmds_get_ext(path, /*line_pos=*/0, CIT_PROMPT_INPUT);
1443 1459
1444 1460 if(ext_cmd != NULL) if(ext_cmd != NULL)
 
... ... fops_extedit_path(const char path[], fo_prompt_cb cb, void *cb_arg)
1456 1472 free(ext_cmd); free(ext_cmd);
1457 1473 } }
1458 1474
1459 /* Prompts the user to input/amend a path. */
1460 void
1461 fops_prompt_path(const char prompt[], const char path[], fo_prompt_cb cb,
1462 void *cb_arg, fo_complete_cmd_func complete)
1463 {
1464 if(cfg.ext_prompt_path)
1465 {
1466 fops_extedit_path(path, cb, cb_arg);
1467 }
1468 else
1469 {
1470 fops_line_prompt(prompt, path, cb, cb_arg, complete);
1471 }
1472 }
1473
1474
1475 1475 /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */ /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */
1476 1476 /* vim: set cinoptions+=t0 filetype=c : */ /* vim: set cinoptions+=t0 filetype=c : */
File src/fops_common.h changed (mode: 100644) (index fff19c1f4..3e2a37cfc)
... ... const char * fops_get_dst_dir(const struct view_t *view, int at);
222 222 * returned. */ * returned. */
223 223 int fops_is_dir_writable(DirRole dir_role, const char path[]); int fops_is_dir_writable(DirRole dir_role, const char path[]);
224 224
225 /* Prompts the user to amend path. Wrapper for fops_extedit_path and
226 * fops_line_prompt. */
227 void fops_prompt_path(const char prompt[], const char path[], fo_prompt_cb cb,
225 /* Prompts the user to amend path either on command-line or via the external
226 * editor. */
227 void fops_prompt_path(const char prompt[], const char path[], fo_prompt_cb cb,
228 228 void *cb_arg, fo_complete_cmd_func complete); void *cb_arg, fo_complete_cmd_func complete);
229 229
230 /* Prompts the user to amend path using the external editor. */
231 void fops_extedit_path(const char path[], fo_prompt_cb cb, void *cb_arg);
232
233 230 TSTATIC_DEFS( TSTATIC_DEFS(
234 231 struct ext_edit_t; struct ext_edit_t;
235 232 struct progress_data_t; struct progress_data_t;
File src/opt_handlers.c changed (mode: 100644) (index 49d3195e5..e29ce667f)
... ... static void cvoptions_handler(OPT_OP op, optval_t val);
133 133 static void deleteprg_handler(OPT_OP op, optval_t val); static void deleteprg_handler(OPT_OP op, optval_t val);
134 134 static void dirsize_handler(OPT_OP op, optval_t val); static void dirsize_handler(OPT_OP op, optval_t val);
135 135 static void dotdirs_handler(OPT_OP op, optval_t val); static void dotdirs_handler(OPT_OP op, optval_t val);
136 static void extpromptpath_handler(OPT_OP op, optval_t val);
136 137 static void fastrun_handler(OPT_OP op, optval_t val); static void fastrun_handler(OPT_OP op, optval_t val);
137 138 static void fillchars_handler(OPT_OP op, optval_t val); static void fillchars_handler(OPT_OP op, optval_t val);
138 139 static void load_fillchars(void); static void load_fillchars(void);
 
... ... static int parse_endpoint(const char **str, int *endpoint);
255 256 static void wrap_handler(OPT_OP op, optval_t val); static void wrap_handler(OPT_OP op, optval_t val);
256 257 static void text_option_changed(void); static void text_option_changed(void);
257 258 static void wrapscan_handler(OPT_OP op, optval_t val); static void wrapscan_handler(OPT_OP op, optval_t val);
258 static void extpromptpath_handler(OPT_OP op, optval_t val);
259 259
260 260 /* Possible values of 'caseoptions'. */ /* Possible values of 'caseoptions'. */
261 261 static const char *caseoptions_vals[][2] = { static const char *caseoptions_vals[][2] = {
 
... ... options[] = {
928 928 { .ref.bool_val = &cfg.wrap_scan }, { .ref.bool_val = &cfg.wrap_scan },
929 929 }, },
930 930 { "extpromptpath", "", "open path/file name input in external editor", { "extpromptpath", "", "open path/file name input in external editor",
931 OPT_BOOL, 0, NULL, &extpromptpath_handler, NULL,
932 { .ref.bool_val = &cfg.ext_prompt_path },
931 OPT_BOOL, 0, NULL, &extpromptpath_handler, NULL,
932 { .ref.bool_val = &cfg.ext_prompt_path },
933 933 }, },
934 934
935 935 /* Local options must be grouped here. */ /* Local options must be grouped here. */
 
... ... dotdirs_handler(OPT_OP op, optval_t val)
2155 2155 update_screen(UT_FULL); update_screen(UT_FULL);
2156 2156 } }
2157 2157
2158 static void
2159 extpromptpath_handler(OPT_OP op, optval_t val)
2160 {
2161 cfg.ext_prompt_path = val.bool_val;
2162 }
2163
2158 2164 static void static void
2159 2165 fastrun_handler(OPT_OP op, optval_t val) fastrun_handler(OPT_OP op, optval_t val)
2160 2166 { {
 
... ... wrapscan_handler(OPT_OP op, optval_t val)
4129 4135 cfg.wrap_scan = val.bool_val; cfg.wrap_scan = val.bool_val;
4130 4136 } }
4131 4137
4132 static void
4133 extpromptpath_handler(OPT_OP op, optval_t val)
4134 {
4135 cfg.ext_prompt_path = val.bool_val;
4136 }
4137
4138
4139 4138 /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */ /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */
4140 4139 /* vim: set cinoptions+=t0 filetype=c : */ /* vim: set cinoptions+=t0 filetype=c : */
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