Skip to content

Commit

Permalink
Draw spaces, tabs, newlines and nbsp.
Browse files Browse the repository at this point in the history
Via gsettings it is possible to enable the drawing of:
- newline (enable-space-drawer-newline)
- spaces (enable-space-drawer-space)
- tab (enable-space-drawer-tab)
- not blank space (enable-space-drawer-nbsp)

The first setting is a boolean ones, so the only allowable values
are true (show the symbol) or false (don't show the symbol).
Instead for the last three settings, the allowed values are:
'draw-none' -> show nothing
'draw-all' -> show all spaces/tabs
'draw-trailing' -> show only the trailing spaces/tabs (only if GTK >= 3.24)
  • Loading branch information
kreijack authored and vkareh committed Jun 28, 2019
1 parent dee5500 commit c264b0d
Show file tree
Hide file tree
Showing 6 changed files with 386 additions and 0 deletions.
25 changes: 25 additions & 0 deletions data/org.mate.pluma.gschema.xml.in
@@ -1,5 +1,10 @@
<?xml version="1.0"?>
<schemalist gettext-domain="@GETTEXT_PACKAGE@">
<enum id="org.mate.pluma.SpaceDrawer">
<value nick="draw-none" value="0"/>
<value nick="draw-trailing" value="1"/>
<value nick="draw-all" value="2"/>
</enum>
<schema id="org.mate.pluma" path="/org/mate/pluma/">
<key name="use-default-font" type="b">
<default>true</default>
Expand Down Expand Up @@ -216,5 +221,25 @@
<summary>Active plugins</summary>
<description>List of active plugins. It contains the "Location" of the active plugins. See the .pluma-plugin file for obtaining the "Location" of a given plugin.</description>
</key>
<key name="enable-space-drawer-newline" type="b">
<default>false</default>
<summary>Draw newline</summary>
<description>Whether pluma should draw newlines in the editor window.</description>
</key>
<key name="enable-space-drawer-nbsp" enum="org.mate.pluma.SpaceDrawer">
<default>'draw-none'</default>
<summary>Draw nbsp</summary>
<description>Whether pluma should draw not breaking spaces in the editor window: 'draw-none' no drawing; 'draw-trailing' drawing only trailing spaces; 'draw-all' drawing all spaces.</description>
</key>
<key name="enable-space-drawer-tab" enum="org.mate.pluma.SpaceDrawer">
<default>'draw-none'</default>
<summary>Draw tabs</summary>
<description>Whether pluma should draw tabs in the editor window: 'draw-none' no drawing; 'draw-trailing' drawing only trailing spaces; 'draw-all' drawing all spaces.</description>
</key>
<key name="enable-space-drawer-space" enum="org.mate.pluma.SpaceDrawer">
<default>'draw-none'</default>
<summary>Draw spaces</summary>
<description>Whether pluma should draw spaces in the editor window: 'draw-none' no drawing; 'draw-trailing' drawing only trailing spaces; 'draw-all' drawing all spaces.</description>
</key>
</schema>
</schemalist>
180 changes: 180 additions & 0 deletions pluma/pluma-prefs-manager-app.c
Expand Up @@ -116,6 +116,22 @@ static void pluma_prefs_manager_lockdown_changed (GSettings *settings,
gchar *key,
gpointer user_data);

static void pluma_prefs_manager_draw_spaces_changed (GSettings *settings,
gchar *key,
gpointer user_data);

static void pluma_prefs_manager_draw_tabs_changed (GSettings *settings,
gchar *key,
gpointer user_data);

static void pluma_prefs_manager_draw_newlines_changed (GSettings *settings,
gchar *key,
gpointer user_data);

static void pluma_prefs_manager_draw_nbsp_changed (GSettings *settings,
gchar *key,
gpointer user_data);

/* GUI state is serialized to a .desktop file, not in GSettings */

#define PLUMA_STATE_DEFAULT_WINDOW_STATE 0
Expand Down Expand Up @@ -713,6 +729,27 @@ pluma_prefs_manager_app_init (void)
"changed",
G_CALLBACK (pluma_prefs_manager_lockdown_changed),
NULL);

g_signal_connect (pluma_prefs_manager->settings,
"changed::" GPM_SPACE_DRAWER_SPACE,
G_CALLBACK (pluma_prefs_manager_draw_spaces_changed),
NULL);

g_signal_connect (pluma_prefs_manager->settings,
"changed::" GPM_SPACE_DRAWER_TAB,
G_CALLBACK (pluma_prefs_manager_draw_tabs_changed),
NULL);

g_signal_connect (pluma_prefs_manager->settings,
"changed::" GPM_SPACE_DRAWER_NEWLINE,
G_CALLBACK (pluma_prefs_manager_draw_newlines_changed),
NULL);

g_signal_connect (pluma_prefs_manager->settings,
"changed::" GPM_SPACE_DRAWER_NBSP,
G_CALLBACK (pluma_prefs_manager_draw_nbsp_changed),
NULL);

}

return pluma_prefs_manager != NULL;
Expand Down Expand Up @@ -1439,3 +1476,146 @@ pluma_prefs_manager_lockdown_changed (GSettings *settings,
PLUMA_LOCKDOWN_SAVE_TO_DISK,
locked);
}

#ifdef GTK_SOURCE_VERSION_3_24
static void
pluma_prefs_manager_space_drawer_generic (GSettings *settings,
gint level,
GtkSourceSpaceTypeFlags type)
{

GList *views;
GList *l;

pluma_debug (DEBUG_PREFS);

views = pluma_app_get_views (pluma_app_get_default ());
l = views;

while (l != NULL)
{
pluma_set_source_space_drawer_by_level (GTK_SOURCE_VIEW (l->data),
level, type);
l = l->next;
}

g_list_free (views);
}
#else
static void
pluma_prefs_manager_draw_generic (GSettings *settings,
gint level,
GtkSourceDrawSpacesFlags type)
{

GList *views;
GList *l;

pluma_debug (DEBUG_PREFS);

views = pluma_app_get_views (pluma_app_get_default ());
l = views;

while (l != NULL)
{
GtkSourceSpaceTypeFlags value;

value = gtk_source_view_get_draw_spaces (GTK_SOURCE_VIEW (l->data));
if (level > 0)
value |= type;
else
value &= ~type;
gtk_source_view_set_draw_spaces (GTK_SOURCE_VIEW (l->data),
value);
l = l->next;
}

g_list_free (views);
}
#endif

static void
pluma_prefs_manager_draw_spaces_changed (GSettings *settings,
gchar *key,
gpointer user_data)
{
pluma_debug (DEBUG_PREFS);

if (strcmp (key, GPM_SPACE_DRAWER_SPACE))
return;

#ifdef GTK_SOURCE_VERSION_3_24
pluma_prefs_manager_space_drawer_generic (settings,
g_settings_get_enum (settings, key),
GTK_SOURCE_SPACE_TYPE_SPACE);
#else
pluma_prefs_manager_draw_generic (settings,
g_settings_get_enum (settings, key),
GTK_SOURCE_DRAW_SPACES_SPACE);
#endif
}

static void
pluma_prefs_manager_draw_tabs_changed (GSettings *settings,
gchar *key,
gpointer user_data)
{
pluma_debug (DEBUG_PREFS);

if (strcmp (key, GPM_SPACE_DRAWER_TAB))
return;

#ifdef GTK_SOURCE_VERSION_3_24
pluma_prefs_manager_space_drawer_generic (settings,
g_settings_get_enum (settings, key),
GTK_SOURCE_SPACE_TYPE_TAB);
#else
pluma_prefs_manager_draw_generic (settings,
g_settings_get_enum (settings, key),
GTK_SOURCE_DRAW_SPACES_TAB);
#endif

}

static void
pluma_prefs_manager_draw_newlines_changed (GSettings *settings,
gchar *key,
gpointer user_data)
{
pluma_debug (DEBUG_PREFS);

if (strcmp (key, GPM_SPACE_DRAWER_NEWLINE))
return;

#ifdef GTK_SOURCE_VERSION_3_24
pluma_prefs_manager_space_drawer_generic (settings,
g_settings_get_boolean (settings, key) ? 1 : 0,
GTK_SOURCE_SPACE_TYPE_NEWLINE);
#else
pluma_prefs_manager_draw_generic (settings,
g_settings_get_boolean (settings, key) ? 1 : 0,
GTK_SOURCE_DRAW_SPACES_NEWLINE);
#endif

}

static void
pluma_prefs_manager_draw_nbsp_changed (GSettings *settings,
gchar *key,
gpointer user_data)
{
pluma_debug (DEBUG_PREFS);

if (strcmp (key, GPM_SPACE_DRAWER_NBSP))
return;

#ifdef GTK_SOURCE_VERSION_3_24
pluma_prefs_manager_space_drawer_generic (settings,
g_settings_get_enum (settings, key),
GTK_SOURCE_SPACE_TYPE_NBSP);
#else
pluma_prefs_manager_draw_generic (settings,
g_settings_get_enum (settings, key),
GTK_SOURCE_DRAW_SPACES_NBSP);
#endif
}
64 changes: 64 additions & 0 deletions pluma/pluma-prefs-manager.c
Expand Up @@ -122,6 +122,33 @@ pluma_prefs_manager_ ## name ## _can_set (void) \
}



#define DEFINE_ENUM_PREF(name, key) gint \
pluma_prefs_manager_get_ ## name (void) \
{ \
pluma_debug (DEBUG_PREFS); \
\
return pluma_prefs_manager_get_enum (key); \
} \
\
void \
pluma_prefs_manager_set_ ## name (gint v) \
{ \
pluma_debug (DEBUG_PREFS); \
\
pluma_prefs_manager_set_enum (key, \
v); \
} \
\
gboolean \
pluma_prefs_manager_ ## name ## _can_set (void) \
{ \
pluma_debug (DEBUG_PREFS); \
\
return pluma_prefs_manager_key_is_writable (key); \
}


PlumaPrefsManager *pluma_prefs_manager = NULL;


Expand All @@ -133,6 +160,8 @@ static gint pluma_prefs_manager_get_int (const gchar* key);

static gchar *pluma_prefs_manager_get_string (const gchar* key);

static gint pluma_prefs_manager_get_enum (const gchar* key);


gboolean
pluma_prefs_manager_init (void)
Expand Down Expand Up @@ -189,6 +218,14 @@ pluma_prefs_manager_get_string (const gchar* key)
return g_settings_get_string (pluma_prefs_manager->settings, key);
}

static gint
pluma_prefs_manager_get_enum (const gchar* key)
{
pluma_debug (DEBUG_PREFS);

return g_settings_get_enum (pluma_prefs_manager->settings, key);
}

static void
pluma_prefs_manager_set_bool (const gchar* key, gboolean value)
{
Expand Down Expand Up @@ -224,6 +261,17 @@ pluma_prefs_manager_set_string (const gchar* key, const gchar* value)
g_settings_set_string (pluma_prefs_manager->settings, key, value);
}

static void
pluma_prefs_manager_set_enum (const gchar* key, gint value)
{
pluma_debug (DEBUG_PREFS);

g_return_if_fail (g_settings_is_writable (
pluma_prefs_manager->settings, key));

g_settings_set_enum (pluma_prefs_manager->settings, key, value);
}

static gboolean
pluma_prefs_manager_key_is_writable (const gchar* key)
{
Expand Down Expand Up @@ -939,3 +987,19 @@ pluma_prefs_manager_get_lockdown (void)

return lockdown;
}

/* enable drawing 'normal' spaces */
DEFINE_ENUM_PREF(draw_spaces,
GPM_SPACE_DRAWER_SPACE)

/* enable drawing tabs */
DEFINE_ENUM_PREF(draw_tabs,
GPM_SPACE_DRAWER_TAB)

/* enable drawing newline */
DEFINE_BOOL_PREF(draw_newlines,
GPM_SPACE_DRAWER_NEWLINE)

/* enable drawing nbsp */
DEFINE_ENUM_PREF(draw_nbsp,
GPM_SPACE_DRAWER_NBSP)
26 changes: 26 additions & 0 deletions pluma/pluma-prefs-manager.h
Expand Up @@ -122,6 +122,12 @@
#define GPM_DEFAULT_AUTO_SAVE_INTERVAL 10 /* minutes */
#define GPM_DEFAULT_MAX_RECENTS 5

/* space drawer settings */
#define GPM_SPACE_DRAWER_SPACE "enable-space-drawer-space"
#define GPM_SPACE_DRAWER_TAB "enable-space-drawer-tab"
#define GPM_SPACE_DRAWER_NEWLINE "enable-space-drawer-newline"
#define GPM_SPACE_DRAWER_NBSP "enable-space-drawer-nbsp"

typedef enum {
PLUMA_TOOLBAR_SYSTEM = 0,
PLUMA_TOOLBAR_ICONS,
Expand Down Expand Up @@ -330,6 +336,26 @@ PlumaLockdownMask pluma_prefs_manager_get_lockdown (void);
GSList* pluma_prefs_manager_get_gslist (GSettings *settings, const gchar *key);
void pluma_prefs_manager_set_gslist (GSettings *settings, const gchar *key, GSList *list);

/* Enable drawing space */
gint pluma_prefs_manager_get_draw_spaces (void);
void pluma_prefs_manager_set_draw_spaces (gint enable_draw_spaces);
gboolean pluma_prefs_manager_draw_spaces_can_set (void);

/* Enable drawing tab */
gint pluma_prefs_manager_get_draw_tabs (void);
void pluma_prefs_manager_set_draw_tabs (gint enable_draw_tabs);
gboolean pluma_prefs_manager_draw_tabs_can_set (void);

/* Enable drawing newline */
gboolean pluma_prefs_manager_get_draw_newlines (void);
void pluma_prefs_manager_set_draw_newlines (gboolean enable_draw_newlines);
gboolean pluma_prefs_manager_draw_newlines_can_set (void);

/* Enable drawing nbsp */
gint pluma_prefs_manager_get_draw_nbsp (void);
void pluma_prefs_manager_set_draw_nbsp (gint enable_draw_nbsp);
gboolean pluma_prefs_manager_draw_nbsp_can_set (void);


#endif /* __PLUMA_PREFS_MANAGER_H__ */

Expand Down

0 comments on commit c264b0d

Please sign in to comment.