GNU Info

Info Node: (readline.info)A Readline Example

(readline.info)A Readline Example


Prev: Alternate Interface Up: Readline Convenience Functions
Enter node , (file) or (file)node

A Readline Example
------------------

   Here is a function which changes lowercase characters to their
uppercase equivalents, and uppercase characters to lowercase.  If this
function was bound to `M-c', then typing `M-c' would change the case of
the character under point.  Typing `M-1 0 M-c' would change the case of
the following 10 characters, leaving the cursor on the last character
changed.

     /* Invert the case of the COUNT following characters. */
     int
     invert_case_line (count, key)
          int count, key;
     {
       register int start, end, i;
     
       start = rl_point;
     
       if (rl_point >= rl_end)
         return (0);
     
       if (count < 0)
         {
           direction = -1;
           count = -count;
         }
       else
         direction = 1;
     
       /* Find the end of the range to modify. */
       end = start + (count * direction);
     
       /* Force it to be within range. */
       if (end > rl_end)
         end = rl_end;
       else if (end < 0)
         end = 0;
     
       if (start == end)
         return (0);
     
       if (start > end)
         {
           int temp = start;
           start = end;
           end = temp;
         }
     
       /* Tell readline that we are modifying the line, so it will save
          the undo information. */
       rl_modifying (start, end);
     
       for (i = start; i != end; i++)
         {
           if (_rl_uppercase_p (rl_line_buffer[i]))
             rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
           else if (_rl_lowercase_p (rl_line_buffer[i]))
             rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
         }
       /* Move point to on top of the last character changed. */
       rl_point = (direction == 1) ? end - 1 : start;
       return (0);
     }


automatically generated by info2www version 1.2.2.9