git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] builtin-config: add --exec-editor for use in scripts

From
EWEric Wong <normalperson@yhbt.net>
Date
Feb 1, 2009, 02:53 UTC
Message-ID
<20090201025349.GA22160@dcvr.yhbt.net>

This exposes the launch_editor() library function for use by various scripting languages. This allows the ensure consistent handling of GIT_EDITOR/VISUAL/EDITOR environment variables as well as the handling of special characters such as spaces in the various environment variables.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
---
 I'm not sure if git-config is the best place to stick it.  I plan to
 start using this in git-svn but I don't want to implement Git::Editor
 in Perl and have to keep track of editor.c.  Of course this also makes
 the logic/rules used in libgit usable to any other scripting language
 capable of launching other programs.
 I'll probably also do something like this with setup_pager(), too...
 Documentation/git-config.txt |   10 ++++++++++
 builtin-config.c             |    6 +++++-
 2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
index 19a8917..2dd9f1c 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.txt
@@ -22,6 +22,7 @@ SYNOPSIS
 'git config' [<file-option>] [-z|--null] -l | --list
 'git config' [<file-option>] --get-color name [default]
 'git config' [<file-option>] --get-colorbool name [stdout-is-tty]
+'git config' [<file-option>] --exec-editor filename
 
 DESCRIPTION
 -----------
@@ -157,6 +158,15 @@ See also <<FILES>>.
 	output.  The optional `default` parameter is used instead, if
 	there is no color configured for `name`.
 
+--exec-editor filename::
+
+	Executes the editor on filename as configured by the
+	GIT_EDITOR/VISUAL/EDITOR environment variables (in that order).
+	This exposes the launch_editor() library function for use with
+	scripting languages that may not have C bindings.  The
+	launch_editor() function takes into account special characters
+	such as spaces in the editor argument.
+
 [[FILES]]
 FILES
 -----
diff --git a/builtin-config.c b/builtin-config.c
index f710162..1c805da 100644
--- a/builtin-config.c
+++ b/builtin-config.c
@@ -3,7 +3,7 @@
 #include "color.h"
 
 static const char git_config_set_usage[] =
-"git config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int | --bool-or-int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list | --get-color var [default] | --get-colorbool name [stdout-is-tty]";
+"git config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int | --bool-or-int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list | --get-color var [default] | --get-colorbool name [stdout-is-tty] | --exec-editor filename";
 
 static char *key;
 static regex_t *key_regexp;
@@ -362,6 +362,10 @@ int cmd_config(int argc, const char **argv, const char *prefix)
 			return get_color(argc-2, argv+2);
 		} else if (!strcmp(argv[1], "--get-colorbool")) {
 			return get_colorbool(argc-2, argv+2);
+		} else if (!strcmp(argv[1], "--exec-editor")) {
+			if (argc != 3)
+				usage(git_config_set_usage);
+			return launch_editor(argv[2], NULL, NULL);
 		} else
 			break;
 		argc--;
-- 
Eric Wong
Next: Junio C Hamano
Message 1 of 5 in “builtin-config: add --exec-editor for use in scripts”
  1. builtin-config: add --exec-editor for use in scriptsEric Wong, Feb 1, 2009
  2. Junio C HamanoFeb 2, 2009
  3. Jakub NarebskiFeb 2, 2009
  4. Eric WongFeb 3, 2009
  5. Junio C HamanoFeb 3, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.