mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
also pass the uri as %u to external handlers
This commit is contained in:
parent
8e36753bbc
commit
153ea907a8
19
doc/mime.txt
19
doc/mime.txt
@ -91,7 +91,8 @@ choice if you want).
|
|||||||
Attaching a program to it::
|
Attaching a program to it::
|
||||||
|
|
||||||
You must tell ELinks the exact command for running it (with any
|
You must tell ELinks the exact command for running it (with any
|
||||||
options you wish). In place of the filename you must enter %.
|
options you wish). In place of the filename you must enter %f. Also the
|
||||||
|
uri can be used as %u.
|
||||||
|
|
||||||
Choosing whether you want confirmation before applying it::
|
Choosing whether you want confirmation before applying it::
|
||||||
|
|
||||||
@ -144,12 +145,12 @@ and value with the value you want to assign to the item. You must do so for
|
|||||||
each of the available items: program, ask and block.
|
each of the available items: program, ask and block.
|
||||||
|
|
||||||
The value for program is a string with the exact command you want to be issued
|
The value for program is a string with the exact command you want to be issued
|
||||||
to view the file, placing % were you would put the file name. The values for
|
to view the file, placing %f were you would put the file name and %u the uri
|
||||||
ask and block are either 0 (no) or 1 (yes). Available contexts include unix
|
(if needed). The values for ask and block are either 0 (no) or 1 (yes).
|
||||||
and unix-xwin, which mean UNIX text terminal and X respectively (others can be
|
Available contexts include unix and unix-xwin, which mean UNIX text terminal
|
||||||
os2, win32, beos, riscos, ...). The latter does not mean you are running
|
and X respectively (others can be os2, win32, beos, riscos, ...). The latter
|
||||||
ELinks from X, just that the DISPLAY variable is set so that ELinks may run an
|
does not mean you are running ELinks from X, just that the DISPLAY variable is
|
||||||
X program.
|
set so that ELinks may run an X program.
|
||||||
|
|
||||||
To illustrate it, here is an example. Suppose you want to define the
|
To illustrate it, here is an example. Suppose you want to define the
|
||||||
image_viewer handler which should be used to view images. The configuration
|
image_viewer handler which should be used to view images. The configuration
|
||||||
@ -162,8 +163,8 @@ set mime.handler.image_viewer.unix-xwin.ask = 0
|
|||||||
set mime.handler.image_viewer.unix.block = 1
|
set mime.handler.image_viewer.unix.block = 1
|
||||||
set mime.handler.image_viewer.unix-xwin.block = 0
|
set mime.handler.image_viewer.unix-xwin.block = 0
|
||||||
|
|
||||||
set mime.handler.image_viewer.unix.program = "zgv %"
|
set mime.handler.image_viewer.unix.program = "zgv %f"
|
||||||
set mime.handler.image_viewer.unix-xwin.program = "xli %"
|
set mime.handler.image_viewer.unix-xwin.program = "xli %f"
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
In this example the image_viewer handler uses the svgalib image viewer zgv
|
In this example the image_viewer handler uses the svgalib image viewer zgv
|
||||||
|
@ -74,7 +74,8 @@ static union option_info default_mime_options[] = {
|
|||||||
"program", 0, "",
|
"program", 0, "",
|
||||||
/* xgettext:no-c-format */
|
/* xgettext:no-c-format */
|
||||||
N_("External viewer for this file type. "
|
N_("External viewer for this file type. "
|
||||||
"'%' in this string will be substituted by a file name. "
|
"'%f' in this string will be substituted by a file name, "
|
||||||
|
"'%u' by its uri. "
|
||||||
"Do _not_ put single- or double-quotes around the % sign.")),
|
"Do _not_ put single- or double-quotes around the % sign.")),
|
||||||
|
|
||||||
|
|
||||||
|
@ -1028,12 +1028,13 @@ get_temp_name(struct uri *uri)
|
|||||||
|
|
||||||
|
|
||||||
static unsigned char *
|
static unsigned char *
|
||||||
subst_file(unsigned char *prog, unsigned char *file)
|
subst_file(unsigned char *prog, unsigned char *file, unsigned char *uri)
|
||||||
{
|
{
|
||||||
struct string name;
|
struct string name;
|
||||||
/* When there is no %s in the mailcap entry, the handler program reads
|
/* When there is no %s in the mailcap entry, the handler program reads
|
||||||
* data from stdin instead of a file. */
|
* data from stdin instead of a file. */
|
||||||
int input = 1;
|
int input = 1;
|
||||||
|
char *replace, *original = "% ";
|
||||||
|
|
||||||
if (!init_string(&name)) return NULL;
|
if (!init_string(&name)) return NULL;
|
||||||
|
|
||||||
@ -1046,6 +1047,21 @@ subst_file(unsigned char *prog, unsigned char *file)
|
|||||||
prog += p;
|
prog += p;
|
||||||
|
|
||||||
if (*prog == '%') {
|
if (*prog == '%') {
|
||||||
|
prog++;
|
||||||
|
if (*prog == 'f' || *prog == ' ' || *prog == '\0')
|
||||||
|
replace = file;
|
||||||
|
else if (*prog == 'u')
|
||||||
|
replace = uri;
|
||||||
|
else if (*prog == '%')
|
||||||
|
replace = "%";
|
||||||
|
else {
|
||||||
|
original[1] = *prog;
|
||||||
|
replace = original;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*prog == ' ' || *prog == '\0')
|
||||||
|
prog--;
|
||||||
|
|
||||||
input = 0;
|
input = 0;
|
||||||
#if defined(HAVE_CYGWIN_CONV_TO_FULL_WIN32_PATH)
|
#if defined(HAVE_CYGWIN_CONV_TO_FULL_WIN32_PATH)
|
||||||
#ifdef MAX_PATH
|
#ifdef MAX_PATH
|
||||||
@ -1054,10 +1070,10 @@ subst_file(unsigned char *prog, unsigned char *file)
|
|||||||
unsigned char new_path[1024];
|
unsigned char new_path[1024];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cygwin_conv_to_full_win32_path(file, new_path);
|
cygwin_conv_to_full_win32_path(replace, new_path);
|
||||||
add_to_string(&name, new_path);
|
add_to_string(&name, new_path);
|
||||||
#else
|
#else
|
||||||
add_shell_quoted_to_string(&name, file, strlen(file));
|
add_shell_quoted_to_string(&name, replace, strlen(replace));
|
||||||
#endif
|
#endif
|
||||||
prog++;
|
prog++;
|
||||||
}
|
}
|
||||||
@ -1242,7 +1258,8 @@ continue_download_do(struct terminal *term, int fd, void *data,
|
|||||||
|
|
||||||
if (type_query->external_handler) {
|
if (type_query->external_handler) {
|
||||||
file_download->external_handler = subst_file(type_query->external_handler,
|
file_download->external_handler = subst_file(type_query->external_handler,
|
||||||
codw_hop->file);
|
codw_hop->file,
|
||||||
|
type_query->uri->string);
|
||||||
file_download->delete_ = 1;
|
file_download->delete_ = 1;
|
||||||
file_download->copiousoutput = type_query->copiousoutput;
|
file_download->copiousoutput = type_query->copiousoutput;
|
||||||
mem_free(codw_hop->file);
|
mem_free(codw_hop->file);
|
||||||
@ -1490,7 +1507,8 @@ tp_open(struct type_query *type_query)
|
|||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
decode_uri(file);
|
decode_uri(file);
|
||||||
handler = subst_file(type_query->external_handler, file);
|
handler = subst_file(type_query->external_handler,
|
||||||
|
file, file);
|
||||||
mem_free(file);
|
mem_free(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user