Kaydet (Commit) d452d0b7 authored tarafından Matthew Brush's avatar Matthew Brush

Cleanup statusbar template code a bit

* Unhardcode "pos" and "style" statusbar messages which were only
enabled when GEANY_DEBUG is defined and make them real possible
format chars.

* Move needless global "statusbar_template" into UIPrefs structure
with the other UI preferences, removing (now) pointless ui_finalize()
function.

* Rename "add_statusbar_statistics" to "create_statusbar_statistics"
and make it return a gchar* instead of passing in a GString argument
to update. Fixes a one-time "leak" of the GString and makes the code a
little easier to follow.

* Move the default statusbar template string to the top of the file
and use it as the default for the various preferences so the user has
something to base their customizations off of. TODO: check that the
N_() translations stuff works OK.
üst 029d7853
......@@ -1259,7 +1259,6 @@ void main_quit()
sidebar_finalize();
configuration_finalize();
filetypes_free_types();
ui_finalize();
log_finalize();
tm_workspace_free(TM_WORK_OBJECT(app->tm_workspace));
......
......@@ -58,6 +58,16 @@
#include "gtkcompat.h"
#define DEFAULT_STATUSBAR_TEMPLATE N_(\
"line: %l / %L\t " \
"col: %c\t " \
"sel: %s\t " \
"%w %t %m" \
"mode: %M " \
"encoding: %e " \
"filetype: %f " \
"scope: %S")
GeanyInterfacePrefs interface_prefs;
GeanyMainWidgets main_widgets;
......@@ -172,24 +182,24 @@ void ui_set_statusbar(gboolean log, const gchar *format, ...)
}
static gchar *statusbar_template = NULL;
/* note: some comments below are for translators */
static void add_statusbar_statistics(GString *stats_str,
GeanyDocument *doc, guint line, guint col)
static gchar *create_statusbar_statistics(GeanyDocument *doc,
guint line, guint col, guint pos)
{
const gchar *cur_tag;
const gchar *fmt;
const gchar *expos; /* % expansion position */
const gchar sp[] = " ";
GString *stats_str;
ScintillaObject *sci = doc->editor->sci;
fmt = NZV(statusbar_template) ? statusbar_template :
/* Status bar statistics: col = column, sel = selection. */
_("line: %l / %L\t col: %c\t sel: %s\t %w %t %m"
"mode: %M encoding: %e filetype: %f scope: %S");
if (NZV(ui_prefs.statusbar_template))
fmt = ui_prefs.statusbar_template;
else
fmt = _(DEFAULT_STATUSBAR_TEMPLATE);
stats_str = g_string_sized_new(120);
g_string_assign(stats_str, "");
while ((expos = strchr(fmt, '%')) != NULL)
{
/* append leading text before % char */
......@@ -210,6 +220,9 @@ static void add_statusbar_statistics(GString *stats_str,
case 'C':
g_string_append_printf(stats_str, "%d", col + 1);
break;
case 'p':
g_string_append_printf(stats_str, "%u", pos);
break;
case 's':
{
gint len = sci_get_selected_text_length(sci) - 1;
......@@ -279,6 +292,11 @@ static void add_statusbar_statistics(GString *stats_str,
symbols_get_current_scope(doc, &cur_tag);
g_string_append(stats_str, cur_tag);
break;
case 'Y':
g_string_append_c(stats_str, ' ');
g_string_append_printf(stats_str, "%d",
sci_get_style_at(doc->editor->sci, pos));
break;
default:
g_string_append_len(stats_str, expos, 1);
}
......@@ -291,6 +309,8 @@ static void add_statusbar_statistics(GString *stats_str,
}
/* add any remaining text */
g_string_append(stats_str, fmt);
return g_string_free(stats_str, FALSE);
}
......@@ -305,11 +325,8 @@ void ui_update_statusbar(GeanyDocument *doc, gint pos)
if (doc != NULL)
{
static GString *stats_str = NULL;
guint line, col;
if (G_UNLIKELY(stats_str == NULL))
stats_str = g_string_sized_new(120);
gchar *stats_str;
if (pos == -1)
pos = sci_get_current_position(doc->editor->sci);
......@@ -323,19 +340,11 @@ void ui_update_statusbar(GeanyDocument *doc, gint pos)
else
col = 0;
add_statusbar_statistics(stats_str, doc, line, col);
stats_str = create_statusbar_statistics(doc, line, col, pos);
#ifdef GEANY_DEBUG
{
const gchar sp[] = " ";
g_string_append(stats_str, sp);
g_string_append_printf(stats_str, _("pos: %d"), pos);
g_string_append(stats_str, sp);
g_string_append_printf(stats_str, _("style: %d"), sci_get_style_at(doc->editor->sci, pos));
}
#endif
/* can be overridden by status messages */
set_statusbar(stats_str->str, TRUE);
set_statusbar(stats_str, TRUE);
g_free(stats_str);
}
else /* no documents */
{
......@@ -2000,8 +2009,8 @@ void ui_init_prefs(void)
"compiler_tab_autoscroll", TRUE);
stash_group_add_boolean(group, &ui_prefs.allow_always_save,
"allow_always_save", FALSE);
stash_group_add_string(group, &statusbar_template,
"statusbar_template", "");
stash_group_add_string(group, &ui_prefs.statusbar_template,
"statusbar_template", _(DEFAULT_STATUSBAR_TEMPLATE));
stash_group_add_boolean(group, &ui_prefs.new_document_after_close,
"new_document_after_close", FALSE);
stash_group_add_boolean(group, &interface_prefs.msgwin_status_visible,
......@@ -2257,12 +2266,6 @@ void ui_finalize_builder(void)
}
void ui_finalize(void)
{
g_free(statusbar_template);
}
static void auto_separator_update(GeanyAutoSeparator *autosep)
{
g_return_if_fail(autosep->item_count >= 0);
......
......@@ -106,6 +106,7 @@ typedef struct UIPrefs
gint sidebar_page;
gboolean msgwindow_visible;
gboolean allow_always_save; /* if set, files can always be saved, even if unchanged */
gchar *statusbar_template;
gboolean new_document_after_close;
/* Menu-item related data */
......@@ -242,8 +243,6 @@ void ui_init_prefs(void);
void ui_finalize_builder(void);
void ui_finalize(void);
void ui_init_toolbar_widgets(void);
void ui_init_stock_items(void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment