-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
runtime(netrw): simplify gx file handling
It did not work very well, at least on Debian 12, and I am not sure Git Bash and WSL, for example, were taken care of as maintenance stalled. The whole logic was somewhat convoluted with some parts repeatedly invoking failed commands. The file handling was outdated, for example, nowadays Netscape is rarely used, and also opinionated, for example mainly Microsoft Paint and Gimp for Image files. Instead, let's use (xdg-)open and similar commands on other systems which respects the user's preferences. closes: vim#15721 Co-authored-by: Luca Saccarola <[email protected]> Signed-off-by: Konfekt <[email protected]> Signed-off-by: Christian Brabandt <[email protected]>
- Loading branch information
Showing
4 changed files
with
199 additions
and
126 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
*pi_netrw.txt* For Vim version 9.1. Last change: 2024 Oct 21 | ||
*pi_netrw.txt* For Vim version 9.1. Last change: 2024 Oct 27 | ||
|
||
------------------------------------------------ | ||
NETRW REFERENCE MANUAL by Charles E. Campbell | ||
|
@@ -8,7 +8,7 @@ Author: Charles E. Campbell <[email protected]> | |
|
||
Copyright: Copyright (C) 2017 Charles E Campbell *netrw-copyright* | ||
The VIM LICENSE applies to the files in this package, including | ||
netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and | ||
netrw.vim, pi_netrw.txt, netrwSettings.vim, and | ||
syntax/netrw.vim. Like anything else that's free, netrw.vim and its | ||
associated files are provided *as is* and comes with no warranty of | ||
any kind, either expressed or implied. No guarantees of | ||
|
@@ -1469,42 +1469,93 @@ With either form of the command, netrw will first ask for confirmation | |
that the removal is in fact what you want to do. If netrw doesn't have | ||
permission to remove a file, it will issue an error message. | ||
|
||
*netrw-gx* | ||
*netrw-gx* *Open* *Launch* | ||
CUSTOMIZING BROWSING WITH A SPECIAL HANDLER *netrw-x* *netrw-handler* {{{2 | ||
|
||
Certain files, such as html, gif, jpeg, (word/office) doc, etc, files, are | ||
best seen with a special handler (ie. a tool provided with your computer's | ||
operating system). Netrw allows one to invoke such special handlers by: > | ||
operating system). Netrw allows one to invoke such special handlers by: | ||
|
||
* when Exploring, hit the "x" key | ||
* when editing, hit gx with the cursor atop the special filename | ||
< (latter not available if the |g:netrw_nogx| variable exists) | ||
* hitting gx with the cursor atop the file path or alternatively x | ||
in a netrw buffer; the former can be disabled by defining the | ||
|g:netrw_nogx| variable | ||
* when in command line, typing :Open <path> | ||
|
||
Netrw determines which special handler by the following method: | ||
One may also use visual mode (see |visual-start|) to select the text that the | ||
special handler will use. Normally gx checks for a close-by URL or file name | ||
to pick up the text under the cursor; one may change what |expand()| uses via the | ||
|g:netrw_gx| variable (options include "<cword>", "<cWORD>"). Note that | ||
expand("<cfile>") depends on the |'isfname'| setting. Alternatively, one may | ||
select the text to be used by gx by making a visual selection (see | ||
|visual-block|) and then pressing gx. | ||
|
||
* if |g:netrw_browsex_viewer| exists, then it will be used to attempt to | ||
view files. Examples of useful settings (place into your <.vimrc>): > | ||
The selection function can be adapted for each filetype by adding a function | ||
Netrw_get_URL_<filetype>, where <filetype> is given by &filetype. | ||
The function should return the URL or file name to be used by gx, and will | ||
fall back to the default behavior if it returns an empty string. | ||
For example, special handlers for links Markdown and HTML are | ||
> | ||
" make gx work on concealed links regardless of exact cursor position | ||
function Netrw_get_URL_markdown() | ||
" markdown URL such as [link text](http://ya.ru 'yandex search') | ||
try | ||
let save_view = winsaveview() | ||
if searchpair('\[.\{-}\](', '', ')\zs', 'cbW', '', line('.')) > 0 | ||
return matchstr(getline('.')[col('.')-1:], '\[.\{-}\](\zs' .. g:netrw_regex_url .. '\ze\(\s\+.\{-}\)\?)') | ||
endif | ||
finally | ||
call winrestview(save_view) | ||
return '' | ||
endtry | ||
endfunction | ||
|
||
function Netrw_get_URL_html() | ||
" HTML URL such as <a href='http://www.python.org'>Python is here</a> | ||
" <a href="http://www.python.org"/> | ||
try | ||
let save_view = winsaveview() | ||
if searchpair('<a\s\+href=', '', '\%(</a>\|/>\)\zs', 'cbW', '', line('.')) > 0 | ||
return matchstr(getline('.')[col('.') - 1 : ], | ||
\ 'href=["'.."'"..']\?\zs\S\{-}\ze["'.."'"..']\?/\?>') | ||
endif | ||
finally | ||
call winrestview(save_view) | ||
return '' | ||
endtry | ||
endfunction | ||
< | ||
|
||
:let g:netrw_browsex_viewer= "kfmclient exec" | ||
< or > | ||
:let g:netrw_browsex_viewer= "xdg-open" | ||
Other than a file path, the text under the cursor may be a URL. Netrw uses | ||
by default the following regular expression to determine if the text under the | ||
cursor is a URL: | ||
> | ||
g:netrw_regex_url = '\%(\%(http\|ftp\|irc\)s\?\|file\)://\S\{-}' | ||
< | ||
|
||
Netrw determines which special handler by the following method: | ||
|
||
* if |g:netrw_browsex_viewer| exists, then it will be used to attempt to | ||
view files. Examples of useful settings (place into your <.vimrc>): | ||
If the viewer you wish to use does not support handling of a remote URL | ||
directory, set |g:netrw_browsex_support_remote| to 0. | ||
* for Windows 32 or 64, the URL and FileProtocolHandler dlls are used. | ||
* for Gnome (with gnome-open): gnome-open is used. | ||
* for KDE (with kfmclient) : kfmclient is used | ||
* for Mac OS X : open is used. | ||
* otherwise: | ||
|
||
The gx mapping extends to all buffers; apply "gx" while atop a word and netrw | ||
will apply a special handler to it (like "x" works when in a netrw buffer). | ||
One may also use visual mode (see |visual-start|) to select the text that the | ||
special handler will use. Normally gx uses expand("<cfile>") to pick up the | ||
text under the cursor; one may change what |expand()| uses via the | ||
|g:netrw_gx| variable (options include "<cword>", "<cWORD>"). Note that | ||
expand("<cfile>") depends on the |'isfname'| setting. Alternatively, one may | ||
select the text to be used by gx by making a visual selection (see | ||
|visual-block|) and then pressing gx. | ||
* for Windows : explorer.exe is used | ||
* for Mac OS X : open is used. | ||
* for Linux : xdg-open is used. | ||
|
||
To open a file <filepath> by the appropriate handler, type | ||
|
||
:Open <filepath> | ||
|
||
No escaping, neither for the shell, nor for Vim's command-line is needed. | ||
|
||
To launch a specific application <app> <args>, often <args> being <filepath>, | ||
|
||
:Launch <app> <args>. | ||
|
||
Since <args> can be arbitrarily complex, in particular contain many file | ||
paths, the escaping is left to the user. | ||
|
||
Associated setting variables: | ||
|g:netrw_gx| control how gx picks up the text under the cursor | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.