bfd/arc: Rename enum entries to avoid conflicts
[deliverable/binutils-gdb.git] / readline / isearch.c
index 5bcecc41574642769166e6b54f7e79d32321ebe7..712b9ea8ece0eacaf135d338ff5be514a3a59868 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                 */
 /* **************************************************************** */
 
-/* Copyright (C) 1987-2012 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -66,6 +66,7 @@ static int rl_search_history PARAMS((int, int));
 
 static _rl_search_cxt *_rl_isearch_init PARAMS((int));
 static void _rl_isearch_fini PARAMS((_rl_search_cxt *));
+static int _rl_isearch_cleanup PARAMS((_rl_search_cxt *, int));
 
 /* Last line found by the current incremental search, so we don't `find'
    identical lines many times in a row.  Now part of isearch context. */
@@ -109,7 +110,7 @@ _rl_scxt_alloc (type, flags)
   cxt->history_pos = 0;
   cxt->direction = 0;
 
-  cxt->prevc = cxt->lastc = 0;
+  cxt->lastc = 0;
 
   cxt->sline = 0;
   cxt->sline_len = cxt->sline_index = 0;
@@ -155,16 +156,16 @@ rl_forward_search_history (sign, key)
    WHERE is the history list number of the current line.  If it is
    -1, then this line is the starting one. */
 static void
-rl_display_search (search_string, flags, where)
+rl_display_search (search_string, reverse_p, where)
      char *search_string;
-     int flags, where;
+     int reverse_p, where;
 {
   char *message;
   int msglen, searchlen;
 
   searchlen = (search_string && *search_string) ? strlen (search_string) : 0;
 
-  message = (char *)xmalloc (searchlen + 64);
+  message = (char *)xmalloc (searchlen + 33);
   msglen = 0;
 
 #if defined (NOTDEF)
@@ -177,13 +178,7 @@ rl_display_search (search_string, flags, where)
 
   message[msglen++] = '(';
 
-  if (flags & SF_FAILED)
-    {
-      strcpy (message + msglen, "failed ");
-      msglen += 7;
-    }
-
-  if (flags & SF_REVERSE)
+  if (reverse_p)
     {
       strcpy (message + msglen, "reverse-");
       msglen += 8;
@@ -220,7 +215,7 @@ _rl_isearch_init (direction)
   cxt->search_terminators = _rl_isearch_terminators ? _rl_isearch_terminators
                                                : default_isearch_terminators;
 
-  /* Create an array of pointers to the lines that we want to search. */
+  /* Create an arrary of pointers to the lines that we want to search. */
   hlist = history_list ();
   rl_maybe_replace_line ();
   i = 0;
@@ -317,19 +312,13 @@ _rl_search_getchar (cxt)
   RL_UNSETSTATE(RL_STATE_MOREINPUT);
 
 #if defined (HANDLE_MULTIBYTE)
-  /* This ends up with C (and LASTC) being set to the last byte of the
-     multibyte character.  In most cases c == lastc == mb[0] */
   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX);
 #endif
 
-  RL_CHECK_SIGNALS ();
   return c;
 }
 
-#define ENDSRCH_CHAR(c) \
-  ((CTRL_CHAR (c) || META_CHAR (c) || (c) == RUBOUT) && ((c) != CTRL ('G')))
-
 /* Process just-read character C according to isearch context CXT.  Return
    -1 if the caller should just free the context and return, 0 if we should
    break out of the loop, and 1 if we should continue to read characters. */
@@ -355,43 +344,13 @@ _rl_isearch_dispatch (cxt, c)
      incremental search, so we check */
   if (c >= 0 && cxt->keymap[c].type == ISKMAP && strchr (cxt->search_terminators, cxt->lastc) == 0)
     {
-      /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued
-        takes microseconds, so multiply by 1000.  If we don't get any
-        additional input and this keymap shadows another function, process
-        that key as if it was all we read. */
-      if (_rl_keyseq_timeout > 0 &&
-           RL_ISSTATE (RL_STATE_CALLBACK) == 0 &&
-           RL_ISSTATE (RL_STATE_INPUTPENDING) == 0 &&
-           _rl_pushed_input_available () == 0 &&
-           ((Keymap)(cxt->keymap[c].function))[ANYOTHERKEY].function &&
-           _rl_input_queued (_rl_keyseq_timeout*1000) == 0)
-       goto add_character;
-
-      cxt->okeymap = cxt->keymap;
       cxt->keymap = FUNCTION_TO_KEYMAP (cxt->keymap, c);
       cxt->sflags |= SF_CHGKMAP;
       /* XXX - we should probably save this sequence, so we can do
-        something useful if this doesn't end up mapping to a command we
-        interpret here.  Right now we just save the most recent character
-        that caused the index into a new keymap. */
-      cxt->prevc = c;
-#if defined (HANDLE_MULTIBYTE)
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       {
-         if (cxt->mb[1] == 0)
-           {
-             cxt->pmb[0] = c;          /* XXX should be == cxt->mb[0] */
-             cxt->pmb[1] = '\0';
-           }
-         else
-           memcpy (cxt->pmb, cxt->mb, sizeof (cxt->pmb));
-       }
-#endif
+        something useful if this doesn't end up mapping to a command. */
       return 1;
     }
 
-add_character:
-
   /* Translate the keys we do something with to opcodes. */
   if (c >= 0 && cxt->keymap[c].type == ISFUNC)
     {
@@ -417,54 +376,6 @@ add_character:
     {
       cxt->keymap = cxt->okeymap;
       cxt->sflags &= ~SF_CHGKMAP;
-      /* If we indexed into a new keymap, but didn't map to a command that
-        affects the search (lastc > 0), and the character that mapped to a
-        new keymap would have ended the search (ENDSRCH_CHAR(cxt->prevc)),
-        handle that now as if the previous char would have ended the search
-        and we would have read the current character. */
-      /* XXX - should we check cxt->mb? */
-      if (cxt->lastc > 0 && ENDSRCH_CHAR (cxt->prevc))
-       {
-         rl_stuff_char (cxt->lastc);
-         rl_execute_next (cxt->prevc);
-         /* XXX - do we insert everything in cxt->pmb? */
-         return (0);
-       }
-      /* Otherwise, if the current character is mapped to self-insert or
-        nothing (i.e., not an editing command), and the previous character
-        was a keymap index, then we need to insert both the previous
-        character and the current character into the search string. */
-      else if (cxt->lastc > 0 && cxt->prevc > 0 &&
-              cxt->keymap[cxt->prevc].type == ISKMAP &&
-              (f == 0 || f == rl_insert))
-       {
-         /* Make lastc be the next character read */
-         /* XXX - do we insert everything in cxt->mb? */
-         rl_execute_next (cxt->lastc);
-         /* Dispatch on the previous character (insert into search string) */
-         cxt->lastc = cxt->prevc;
-#if defined (HANDLE_MULTIBYTE)
-         /* Have to overwrite cxt->mb here because dispatch uses it below */
-         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-           {  
-             if (cxt->pmb[1] == 0)       
-               {
-                 cxt->mb[0] = cxt->lastc;      /* == cxt->prevc */
-                 cxt->mb[1] = '\0';
-               }
-             else
-               memcpy (cxt->mb, cxt->pmb, sizeof (cxt->mb));
-           }
-#endif
-         cxt->prevc = 0;         
-       }
-      else if (cxt->lastc > 0 && cxt->prevc > 0 && f && f != rl_insert)
-       {
-         rl_stuff_char (cxt->lastc);
-         rl_execute_next (cxt->prevc);
-         /* XXX - do we insert everything in cxt->pmb? */
-         return (0);
-       }
     }
 
   /* The characters in isearch_terminators (set from the user-settable
@@ -482,11 +393,14 @@ add_character:
         XXX - since _rl_input_available depends on the application-
         settable keyboard timeout value, this could alternatively
         use _rl_input_queued(100000) */
-      if (cxt->lastc == ESC && (_rl_pushed_input_available () || _rl_input_available ()))
+      if (cxt->lastc == ESC && _rl_input_available ())
        rl_execute_next (ESC);
       return (0);
     }
 
+#define ENDSRCH_CHAR(c) \
+  ((CTRL_CHAR (c) || META_CHAR (c) || (c) == RUBOUT) && ((c) != CTRL ('G')))
+
 #if defined (HANDLE_MULTIBYTE)
   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     {
@@ -522,7 +436,7 @@ add_character:
              cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
              strcpy (cxt->search_string, last_isearch_string);
              cxt->search_string_index = last_isearch_string_len;
-             rl_display_search (cxt->search_string, cxt->sflags, -1);
+             rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
              break;
            }
          return (1);
@@ -552,16 +466,8 @@ add_character:
         do until we have a real isearch-undo. */
       if (cxt->search_string_index == 0)
        rl_ding ();
-      else if (MB_CUR_MAX == 1 || rl_byte_oriented)
-       cxt->search_string[--cxt->search_string_index] = '\0';
       else
-       {
-         wstart = _rl_find_prev_mbchar (cxt->search_string, cxt->search_string_index, MB_FIND_NONZERO);
-         if (wstart >= 0)
-           cxt->search_string[cxt->search_string_index = wstart] = '\0';
-         else
-           rl_ding ();
-       }
+       cxt->search_string[--cxt->search_string_index] = '\0';
       break;
 
     case -4:   /* C-G, abort */
@@ -638,16 +544,12 @@ add_character:
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
        {
          int j, l;
-
-         if (cxt->mb[0] == 0 || cxt->mb[1] == 0)
-           cxt->search_string[cxt->search_string_index++] = cxt->mb[0];
-         else
-           for (j = 0, l = RL_STRLEN (cxt->mb); j < l; )
-             cxt->search_string[cxt->search_string_index++] = cxt->mb[j++];
+         for (j = 0, l = strlen (cxt->mb); j < l; )
+           cxt->search_string[cxt->search_string_index++] = cxt->mb[j++];
        }
       else
 #endif
-       cxt->search_string[cxt->search_string_index++] = cxt->lastc;    /* XXX - was c instead of lastc */
+       cxt->search_string[cxt->search_string_index++] = c;
       cxt->search_string[cxt->search_string_index] = '\0';
       break;
     }
@@ -704,7 +606,6 @@ add_character:
       /* We cannot find the search string.  Ding the bell. */
       rl_ding ();
       cxt->history_pos = cxt->last_found_line;
-      rl_display_search (cxt->search_string, cxt->sflags, (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos);
       return 1;
     }
 
@@ -717,13 +618,13 @@ add_character:
       rl_replace_line (cxt->lines[cxt->history_pos], 0);
       rl_point = cxt->sline_index;
       cxt->last_found_line = cxt->history_pos;
-      rl_display_search (cxt->search_string, cxt->sflags, (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos);
+      rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos);
     }
 
   return 1;
 }
 
-int
+static int
 _rl_isearch_cleanup (cxt, r)
      _rl_search_cxt *cxt;
      int r;
@@ -752,7 +653,7 @@ rl_search_history (direction, invoking_key)
   RL_SETSTATE(RL_STATE_ISEARCH);
   cxt = _rl_isearch_init (direction);
 
-  rl_display_search (cxt->search_string, cxt->sflags, -1);
+  rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
 
   /* If we are using the callback interface, all we do is set up here and
       return.  The key is that we leave RL_STATE_ISEARCH set. */
This page took 0.032744 seconds and 4 git commands to generate.