Imported from ../bash-4.0-rc1.tar.gz.
This commit is contained in:
		
					parent
					
						
							
								f1be666c7d
							
						
					
				
			
			
				commit
				
					
						3185942a52
					
				
			
		
					 666 changed files with 188710 additions and 54674 deletions
				
			
		|  | @ -1,25 +1,25 @@ | |||
| /* vi_mode.c -- A vi emulation mode for Bash.
 | ||||
|    Derived from code written by Jeff Sparkes (jsparkes@bnr.ca).  */ | ||||
| 
 | ||||
| /* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 | ||||
| /* Copyright (C) 1987-2009 Free Software Foundation, Inc.
 | ||||
| 
 | ||||
|    This file is part of the GNU Readline Library, a library for | ||||
|    reading lines of text with interactive input and history editing. | ||||
|    This file is part of the GNU Readline Library (Readline), a library | ||||
|    for reading lines of text with interactive input and history editing.       | ||||
| 
 | ||||
|    The GNU Readline Library is free software; you can redistribute it | ||||
|    and/or modify it under the terms of the GNU General Public License | ||||
|    as published by the Free Software Foundation; either version 2, or | ||||
|    Readline is free software: you can redistribute it and/or modify | ||||
|    it under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation, either version 3 of the License, or | ||||
|    (at your option) any later version. | ||||
| 
 | ||||
|    The GNU Readline Library is distributed in the hope that it will be | ||||
|    useful, but WITHOUT ANY WARRANTY; without even the implied warranty | ||||
|    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|    Readline is distributed in the hope that it will be useful, | ||||
|    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|    GNU General Public License for more details. | ||||
| 
 | ||||
|    The GNU General Public License is often shipped with GNU software, and | ||||
|    is generally kept in a file called COPYING or LICENSE.  If you do not | ||||
|    have a copy of the license, write to the Free Software Foundation, | ||||
|    59 Temple Place, Suite 330, Boston, MA 02111 USA. */ | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with Readline.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| 
 | ||||
| #define READLINE_LIBRARY | ||||
| 
 | ||||
| /* **************************************************************** */ | ||||
|  | @ -69,7 +69,7 @@ int _rl_vi_last_command = 'i';	/* default `.' puts you in insert mode */ | |||
| static int _rl_vi_doing_insert; | ||||
| 
 | ||||
| /* Command keys which do movement for xxx_to commands. */ | ||||
| static const char *vi_motion = " hl^$0ftFT;,%wbeWBE|"; | ||||
| static const char * const vi_motion = " hl^$0ftFT;,%wbeWBE|`"; | ||||
| 
 | ||||
| /* Keymap used for vi replace characters.  Created dynamically since
 | ||||
|    rarely used. */ | ||||
|  | @ -101,7 +101,7 @@ static int _rl_vi_last_key_before_insert; | |||
| static int vi_redoing; | ||||
| 
 | ||||
| /* Text modification commands.  These are the `redoable' commands. */ | ||||
| static const char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; | ||||
| static const char * const vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; | ||||
| 
 | ||||
| /* Arrays for the saved marks. */ | ||||
| static int vi_mark_chars['z' - 'a' + 1]; | ||||
|  | @ -211,6 +211,15 @@ rl_vi_redo (count, c) | |||
|       if (rl_point > 0) | ||||
| 	_rl_vi_backup (); | ||||
|     } | ||||
|   /* Ditto for redoing an insert with `I', but move to the beginning of the
 | ||||
|      line like the `I' command does. */ | ||||
|   else if (_rl_vi_last_command == 'I' && vi_insert_buffer && *vi_insert_buffer) | ||||
|     { | ||||
|       rl_beg_of_line (1, 'I'); | ||||
|       _rl_vi_stuff_insert (count); | ||||
|       if (rl_point > 0) | ||||
| 	_rl_vi_backup (); | ||||
|     } | ||||
|   /* Ditto for redoing an insert with `a', but move forward a character first
 | ||||
|      like the `a' command does. */ | ||||
|   else if (_rl_vi_last_command == 'a' && vi_insert_buffer && *vi_insert_buffer) | ||||
|  | @ -220,6 +229,15 @@ rl_vi_redo (count, c) | |||
|       if (rl_point > 0) | ||||
| 	_rl_vi_backup (); | ||||
|     } | ||||
|   /* Ditto for redoing an insert with `A', but move to the end of the line
 | ||||
|      like the `A' command does. */ | ||||
|   else if (_rl_vi_last_command == 'A' && vi_insert_buffer && *vi_insert_buffer) | ||||
|     { | ||||
|       rl_end_of_line (1, 'A'); | ||||
|       _rl_vi_stuff_insert (count); | ||||
|       if (rl_point > 0) | ||||
| 	_rl_vi_backup (); | ||||
|     } | ||||
|   else | ||||
|     r = _rl_dispatch (_rl_vi_last_command, _rl_keymap); | ||||
|   vi_redoing = 0; | ||||
|  | @ -584,7 +602,7 @@ rl_vi_insert_beg (count, key) | |||
|      int count, key; | ||||
| { | ||||
|   rl_beg_of_line (1, key); | ||||
|   rl_vi_insertion_mode (1, key); | ||||
|   rl_vi_insert_mode (1, key); | ||||
|   return (0); | ||||
| } | ||||
| 
 | ||||
|  | @ -647,6 +665,14 @@ rl_vi_insertion_mode (count, key) | |||
|   return (0); | ||||
| } | ||||
| 
 | ||||
| int | ||||
| rl_vi_insert_mode (count, key) | ||||
|      int count, key; | ||||
| { | ||||
|   rl_vi_start_inserting (key, 1, rl_arg_sign); | ||||
|   return (0); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| _rl_vi_save_insert (up) | ||||
|       UNDO_LIST *up; | ||||
|  | @ -690,7 +716,10 @@ _rl_vi_done_inserting () | |||
|     } | ||||
|   else | ||||
|     { | ||||
|       if ((_rl_vi_last_key_before_insert == 'i' || _rl_vi_last_key_before_insert == 'a') && rl_undo_list) | ||||
|       if (rl_undo_list && (_rl_vi_last_key_before_insert == 'i' || | ||||
| 			   _rl_vi_last_key_before_insert == 'a' || | ||||
| 			   _rl_vi_last_key_before_insert == 'I' || | ||||
| 			   _rl_vi_last_key_before_insert == 'A')) | ||||
|         _rl_vi_save_insert (rl_undo_list); | ||||
|       /* XXX - Other keys probably need to be checked. */ | ||||
|       else if (_rl_vi_last_key_before_insert == 'C') | ||||
|  | @ -1045,13 +1074,15 @@ int | |||
| rl_vi_delete_to (count, key) | ||||
|      int count, key; | ||||
| { | ||||
|   int c; | ||||
|   int c, start_pos; | ||||
| 
 | ||||
|   if (_rl_uppercase_p (key)) | ||||
|     rl_stuff_char ('$'); | ||||
|   else if (vi_redoing) | ||||
|     rl_stuff_char (_rl_vi_last_motion); | ||||
| 
 | ||||
|   start_pos = rl_point; | ||||
| 
 | ||||
|   if (rl_vi_domove (key, &c)) | ||||
|     { | ||||
|       rl_ding (); | ||||
|  | @ -1060,7 +1091,8 @@ rl_vi_delete_to (count, key) | |||
| 
 | ||||
|   /* These are the motion commands that do not require adjusting the
 | ||||
|      mark. */ | ||||
|   if ((strchr (" l|h^0bB", c) == 0) && (rl_mark < rl_end)) | ||||
|   if (((strchr (" l|h^0bBFT`", c) == 0) && (rl_point >= start_pos)) && | ||||
|       (rl_mark < rl_end)) | ||||
|     rl_mark++; | ||||
| 
 | ||||
|   rl_kill_text (rl_point, rl_mark); | ||||
|  | @ -1089,7 +1121,8 @@ rl_vi_change_to (count, key) | |||
|   /* These are the motion commands that do not require adjusting the
 | ||||
|      mark.  c[wW] are handled by special-case code in rl_vi_domove(), | ||||
|      and already leave the mark at the correct location. */ | ||||
|   if ((strchr (" l|hwW^0bB", c) == 0) && (rl_mark < rl_end)) | ||||
|   if (((strchr (" l|hwW^0bBFT`", c) == 0) && (rl_point >= start_pos)) && | ||||
|       (rl_mark < rl_end)) | ||||
|     rl_mark++; | ||||
| 
 | ||||
|   /* The cursor never moves with c[wW]. */ | ||||
|  | @ -1124,12 +1157,13 @@ int | |||
| rl_vi_yank_to (count, key) | ||||
|      int count, key; | ||||
| { | ||||
|   int c, save; | ||||
|   int c, start_pos; | ||||
| 
 | ||||
|   save = rl_point; | ||||
|   if (_rl_uppercase_p (key)) | ||||
|     rl_stuff_char ('$'); | ||||
| 
 | ||||
|   start_pos = rl_point; | ||||
| 
 | ||||
|   if (rl_vi_domove (key, &c)) | ||||
|     { | ||||
|       rl_ding (); | ||||
|  | @ -1138,14 +1172,15 @@ rl_vi_yank_to (count, key) | |||
| 
 | ||||
|   /* These are the motion commands that do not require adjusting the
 | ||||
|      mark. */ | ||||
|   if ((strchr (" l|h^0%bB", c) == 0) && (rl_mark < rl_end)) | ||||
|   if (((strchr (" l|h^0%bBFT`", c) == 0) && (rl_point >= start_pos)) && | ||||
|       (rl_mark < rl_end)) | ||||
|     rl_mark++; | ||||
| 
 | ||||
|   rl_begin_undo_group (); | ||||
|   rl_kill_text (rl_point, rl_mark); | ||||
|   rl_end_undo_group (); | ||||
|   rl_do_undo (); | ||||
|   rl_point = save; | ||||
|   rl_point = start_pos; | ||||
| 
 | ||||
|   return (0); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jari Aalto
				Jari Aalto