diff --git a/src/normal.c b/src/normal.c
index f626f45..6cac553 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -2325,6 +2325,7 @@
 	ui_may_remove_balloon();
 	if (p_bevalterm)
 	{
+ch_log(NULL, "setting balloon timer");
 	    profile_setlimit(p_bdlay, &bevalexpr_due);
 	    bevalexpr_due_set = TRUE;
 	}
@@ -3327,28 +3328,28 @@
  * Find the identifier under or to the right of the cursor.
  * "find_type" can have one of three values:
  * FIND_IDENT:   find an identifier (keyword)
- * FIND_STRING:  find any non-white string
- * FIND_IDENT + FIND_STRING: find any non-white string, identifier preferred.
+ * FIND_STRING:  find any non-white text
+ * FIND_IDENT + FIND_STRING: find any non-white text, identifier preferred.
  * FIND_EVAL:	 find text useful for C program debugging
  *
  * There are three steps:
- * 1. Search forward for the start of an identifier/string.  Doesn't move if
+ * 1. Search forward for the start of an identifier/text.  Doesn't move if
  *    already on one.
- * 2. Search backward for the start of this identifier/string.
+ * 2. Search backward for the start of this identifier/text.
  *    This doesn't match the real Vi but I like it a little better and it
  *    shouldn't bother anyone.
- * 3. Search forward to the end of this identifier/string.
+ * 3. Search forward to the end of this identifier/text.
  *    When FIND_IDENT isn't defined, we backup until a blank.
  *
- * Returns the length of the string, or zero if no string is found.
- * If a string is found, a pointer to the string is put in "*string".  This
- * string is not always NUL terminated.
+ * Returns the length of the text, or zero if no text is found.
+ * If text is found, a pointer to the text is put in "*text".  This
+ * points into the current buffer line and is not always NUL terminated.
  */
     int
-find_ident_under_cursor(char_u **string, int find_type)
+find_ident_under_cursor(char_u **text, int find_type)
 {
     return find_ident_at_pos(curwin, curwin->w_cursor.lnum,
-				     curwin->w_cursor.col, string, find_type);
+				curwin->w_cursor.col, text, NULL, find_type);
 }
 
 /*
@@ -3360,33 +3361,34 @@
     win_T	*wp,
     linenr_T	lnum,
     colnr_T	startcol,
-    char_u	**string,
+    char_u	**text,
+    int		*textcol,	// column where "text" starts, can be NULL
     int		find_type)
 {
     char_u	*ptr;
-    int		col = 0;	    /* init to shut up GCC */
+    int		col = 0;	// init to shut up GCC
     int		i;
     int		this_class = 0;
     int		prev_class;
     int		prevcol;
-    int		bn = 0;	    /* bracket nesting */
+    int		bn = 0;		// bracket nesting
 
     /*
      * if i == 0: try to find an identifier
-     * if i == 1: try to find any non-white string
+     * if i == 1: try to find any non-white text
      */
     ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
     for (i = (find_type & FIND_IDENT) ? 0 : 1;	i < 2; ++i)
     {
 	/*
-	 * 1. skip to start of identifier/string
+	 * 1. skip to start of identifier/text
 	 */
 	col = startcol;
 	if (has_mbyte)
 	{
 	    while (ptr[col] != NUL)
 	    {
-		/* Stop at a ']' to evaluate "a[x]". */
+		// Stop at a ']' to evaluate "a[x]".
 		if ((find_type & FIND_EVAL) && ptr[col] == ']')
 		    break;
 		this_class = mb_get_class(ptr + col);
@@ -3402,11 +3404,11 @@
 		    )
 		++col;
 
-	/* When starting on a ']' count it, so that we include the '['. */
+	// When starting on a ']' count it, so that we include the '['.
 	bn = ptr[col] == ']';
 
 	/*
-	 * 2. Back up to start of identifier/string.
+	 * 2. Back up to start of identifier/text.
 	 */
 	if (has_mbyte)
 	{
@@ -3432,8 +3434,8 @@
 		col = prevcol;
 	    }
 
-	    /* If we don't want just any old string, or we've found an
-	     * identifier, stop searching. */
+	    // If we don't want just any old text, or we've found an
+	    // identifier, stop searching.
 	    if (this_class > 2)
 		this_class = 2;
 	    if (!(find_type & FIND_STRING) || this_class == 2)
@@ -3454,8 +3456,8 @@
 			))
 		--col;
 
-	    /* If we don't want just any old string, or we've found an
-	     * identifier, stop searching. */
+	    // If we don't want just any old text, or we've found an
+	    // identifier, stop searching.
 	    if (!(find_type & FIND_STRING) || vim_iswordc(ptr[col]))
 		break;
 	}
@@ -3464,7 +3466,7 @@
     if (ptr[col] == NUL || (i == 0
 		&& (has_mbyte ? this_class != 2 : !vim_iswordc(ptr[col]))))
     {
-	// didn't find an identifier or string
+	// didn't find an identifier or text
 	if ((find_type & FIND_NOERROR) == 0)
 	{
 	    if (find_type & FIND_STRING)
@@ -3475,17 +3477,19 @@
 	return 0;
     }
     ptr += col;
-    *string = ptr;
+    *text = ptr;
+    if (textcol != NULL)
+	*textcol = col;
 
     /*
-     * 3. Find the end if the identifier/string.
+     * 3. Find the end if the identifier/text.
      */
     bn = 0;
     startcol -= col;
     col = 0;
     if (has_mbyte)
     {
-	/* Search for point of changing multibyte character class. */
+	// Search for point of changing multibyte character class.
 	this_class = mb_get_class(ptr);
 	while (ptr[col] != NUL
 		&& ((i == 0 ? mb_get_class(ptr + col) == this_class
