Branch: refs/heads/master
Author: Colomban Wendling <ban(a)herbesfolles.org>
Committer: Colomban Wendling <ban(a)herbesfolles.org>
Date: Tue, 19 Aug 2014 15:06:06 UTC
Commit: 1424b608a34995e7583fc524e482b3dcd8f1c00a
https://github.com/geany/geany/commit/1424b608a34995e7583fc524e482b3dcd8f1c…
Log Message:
-----------
Merge branch 'ntrel/make-win-doc'
Modified Paths:
--------------
HACKING
doc/makefile.win32
Modified: HACKING
16 lines changed, 12 insertions(+), 4 deletions(-)
===================================================================
@@ -11,8 +11,12 @@ About this file
This file contains information for anyone wanting to work on the Geany
codebase. You should be aware of the open source licenses used - see
the README file or the documentation. It is reStructuredText; the
-source file is HACKING. You can generate hacking.html by running ``make
-hacking-doc`` from the doc/ subdirectory.
+source file is HACKING.
+
+You can generate this file by:
+
+* Passing the *--enable-html-docs* option to ``configure``.
+* Running ``make`` from the doc/ subdirectory.
Writing plugins
---------------
@@ -28,8 +32,12 @@ You should generate and read the plugin API documentation, see below.
Plugin API documentation
^^^^^^^^^^^^^^^^^^^^^^^^
You can generate documentation for the plugin API using the doxygen
-tool. Run ``make api-doc`` in the doc subdirectory. The documentation
-will be output to doc/reference/index.html.
+tool:
+
+* Pass the *--enable-api-docs* option to ``configure``.
+* Run ``make`` from the doc/ subdirectory.
+
+The documentation will be output to doc/reference/index.html.
Alternatively you can view the API documentation online at
http://www.geany.org/manual/reference/.
Modified: doc/makefile.win32
13 lines changed, 9 insertions(+), 4 deletions(-)
===================================================================
@@ -14,11 +14,16 @@ ifdef MSYS
CP = cp
endif
-doc: geany.txt
- $(RST2HTML) -stg --stylesheet=geany.css $^ geany.html
+# no PDF rule yet
+all: html api-doc
-hacking-doc: ../HACKING
- $(RST2HTML) -stg --stylesheet=geany.css $^ hacking.html
+html: geany.html hacking.html
+
+geany.html: geany.txt geany.css
+ $(RST2HTML) -stg --stylesheet=geany.css $< $@
+
+hacking.html: ../HACKING geany.css
+ $(RST2HTML) -stg --stylesheet=geany.css $< $@
# FIXME: we should also replace @VERSION@
Doxyfile: Doxyfile.in
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Nick Treleaven <nick.treleaven(a)btinternet.com>
Committer: Nick Treleaven <nick.treleaven(a)btinternet.com>
Date: Tue, 19 Aug 2014 14:40:05 UTC
Commit: 18181c2e9043add8b13c1fc94c66db2ca5b885be
https://github.com/geany/geany/commit/18181c2e9043add8b13c1fc94c66db2ca5b88…
Log Message:
-----------
Support pseudo-unique IDs for documents
Add GeanyDocument::id, document_find_by_id() to plugin API.
This also fixes clicking on a Messages item whose document has been
closed and reused. Now the click will be ignored instead of jumping to
an unexpected line in the new document.
Modified Paths:
--------------
plugins/geanyfunctions.h
src/document.c
src/document.h
src/msgwindow.c
src/plugindata.h
src/plugins.c
Modified: plugins/geanyfunctions.h
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -80,6 +80,8 @@
geany_functions->p_document->document_compare_by_tab_order
#define document_compare_by_tab_order_reverse \
geany_functions->p_document->document_compare_by_tab_order_reverse
+#define document_find_by_id \
+ geany_functions->p_document->document_find_by_id
#define editor_get_indent_prefs \
geany_functions->p_editor->editor_get_indent_prefs
#define editor_create_widget \
Modified: src/document.c
45 lines changed, 42 insertions(+), 3 deletions(-)
===================================================================
@@ -84,9 +84,11 @@ GeanyFilePrefs file_prefs;
/** Dynamic array of GeanyDocument pointers.
- * Once a pointer is added to this, it is never freed. This means you can keep a pointer
- * to a document over time, but it may represent a different
- * document later on, or may have been closed and become invalid.
+ * Once a pointer is added to this, it is never freed. This means the same document pointer
+ * can represent a different document later on, or it may have been closed and become invalid.
+ * For this reason, you should use document_find_by_id() instead of storing
+ * document pointers over time if there is a chance the user can close the
+ * document.
*
* @warning You must check @c GeanyDocument::is_valid when iterating over this array.
* This is done automatically if you use the foreach_document() macro.
@@ -110,6 +112,9 @@ typedef struct
} undo_action;
+static guint doc_id_counter = 0;
+
+
static void document_undo_clear(GeanyDocument *doc);
static void document_redo_add(GeanyDocument *doc, guint type, gpointer data);
static gboolean remove_page(guint page_num);
@@ -225,6 +230,38 @@ GeanyDocument *document_find_by_sci(ScintillaObject *sci)
}
+/** Lookup an old document by its ID.
+ * Useful when the corresponding document may have been closed since the
+ * ID was retrieved.
+ * @return @c NULL if the document is no longer open.
+ *
+ * Example:
+ * @code
+ * static guint id;
+ * GeanyDocument *doc = ...;
+ * id = doc->id; // store ID
+ * ...
+ * // time passes - the document may have been closed by now
+ * GeanyDocument *doc = document_find_by_id(id);
+ * gboolean still_open = (doc != NULL);
+ * @endcode
+ * @since 1.25. */
+GeanyDocument *document_find_by_id(guint id)
+{
+ guint i;
+
+ if (!id)
+ return NULL;
+
+ foreach_document(i)
+ {
+ if (documents[i]->id == id)
+ return documents[i];
+ }
+ return NULL;
+}
+
+
/** Gets the notebook page index for a document.
* @param doc The document.
* @return The index.
@@ -586,6 +623,7 @@ static GeanyDocument *document_create(const gchar *utf8_filename)
/* initialize default document settings */
doc->priv = g_new0(GeanyDocumentPrivate, 1);
+ doc->id = ++doc_id_counter;
doc->index = new_idx;
doc->file_name = g_strdup(utf8_filename);
doc->editor = editor_create(doc);
@@ -648,6 +686,7 @@ static gboolean remove_page(guint page_num)
ui_add_recent_document(doc);
doc->is_valid = FALSE;
+ doc->id = 0;
if (main_status.quitting)
{
Modified: src/document.h
6 lines changed, 6 insertions(+), 0 deletions(-)
===================================================================
@@ -118,6 +118,10 @@ typedef struct GeanyDocument
* not be set elsewhere.
* @see file_name. */
gchar *real_path;
+ /** A pseudo-unique ID for this document.
+ * @c 0 is reserved as an unused value.
+ * @see document_find_by_id(). */
+ guint id;
struct GeanyDocumentPrivate *priv; /* should be last, append fields before this item */
}
@@ -208,6 +212,8 @@ GeanyDocument *document_index(gint idx);
GeanyDocument *document_find_by_sci(ScintillaObject *sci);
+GeanyDocument *document_find_by_id(guint id);
+
gint document_get_notebook_page(GeanyDocument *doc);
GeanyDocument* document_get_from_page(guint page_num);
Modified: src/msgwindow.c
31 lines changed, 21 insertions(+), 10 deletions(-)
===================================================================
@@ -69,7 +69,7 @@ MessageWindow msgwindow;
enum
{
MSG_COL_LINE = 0,
- MSG_COL_DOC,
+ MSG_COL_DOC_ID,
MSG_COL_COLOR,
MSG_COL_STRING,
MSG_COL_COUNT
@@ -186,8 +186,8 @@ static void prepare_msg_tree_view(void)
GtkTreeViewColumn *column;
GtkTreeSelection *selection;
- /* line, doc, fg, str */
- msgwindow.store_msg = gtk_list_store_new(MSG_COL_COUNT, G_TYPE_INT, G_TYPE_POINTER,
+ /* line, doc id, fg, str */
+ msgwindow.store_msg = gtk_list_store_new(MSG_COL_COUNT, G_TYPE_INT, G_TYPE_UINT,
GDK_TYPE_COLOR, G_TYPE_STRING);
gtk_tree_view_set_model(GTK_TREE_VIEW(msgwindow.tree_msg), GTK_TREE_MODEL(msgwindow.store_msg));
g_object_unref(msgwindow.store_msg);
@@ -392,7 +392,8 @@ void msgwin_msg_add_string(gint msg_color, gint line, GeanyDocument *doc, const
gtk_list_store_append(msgwindow.store_msg, &iter);
gtk_list_store_set(msgwindow.store_msg, &iter,
- MSG_COL_LINE, line, MSG_COL_DOC, doc, MSG_COL_COLOR, color, MSG_COL_STRING, utf8_msg, -1);
+ MSG_COL_LINE, line, MSG_COL_DOC_ID, doc ? doc->id : 0, MSG_COL_COLOR,
+ color, MSG_COL_STRING, utf8_msg, -1);
g_free(tmp);
if (utf8_msg != tmp)
@@ -1079,18 +1080,28 @@ gboolean msgwin_goto_messages_file_line(gboolean focus_editor)
if (gtk_tree_selection_get_selected(selection, &model, &iter))
{
gint line;
+ guint id;
gchar *string;
GeanyDocument *doc;
GeanyDocument *old_doc = document_get_current();
gtk_tree_model_get(model, &iter,
- MSG_COL_LINE, &line, MSG_COL_DOC, &doc, MSG_COL_STRING, &string, -1);
- /* doc may have been closed, so check doc is valid: */
- if (line >= 0 && DOC_VALID(doc))
+ MSG_COL_LINE, &line, MSG_COL_DOC_ID, &id, MSG_COL_STRING, &string, -1);
+ if (line >= 0 && id > 0)
{
- ret = navqueue_goto_line(old_doc, doc, line);
- if (ret && focus_editor)
- gtk_widget_grab_focus(GTK_WIDGET(doc->editor->sci));
+ /* check doc is still open */
+ doc = document_find_by_id(id);
+ if (!doc)
+ {
+ ui_set_statusbar(FALSE, _("The document has been closed."));
+ utils_beep();
+ }
+ else
+ {
+ ret = navqueue_goto_line(old_doc, doc, line);
+ if (ret && focus_editor)
+ gtk_widget_grab_focus(GTK_WIDGET(doc->editor->sci));
+ }
}
else if (line < 0 && string != NULL)
{
Modified: src/plugindata.h
3 lines changed, 2 insertions(+), 1 deletions(-)
===================================================================
@@ -58,7 +58,7 @@ G_BEGIN_DECLS
* @warning You should not test for values below 200 as previously
* @c GEANY_API_VERSION was defined as an enum value, not a macro.
*/
-#define GEANY_API_VERSION 218
+#define GEANY_API_VERSION 219
/* hack to have a different ABI when built with GTK3 because loading GTK2-linked plugins
* with GTK3-linked Geany leads to crash */
@@ -324,6 +324,7 @@ typedef struct DocumentFuncs
gint (*document_compare_by_display_name) (gconstpointer a, gconstpointer b);
gint (*document_compare_by_tab_order) (gconstpointer a, gconstpointer b);
gint (*document_compare_by_tab_order_reverse) (gconstpointer a, gconstpointer b);
+ GeanyDocument* (*document_find_by_id)(guint id);
}
DocumentFuncs;
Modified: src/plugins.c
3 lines changed, 2 insertions(+), 1 deletions(-)
===================================================================
@@ -111,7 +111,8 @@ static DocumentFuncs doc_funcs = {
&document_get_notebook_page,
&document_compare_by_display_name,
&document_compare_by_tab_order,
- &document_compare_by_tab_order_reverse
+ &document_compare_by_tab_order_reverse,
+ &document_find_by_id
};
static EditorFuncs editor_funcs = {
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Nick Treleaven <nick.treleaven(a)btinternet.com>
Committer: Nick Treleaven <nick.treleaven(a)btinternet.com>
Date: Tue, 19 Aug 2014 14:14:03 UTC
Commit: 92e34baa4f02b0fda3c878434e4fac88e39835fb
https://github.com/geany/geany/commit/92e34baa4f02b0fda3c878434e4fac88e3983…
Log Message:
-----------
Update HACKING for changed doc generation instructions
Modified Paths:
--------------
HACKING
Modified: HACKING
16 lines changed, 12 insertions(+), 4 deletions(-)
===================================================================
@@ -11,8 +11,12 @@ About this file
This file contains information for anyone wanting to work on the Geany
codebase. You should be aware of the open source licenses used - see
the README file or the documentation. It is reStructuredText; the
-source file is HACKING. You can generate hacking.html by running ``make
-hacking-doc`` from the doc/ subdirectory.
+source file is HACKING.
+
+You can generate this file by:
+
+* Passing the *--enable-html-docs* option to ``configure``.
+* Running ``make`` from the doc/ subdirectory.
Writing plugins
---------------
@@ -28,8 +32,12 @@ You should generate and read the plugin API documentation, see below.
Plugin API documentation
^^^^^^^^^^^^^^^^^^^^^^^^
You can generate documentation for the plugin API using the doxygen
-tool. Run ``make api-doc`` in the doc subdirectory. The documentation
-will be output to doc/reference/index.html.
+tool:
+
+* Pass the *--enable-api-docs* option to ``configure``.
+* Run ``make`` from the doc/ subdirectory.
+
+The documentation will be output to doc/reference/index.html.
Alternatively you can view the API documentation online at
http://www.geany.org/manual/reference/.
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Frank Lanitz <frank(a)frank.uvena.de>
Committer: Frank Lanitz <frank(a)frank.uvena.de>
Date: Tue, 19 Aug 2014 12:32:29 UTC
Commit: d78c8fb5d91da58bf5ee8bde918d8db7d65dc89c
https://github.com/geany/geany/commit/d78c8fb5d91da58bf5ee8bde918d8db7d65dc…
Log Message:
-----------
SQL: Adding keyword hold
Adding new keyword hold, used e.g. on SQLAnywhere to open a cursor 'with hold'
Modified Paths:
--------------
data/filetypes.sql
Modified: data/filetypes.sql
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -22,7 +22,7 @@ quotedidentifier=identifier_2
[keywords]
# all items must be in one line
-keywords=absolute action add admin after aggregate alias all allocate alter and any are array as asc assertion at authorization auto_increment before begin bfile bigint binary bit blob bool boolean both breadth by call cascade cascaded case cast catalog char charset character check class client clob close cluster collate collation column comment commit completion connect connection constraint constraints constructor continue corresponding create cross cube current current_date current_path current_role current_time current_timestamp current_user cursor cycle data date day deallocate dec decimal declare default deferrable deferred delete depth deref desc describe descriptor destroy destructor deterministic diagnostics dictionary dimension disconnect diskgroup distinct domain double drop dynamic each else elsif end end-exec engine equals escape every except exception exec execute exists explain external false fetch first fixed flashback float for foreign found from free full function general get global go goto grant group grouping having host hour identity if ignore immediate in index indextype indicator initialize initially inner inout input insert int integer intersect interval into is isolation iterate join key language large last lateral leading left less level like limit local localtime localtimestamp locator log long loop map match materialized mediumblob mediumint mediumtext merge message middleint minus minute modifies modify module month names national natural nchar nclob new next no noaudit none not null numeric nvarchar2 object of off old on only open operation option or order ordinality out outer output owner package pad parameter parameters partial path postfix precision prefix preorder prepare preserve primary prior privileges procedure profile public purge raise read reads real recursive ref references referencing regexp regexp_like relative rename replace restrict result return returning returns revoke right role rollback rollup routine row rows savepoint schema scroll scope search second section select sequence session session_user serial set sets size smallint some space specific specifictype sql sqlexception sqlstate sqlwarning start state statement static structure synonym system_user table tablespace temporary terminate text than then time timestamp timezone_hour timezone_minute tinyint to trailing transaction translation treat trigger true truncate type under union unique uniqueidentifier unknown unnest unsigned update usage user using value values varchar varchar2 variable varying view when whenever where while with without work write year zone
+keywords=absolute action add admin after aggregate alias all allocate alter and any are array as asc assertion at authorization auto_increment before begin bfile bigint binary bit blob bool boolean both breadth by call cascade cascaded case cast catalog char charset character check class client clob close cluster collate collation column comment commit completion connect connection constraint constraints constructor continue corresponding create cross cube current current_date current_path current_role current_time current_timestamp current_user cursor cycle data date day deallocate dec decimal declare default deferrable deferred delete depth deref desc describe descriptor destroy destructor deterministic diagnostics dictionary dimension disconnect diskgroup distinct domain double drop dynamic each else elsif end end-exec engine equals escape every except exception exec execute exists explain external false fetch first fixed flashback float for foreign found from free full function general get global go goto grant group grouping having hold host hour identity if ignore immediate in index indextype indicator initialize initially inner inout input insert int integer intersect interval into is isolation iterate join key language large last lateral leading left less level like limit local localtime localtimestamp locator log long loop map match materialized mediumblob mediumint mediumtext merge message middleint minus minute modifies modify module month names national natural nchar nclob new next no noaudit none not null numeric nvarchar2 object of off old on only open operation option or order ordinality out outer output owner package pad parameter parameters partial path postfix precision prefix preorder prepare preserve primary prior privileges procedure profile public purge raise read reads real recursive ref references referencing regexp regexp_like relative rename replace restrict result return returning returns revoke right role rollback rollup routine row rows savepoint schema scroll scope search second section select sequence session session_user serial set sets size smallint some space specific specifictype sql sqlexception sqlstate sqlwarning start state statement static structure synonym system_user table tablespace temporary terminate text than then time timestamp timezone_hour timezone_minute tinyint to trailing transaction translation treat trigger true truncate type under union unique uniqueidentifier unknown unnest unsigned update usage user using value values varchar varchar2 variable varying view when whenever where while with without work write year zone
[settings]
# default extension used when saving files
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Colomban Wendling <ban(a)herbesfolles.org>
Committer: Colomban Wendling <ban(a)herbesfolles.org>
Date: Tue, 19 Aug 2014 11:44:52 UTC
Commit: 0817dddc855a062521e64172810b3ede913eb004
https://github.com/geany/geany/commit/0817dddc855a062521e64172810b3ede913eb…
Log Message:
-----------
FreeBasic: Add missing `endif` keyword
>From a patch by TJF. Part of [feature-requests:#691].
Modified Paths:
--------------
data/filetypes.freebasic
Modified: data/filetypes.freebasic
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -27,7 +27,7 @@ binnumber=number_1
[keywords]
# all items must be in one line
-keywords=abs access acos alias allocate alpha and andalso any append as asc asin asm assert assertwarn atan2 atn base beep bin binary bit bitreset bitset bload bsave byref byte byval call callocate case cast cbyte cdbl cdecl chain chdir chr cint circle class clear clng clngint close cls color com command common condbroadcast condcreate conddestroy condsignal condwait cons const constructor continue cos cptr cshort csign csng csrlin cubyte cuint culng culngint cunsg curdir cushort custom cvd cvi cvl cvlongint cvs cvshort data date dateadd datediff datepart dateserial datevalue day deallocate declare defbyte defdbl defint deflng deflngint defshort defsng defstr defubyte defuint defulngint defushort delete destructor dim dir do double draw dylibfree dylibload dylibsymbol dynamic else elseif encoding end enum environ eof eqv erase erfn erl ermn err error escape exec exepath exit exp explicit export extends extern false fboolean field fileattr filecopy filedatetime fileexists filelen fix flip for format frac fre freefile function get getjoystick getkey getmouse gosub goto hex hibyte hiword hour if iif imageconvertrow imagecreate imagedestroy imp import inkey inp input input$ instr instrrev int integer interface is isdate kill lbound lcase left len let lib line lobyte loc local locate lock lof log long longint loop loword lpos lprint lpt lset ltrim mid minute mkd mkdir mki mkl mklongint mks mkshort mod month monthname multikey mutexcreate mutexdestroy mutexlock mutexunlock name namespace new next nokeyword not now object oct offsetof on once open operator option or orelse out output overload paint palette pascal pcopy peek pipe pmap point pointer poke pos preserve preset print private procptr property protected pset ptr public put random randomize read reallocate redim rem reset restore resume return rgb rgba right rmdir rnd rset rtrim run sadd scope screen screencontrol screencopy screenevent screenglproc screeninfo screenlist screenlock screenptr screenres screenset screensync screenunlock scrn second seek select setdate setenviron setmouse settime sgn shared shell shl short shr sin single sizeof sleep space spc sqr static stdcall step stop str string strptr sub swap system tab tan then this threadcreate threadwait time timer timeserial timevalue to trans trim true type ubound ubyte ucase uinteger ulong ulongint union unlock unsigned until ushort using va_arg va_first val valint vallng valuint valulng va_next var varptr view virtual wait wbin wchr weekday weekdayname wend whex while width window windowtitle winput with woct write wspace wstr wstring xor year zstring
+keywords=abs access acos alias allocate alpha and andalso any append as asc asin asm assert assertwarn atan2 atn base beep bin binary bit bitreset bitset bload bsave byref byte byval call callocate case cast cbyte cdbl cdecl chain chdir chr cint circle class clear clng clngint close cls color com command common condbroadcast condcreate conddestroy condsignal condwait cons const constructor continue cos cptr cshort csign csng csrlin cubyte cuint culng culngint cunsg curdir cushort custom cvd cvi cvl cvlongint cvs cvshort data date dateadd datediff datepart dateserial datevalue day deallocate declare defbyte defdbl defint deflng deflngint defshort defsng defstr defubyte defuint defulngint defushort delete destructor dim dir do double draw dylibfree dylibload dylibsymbol dynamic else elseif encoding end endif enum environ eof eqv erase erfn erl ermn err error escape exec exepath exit exp explicit export extends extern false fboolean field fileattr filecopy filedatetime fileexists filelen fix flip for format frac fre freefile function get getjoystick getkey getmouse gosub goto hex hibyte hiword hour if iif imageconvertrow imagecreate imagedestroy imp import inkey inp input input$ instr instrrev int integer interface is isdate kill lbound lcase left len let lib line lobyte loc local locate lock lof log long longint loop loword lpos lprint lpt lset ltrim mid minute mkd mkdir mki mkl mklongint mks mkshort mod month monthname multikey mutexcreate mutexdestroy mutexlock mutexunlock name namespace new next nokeyword not now object oct offsetof on once open operator option or orelse out output overload paint palette pascal pcopy peek pipe pmap point pointer poke pos preserve preset print private procptr property protected pset ptr public put random randomize read reallocate redim rem reset restore resume return rgb rgba right rmdir rnd rset rtrim run sadd scope screen screencontrol screencopy screenevent screenglproc screeninfo screenlist screenlock screenptr screenres screenset screensync screenunlock scrn second seek select setdate setenviron setmouse settime sgn shared shell shl short shr sin single sizeof sleep space spc sqr static stdcall step stop str string strptr sub swap system tab tan then this threadcreate threadwait time timer timeserial timevalue to trans trim true type ubound ubyte ucase uinteger ulong ulongint union unlock unsigned until ushort using va_arg va_first val valint vallng valuint valulng va_next var varptr view virtual wait wbin wchr weekday weekdayname wend whex while width window windowtitle winput with woct write wspace wstr wstring xor year zstring
preprocessor=#assert #define defined #else #elseif #endif #endmacro #error #if #ifdef #ifndef #inclib #include #lang #libpath #line #macro once #pragma #print typeof #undef
# user definable keywords
user1=
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: elextr <elextr(a)gmail.com>
Committer: elextr <elextr(a)gmail.com>
Date: Tue, 19 Aug 2014 08:05:38 UTC
Commit: a8e8e2cd9e34d91fb769101cdcda8f696ce067ae
https://github.com/geany/geany/commit/a8e8e2cd9e34d91fb769101cdcda8f696ce06…
Log Message:
-----------
Merge pull request #312 from elextr/reflow_fix
Make reflow paragraph leave cursor at end of reflowed text, which is more likely to be useful than where it was left at the start of the last line.
Modified Paths:
--------------
src/keybindings.c
Modified: src/keybindings.c
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -2270,6 +2270,7 @@ static void reflow_paragraph(GeanyEditor *editor)
reflow_lines(editor, column);
if (!sel)
sci_set_anchor(sci, -1);
+ sci_goto_pos(sci, sci_get_line_end_position(sci, sci_get_current_line(sci)), TRUE);
sci_end_undo_action(sci);
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).