[PATCH 05/10] Provide different color for text areas in insert mode.

[email protected] Wed, 13 May 2009 00:01:52 -0400
Newsgroups gmane.comp.web.links
Message-ID <[email protected]>
The color is controlled by

  document.browse.links.active_link.insert_mode_colors.background
  document.browse.links.active_link.insert_mode_colors.text

Also avoid overloading local variable "i" in get_current_link().
---
 src/config/options.inc  |   12 ++++++++++++
 src/document/document.c |    2 ++
 src/document/options.c  |    2 ++
 src/document/options.h  |    1 +
 src/viewer/text/link.c  |   17 ++++++++++++-----
 5 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/config/options.inc b/src/config/options.inc
index 340ab93..7098854 100644
--- a/src/config/options.inc
+++ b/src/config/options.inc
@@ -294,6 +294,18 @@ static struct option_info config_options_info[] = {
 		"text", 0, "black",
 		N_("Default text color.")),
 
+	INIT_OPT_TREE("document.browse.links.active_link", N_("Insert mode colors"),
+		"insert_mode_colors", 0,
+		N_("Insert mode colors.")),
+
+	INIT_OPT_COLOR("document.browse.links.active_link.insert_mode_colors", N_("Background color for text field in insert mode."),
+		"background", 0, "#0000ff",
+		N_("Background color for text field in insert mode.")),
+
+	INIT_OPT_COLOR("document.browse.links.active_link.insert_mode_colors", N_("Text color for text field in insert mode"),
+		"text", 0, "black",
+		N_("Text color for text field in insert mode.")),
+
 	INIT_OPT_BOOL("document.browse.links.active_link", N_("Enable color"),
 		"enable_color", 0, 0,
 		N_("Enable use of the active link background and text color "
diff --git a/src/document/document.c b/src/document/document.c
index 5424f6f..19ee2d0 100644
--- a/src/document/document.c
+++ b/src/document/document.c
@@ -234,6 +234,8 @@ update_cached_document_options(struct session *ses)
 	memset(&active_link, 0, sizeof(active_link));	/* Safer. */
 	active_link.color.foreground = get_opt_color("document.browse.links.active_link.colors.text", ses);
 	active_link.color.background = get_opt_color("document.browse.links.active_link.colors.background", ses);
+	active_link.insert_mode_color.foreground = get_opt_color("document.browse.links.active_link.insert_mode_colors.text", ses);
+	active_link.insert_mode_color.background = get_opt_color("document.browse.links.active_link.insert_mode_colors.background", ses);
 	active_link.enable_color = get_opt_bool("document.browse.links.active_link.enable_color", ses);
 	active_link.invert = get_opt_bool("document.browse.links.active_link.invert", ses);
 	active_link.underline = get_opt_bool("document.browse.links.active_link.underline", ses);
diff --git a/src/document/options.c b/src/document/options.c
index b681fda..9208d64 100644
--- a/src/document/options.c
+++ b/src/document/options.c
@@ -52,6 +52,8 @@ init_document_options(struct session *ses, struct document_options *doo)
 
 	doo->active_link.color.foreground = get_opt_color("document.browse.links.active_link.colors.text", ses);
 	doo->active_link.color.background = get_opt_color("document.browse.links.active_link.colors.background", ses);
+	doo->active_link.insert_mode_color.foreground = get_opt_color("document.browse.links.active_link.insert_mode_colors.text", ses);
+	doo->active_link.insert_mode_color.background = get_opt_color("document.browse.links.active_link.insert_mode_colors.background", ses);
 
 	if (get_opt_bool("document.colors.increase_contrast", ses))
 		doo->color_flags |= COLOR_INCREASE_CONTRAST;
diff --git a/src/document/options.h b/src/document/options.h
index d3bd29a..52c1956 100644
--- a/src/document/options.h
+++ b/src/document/options.h
@@ -20,6 +20,7 @@ struct active_link_options {
 	unsigned int bold:1;
 	unsigned int invert:1;
 	struct active_link_options_colors color;
+	struct active_link_options_colors insert_mode_color;
 };
 
 /** This mostly acts as a option cache so rendering will be faster. However it
diff --git a/src/viewer/text/link.c b/src/viewer/text/link.c
index a9021b0..eaa15f1 100644
--- a/src/viewer/text/link.c
+++ b/src/viewer/text/link.c
@@ -165,7 +165,7 @@ get_link_cursor_offset(struct document_view *doc_view, struct link *link)
 /** Initialise a static template character with the colour and attributes
  * appropriate for an active link and return that character. */
 static inline struct screen_char *
-init_link_drawing(struct document_view *doc_view, struct link *link, int invert)
+init_link_drawing(struct document_view *doc_view, struct link *link, int invert, int input)
 {
 	struct document_options *doc_opts;
 	static struct screen_char template;
@@ -187,8 +187,13 @@ init_link_drawing(struct document_view *doc_view, struct link *link, int invert)
 		template.attr |= SCREEN_ATTR_BOLD;
 
 	if (doc_opts->active_link.enable_color) {
-		colors.foreground = doc_opts->active_link.color.foreground;
-		colors.background = doc_opts->active_link.color.background;
+		if (input) {
+			colors.foreground = doc_opts->active_link.insert_mode_color.foreground;
+			colors.background = doc_opts->active_link.insert_mode_color.background;
+		} else {
+			colors.foreground = doc_opts->active_link.color.foreground;
+			colors.background = doc_opts->active_link.color.background;
+		}
 	} else {
 		colors.foreground = link->color.foreground;
 		colors.background = link->color.background;
@@ -231,6 +236,7 @@ draw_current_link(struct session *ses, struct document_view *doc_view)
 	struct link *link;
 	int cursor_offset;
 	int xpos, ypos;
+	int invert, input;
 	int i;
 
 	assert(term && doc_view && doc_view->vs);
@@ -242,8 +248,9 @@ draw_current_link(struct session *ses, struct document_view *doc_view)
 	link = get_current_link(doc_view);
 	if (!link) return;
 
-	i = !link_is_textinput(link) || ses->insert_mode == INSERT_MODE_OFF;
-	template = init_link_drawing(doc_view, link, i);
+	invert = !link_is_textinput(link) || ses->insert_mode == INSERT_MODE_OFF;
+	input = ses->insert_mode == INSERT_MODE_ON;
+	template = init_link_drawing(doc_view, link, invert, input);
 	if (!template) return;
 
 	xpos = doc_view->box.x - doc_view->vs->x;
-- 
1.6.3