index 483e1e9c3824a39d231fca353c2fd68f1a68f840..8aff94c64a1204f8a359e522a554f29c8f0fdc20 100644 (file)
--- a/help.c
+++ b/help.c
warning("failed to exec '%s': %s", path, strerror(errno));
}
-static void do_add_man_viewer(const char *name)
+static void exec_man_cmd(const char *cmd, const char *page)
+{
+ struct strbuf shell_cmd = STRBUF_INIT;
+ strbuf_addf(&shell_cmd, "%s %s", cmd, page);
+ execl("/bin/sh", "sh", "-c", shell_cmd.buf, NULL);
+ warning("failed to exec '%s': %s", cmd, strerror(errno));
+}
+
+static void add_man_viewer(const char *name)
{
struct man_viewer_list **p = &man_viewer_list;
size_t len = strlen(name);
!strncasecmp("konqueror", name, len));
}
-static int add_man_viewer(const char *value)
-{
- if (supported_man_viewer(value, strlen(value)))
- do_add_man_viewer(value);
- else
- warning("'%s': unsupported man viewer.", value);
-
- return 0;
-}
-
static void do_add_man_viewer_info(const char *name,
size_t len,
const char *value)
if (supported_man_viewer(name, len))
do_add_man_viewer_info(name, len, value);
else
- warning("'%s': path for unsupported man viewer.", name);
+ warning("'%s': path for unsupported man viewer.\n"
+ "Please consider using 'man.<tool>.cmd' instead.",
+ name);
+
+ return 0;
+}
+
+static int add_man_viewer_cmd(const char *name,
+ size_t len,
+ const char *value)
+{
+ if (supported_man_viewer(name, len))
+ warning("'%s': cmd for supported man viewer.\n"
+ "Please consider using 'man.<tool>.path' instead.",
+ name);
+ else
+ do_add_man_viewer_info(name, len, value);
return 0;
}
return config_error_nonbool(var);
return add_man_viewer_path(name, subkey - name, value);
}
+ if (!strcmp(subkey, ".cmd")) {
+ if (!value)
+ return config_error_nonbool(var);
+ return add_man_viewer_cmd(name, subkey - name, value);
+ }
warning("'%s': unsupported man viewer sub key.", subkey);
return 0;
}
-static int git_help_config(const char *var, const char *value)
+static int git_help_config(const char *var, const char *value, void *cb)
{
if (!strcmp(var, "help.format")) {
if (!value)
if (!strcmp(var, "man.viewer")) {
if (!value)
return config_error_nonbool(var);
- return add_man_viewer(value);
+ add_man_viewer(value);
+ return 0;
}
if (!prefixcmp(var, "man."))
return add_man_viewer_info(var, value);
- return git_default_config(var, value);
+ return git_default_config(var, value, cb);
}
/* most GUI terminals set COLUMNS (although some don't export it) */
static void exec_viewer(const char *name, const char *page)
{
- const char *path = get_man_viewer_info(name);
+ const char *info = get_man_viewer_info(name);
if (!strcasecmp(name, "man"))
- exec_man_man(path, page);
+ exec_man_man(info, page);
else if (!strcasecmp(name, "woman"))
- exec_woman_emacs(path, page);
+ exec_woman_emacs(info, page);
else if (!strcasecmp(name, "konqueror"))
- exec_man_konqueror(path, page);
+ exec_man_konqueror(info, page);
+ else if (info)
+ exec_man_cmd(info, page);
else
- warning("'%s': unsupported man viewer.", name);
+ warning("'%s': unknown man viewer.", name);
}
static void show_man_page(const char *git_cmd)
const char *alias;
setup_git_directory_gently(&nongit);
- git_config(git_help_config);
+ git_config(git_help_config, NULL);
argc = parse_options(argc, argv, builtin_help_options,
builtin_help_usage, 0);
if (show_all) {
printf("usage: %s\n\n", git_usage_string);
list_commands();
+ printf("%s\n", git_more_info_string);
return 0;
}
if (!argv[0]) {
printf("usage: %s\n\n", git_usage_string);
list_common_cmds_help();
+ printf("\n%s\n", git_more_info_string);
return 0;
}