SF.net SVN: geany: [2262] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sat Feb 16 11:21:41 UTC 2008


Revision: 2262
          http://geany.svn.sourceforge.net/geany/?rev=2262&view=rev
Author:   eht16
Date:     2008-02-16 03:21:24 -0800 (Sat, 16 Feb 2008)

Log Message:
-----------
Apply patch from Daniel Richard G. to add support for +NNN command line arguments and for recognising filename:line:column: format on the command line (thanks).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/THANKS
    trunk/doc/geany.1.in
    trunk/doc/geany.html
    trunk/doc/geany.txt
    trunk/src/main.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-02-16 11:19:27 UTC (rev 2261)
+++ trunk/ChangeLog	2008-02-16 11:21:24 UTC (rev 2262)
@@ -1,3 +1,13 @@
+2008-02-16  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * doc/geany.html, doc/geany.txt:
+   Fix slightly wrong documentation for show_editor_scrollbars.
+ * THANKS, doc/geany.1.in, doc/geany.html, doc/geany.txt, src/main.c:
+   Apply patch from Daniel Richard G. to add support for +NNN command
+   line arguments and for recognising filename:line:column: format on
+   the command line (thanks).
+
+
 2008-02-15  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * tagmanager/python.c: Fix parsing bug when there is text after the

Modified: trunk/THANKS
===================================================================
--- trunk/THANKS	2008-02-16 11:19:27 UTC (rev 2261)
+++ trunk/THANKS	2008-02-16 11:21:24 UTC (rev 2262)
@@ -40,6 +40,7 @@
 Catalin Marinas <catalin(dot)marinas(at)gmail(dot)com> - newline strips trailing spaces patch
 Bo Lorentsen <bl(at)lue(dot)dk> - project session patch
 Yura Siamashka <yurand2(at)gmail(dot)com> - many patches
+Daniel Richard G. <skunk(at)iskunk(dot)org> - some patches
 
 Translators:
 ------------

Modified: trunk/doc/geany.1.in
===================================================================
--- trunk/doc/geany.1.in	2008-02-16 11:19:27 UTC (rev 2261)
+++ trunk/doc/geany.1.in	2008-02-16 11:21:24 UTC (rev 2262)
@@ -3,7 +3,7 @@
 Geany \(em a small and lightweight IDE
 .SH "SYNOPSIS"
 .PP
-\fBgeany\fR [\fBoption\fP]  [\fBfiles ...\fP]
+\fBgeany\fR [\fBoption\fP]  [\fP+number\fP]  [\fBfiles ...\fP]
 .SH "DESCRIPTION"
 .PP
 Geany is a small and fast editor with basic features of an integrated development environment.
@@ -13,55 +13,65 @@
 .PP
 Homepage: http://geany.uvena.de
 .SH "OPTIONS"
-.IP "\fB\fP             \fB\-\-column\fP         " 10
+.IP "\fB\fP    \fBfiles ...\fP         " 10
+A space-separated list of filenames. Absolute and relative filenames can be used. Geany also
+recognises line and column information when appended to the filename with colons, e.g.
+"geany foo.bar:10:5" will open the file foo.bar and place the cursor in line 10 at column 5.
+.IP "\fB\fP    \fB\+number\fP         " 10
+Set initial line
+.I number
+for the first opened file (same as --line, do not put a space
+between the + sign and the number). E.g. "geany +7 foo.bar" will open the file foo.bar and
+place the cursor in line 7.
+.IP "\fB\fP    \fB\-\-column\fP         " 10
 Set initial column number for the first opened file (useful in conjunction with --line).
-.IP "\fB-c\fP           \fB\-\-config\fP         " 10
+.IP "\fB-c\fP, \fB\-\-config\fP         " 10
 Use an alternate configuration directory. Default configuration directory is
 ~/.geany/ and there resides geany.conf and some template files.
-.IP "\fB-d\fP           \fB\-\-debug\fP         " 10
+.IP "\fB-d\fP, \fB\-\-debug\fP         " 10
 Run Geany in debug mode, which means being verbose and printing lots of information.
-.IP "\fB\fP             \fB\-\-ft\-names\fP         " 10
+.IP "\fB\fP, \fB\-\-ft\-names\fP         " 10
 Print a list of Geany's internal filetype names (useful snippets configuration).
-.IP "\fB-g\fP           \fB\-\-generate\-tags\fP         " 10
+.IP "\fB-g\fP, \fB\-\-generate\-tags\fP         " 10
 Generate a global tags file (see documentation).
-.IP "\fB-P\fP           \fB\-\-no\-preprocessing\fP         " 10
+.IP "\fB-P\fP, \fB\-\-no\-preprocessing\fP         " 10
 Don't preprocess C/C++ files when generating tags.
-.IP "\fB-i\fP           \fB\-\-new-instance\fP         " 10
+.IP "\fB-i\fP, \fB\-\-new-instance\fP         " 10
 Don't open files in a running instance, force opening a new instance.
 Only available if Geany was compiled with support for Sockets.
-.IP "\fB-l\fP           \fB\-\-line\fP         " 10
+.IP "\fB-l\fP, \fB\-\-line\fP         " 10
 Set initial line number for the first opened file.
-.IP "\fB-m\fP           \fB\-\-no-msgwin\fP         " 10
+.IP "\fB-m\fP, \fB\-\-no-msgwin\fP         " 10
 Don't show the message window. Use this option if you don't need compiler messages
 or VTE support.
-.IP "\fB-n\fP           \fB\-\-no-ctags\fP         " 10
+.IP "\fB-n\fP, \fB\-\-no-ctags\fP         " 10
 Don't load symbol completion and call tip data. Use this option, if you don't want to use them.
 For more information please see documentation.
-.IP "\fB-p\fP           \fB\-\-no-plugins\fP         " 10
+.IP "\fB-p\fP, \fB\-\-no-plugins\fP         " 10
 Don't load plugin support.
-.IP "\fB\fP             \fB\-\-print-prefix\fP         " 10
+.IP "\fB\fP   \fB\-\-print-prefix\fP         " 10
 Print installation prefix, the data directory, the lib directory and the locale directory (in
 this order) to stdout, each per line. This is mainly intended for plugin authors to detect
 installation paths.
-.IP "\fB-s\fP           \fB\-\-no-session\fP         " 10
+.IP "\fB-s\fP, \fB\-\-no-session\fP         " 10
 Don't load the previous session's files.
-.IP "\fB-t\fP           \fB\-\-no-terminal\fP         " 10
+.IP "\fB-t\fP, \fB\-\-no-terminal\fP         " 10
 Don't load terminal support. Use this option, if you don't want to load the virtual terminal
 emulator widget at startup. If you don't have libvte.so.4 installed, then terminal-support is
 automatically disabled. Only available if Geany was compiled with support for VTE.
-.IP "\fB\fP             \fB\-\-vte-lib\fP         " 10
+.IP "\fB\fP   \fB\-\-vte-lib\fP         " 10
 Specify explicitly the path including filename or only the filename to the VTE library, e.g.
 /usr/lib/libvte.so or libvte.so. This option is only needed, when the autodetection doesn't
 work. Only available if Geany was compiled with support for VTE.
-.IP "\fB-v\fP           \fB\-\-version\fP         " 10
+.IP "\fB-v\fP, \fB\-\-version\fP         " 10
 Show version information and exit.
-.IP "\fB-?\fP           \fB\-\-help\fP         " 10
+.IP "\fB-?\fP, \fB\-\-help\fP         " 10
 Show help information and exit.
 .PP
 Geany supports all generic GTK options, a list is available on the help screen.
 .SH "AUTHOR"
 .PP
-This manual page was written by the Geany develoepr team. Permission is
+This manual page was written by the Geany developer team. Permission is
 granted to copy, distribute and/or modify this document under
 the terms of the GNU General Public License, Version 2.
 .PP

Modified: trunk/doc/geany.html
===================================================================
--- trunk/doc/geany.html	2008-02-16 11:19:27 UTC (rev 2261)
+++ trunk/doc/geany.html	2008-02-16 11:21:24 UTC (rev 2262)
@@ -6,7 +6,7 @@
 <meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" />
 <title>Geany</title>
 <meta name="authors" content="Enrico Tröger  Nick Treleaven  Frank Lanitz" />
-<meta name="date" content="2008-02-15" />
+<meta name="date" content="2008-02-16" />
 <style type="text/css">
 
 /*
@@ -133,7 +133,7 @@
 <br />Nick Treleaven
 <br />Frank Lanitz</td></tr>
 <tr><th class="docinfo-name">Date:</th>
-<td>2008-02-15</td></tr>
+<td>2008-02-16</td></tr>
 <tr><th class="docinfo-name">Version:</th>
 <td>0.14</td></tr>
 </tbody>
@@ -436,6 +436,13 @@
 </thead>
 <tbody valign="top">
 <tr><td><em>none</em></td>
+<td>+number</td>
+<td>Set initial line number for the first opened file
+(same as --line, do not put a space between the + sign
+and the number). E.g. "geany +7 foo.bar" will open the
+file foo.bar and place the cursor in line 7.</td>
+</tr>
+<tr><td><em>none</em></td>
 <td>--column</td>
 <td>Set initial column number for the first opened file.</td>
 </tr>
@@ -527,7 +534,11 @@
 <td>[files ...]</td>
 <td>Open all given files at startup. This option causes
 Geany to ignore loading stored files from the last
-session (if enabled).</td>
+session (if enabled).
+Geany also recognises line and column information when
+appended to the filename with colons, e.g.
+"geany foo.bar:10:5" will open the file foo.bar and
+place the cursor in line 10 at column 5.</td>
 </tr>
 </tbody>
 </table>
@@ -3391,7 +3402,7 @@
 <div class="footer">
 <hr class="footer" />
 <a class="reference" href="geany.txt">View document source</a>.
-Generated on: 2008-02-16 11:18 UTC.
+Generated on: 2008-02-16 11:20 UTC.
 Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>

Modified: trunk/doc/geany.txt
===================================================================
--- trunk/doc/geany.txt	2008-02-16 11:19:27 UTC (rev 2261)
+++ trunk/doc/geany.txt	2008-02-16 11:21:24 UTC (rev 2262)
@@ -177,6 +177,11 @@
 ============  =======================  =================================================
 Short option  Long option              Function
 ============  =======================  =================================================
+*none*        +number                  Set initial line number for the first opened file
+                                       (same as --line, do not put a space between the + sign
+                                       and the number). E.g. "geany +7 foo.bar" will open the
+                                       file foo.bar and place the cursor in line 7.
+
 *none*        --column                 Set initial column number for the first opened file.
 
 -c dir_name   --config=directory_name  Use an alternate configuration directory. Default
@@ -234,6 +239,10 @@
 *none*        [files ...]              Open all given files at startup. This option causes
                                        Geany to ignore loading stored files from the last
                                        session (if enabled).
+                                       Geany also recognises line and column information when
+                                       appended to the filename with colons, e.g.
+                                       "geany foo.bar:10:5" will open the file foo.bar and
+                                       place the cursor in line 10 at column 5.
 ============  =======================  =================================================
 
 Geany supports all generic GTK options, a list is available on the

Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c	2008-02-16 11:19:27 UTC (rev 2261)
+++ trunk/src/main.c	2008-02-16 11:21:24 UTC (rev 2262)
@@ -112,6 +112,7 @@
 #ifdef HAVE_PLUGINS
 static gboolean no_plugins = FALSE;
 #endif
+static gboolean dummy = FALSE;
 
 // in alphabetical order of short options
 static GOptionEntry entries[] =
@@ -139,6 +140,7 @@
 	{ "vte-lib", 0, 0, G_OPTION_ARG_FILENAME, &lib_vte, N_("Filename of libvte.so"), NULL },
 #endif
 	{ "version", 'v', 0, G_OPTION_ARG_NONE, &show_version, N_("Show version and exit"), NULL },
+	{ "dummy", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &dummy, NULL, NULL }, // for +NNN line number arguments
 	{ NULL, 0, 0, 0, NULL, NULL, NULL }
 };
 
@@ -365,6 +367,58 @@
 }
 
 
+/* get a :line:column specifier from the end of a filename (if present),
+ * return the line/column values, and remove the specifier from the string
+ * (Note that *line and *column must both be set to -1 initially) */
+static void get_line_and_column_from_filename(gchar *filename, gint *line, gint *column)
+{
+	gsize i;
+	gint colon_count = 0;
+	gboolean have_number = FALSE;
+	gsize len;
+
+	g_assert(*line == -1 && *column == -1);
+
+	if (! NZV(filename))
+		return;
+
+	len = strlen(filename);
+	for (i = len - 1; i >= 1; i--)
+	{
+		gboolean is_colon = filename[i] == ':';
+		gboolean is_digit = g_ascii_isdigit(filename[i]);
+
+		if (! is_colon && ! is_digit)
+			break;
+
+		if (is_colon)
+		{
+			if (++colon_count > 1)
+				break;	/* bail on 2+ colons in a row */
+		}
+		else
+			colon_count = 0;
+
+		if (is_digit)
+			have_number = TRUE;
+
+		if (is_colon && have_number)
+		{
+			gint number = atoi(&filename[i + 1]);
+
+			filename[i] = '\0';
+			have_number = FALSE;
+
+			*column = *line;
+			*line = number;
+		}
+
+		if (*column >= 0)
+			break;	/* line and column are set, so we're done */
+	}
+}
+
+
 static void setup_paths()
 {
 	gchar *data_dir;
@@ -424,7 +478,24 @@
 {
 	GError *error = NULL;
 	GOptionContext *context;
+	gint i;
 
+	// first initialise cl_options fields with default values
+	cl_options.load_session = TRUE;
+	cl_options.goto_line = -1;
+	cl_options.goto_column = -1;
+
+	// the GLib option parser can't handle the +NNN (line number) option,
+	// so we grab that here and replace it with a no-op */
+	for (i = 1; i < (*argc); i++)
+	{
+		if ((*argv)[i][0] != '+')
+			continue;
+
+		cl_options.goto_line = atoi((*argv)[i] + 1);
+		(*argv)[i] = "--dummy";
+	}
+
 	context = g_option_context_new(_("[FILES...]"));
 	g_option_context_add_main_entries(context, entries, GETTEXT_PACKAGE);
 	g_option_group_set_translation_domain(g_option_context_get_main_group(context), GETTEXT_PACKAGE);
@@ -432,11 +503,6 @@
 	g_option_context_parse(context, argc, argv, &error);
 	g_option_context_free(context);
 
-	// first initialise cl_options fields with default values
-	cl_options.load_session = TRUE;
-	cl_options.goto_line = -1;
-	cl_options.goto_column = -1;
-
 	if (error != NULL)
 	{
 		g_printerr("Geany: %s\n", error->message);
@@ -520,8 +586,6 @@
 
 	if (ft_names)
 	{
-		int i;
-
 		printf("Geany's internal filetype names:\n");
 		filetypes_init_types();
 		for (i = 0; i < GEANY_MAX_FILE_TYPES; i++)
@@ -597,6 +661,17 @@
 	{
 		gchar *filename = get_argv_filename(argv[i]);
 
+		if (filename != NULL)
+		{
+			gint line = -1, column = -1;
+
+			get_line_and_column_from_filename(filename, &line, &column);
+			if (line >= 0)
+				cl_options.goto_line = line;
+			if (column >= 0)
+				cl_options.goto_column = column;
+		}
+
 		if (filename != NULL &&
 			g_file_test(filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_SYMLINK))
 		{


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list