2010/04/08

Geditの空白文字の表示プラグインのパッチを作った

SoSOな日乗 Official SoSO Blog in SPress on WordPress » geditで全角スペースを表示する

ここのまんまですけどね
gtksourceview2にこのパッチを適用してビルドすれば半角スペースが "下付きの^" で
全角スペースが "□" で表示されるようになります
パッチ適用前だと半角スペースが "." で表示されていて
普通のドットと見分けがつかない状態だったのでとても見やすくなりました



diff -Naru gtksourceview-2.8.2-org/gtksourceview/gtksourceview.c gtksourceview-2.8.2/gtksourceview/gtksourceview.c
--- gtksourceview-2.8.2-org/gtksourceview/gtksourceview.c 2010-04-08 01:36:13.481339214 +0900
+++ gtksourceview-2.8.2/gtksourceview/gtksourceview.c 2010-04-08 01:54:46.973339445 +0900
@@ -2141,6 +2141,33 @@
GdkRectangle rect)
{
gint x, y;
+ double w, h;
+
+ gtk_text_view_buffer_to_window_coords (view,
+ GTK_TEXT_WINDOW_TEXT,
+ rect.x + rect.width / 2,
+ rect.y + rect.height * 2 / 3,
+ &x,
+ &y);
+
+ w = rect.width;
+ h = rect.height;
+
+ cairo_save (cr);
+ cairo_move_to (cr, x - w * 0.25, y + h * 0.3);
+ cairo_rel_line_to(cr, w * 0.25, - h * 0.1);
+ cairo_rel_line_to(cr, w * 0.25, h * 0.1);
+ cairo_restore (cr);
+}
+
+static void
+draw_ideographic_space_at_iter (cairo_t *cr,
+ GtkTextView *view,
+ GtkTextIter *iter,
+ GdkRectangle rect)
+{
+ gint x, y;
+ double w, h;

gtk_text_view_buffer_to_window_coords (view,
GTK_TEXT_WINDOW_TEXT,
@@ -2149,9 +2176,15 @@
&x,
&y);

+ w = rect.width;
+ h = rect.height;
+
cairo_save (cr);
- cairo_move_to (cr, x, y);
- cairo_arc (cr, x, y, 0.8, 0, 2 * G_PI);
+ cairo_move_to (cr, x - w * 0.25, y - h * 0.33);
+ cairo_rel_line_to(cr, w * 0.5, 0);
+ cairo_rel_line_to(cr, 0, h * 0.5);
+ cairo_rel_line_to(cr, w * -0.5, 0);
+ cairo_rel_line_to(cr, 0, h * -0.5);
cairo_restore (cr);
}

@@ -2274,10 +2307,15 @@
draw_nbsp_at_iter (cr, GTK_TEXT_VIEW (view), iter, rect);
}
else if (view->priv->draw_spaces & GTK_SOURCE_DRAW_SPACES_SPACE &&
- g_unichar_type (c) == G_UNICODE_SPACE_SEPARATOR)
+ c == 0x20)
{
draw_space_at_iter (cr, GTK_TEXT_VIEW (view), iter, rect);
}
+ else if (view->priv->draw_spaces & GTK_SOURCE_DRAW_SPACES_SPACE &&
+ g_unichar_type (c) == G_UNICODE_SPACE_SEPARATOR)
+ {
+ draw_ideographic_space_at_iter (cr, GTK_TEXT_VIEW (view), iter, rect);
+ }
else if (view->priv->draw_spaces & GTK_SOURCE_DRAW_SPACES_NEWLINE &&
gtk_text_iter_ends_line (iter) && !gtk_text_iter_is_end (iter))
{

0 件のコメント:

コメントを投稿