--- tilda.glade.orig 2013-12-13 19:58:24.000000000 +0400 +++ tilda.glade 2014-01-29 17:21:22.000000000 +0400 @@ -460,6 +460,22 @@ 5 True + + Underlined Cursor + True + True + False + 0 + True + + + 2 + 0 + 1 + 1 + + + Cursor Blinks True @@ -1998,6 +2014,20 @@ + + True + False + 1 + Cursor Color + + + 4 + 5 + 4 + 4 + + + True True @@ -2028,6 +2058,22 @@ 4 4 + + + + True + True + False + #000000000000 + + + 1 + 2 + 4 + 5 + 4 + 4 + --- src/configsys.c.orig 2013-12-13 19:58:24.000000000 +0400 +++ src/configsys.c 2014-01-29 17:25:03.000000000 +0400 @@ -104,6 +104,9 @@ CFG_INT("text_red", 0xffff, CFGF_NONE), CFG_INT("text_green", 0xffff, CFGF_NONE), CFG_INT("text_blue", 0xffff, CFGF_NONE), + CFG_INT("cursor_red", 0xffff, CFGF_NONE), + CFG_INT("cursor_green", 0xffff, CFGF_NONE), + CFG_INT("cursor_blue", 0xffff, CFGF_NONE), /* booleans */ CFG_BOOL("scroll_background", TRUE, CFGF_NONE), @@ -117,6 +120,7 @@ CFG_BOOL("notaskbar", TRUE, CFGF_NONE), CFG_BOOL("bold", TRUE, CFGF_NONE), CFG_BOOL("blinks", TRUE, CFGF_NONE), + CFG_BOOL("underline", FALSE, CFGF_NONE), CFG_BOOL("scroll_on_key", TRUE, CFGF_NONE), CFG_BOOL("bell", FALSE, CFGF_NONE), CFG_BOOL("run_command", FALSE, CFGF_NONE), --- src/tilda_terminal.c.orig 2013-12-13 19:58:24.000000000 +0400 +++ src/tilda_terminal.c 2014-01-29 17:24:06.000000000 +0400 @@ -517,7 +517,7 @@ DEBUG_ASSERT (tt != NULL); gdouble transparency_level = 0.0; - GdkColor fg, bg /*, tint, highlight, cursor, black */; + GdkColor fg, cc, bg /* , , tint, highlight, black */; gchar* word_chars; gint i; @@ -530,6 +530,10 @@ fg.green = config_getint ("text_green"); fg.blue = config_getint ("text_blue"); + cc.red = config_getint ("cursor_red"); + cc.green = config_getint ("cursor_green"); + cc.blue = config_getint ("cursor_blue"); + for(i = 0;i < TERMINAL_PALETTE_SIZE; i++) { current_palette[i].pixel = 0; @@ -547,6 +551,9 @@ /** Cursor **/ vte_terminal_set_cursor_blink_mode (VTE_TERMINAL(tt->vte_term), (config_getbool ("blinks"))?VTE_CURSOR_BLINK_ON:VTE_CURSOR_BLINK_OFF); + vte_terminal_set_color_cursor (VTE_TERMINAL(tt->vte_term), &cc); + vte_terminal_set_cursor_shape (VTE_TERMINAL(tt->vte_term), + (config_getbool ("underline"))?VTE_CURSOR_SHAPE_UNDERLINE:VTE_CURSOR_SHAPE_BLOCK); /** Scrolling **/ vte_terminal_set_scroll_background (VTE_TERMINAL(tt->vte_term), config_getbool ("scroll_background")); --- src/wizard.c.orig 2013-12-13 19:58:24.000000000 +0400 +++ src/wizard.c 2014-01-29 20:02:53.000000000 +0400 @@ -754,6 +754,21 @@ } } +static void check_cursor_underline_toggled_cb (GtkWidget *w) +{ + const gboolean status = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(w)); + gint i; + tilda_term *tt; + + config_setbool ("underline", status); + + for (i=0; iterms); i++) { + tt = g_list_nth_data (tw->terms, i); + vte_terminal_set_cursor_shape (VTE_TERMINAL(tt->vte_term), + (status)?VTE_CURSOR_SHAPE_UNDERLINE:VTE_CURSOR_SHAPE_BLOCK); + } +} + static void check_enable_antialiasing_toggled_cb (GtkWidget *w) { const gboolean status = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(w)); @@ -1306,9 +1321,11 @@ const gint scheme = gtk_combo_box_get_active (GTK_COMBO_BOX(w)); const GtkWidget *colorbutton_text = GTK_WIDGET (gtk_builder_get_object (xml, "colorbutton_text")); + const GtkWidget *colorbutton_cursor = + GTK_WIDGET (gtk_builder_get_object (xml, "colorbutton_cursor")); const GtkWidget *colorbutton_back = GTK_WIDGET (gtk_builder_get_object (xml, "colorbutton_back")); - GdkColor gdk_text, gdk_back; + GdkColor gdk_text, gdk_cursor, gdk_back; tilda_term *tt; gint i; gboolean nochange = FALSE; @@ -1341,16 +1358,21 @@ config_setint ("back_red", gdk_back.red); config_setint ("back_green", gdk_back.green); config_setint ("back_blue", gdk_back.blue); + config_setint ("cursor_red", gdk_cursor.red); + config_setint ("cursor_green", gdk_cursor.green); + config_setint ("cursor_blue", gdk_cursor.blue); config_setint ("text_red", gdk_text.red); config_setint ("text_green", gdk_text.green); config_setint ("text_blue", gdk_text.blue); gtk_color_button_set_color (GTK_COLOR_BUTTON(colorbutton_text), &gdk_text); + gtk_color_button_set_color (GTK_COLOR_BUTTON(colorbutton_cursor), &gdk_cursor); gtk_color_button_set_color (GTK_COLOR_BUTTON(colorbutton_back), &gdk_back); for (i=0; iterms); i++) { tt = g_list_nth_data (tw->terms, i); vte_terminal_set_color_foreground (VTE_TERMINAL(tt->vte_term), &gdk_text); + vte_terminal_set_color_cursor (VTE_TERMINAL(tt->vte_term), &gdk_cursor); vte_terminal_set_color_background (VTE_TERMINAL(tt->vte_term), &gdk_back); } } @@ -1381,6 +1403,31 @@ } } +static void colorbutton_cursor_color_set_cb (GtkWidget *w) +{ + const GtkWidget *combo_colorschemes = + GTK_WIDGET (gtk_builder_get_object (xml, "combo_colorschemes")); + + gint i; + tilda_term *tt; + GdkColor gdk_cursor_color; + + /* The user just changed colors manually, so set the scheme to "Custom" */ + gtk_combo_box_set_active (GTK_COMBO_BOX(combo_colorschemes), 0); + config_setint ("scheme", 0); + + /* Now get the color that was set, save it, then set it */ + gtk_color_button_get_color (GTK_COLOR_BUTTON(w), &gdk_cursor_color); + config_setint ("cursor_red", gdk_cursor_color.red); + config_setint ("cursor_green", gdk_cursor_color.green); + config_setint ("cursor_blue", gdk_cursor_color.blue); + + for (i=0; iterms); i++) { + tt = g_list_nth_data (tw->terms, i); + vte_terminal_set_color_cursor (VTE_TERMINAL(tt->vte_term), &gdk_cursor_color); + } +} + static void colorbutton_back_color_set_cb (GtkWidget *w) { const GtkWidget *combo_colorschemes = @@ -1411,7 +1458,7 @@ { gint i, j; tilda_term *tt; - GdkColor fg, bg; + GdkColor fg, cc, bg; GtkWidget *color_button; i = gtk_combo_box_get_active (GTK_COMBO_BOX(w)); @@ -1421,6 +1468,9 @@ GTK_WIDGET (gtk_builder_get_object (xml, "colorbutton_text")); gtk_color_button_get_color (GTK_COLOR_BUTTON(color_button), &fg); color_button = + GTK_WIDGET (gtk_builder_get_object (xml, "colorbutton_cursor")); + gtk_color_button_get_color (GTK_COLOR_BUTTON(color_button), &cc); + color_button = GTK_WIDGET (gtk_builder_get_object (xml, "colorbutton_back")); gtk_color_button_get_color (GTK_COLOR_BUTTON(color_button), &bg); @@ -1431,6 +1481,7 @@ tt = g_list_nth_data (tw->terms, j); vte_terminal_set_colors (VTE_TERMINAL(tt->vte_term), &fg, &bg, current_palette, TERMINAL_PALETTE_SIZE); + vte_terminal_set_color_cursor (VTE_TERMINAL(tt->vte_term), &cc); } for (j=0; j