OpenCoverage

vi_mode.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/readline/vi_mode.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* vi_mode.c -- A vi emulation mode for Bash.-
2 Derived from code written by Jeff Sparkes (jsparkes@bnr.ca). */-
3-
4/* Copyright (C) 1987-2017 Free Software Foundation, Inc.-
5-
6 This file is part of the GNU Readline Library (Readline), a library-
7 for reading lines of text with interactive input and history editing. -
8-
9 Readline is free software: you can redistribute it and/or modify-
10 it under the terms of the GNU General Public License as published by-
11 the Free Software Foundation, either version 3 of the License, or-
12 (at your option) any later version.-
13-
14 Readline is distributed in the hope that it will be useful,-
15 but WITHOUT ANY WARRANTY; without even the implied warranty of-
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
17 GNU General Public License for more details.-
18-
19 You should have received a copy of the GNU General Public License-
20 along with Readline. If not, see <http://www.gnu.org/licenses/>.-
21*/-
22-
23#define READLINE_LIBRARY-
24-
25/* **************************************************************** */-
26/* */-
27/* VI Emulation Mode */-
28/* */-
29/* **************************************************************** */-
30#include "rlconf.h"-
31-
32#if defined (VI_MODE)-
33-
34#if defined (HAVE_CONFIG_H)-
35# include <config.h>-
36#endif-
37-
38#include <sys/types.h>-
39-
40#if defined (HAVE_STDLIB_H)-
41# include <stdlib.h>-
42#else-
43# include "ansi_stdlib.h"-
44#endif /* HAVE_STDLIB_H */-
45-
46#if defined (HAVE_UNISTD_H)-
47# include <unistd.h>-
48#endif-
49-
50#include <stdio.h>-
51-
52/* Some standard library routines. */-
53#include "rldefs.h"-
54#include "rlmbutil.h"-
55-
56#include "readline.h"-
57#include "history.h"-
58-
59#include "rlprivate.h"-
60#include "xmalloc.h"-
61-
62#ifndef member-
63#define member(c, s) ((c) ? (char *)strchr ((s), (c)) != (char *)NULL : 0)-
64#endif-
65-
66/* This is global so other parts of the code can check whether the last-
67 command was a text modification command. */-
68int _rl_vi_last_command = 'i'; /* default `.' puts you in insert mode */-
69-
70_rl_vimotion_cxt *_rl_vimvcxt = 0;-
71-
72/* Non-zero indicates we are redoing a vi-mode command with `.' */-
73int _rl_vi_redoing;-
74-
75/* Non-zero means enter insertion mode. */-
76static int _rl_vi_doing_insert;-
77-
78/* Command keys which do movement for xxx_to commands. */-
79static const char * const vi_motion = " hl^$0ftFT;,%wbeWBE|`";-
80-
81/* Keymap used for vi replace characters. Created dynamically since-
82 rarely used. */-
83static Keymap vi_replace_map;-
84-
85/* The number of characters inserted in the last replace operation. */-
86static int vi_replace_count;-
87-
88/* If non-zero, we have text inserted after a c[motion] command that put-
89 us implicitly into insert mode. Some people want this text to be-
90 attached to the command so that it is `redoable' with `.'. */-
91static int vi_continued_command;-
92static char *vi_insert_buffer;-
93static int vi_insert_buffer_size;-
94-
95static int _rl_vi_last_repeat = 1;-
96static int _rl_vi_last_arg_sign = 1;-
97static int _rl_vi_last_motion;-
98#if defined (HANDLE_MULTIBYTE)-
99static char _rl_vi_last_search_mbchar[MB_LEN_MAX];-
100static int _rl_vi_last_search_mblen;-
101#else-
102static int _rl_vi_last_search_char;-
103#endif-
104static char _rl_vi_last_replacement[MB_LEN_MAX+1]; /* reserve for trailing NULL */-
105-
106static int _rl_vi_last_key_before_insert;-
107-
108/* Text modification commands. These are the `redoable' commands. */-
109static const char * const vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~";-
110-
111/* Arrays for the saved marks. */-
112static int vi_mark_chars['z' - 'a' + 1];-
113-
114static void _rl_vi_replace_insert PARAMS((int));-
115static void _rl_vi_save_replace PARAMS((void));-
116static void _rl_vi_stuff_insert PARAMS((int));-
117static void _rl_vi_save_insert PARAMS((UNDO_LIST *));-
118-
119static void vi_save_insert_buffer PARAMS ((int, int));-
120-
121static void _rl_vi_backup PARAMS((void));-
122-
123static int _rl_vi_arg_dispatch PARAMS((int));-
124static int rl_digit_loop1 PARAMS((void));-
125-
126static int _rl_vi_set_mark PARAMS((void));-
127static int _rl_vi_goto_mark PARAMS((void));-
128-
129static void _rl_vi_append_forward PARAMS((int));-
130-
131static int _rl_vi_callback_getchar PARAMS((char *, int));-
132-
133#if defined (READLINE_CALLBACKS)-
134static int _rl_vi_callback_set_mark PARAMS((_rl_callback_generic_arg *));-
135static int _rl_vi_callback_goto_mark PARAMS((_rl_callback_generic_arg *));-
136static int _rl_vi_callback_change_char PARAMS((_rl_callback_generic_arg *));-
137static int _rl_vi_callback_char_search PARAMS((_rl_callback_generic_arg *));-
138#endif-
139-
140static int rl_domove_read_callback PARAMS((_rl_vimotion_cxt *));-
141static int rl_domove_motion_callback PARAMS((_rl_vimotion_cxt *));-
142static int rl_vi_domove_getchar PARAMS((_rl_vimotion_cxt *));-
143-
144static int vi_change_dispatch PARAMS((_rl_vimotion_cxt *));-
145static int vi_delete_dispatch PARAMS((_rl_vimotion_cxt *));-
146static int vi_yank_dispatch PARAMS((_rl_vimotion_cxt *));-
147-
148static int vidomove_dispatch PARAMS((_rl_vimotion_cxt *));-
149-
150void-
151_rl_vi_initialize_line (void)-
152{-
153 register int i, n;-
154-
155 n = sizeof (vi_mark_chars) / sizeof (vi_mark_chars[0]);-
156 for (i = 0; i < n; i++)
i < nDescription
TRUEnever evaluated
FALSEnever evaluated
0
157 vi_mark_chars[i] = -1;
never executed: vi_mark_chars[i] = -1;
0
158-
159 RL_UNSETSTATE(RL_STATE_VICMDONCE);-
160}
never executed: end of block
0
161-
162void-
163_rl_vi_reset_last (void)-
164{-
165 _rl_vi_last_command = 'i';-
166 _rl_vi_last_repeat = 1;-
167 _rl_vi_last_arg_sign = 1;-
168 _rl_vi_last_motion = 0;-
169}
never executed: end of block
0
170-
171void-
172_rl_vi_set_last (int key, int repeat, int sign)-
173{-
174 _rl_vi_last_command = key;-
175 _rl_vi_last_repeat = repeat;-
176 _rl_vi_last_arg_sign = sign;-
177}
never executed: end of block
0
178-
179/* A convenience function that calls _rl_vi_set_last to save the last command-
180 information and enters insertion mode. */-
181void-
182rl_vi_start_inserting (int key, int repeat, int sign)-
183{-
184 _rl_vi_set_last (key, repeat, sign);-
185 rl_vi_insertion_mode (1, key);-
186}
never executed: end of block
0
187-
188/* Is the command C a VI mode text modification command? */-
189int-
190_rl_vi_textmod_command (int c)-
191{-
192 return (member (c, vi_textmod));
never executed: return (((c) ? (char *) (__extension__ (__builtin_constant_p ( (c) ) && !__builtin_constant_p ( (vi_textmod) ) && ( (c) ) == '\0' ? (char *) __rawmemchr ( (vi_textmod) , (c) ) : __builtin_strchr ( (vi_textmod) , (c) ))) != (char *) ((void *)0) : 0));
0
193}-
194-
195int-
196_rl_vi_motion_command (int c)-
197{-
198 return (member (c, vi_motion));
never executed: return (((c) ? (char *) (__extension__ (__builtin_constant_p ( (c) ) && !__builtin_constant_p ( (vi_motion) ) && ( (c) ) == '\0' ? (char *) __rawmemchr ( (vi_motion) , (c) ) : __builtin_strchr ( (vi_motion) , (c) ))) != (char *) ((void *)0) : 0));
0
199}-
200-
201static void-
202_rl_vi_replace_insert (int count)-
203{-
204 int nchars;-
205-
206 nchars = strlen (vi_insert_buffer);-
207-
208 rl_begin_undo_group ();-
209 while (count--)
count--Description
TRUEnever evaluated
FALSEnever evaluated
0
210 /* nchars-1 to compensate for _rl_replace_text using `end+1' in call-
211 to rl_delete_text */-
212 _rl_replace_text (vi_insert_buffer, rl_point, rl_point+nchars-1);
never executed: _rl_replace_text (vi_insert_buffer, rl_point, rl_point+nchars-1);
0
213 rl_end_undo_group ();-
214}
never executed: end of block
0
215-
216static void-
217_rl_vi_stuff_insert (int count)-
218{-
219 rl_begin_undo_group ();-
220 while (count--)
count--Description
TRUEnever evaluated
FALSEnever evaluated
0
221 rl_insert_text (vi_insert_buffer);
never executed: rl_insert_text (vi_insert_buffer);
0
222 rl_end_undo_group ();-
223}
never executed: end of block
0
224-
225/* Bound to `.'. Called from command mode, so we know that we have to-
226 redo a text modification command. The default for _rl_vi_last_command-
227 puts you back into insert mode. */-
228int-
229rl_vi_redo (int count, int c)-
230{-
231 int r;-
232-
233 if (rl_explicit_arg == 0)
rl_explicit_arg == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
234 {-
235 rl_numeric_arg = _rl_vi_last_repeat;-
236 rl_arg_sign = _rl_vi_last_arg_sign;-
237 }
never executed: end of block
0
238-
239 r = 0;-
240 _rl_vi_redoing = 1;-
241 /* If we're redoing an insert with `i', stuff in the inserted text-
242 and do not go into insertion mode. */-
243 if (_rl_vi_last_command == 'i' && vi_insert_buffer && *vi_insert_buffer)
_rl_vi_last_command == 'i'Description
TRUEnever evaluated
FALSEnever evaluated
vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
*vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
0
244 {-
245 _rl_vi_stuff_insert (count);-
246 /* And back up point over the last character inserted. */-
247 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
248 _rl_vi_backup ();
never executed: _rl_vi_backup ();
0
249 }
never executed: end of block
0
250 else if (_rl_vi_last_command == 'R' && vi_insert_buffer && *vi_insert_buffer)
_rl_vi_last_command == 'R'Description
TRUEnever evaluated
FALSEnever evaluated
vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
*vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
0
251 {-
252 _rl_vi_replace_insert (count);-
253 /* And back up point over the last character inserted. */-
254 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
255 _rl_vi_backup ();
never executed: _rl_vi_backup ();
0
256 }
never executed: end of block
0
257 /* Ditto for redoing an insert with `I', but move to the beginning of the-
258 line like the `I' command does. */-
259 else if (_rl_vi_last_command == 'I' && vi_insert_buffer && *vi_insert_buffer)
_rl_vi_last_command == 'I'Description
TRUEnever evaluated
FALSEnever evaluated
vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
*vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
0
260 {-
261 rl_beg_of_line (1, 'I');-
262 _rl_vi_stuff_insert (count);-
263 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
264 _rl_vi_backup ();
never executed: _rl_vi_backup ();
0
265 }
never executed: end of block
0
266 /* Ditto for redoing an insert with `a', but move forward a character first-
267 like the `a' command does. */-
268 else if (_rl_vi_last_command == 'a' && vi_insert_buffer && *vi_insert_buffer)
_rl_vi_last_command == 'a'Description
TRUEnever evaluated
FALSEnever evaluated
vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
*vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
0
269 {-
270 _rl_vi_append_forward ('a');-
271 _rl_vi_stuff_insert (count);-
272 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
273 _rl_vi_backup ();
never executed: _rl_vi_backup ();
0
274 }
never executed: end of block
0
275 /* Ditto for redoing an insert with `A', but move to the end of the line-
276 like the `A' command does. */-
277 else if (_rl_vi_last_command == 'A' && vi_insert_buffer && *vi_insert_buffer)
_rl_vi_last_command == 'A'Description
TRUEnever evaluated
FALSEnever evaluated
vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
*vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
0
278 {-
279 rl_end_of_line (1, 'A');-
280 _rl_vi_stuff_insert (count);-
281 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
282 _rl_vi_backup ();
never executed: _rl_vi_backup ();
0
283 }
never executed: end of block
0
284 else-
285 r = _rl_dispatch (_rl_vi_last_command, _rl_keymap);
never executed: r = _rl_dispatch (_rl_vi_last_command, _rl_keymap);
0
286-
287 _rl_vi_redoing = 0;-
288-
289 return (r);
never executed: return (r);
0
290}-
291-
292/* A placeholder for further expansion. */-
293int-
294rl_vi_undo (int count, int key)-
295{-
296 return (rl_undo_command (count, key));
never executed: return (rl_undo_command (count, key));
0
297}-
298 -
299/* Yank the nth arg from the previous line into this line at point. */-
300int-
301rl_vi_yank_arg (int count, int key)-
302{-
303 /* Readline thinks that the first word on a line is the 0th, while vi-
304 thinks the first word on a line is the 1st. Compensate. */-
305 if (rl_explicit_arg)
rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
306 rl_yank_nth_arg (count - 1, 0);
never executed: rl_yank_nth_arg (count - 1, 0);
0
307 else-
308 rl_yank_nth_arg ('$', 0);
never executed: rl_yank_nth_arg ('$', 0);
0
309-
310 return (0);
never executed: return (0);
0
311}-
312-
313/* With an argument, move back that many history lines, else move to the-
314 beginning of history. */-
315int-
316rl_vi_fetch_history (int count, int c)-
317{-
318 int wanted;-
319-
320 /* Giving an argument of n means we want the nth command in the history-
321 file. The command number is interpreted the same way that the bash-
322 `history' command does it -- that is, giving an argument count of 450-
323 to this command would get the command listed as number 450 in the-
324 output of `history'. */-
325 if (rl_explicit_arg)
rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
326 {-
327 wanted = history_base + where_history () - count;-
328 if (wanted <= 0)
wanted <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
329 rl_beginning_of_history (0, 0);
never executed: rl_beginning_of_history (0, 0);
0
330 else-
331 rl_get_previous_history (wanted, c);
never executed: rl_get_previous_history (wanted, c);
0
332 }-
333 else-
334 rl_beginning_of_history (count, 0);
never executed: rl_beginning_of_history (count, 0);
0
335 return (0);
never executed: return (0);
0
336}-
337-
338/* Search again for the last thing searched for. */-
339int-
340rl_vi_search_again (int count, int key)-
341{-
342 switch (key)-
343 {-
344 case 'n':
never executed: case 'n':
0
345 rl_noninc_reverse_search_again (count, key);-
346 break;
never executed: break;
0
347-
348 case 'N':
never executed: case 'N':
0
349 rl_noninc_forward_search_again (count, key);-
350 break;
never executed: break;
0
351 }-
352 return (0);
never executed: return (0);
0
353}-
354-
355/* Do a vi style search. */-
356int-
357rl_vi_search (int count, int key)-
358{-
359 switch (key)-
360 {-
361 case '?':
never executed: case '?':
0
362 _rl_free_saved_history_line ();-
363 rl_noninc_forward_search (count, key);-
364 break;
never executed: break;
0
365-
366 case '/':
never executed: case '/':
0
367 _rl_free_saved_history_line ();-
368 rl_noninc_reverse_search (count, key);-
369 break;
never executed: break;
0
370-
371 default:
never executed: default:
0
372 rl_ding ();-
373 break;
never executed: break;
0
374 }-
375 return (0);
never executed: return (0);
0
376}-
377-
378/* Completion, from vi's point of view. */-
379int-
380rl_vi_complete (int ignore, int key)-
381{-
382 if ((rl_point < rl_end) && (!whitespace (rl_line_buffer[rl_point])))
(rl_point < rl_end)Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
383 {-
384 if (!whitespace (rl_line_buffer[rl_point + 1]))
((rl_line_buff... + 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...+ 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
385 rl_vi_end_word (1, 'E');
never executed: rl_vi_end_word (1, 'E');
0
386 rl_point++;-
387 }
never executed: end of block
0
388-
389 if (key == '*')
key == '*'Description
TRUEnever evaluated
FALSEnever evaluated
0
390 rl_complete_internal ('*'); /* Expansion and replacement. */
never executed: rl_complete_internal ('*');
0
391 else if (key == '=')
key == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
392 rl_complete_internal ('?'); /* List possible completions. */
never executed: rl_complete_internal ('?');
0
393 else if (key == '\\')
key == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
0
394 rl_complete_internal (TAB); /* Standard Readline completion. */
never executed: rl_complete_internal ('\t');
0
395 else-
396 rl_complete (0, key);
never executed: rl_complete (0, key);
0
397-
398 if (key == '*' || key == '\\')
key == '*'Description
TRUEnever evaluated
FALSEnever evaluated
key == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
0
399 rl_vi_start_inserting (key, 1, rl_arg_sign);
never executed: rl_vi_start_inserting (key, 1, rl_arg_sign);
0
400-
401 return (0);
never executed: return (0);
0
402}-
403-
404/* Tilde expansion for vi mode. */-
405int-
406rl_vi_tilde_expand (int ignore, int key)-
407{-
408 rl_tilde_expand (0, key);-
409 rl_vi_start_inserting (key, 1, rl_arg_sign);-
410 return (0);
never executed: return (0);
0
411}-
412-
413/* Previous word in vi mode. */-
414int-
415rl_vi_prev_word (int count, int key)-
416{-
417 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
418 return (rl_vi_next_word (-count, key));
never executed: return (rl_vi_next_word (-count, key));
0
419-
420 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
421 {-
422 rl_ding ();-
423 return (0);
never executed: return (0);
0
424 }-
425-
426 if (_rl_uppercase_p (key))
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
427 rl_vi_bWord (count, key);
never executed: rl_vi_bWord (count, key);
0
428 else-
429 rl_vi_bword (count, key);
never executed: rl_vi_bword (count, key);
0
430-
431 return (0);
never executed: return (0);
0
432}-
433-
434/* Next word in vi mode. */-
435int-
436rl_vi_next_word (int count, int key)-
437{-
438 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
439 return (rl_vi_prev_word (-count, key));
never executed: return (rl_vi_prev_word (-count, key));
0
440-
441 if (rl_point >= (rl_end - 1))
rl_point >= (rl_end - 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
442 {-
443 rl_ding ();-
444 return (0);
never executed: return (0);
0
445 }-
446-
447 if (_rl_uppercase_p (key))
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
448 rl_vi_fWord (count, key);
never executed: rl_vi_fWord (count, key);
0
449 else-
450 rl_vi_fword (count, key);
never executed: rl_vi_fword (count, key);
0
451 return (0);
never executed: return (0);
0
452}-
453-
454/* Move to the end of the ?next? word. */-
455int-
456rl_vi_end_word (int count, int key)-
457{-
458 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
459 {-
460 rl_ding ();-
461 return 1;
never executed: return 1;
0
462 }-
463-
464 if (_rl_uppercase_p (key))
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
465 rl_vi_eWord (count, key);
never executed: rl_vi_eWord (count, key);
0
466 else-
467 rl_vi_eword (count, key);
never executed: rl_vi_eword (count, key);
0
468 return (0);
never executed: return (0);
0
469}-
470-
471/* Move forward a word the way that 'W' does. */-
472int-
473rl_vi_fWord (int count, int ignore)-
474{-
475 while (count-- && rl_point < (rl_end - 1))
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < (rl_end - 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
476 {-
477 /* Skip until whitespace. */-
478 while (!whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
479 rl_point++;
never executed: rl_point++;
0
480-
481 /* Now skip whitespace. */-
482 while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
483 rl_point++;
never executed: rl_point++;
0
484 }
never executed: end of block
0
485 return (0);
never executed: return (0);
0
486}-
487-
488int-
489rl_vi_bWord (int count, int ignore)-
490{-
491 while (count-- && rl_point > 0)
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
492 {-
493 /* If we are at the start of a word, move back to whitespace so-
494 we will go back to the start of the previous word. */-
495 if (!whitespace (rl_line_buffer[rl_point]) &&
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
496 whitespace (rl_line_buffer[rl_point - 1]))
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
497 rl_point--;
never executed: rl_point--;
0
498-
499 while (rl_point > 0 && whitespace (rl_line_buffer[rl_point]))
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
500 rl_point--;
never executed: rl_point--;
0
501-
502 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
503 {-
504 while (--rl_point >= 0 && !whitespace (rl_line_buffer[rl_point]));
never executed: ;
--rl_point >= 0Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
505 rl_point++;-
506 }
never executed: end of block
0
507 }
never executed: end of block
0
508 return (0);
never executed: return (0);
0
509}-
510-
511int-
512rl_vi_eWord (int count, int ignore)-
513{-
514 while (count-- && rl_point < (rl_end - 1))
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < (rl_end - 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
515 {-
516 if (!whitespace (rl_line_buffer[rl_point]))
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
517 rl_point++;
never executed: rl_point++;
0
518-
519 /* Move to the next non-whitespace character (to the start of the-
520 next word). */-
521 while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
522 rl_point++;
never executed: rl_point++;
0
523-
524 if (rl_point && rl_point < rl_end)
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
525 {-
526 /* Skip whitespace. */-
527 while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
528 rl_point++;
never executed: rl_point++;
0
529-
530 /* Skip until whitespace. */-
531 while (rl_point < rl_end && !whitespace (rl_line_buffer[rl_point]))
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
532 rl_point++;
never executed: rl_point++;
0
533-
534 /* Move back to the last character of the word. */-
535 rl_point--;-
536 }
never executed: end of block
0
537 }
never executed: end of block
0
538 return (0);
never executed: return (0);
0
539}-
540-
541int-
542rl_vi_fword (int count, int ignore)-
543{-
544 while (count-- && rl_point < (rl_end - 1))
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < (rl_end - 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
545 {-
546 /* Move to white space (really non-identifer). */-
547 if (_rl_isident (rl_line_buffer[rl_point]))
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
548 {-
549 while (_rl_isident (rl_line_buffer[rl_point]) && rl_point < rl_end)
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
550 rl_point++;
never executed: rl_point++;
0
551 }
never executed: end of block
0
552 else /* if (!whitespace (rl_line_buffer[rl_point])) */-
553 {-
554 while (!_rl_isident (rl_line_buffer[rl_point]) &&
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
555 !whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
556 rl_point++;
never executed: rl_point++;
0
557 }
never executed: end of block
0
558-
559 /* Move past whitespace. */-
560 while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
561 rl_point++;
never executed: rl_point++;
0
562 }
never executed: end of block
0
563 return (0);
never executed: return (0);
0
564}-
565-
566int-
567rl_vi_bword (int count, int ignore)-
568{-
569 while (count-- && rl_point > 0)
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
570 {-
571 int last_is_ident;-
572-
573 /* If we are at the start of a word, move back to whitespace-
574 so we will go back to the start of the previous word. */-
575 if (!whitespace (rl_line_buffer[rl_point]) &&
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
576 whitespace (rl_line_buffer[rl_point - 1]))
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
577 if (--rl_point == 0)
--rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
578 break;
never executed: break;
0
579-
580 /* If this character and the previous character are `opposite', move-
581 back so we don't get messed up by the rl_point++ down there in-
582 the while loop. Without this code, words like `l;' screw up the-
583 function. */-
584 last_is_ident = _rl_isident (rl_line_buffer[rl_point - 1]);
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...t - 1]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
585 if ((_rl_isident (rl_line_buffer[rl_point]) && !last_is_ident) ||
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
!last_is_identDescription
TRUEnever evaluated
FALSEnever evaluated
0
586 (!_rl_isident (rl_line_buffer[rl_point]) && last_is_ident))
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
last_is_identDescription
TRUEnever evaluated
FALSEnever evaluated
0
587 rl_point--;
never executed: rl_point--;
0
588-
589 while (rl_point > 0 && whitespace (rl_line_buffer[rl_point]))
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
590 rl_point--;
never executed: rl_point--;
0
591-
592 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
593 {-
594 if (_rl_isident (rl_line_buffer[rl_point]))
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
595 while (--rl_point >= 0 && _rl_isident (rl_line_buffer[rl_point]));
never executed: ;
--rl_point >= 0Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
596 else-
597 while (--rl_point >= 0 && !_rl_isident (rl_line_buffer[rl_point]) &&
--rl_point >= 0Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
598 !whitespace (rl_line_buffer[rl_point]));
never executed: ;
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
599 rl_point++;-
600 }
never executed: end of block
0
601 }
never executed: end of block
0
602 return (0);
never executed: return (0);
0
603}-
604-
605int-
606rl_vi_eword (int count, int ignore)-
607{-
608 while (count-- && rl_point < rl_end - 1)
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_end - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
609 {-
610 if (!whitespace (rl_line_buffer[rl_point]))
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
611 rl_point++;
never executed: rl_point++;
0
612-
613 while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
614 rl_point++;
never executed: rl_point++;
0
615-
616 if (rl_point < rl_end)
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
617 {-
618 if (_rl_isident (rl_line_buffer[rl_point]))
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
619 while (++rl_point < rl_end && _rl_isident (rl_line_buffer[rl_point]));
never executed: ;
++rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
620 else-
621 while (++rl_point < rl_end && !_rl_isident (rl_line_buffer[rl_point])
++rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISalnum)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...point]) == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
622 && !whitespace (rl_line_buffer[rl_point]));
never executed: ;
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
623 }
never executed: end of block
0
624 rl_point--;-
625 }
never executed: end of block
0
626 return (0);
never executed: return (0);
0
627}-
628-
629int-
630rl_vi_insert_beg (int count, int key)-
631{-
632 rl_beg_of_line (1, key);-
633 rl_vi_insert_mode (1, key);-
634 return (0);
never executed: return (0);
0
635}-
636-
637static void-
638_rl_vi_append_forward (int key)-
639{-
640 int point;-
641-
642 if (rl_point < rl_end)
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
643 {-
644 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
645 rl_point++;
never executed: rl_point++;
0
646 else-
647 {-
648 point = rl_point;-
649 rl_point = _rl_forward_char_internal (1);-
650 if (point == rl_point)
point == rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
651 rl_point = rl_end;
never executed: rl_point = rl_end;
0
652 }
never executed: end of block
0
653 }-
654}
never executed: end of block
0
655-
656int-
657rl_vi_append_mode (int count, int key)-
658{-
659 _rl_vi_append_forward (key);-
660 rl_vi_start_inserting (key, 1, rl_arg_sign);-
661 return (0);
never executed: return (0);
0
662}-
663-
664int-
665rl_vi_append_eol (int count, int key)-
666{-
667 rl_end_of_line (1, key);-
668 rl_vi_append_mode (1, key);-
669 return (0);
never executed: return (0);
0
670}-
671-
672/* What to do in the case of C-d. */-
673int-
674rl_vi_eof_maybe (int count, int c)-
675{-
676 return (rl_newline (1, '\n'));
never executed: return (rl_newline (1, '\n'));
0
677}-
678-
679/* Insertion mode stuff. */-
680-
681/* Switching from one mode to the other really just involves-
682 switching keymaps. */-
683int-
684rl_vi_insertion_mode (int count, int key)-
685{-
686 _rl_keymap = vi_insertion_keymap;-
687 _rl_vi_last_key_before_insert = key;-
688 if (_rl_show_mode_in_prompt)
_rl_show_mode_in_promptDescription
TRUEnever evaluated
FALSEnever evaluated
0
689 _rl_reset_prompt ();
never executed: _rl_reset_prompt ();
0
690 return (0);
never executed: return (0);
0
691}-
692-
693int-
694rl_vi_insert_mode (int count, int key)-
695{-
696 rl_vi_start_inserting (key, 1, rl_arg_sign);-
697 return (0);
never executed: return (0);
0
698}-
699-
700static void-
701vi_save_insert_buffer (int start, int len)-
702{-
703 /* Same code as _rl_vi_save_insert below */-
704 if (len >= vi_insert_buffer_size)
len >= vi_insert_buffer_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
705 {-
706 vi_insert_buffer_size += (len + 32) - (len % 32);-
707 vi_insert_buffer = (char *)xrealloc (vi_insert_buffer, vi_insert_buffer_size);-
708 }
never executed: end of block
0
709 strncpy (vi_insert_buffer, rl_line_buffer + start, len - 1);-
710 vi_insert_buffer[len-1] = '\0';-
711}
never executed: end of block
0
712-
713static void-
714_rl_vi_save_replace (void)-
715{-
716 int len, start, end;-
717 UNDO_LIST *up;-
718-
719 up = rl_undo_list;-
720 if (up == 0 || up->what != UNDO_END || vi_replace_count <= 0)
up == 0Description
TRUEnever evaluated
FALSEnever evaluated
up->what != UNDO_ENDDescription
TRUEnever evaluated
FALSEnever evaluated
vi_replace_count <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
721 {-
722 if (vi_insert_buffer_size >= 1)
vi_insert_buffer_size >= 1Description
TRUEnever evaluated
FALSEnever evaluated
0
723 vi_insert_buffer[0] = '\0';
never executed: vi_insert_buffer[0] = '\0';
0
724 return;
never executed: return;
0
725 }-
726 /* Let's try it the quick and easy way for now. This should essentially-
727 accommodate every UNDO_INSERT and save the inserted text to-
728 vi_insert_buffer */-
729 end = rl_point;-
730 start = end - vi_replace_count + 1;-
731 len = vi_replace_count + 1;-
732-
733 vi_save_insert_buffer (start, len); -
734}
never executed: end of block
0
735-
736static void-
737_rl_vi_save_insert (UNDO_LIST *up)-
738{-
739 int len, start, end;-
740-
741 if (up == 0 || up->what != UNDO_INSERT)
up == 0Description
TRUEnever evaluated
FALSEnever evaluated
up->what != UNDO_INSERTDescription
TRUEnever evaluated
FALSEnever evaluated
0
742 {-
743 if (vi_insert_buffer_size >= 1)
vi_insert_buffer_size >= 1Description
TRUEnever evaluated
FALSEnever evaluated
0
744 vi_insert_buffer[0] = '\0';
never executed: vi_insert_buffer[0] = '\0';
0
745 return;
never executed: return;
0
746 }-
747-
748 start = up->start;-
749 end = up->end;-
750 len = end - start + 1;-
751-
752 vi_save_insert_buffer (start, len);-
753}
never executed: end of block
0
754 -
755void-
756_rl_vi_done_inserting (void)-
757{-
758 if (_rl_vi_doing_insert)
_rl_vi_doing_insertDescription
TRUEnever evaluated
FALSEnever evaluated
0
759 {-
760 /* The `C', `s', and `S' commands set this. */-
761 rl_end_undo_group ();-
762 /* Now, the text between rl_undo_list->next->start and-
763 rl_undo_list->next->end is what was inserted while in insert-
764 mode. It gets copied to VI_INSERT_BUFFER because it depends-
765 on absolute indices into the line which may change (though they-
766 probably will not). */-
767 _rl_vi_doing_insert = 0;-
768 if (_rl_vi_last_key_before_insert == 'R')
_rl_vi_last_ke..._insert == 'R'Description
TRUEnever evaluated
FALSEnever evaluated
0
769 _rl_vi_save_replace (); /* Half the battle */
never executed: _rl_vi_save_replace ();
0
770 else-
771 _rl_vi_save_insert (rl_undo_list->next);
never executed: _rl_vi_save_insert (rl_undo_list->next);
0
772 vi_continued_command = 1;-
773 }
never executed: end of block
0
774 else-
775 {-
776 if (rl_undo_list && (_rl_vi_last_key_before_insert == 'i' ||
rl_undo_listDescription
TRUEnever evaluated
FALSEnever evaluated
_rl_vi_last_ke..._insert == 'i'Description
TRUEnever evaluated
FALSEnever evaluated
0
777 _rl_vi_last_key_before_insert == 'a' ||
_rl_vi_last_ke..._insert == 'a'Description
TRUEnever evaluated
FALSEnever evaluated
0
778 _rl_vi_last_key_before_insert == 'I' ||
_rl_vi_last_ke..._insert == 'I'Description
TRUEnever evaluated
FALSEnever evaluated
0
779 _rl_vi_last_key_before_insert == 'A'))
_rl_vi_last_ke..._insert == 'A'Description
TRUEnever evaluated
FALSEnever evaluated
0
780 _rl_vi_save_insert (rl_undo_list);
never executed: _rl_vi_save_insert (rl_undo_list);
0
781 /* XXX - Other keys probably need to be checked. */-
782 else if (_rl_vi_last_key_before_insert == 'C')
_rl_vi_last_ke..._insert == 'C'Description
TRUEnever evaluated
FALSEnever evaluated
0
783 rl_end_undo_group ();
never executed: rl_end_undo_group ();
0
784 while (_rl_undo_group_level > 0)
_rl_undo_group_level > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
785 rl_end_undo_group ();
never executed: rl_end_undo_group ();
0
786 vi_continued_command = 0;-
787 }
never executed: end of block
0
788}-
789-
790int-
791rl_vi_movement_mode (int count, int key)-
792{-
793 if (rl_point > 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
794 rl_backward_char (1, key);
never executed: rl_backward_char (1, key);
0
795-
796 _rl_keymap = vi_movement_keymap;-
797 _rl_vi_done_inserting ();-
798-
799 /* This is how POSIX.2 says `U' should behave -- everything up until the-
800 first time you go into command mode should not be undone. */-
801 if (RL_ISSTATE (RL_STATE_VICMDONCE) == 0)
(rl_readline_s...0400000)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
802 rl_free_undo_list ();
never executed: rl_free_undo_list ();
0
803-
804 if (_rl_show_mode_in_prompt)
_rl_show_mode_in_promptDescription
TRUEnever evaluated
FALSEnever evaluated
0
805 _rl_reset_prompt ();
never executed: _rl_reset_prompt ();
0
806-
807 RL_SETSTATE (RL_STATE_VICMDONCE);-
808 return (0);
never executed: return (0);
0
809}-
810-
811int-
812rl_vi_arg_digit (int count, int c)-
813{-
814 if (c == '0' && rl_numeric_arg == 1 && !rl_explicit_arg)
c == '0'Description
TRUEnever evaluated
FALSEnever evaluated
rl_numeric_arg == 1Description
TRUEnever evaluated
FALSEnever evaluated
!rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
815 return (rl_beg_of_line (1, c));
never executed: return (rl_beg_of_line (1, c));
0
816 else-
817 return (rl_digit_argument (count, c));
never executed: return (rl_digit_argument (count, c));
0
818}-
819-
820/* Change the case of the next COUNT characters. */-
821#if defined (HANDLE_MULTIBYTE)-
822static int-
823_rl_vi_change_mbchar_case (int count)-
824{-
825 wchar_t wc;-
826 char mb[MB_LEN_MAX+1];-
827 int mlen, p;-
828 size_t m;-
829 mbstate_t ps;-
830-
831 memset (&ps, 0, sizeof (mbstate_t));-
832 if (_rl_adjust_point (rl_line_buffer, rl_point, &ps) > 0)
_rl_adjust_poi...oint, &ps) > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
833 count--;
never executed: count--;
0
834 while (count-- && rl_point < rl_end)
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
835 {-
836 m = mbrtowc (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps);-
837 if (MB_INVALIDCH (m))
(m) == (size_t)-1Description
TRUEnever evaluated
FALSEnever evaluated
(m) == (size_t)-2Description
TRUEnever evaluated
FALSEnever evaluated
0
838 wc = (wchar_t)rl_line_buffer[rl_point];
never executed: wc = (wchar_t)rl_line_buffer[rl_point];
0
839 else if (MB_NULLWCH (m))
((m) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
840 wc = L'\0';
never executed: wc = L'\0';
0
841 if (iswupper (wc))
iswupper (wc)Description
TRUEnever evaluated
FALSEnever evaluated
0
842 wc = towlower (wc);
never executed: wc = towlower (wc);
0
843 else if (iswlower (wc))
iswlower (wc)Description
TRUEnever evaluated
FALSEnever evaluated
0
844 wc = towupper (wc);
never executed: wc = towupper (wc);
0
845 else-
846 {-
847 /* Just skip over chars neither upper nor lower case */-
848 rl_forward_char (1, 0);-
849 continue;
never executed: continue;
0
850 }-
851-
852 /* Vi is kind of strange here. */-
853 if (wc)
wcDescription
TRUEnever evaluated
FALSEnever evaluated
0
854 {-
855 p = rl_point;-
856 mlen = wcrtomb (mb, wc, &ps);-
857 if (mlen >= 0)
mlen >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
858 mb[mlen] = '\0';
never executed: mb[mlen] = '\0';
0
859 rl_begin_undo_group ();-
860 rl_vi_delete (1, 0);-
861 if (rl_point < p) /* Did we retreat at EOL? */
rl_point < pDescription
TRUEnever evaluated
FALSEnever evaluated
0
862 rl_point++; /* XXX - should we advance more than 1 for mbchar? */
never executed: rl_point++;
0
863 rl_insert_text (mb);-
864 rl_end_undo_group ();-
865 rl_vi_check ();-
866 }
never executed: end of block
0
867 else-
868 rl_forward_char (1, 0);
never executed: rl_forward_char (1, 0);
0
869 }-
870-
871 return 0;
never executed: return 0;
0
872}-
873#endif-
874-
875int-
876rl_vi_change_case (int count, int ignore)-
877{-
878 int c, p;-
879-
880 /* Don't try this on an empty line. */-
881 if (rl_point >= rl_end)
rl_point >= rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
882 return (0);
never executed: return (0);
0
883-
884 c = 0;-
885#if defined (HANDLE_MULTIBYTE)-
886 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
887 return (_rl_vi_change_mbchar_case (count));
never executed: return (_rl_vi_change_mbchar_case (count));
0
888#endif-
889-
890 while (count-- && rl_point < rl_end)
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
891 {-
892 if (_rl_uppercase_p (rl_line_buffer[rl_point]))
((unsigned cha...er[rl_point]))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
893 c = _rl_to_lower (rl_line_buffer[rl_point]);
never executed: c = ((((unsigned char)(rl_line_buffer[rl_point]) == (rl_line_buffer[rl_point])) && (1 && ((*__ctype_b_loc ())[(int) (( (unsigned char)rl_line_buffer[rl_point] ))] & (unsigned short int) _ISupper) )) ? (__extension__ ({ int __res; if (sizeof ( (unsigned ch...|| __c > 255 ? __c : (*__ctype_tolower_loc ())[__c]; } else __res = tolower ( (unsigned char)rl_line_buffer[rl_point] ); } else __res = (*__ctype_tolower_loc ())[(int) ( (unsigned char)rl_line_buffer[rl_point] )]; __res; })) : (rl_line_buffer[rl_point]));
never executed: end of block
never executed: __res = tolower ( (unsigned char)rl_line_buffer[rl_point] );
never executed: __res = (*__ctype_tolower_loc ())[(int) ( (unsigned char)rl_line_buffer[rl_point] )];
sizeof ( (unsi...l_point] ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...er[rl_point] )Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...er[rl_point]))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
894 else if (_rl_lowercase_p (rl_line_buffer[rl_point]))
((unsigned cha...er[rl_point]))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
0
895 c = _rl_to_upper (rl_line_buffer[rl_point]);
never executed: c = ((((unsigned char)(rl_line_buffer[rl_point]) == (rl_line_buffer[rl_point])) && (1 && ((*__ctype_b_loc ())[(int) (( (unsigned char)rl_line_buffer[rl_point] ))] & (unsigned short int) _ISlower) )) ? (__extension__ ({ int __res; if (sizeof ( (unsigned ch...|| __c > 255 ? __c : (*__ctype_toupper_loc ())[__c]; } else __res = toupper ( (unsigned char)rl_line_buffer[rl_point] ); } else __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)rl_line_buffer[rl_point] )]; __res; })) : (rl_line_buffer[rl_point]));
never executed: end of block
never executed: __res = toupper ( (unsigned char)rl_line_buffer[rl_point] );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)rl_line_buffer[rl_point] )];
sizeof ( (unsi...l_point] ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...er[rl_point] )Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...er[rl_point]))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
896 else-
897 {-
898 /* Just skip over characters neither upper nor lower case. */-
899 rl_forward_char (1, c);-
900 continue;
never executed: continue;
0
901 }-
902-
903 /* Vi is kind of strange here. */-
904 if (c)
cDescription
TRUEnever evaluated
FALSEnever evaluated
0
905 {-
906 p = rl_point;-
907 rl_begin_undo_group ();-
908 rl_vi_delete (1, c);-
909 if (rl_point < p) /* Did we retreat at EOL? */
rl_point < pDescription
TRUEnever evaluated
FALSEnever evaluated
0
910 rl_point++;
never executed: rl_point++;
0
911 _rl_insert_char (1, c);-
912 rl_end_undo_group ();-
913 rl_vi_check ();-
914 }
never executed: end of block
0
915 else-
916 rl_forward_char (1, c);
never executed: rl_forward_char (1, c);
0
917 }-
918 return (0);
never executed: return (0);
0
919}-
920-
921int-
922rl_vi_put (int count, int key)-
923{-
924 if (!_rl_uppercase_p (key) && (rl_point + 1 <= rl_end))
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_point + 1 <= rl_end)Description
TRUEnever evaluated
FALSEnever evaluated
0
925 rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
never executed: rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, 0x01);
0
926-
927 while (count--)
count--Description
TRUEnever evaluated
FALSEnever evaluated
0
928 rl_yank (1, key);
never executed: rl_yank (1, key);
0
929-
930 rl_backward_char (1, key);-
931 return (0);
never executed: return (0);
0
932}-
933-
934/* Move the cursor back one character. */-
935static void-
936_rl_vi_backup (void)-
937{-
938 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
939 rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
never executed: rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, 0x01);
0
940 else-
941 rl_point--;
never executed: rl_point--;
0
942}-
943-
944/* Move the cursor back one character if you're at the end of the line */-
945int-
946rl_vi_check (void)-
947{-
948 if (rl_point && rl_point == rl_end)
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
949 {-
950 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
951 rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
never executed: rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, 0x01);
0
952 else-
953 rl_point--;
never executed: rl_point--;
0
954 }-
955 return (0);
never executed: return (0);
0
956}-
957-
958/* Move to the character position specified by COUNT */-
959int-
960rl_vi_column (int count, int key)-
961{-
962 if (count > rl_end)
count > rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
963 rl_end_of_line (1, key);
never executed: rl_end_of_line (1, key);
0
964 else-
965 rl_point = count - 1;
never executed: rl_point = count - 1;
0
966 return (0);
never executed: return (0);
0
967}-
968-
969/* Process C as part of the current numeric argument. Return -1 if the-
970 argument should be aborted, 0 if we should not read any more chars, and-
971 1 if we should continue to read chars. */-
972static int-
973_rl_vi_arg_dispatch (int c)-
974{-
975 int key;-
976-
977 key = c;-
978 if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument)
c >= 0Description
TRUEnever evaluated
FALSEnever evaluated
_rl_keymap[c].type == 0Description
TRUEnever evaluated
FALSEnever evaluated
_rl_keymap[c]....ersal_argumentDescription
TRUEnever evaluated
FALSEnever evaluated
0
979 {-
980 rl_numeric_arg *= 4;-
981 return 1;
never executed: return 1;
0
982 }-
983-
984 c = UNMETA (c);-
985-
986 if (_rl_digit_p (c))
(c) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(c) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
0
987 {-
988 if (rl_explicit_arg)
rl_explicit_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
989 rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c);
never executed: rl_numeric_arg = (rl_numeric_arg * 10) + ((c) - '0');
0
990 else-
991 rl_numeric_arg = _rl_digit_value (c);
never executed: rl_numeric_arg = ((c) - '0');
0
992 rl_explicit_arg = 1;-
993 return 1; /* keep going */
never executed: return 1;
0
994 }-
995 else-
996 {-
997 rl_clear_message ();-
998 rl_stuff_char (key);-
999 return 0; /* done */
never executed: return 0;
0
1000 }-
1001}-
1002-
1003/* A simplified loop for vi. Don't dispatch key at end.-
1004 Don't recognize minus sign?-
1005 Should this do rl_save_prompt/rl_restore_prompt? */-
1006static int-
1007rl_digit_loop1 (void)-
1008{-
1009 int c, r;-
1010-
1011 while (1)-
1012 {-
1013 if (_rl_arg_overflow ())
_rl_arg_overflow ()Description
TRUEnever evaluated
FALSEnever evaluated
0
1014 return 1;
never executed: return 1;
0
1015-
1016 c = _rl_arg_getchar ();-
1017-
1018 r = _rl_vi_arg_dispatch (c);-
1019 if (r <= 0)
r <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1020 break;
never executed: break;
0
1021 }
never executed: end of block
0
1022-
1023 RL_UNSETSTATE(RL_STATE_NUMERICARG);-
1024 return (0);
never executed: return (0);
0
1025}-
1026-
1027/* This set of functions is basically to handle the commands that take a-
1028 motion argument while in callback mode: read the command, read the motion-
1029 command modifier, find the extent of the text to affect, and dispatch the-
1030 command for execution. */-
1031static void-
1032_rl_mvcxt_init (_rl_vimotion_cxt *m, int op, int key)-
1033{-
1034 m->op = op;-
1035 m->state = m->flags = 0;-
1036 m->ncxt = 0;-
1037 m->numeric_arg = -1;-
1038 m->start = rl_point;-
1039 m->end = rl_end;-
1040 m->key = key;-
1041 m->motion = -1;-
1042}
never executed: end of block
0
1043-
1044static _rl_vimotion_cxt *-
1045_rl_mvcxt_alloc (int op, int key)-
1046{-
1047 _rl_vimotion_cxt *m;-
1048-
1049 m = xmalloc (sizeof (_rl_vimotion_cxt));-
1050 _rl_mvcxt_init (m, op, key);-
1051 return m;
never executed: return m;
0
1052}-
1053-
1054static void-
1055_rl_mvcxt_dispose (_rl_vimotion_cxt *m)-
1056{-
1057 xfree (m);-
1058}
never executed: end of block
0
1059-
1060static int-
1061rl_domove_motion_callback (_rl_vimotion_cxt *m)-
1062{-
1063 int c;-
1064-
1065 _rl_vi_last_motion = c = m->motion;-
1066-
1067 /* Append a blank character temporarily so that the motion routines-
1068 work right at the end of the line. Original value of rl_end is saved-
1069 as m->end. */-
1070 rl_line_buffer[rl_end++] = ' ';-
1071 rl_line_buffer[rl_end] = '\0';-
1072-
1073 _rl_dispatch (c, _rl_keymap);-
1074-
1075#if defined (READLINE_CALLBACKS)-
1076 if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1077 {-
1078 /* Messy case where char search can be vi motion command; see rest of-
1079 details in callback.c. vi_char_search and callback_char_search just-
1080 set and unset the CHARSEARCH state. This is where any vi motion-
1081 command that needs to set its own state should be handled, with any-
1082 corresponding code to manage that state in callback.c */-
1083 if (RL_ISSTATE (RL_STATE_CHARSEARCH))
(rl_readline_s...& (0x0800000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1084 return 0;
never executed: return 0;
0
1085 else-
1086 return (_rl_vi_domove_motion_cleanup (c, m));
never executed: return (_rl_vi_domove_motion_cleanup (c, m));
0
1087 }-
1088#endif-
1089-
1090 return (_rl_vi_domove_motion_cleanup (c, m));
never executed: return (_rl_vi_domove_motion_cleanup (c, m));
0
1091}-
1092-
1093int-
1094_rl_vi_domove_motion_cleanup (int c, _rl_vimotion_cxt *m)-
1095{-
1096 int r;-
1097-
1098 /* Remove the blank that we added in rl_domove_motion_callback. */-
1099 rl_end = m->end;-
1100 rl_line_buffer[rl_end] = '\0';-
1101 if (rl_point > rl_end)
rl_point > rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1102 rl_point = rl_end;
never executed: rl_point = rl_end;
0
1103-
1104 /* No change in position means the command failed. */-
1105 if (rl_mark == rl_point)
rl_mark == rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
1106 {-
1107 RL_UNSETSTATE (RL_STATE_VIMOTION);-
1108 return (-1);
never executed: return (-1);
0
1109 }-
1110-
1111 /* rl_vi_f[wW]ord () leaves the cursor on the first character of the next-
1112 word. If we are not at the end of the line, and we are on a-
1113 non-whitespace character, move back one (presumably to whitespace). */-
1114 if ((_rl_to_upper (c) == 'W') && rl_point < rl_end && rl_point > rl_mark &&
never executed: end of block
never executed: __res = toupper ( (unsigned char)c );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)c )];
sizeof ( (unsi...d char)c ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...igned char)c )Description
TRUEnever evaluated
FALSEnever evaluated
(((((unsigned ...: (c)) == 'W')Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned char)(c) == (c))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
rl_point > rl_markDescription
TRUEnever evaluated
FALSEnever evaluated
0
1115 !whitespace (rl_line_buffer[rl_point]))
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1116 rl_point--;
never executed: rl_point--;
0
1117-
1118 /* If cw or cW, back up to the end of a word, so the behaviour of ce-
1119 or cE is the actual result. Brute-force, no subtlety. */-
1120 if (m->key == 'c' && rl_point >= rl_mark && (_rl_to_upper (c) == 'W'))
never executed: end of block
never executed: __res = toupper ( (unsigned char)c );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)c )];
sizeof ( (unsi...d char)c ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...igned char)c )Description
TRUEnever evaluated
FALSEnever evaluated
m->key == 'c'Description
TRUEnever evaluated
FALSEnever evaluated
rl_point >= rl_markDescription
TRUEnever evaluated
FALSEnever evaluated
(((((unsigned ...: (c)) == 'W')Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned char)(c) == (c))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
1121 {-
1122 /* Don't move farther back than where we started. */-
1123 while (rl_point > rl_mark && whitespace (rl_line_buffer[rl_point]))
rl_point > rl_markDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1124 rl_point--;
never executed: rl_point--;
0
1125-
1126 /* Posix.2 says that if cw or cW moves the cursor towards the end of-
1127 the line, the character under the cursor should be deleted. */-
1128 if (rl_point == rl_mark)
rl_point == rl_markDescription
TRUEnever evaluated
FALSEnever evaluated
0
1129 rl_point++;
never executed: rl_point++;
0
1130 else-
1131 {-
1132 /* Move past the end of the word so that the kill doesn't-
1133 remove the last letter of the previous word. Only do this-
1134 if we are not at the end of the line. */-
1135 if (rl_point >= 0 && rl_point < (rl_end - 1) && !whitespace (rl_line_buffer[rl_point]))
rl_point >= 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < (rl_end - 1)Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1136 rl_point++;
never executed: rl_point++;
0
1137 }
never executed: end of block
0
1138 }-
1139-
1140 if (rl_mark < rl_point)
rl_mark < rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
1141 SWAP (rl_point, rl_mark);
never executed: end of block
0
1142-
1143#if defined (READLINE_CALLBACKS)-
1144 if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1145 (*rl_redisplay_function)(); /* make sure motion is displayed */
never executed: (*rl_redisplay_function)();
0
1146#endif-
1147-
1148 r = vidomove_dispatch (m);-
1149-
1150 return (r);
never executed: return (r);
0
1151}-
1152-
1153#define RL_VIMOVENUMARG() (RL_ISSTATE (RL_STATE_VIMOTION) && RL_ISSTATE (RL_STATE_NUMERICARG))-
1154-
1155static int-
1156rl_domove_read_callback (_rl_vimotion_cxt *m)-
1157{-
1158 int c, save;-
1159-
1160 c = m->motion;-
1161-
1162 if (member (c, vi_motion))
((c) ? (char *...void *)0) : 0)Description
TRUEnever evaluated
FALSEnever evaluated
(c)Description
TRUEnever evaluated
FALSEnever evaluated
0
1163 {-
1164#if defined (READLINE_CALLBACKS)-
1165 /* If we just read a vi-mode motion command numeric argument, turn off-
1166 the `reading numeric arg' state */-
1167 if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG())
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
(rl_readline_s...& (0x0100000))Description
TRUEnever evaluated
FALSEnever evaluated
(rl_readline_s...& (0x0000400))Description
TRUEnever evaluated
FALSEnever evaluated
0
1168 RL_UNSETSTATE (RL_STATE_NUMERICARG);
never executed: (rl_readline_state &= ~(0x0000400));
0
1169#endif-
1170 /* Should do everything, including turning off RL_STATE_VIMOTION */-
1171 return (rl_domove_motion_callback (m));
never executed: return (rl_domove_motion_callback (m));
0
1172 }-
1173 else if (m->key == c && (m->key == 'd' || m->key == 'y' || m->key == 'c'))
m->key == cDescription
TRUEnever evaluated
FALSEnever evaluated
m->key == 'd'Description
TRUEnever evaluated
FALSEnever evaluated
m->key == 'y'Description
TRUEnever evaluated
FALSEnever evaluated
m->key == 'c'Description
TRUEnever evaluated
FALSEnever evaluated
0
1174 {-
1175 rl_mark = rl_end;-
1176 rl_beg_of_line (1, c);-
1177 _rl_vi_last_motion = c;-
1178 RL_UNSETSTATE (RL_STATE_VIMOTION);-
1179 return (vidomove_dispatch (m));
never executed: return (vidomove_dispatch (m));
0
1180 }-
1181#if defined (READLINE_CALLBACKS)-
1182 /* XXX - these need to handle rl_universal_argument bindings */-
1183 /* Reading vi motion char continuing numeric argument */-
1184 else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG())
(c) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(c) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
(rl_readline_s...& (0x0100000))Description
TRUEnever evaluated
FALSEnever evaluated
(rl_readline_s...& (0x0000400))Description
TRUEnever evaluated
FALSEnever evaluated
0
1185 {-
1186 return (_rl_vi_arg_dispatch (c));
never executed: return (_rl_vi_arg_dispatch (c));
0
1187 }-
1188 /* Readine vi motion char starting numeric argument */-
1189 else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_VIMOTION) && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0))
(c) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(c) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
(rl_readline_s...& (0x0100000))Description
TRUEnever evaluated
FALSEnever evaluated
((rl_readline_...000400)) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1190 {-
1191 RL_SETSTATE (RL_STATE_NUMERICARG);-
1192 return (_rl_vi_arg_dispatch (c));
never executed: return (_rl_vi_arg_dispatch (c));
0
1193 }-
1194#endif-
1195 else if (_rl_digit_p (c))
(c) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(c) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
0
1196 {-
1197 /* This code path taken when not in callback mode */-
1198 save = rl_numeric_arg;-
1199 rl_numeric_arg = _rl_digit_value (c);-
1200 rl_explicit_arg = 1;-
1201 RL_SETSTATE (RL_STATE_NUMERICARG);-
1202 rl_digit_loop1 ();-
1203 rl_numeric_arg *= save;-
1204 c = rl_vi_domove_getchar (m);-
1205 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1206 {-
1207 m->motion = 0;-
1208 return -1;
never executed: return -1;
0
1209 }-
1210 m->motion = c;-
1211 return (rl_domove_motion_callback (m));
never executed: return (rl_domove_motion_callback (m));
0
1212 }-
1213 else-
1214 {-
1215 RL_UNSETSTATE (RL_STATE_VIMOTION);-
1216 RL_UNSETSTATE (RL_STATE_NUMERICARG);-
1217 return (1);
never executed: return (1);
0
1218 }-
1219}-
1220-
1221static int-
1222rl_vi_domove_getchar (_rl_vimotion_cxt *m)-
1223{-
1224 int c;-
1225-
1226 RL_SETSTATE(RL_STATE_MOREINPUT);-
1227 c = rl_read_key ();-
1228 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
1229-
1230 return c;
never executed: return c;
0
1231}-
1232-
1233#if defined (READLINE_CALLBACKS)-
1234int-
1235_rl_vi_domove_callback (_rl_vimotion_cxt *m)-
1236{-
1237 int c, r;-
1238-
1239 m->motion = c = rl_vi_domove_getchar (m);-
1240 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1241 return 1; /* EOF */
never executed: return 1;
0
1242 r = rl_domove_read_callback (m);-
1243-
1244 return ((r == 0) ? r : 1); /* normalize return values */
never executed: return ((r == 0) ? r : 1);
0
1245}-
1246#endif-
1247-
1248/* This code path is taken when not in callback mode. */-
1249int-
1250rl_vi_domove (int x, int *ignore)-
1251{-
1252 int r;-
1253 _rl_vimotion_cxt *m;-
1254-
1255 m = _rl_vimvcxt;-
1256 *ignore = m->motion = rl_vi_domove_getchar (m);-
1257-
1258 if (m->motion < 0)
m->motion < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1259 {-
1260 m->motion = 0;-
1261 return -1;
never executed: return -1;
0
1262 }-
1263-
1264 return (rl_domove_read_callback (m));
never executed: return (rl_domove_read_callback (m));
0
1265}-
1266-
1267static int-
1268vi_delete_dispatch (_rl_vimotion_cxt *m)-
1269{-
1270 /* These are the motion commands that do not require adjusting the-
1271 mark. */-
1272 if (((strchr (" l|h^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) &&
( (__extension...tion ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... ( m->motion )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con... l|h^0bBFT`" )Description
TRUEnever evaluated
FALSEnever evaluated
( m->motion ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
(rl_point >= m->start)Description
TRUEnever evaluated
FALSEnever evaluated
0
1273 (rl_mark < rl_end))
(rl_mark < rl_end)Description
TRUEnever evaluated
FALSEnever evaluated
0
1274 rl_mark++;
never executed: rl_mark++;
0
1275-
1276 rl_kill_text (rl_point, rl_mark);-
1277 return (0);
never executed: return (0);
0
1278}-
1279-
1280int-
1281rl_vi_delete_to (int count, int key)-
1282{-
1283 int c, r;-
1284-
1285 _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key);-
1286 _rl_vimvcxt->start = rl_point;-
1287-
1288 rl_mark = rl_point;-
1289 if (_rl_uppercase_p (key))
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
1290 {-
1291 _rl_vimvcxt->motion = '$';-
1292 r = rl_domove_motion_callback (_rl_vimvcxt);-
1293 }
never executed: end of block
0
1294 else if (_rl_vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
_rl_vi_last_motion != 'd'Description
TRUEnever evaluated
FALSEnever evaluated
0
1295 {-
1296 _rl_vimvcxt->motion = _rl_vi_last_motion;-
1297 r = rl_domove_motion_callback (_rl_vimvcxt);-
1298 }
never executed: end of block
0
1299 else if (_rl_vi_redoing) /* handle redoing `dd' here */
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
0
1300 {-
1301 _rl_vimvcxt->motion = _rl_vi_last_motion;-
1302 rl_mark = rl_end;-
1303 rl_beg_of_line (1, key);-
1304 RL_UNSETSTATE (RL_STATE_VIMOTION);-
1305 r = vidomove_dispatch (_rl_vimvcxt);-
1306 }
never executed: end of block
0
1307#if defined (READLINE_CALLBACKS)-
1308 else if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1309 {-
1310 RL_SETSTATE (RL_STATE_VIMOTION);-
1311 return (0);
never executed: return (0);
0
1312 }-
1313#endif-
1314 else-
1315 r = rl_vi_domove (key, &c);
never executed: r = rl_vi_domove (key, &c);
0
1316-
1317 if (r < 0)
r < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1318 {-
1319 rl_ding ();-
1320 r = -1;-
1321 }
never executed: end of block
0
1322-
1323 _rl_mvcxt_dispose (_rl_vimvcxt);-
1324 _rl_vimvcxt = 0;-
1325-
1326 return r;
never executed: return r;
0
1327}-
1328-
1329static int-
1330vi_change_dispatch (_rl_vimotion_cxt *m)-
1331{-
1332 /* These are the motion commands that do not require adjusting the-
1333 mark. c[wW] are handled by special-case code in rl_vi_domove(),-
1334 and already leave the mark at the correct location. */-
1335 if (((strchr (" l|hwW^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) &&
( (__extension...tion ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... ( m->motion )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con...|hwW^0bBFT`" )Description
TRUEnever evaluated
FALSEnever evaluated
( m->motion ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
(rl_point >= m->start)Description
TRUEnever evaluated
FALSEnever evaluated
0
1336 (rl_mark < rl_end))
(rl_mark < rl_end)Description
TRUEnever evaluated
FALSEnever evaluated
0
1337 rl_mark++;
never executed: rl_mark++;
0
1338-
1339 /* The cursor never moves with c[wW]. */-
1340 if ((_rl_to_upper (m->motion) == 'W') && rl_point < m->start)
never executed: end of block
never executed: __res = toupper ( (unsigned char)m->motion );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)m->motion )];
sizeof ( (unsi...->motion ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...ar)m->motion )Description
TRUEnever evaluated
FALSEnever evaluated
(((((unsigned ...tion)) == 'W')Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...= (m->motion))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < m->startDescription
TRUEnever evaluated
FALSEnever evaluated
0
1341 rl_point = m->start;
never executed: rl_point = m->start;
0
1342-
1343 if (_rl_vi_redoing)
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
0
1344 {-
1345 if (vi_insert_buffer && *vi_insert_buffer)
vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
*vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
0
1346 rl_begin_undo_group ();
never executed: rl_begin_undo_group ();
0
1347 rl_delete_text (rl_point, rl_mark);-
1348 if (vi_insert_buffer && *vi_insert_buffer)
vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
*vi_insert_bufferDescription
TRUEnever evaluated
FALSEnever evaluated
0
1349 {-
1350 rl_insert_text (vi_insert_buffer);-
1351 rl_end_undo_group ();-
1352 }
never executed: end of block
0
1353 }
never executed: end of block
0
1354 else-
1355 {-
1356 rl_begin_undo_group (); /* to make the `u' command work */-
1357 rl_kill_text (rl_point, rl_mark);-
1358 /* `C' does not save the text inserted for undoing or redoing. */-
1359 if (_rl_uppercase_p (m->key) == 0)
(((unsigned ch...upper) )) == 0Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...) == (m->key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
1360 _rl_vi_doing_insert = 1;
never executed: _rl_vi_doing_insert = 1;
0
1361 /* XXX -- TODO -- use m->numericarg? */-
1362 rl_vi_start_inserting (m->key, rl_numeric_arg, rl_arg_sign);-
1363 }
never executed: end of block
0
1364-
1365 return (0);
never executed: return (0);
0
1366}-
1367-
1368int-
1369rl_vi_change_to (int count, int key)-
1370{-
1371 int c, r;-
1372-
1373 _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key);-
1374 _rl_vimvcxt->start = rl_point;-
1375-
1376 rl_mark = rl_point;-
1377 if (_rl_uppercase_p (key))
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
1378 {-
1379 _rl_vimvcxt->motion = '$';-
1380 r = rl_domove_motion_callback (_rl_vimvcxt);-
1381 }
never executed: end of block
0
1382 else if (_rl_vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
_rl_vi_last_motion != 'c'Description
TRUEnever evaluated
FALSEnever evaluated
0
1383 {-
1384 _rl_vimvcxt->motion = _rl_vi_last_motion;-
1385 r = rl_domove_motion_callback (_rl_vimvcxt);-
1386 }
never executed: end of block
0
1387 else if (_rl_vi_redoing) /* handle redoing `cc' here */
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
0
1388 {-
1389 _rl_vimvcxt->motion = _rl_vi_last_motion;-
1390 rl_mark = rl_end;-
1391 rl_beg_of_line (1, key);-
1392 RL_UNSETSTATE (RL_STATE_VIMOTION);-
1393 r = vidomove_dispatch (_rl_vimvcxt);-
1394 }
never executed: end of block
0
1395#if defined (READLINE_CALLBACKS)-
1396 else if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1397 {-
1398 RL_SETSTATE (RL_STATE_VIMOTION);-
1399 return (0);
never executed: return (0);
0
1400 }-
1401#endif-
1402 else-
1403 r = rl_vi_domove (key, &c);
never executed: r = rl_vi_domove (key, &c);
0
1404-
1405 if (r < 0)
r < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1406 {-
1407 rl_ding ();-
1408 r = -1; /* normalize return value */-
1409 }
never executed: end of block
0
1410-
1411 _rl_mvcxt_dispose (_rl_vimvcxt);-
1412 _rl_vimvcxt = 0;-
1413-
1414 return r;
never executed: return r;
0
1415}-
1416-
1417static int-
1418vi_yank_dispatch (_rl_vimotion_cxt *m)-
1419{-
1420 /* These are the motion commands that do not require adjusting the-
1421 mark. */-
1422 if (((strchr (" l|h^0%bBFT`", m->motion) == 0) && (rl_point >= m->start)) &&
( (__extension...tion ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... ( m->motion )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con...l|h^0%bBFT`" )Description
TRUEnever evaluated
FALSEnever evaluated
( m->motion ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
(rl_point >= m->start)Description
TRUEnever evaluated
FALSEnever evaluated
0
1423 (rl_mark < rl_end))
(rl_mark < rl_end)Description
TRUEnever evaluated
FALSEnever evaluated
0
1424 rl_mark++;
never executed: rl_mark++;
0
1425-
1426 rl_begin_undo_group ();-
1427 rl_kill_text (rl_point, rl_mark);-
1428 rl_end_undo_group ();-
1429 rl_do_undo ();-
1430 rl_point = m->start;-
1431-
1432 return (0);
never executed: return (0);
0
1433}-
1434-
1435int-
1436rl_vi_yank_to (int count, int key)-
1437{-
1438 int c, r;-
1439-
1440 _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key);-
1441 _rl_vimvcxt->start = rl_point;-
1442-
1443 rl_mark = rl_point;-
1444 if (_rl_uppercase_p (key))
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
0
1445 {-
1446 _rl_vimvcxt->motion = '$';-
1447 r = rl_domove_motion_callback (_rl_vimvcxt);-
1448 }
never executed: end of block
0
1449 else if (_rl_vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
_rl_vi_last_motion != 'y'Description
TRUEnever evaluated
FALSEnever evaluated
0
1450 {-
1451 _rl_vimvcxt->motion = _rl_vi_last_motion;-
1452 r = rl_domove_motion_callback (_rl_vimvcxt);-
1453 }
never executed: end of block
0
1454 else if (_rl_vi_redoing) /* handle redoing `yy' here */
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
0
1455 {-
1456 _rl_vimvcxt->motion = _rl_vi_last_motion;-
1457 rl_mark = rl_end;-
1458 rl_beg_of_line (1, key);-
1459 RL_UNSETSTATE (RL_STATE_VIMOTION);-
1460 r = vidomove_dispatch (_rl_vimvcxt);-
1461 }
never executed: end of block
0
1462#if defined (READLINE_CALLBACKS)-
1463 else if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1464 {-
1465 RL_SETSTATE (RL_STATE_VIMOTION);-
1466 return (0);
never executed: return (0);
0
1467 }-
1468#endif-
1469 else-
1470 r = rl_vi_domove (key, &c);
never executed: r = rl_vi_domove (key, &c);
0
1471-
1472 if (r < 0)
r < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1473 {-
1474 rl_ding ();-
1475 r = -1;-
1476 }
never executed: end of block
0
1477-
1478 _rl_mvcxt_dispose (_rl_vimvcxt);-
1479 _rl_vimvcxt = 0;-
1480-
1481 return r;
never executed: return r;
0
1482}-
1483-
1484static int-
1485vidomove_dispatch (_rl_vimotion_cxt *m)-
1486{-
1487 int r;-
1488-
1489 switch (m->op)-
1490 {-
1491 case VIM_DELETE:
never executed: case 0x01:
0
1492 r = vi_delete_dispatch (m);-
1493 break;
never executed: break;
0
1494 case VIM_CHANGE:
never executed: case 0x02:
0
1495 r = vi_change_dispatch (m);-
1496 break;
never executed: break;
0
1497 case VIM_YANK:
never executed: case 0x04:
0
1498 r = vi_yank_dispatch (m);-
1499 break;
never executed: break;
0
1500 default:
never executed: default:
0
1501 _rl_errmsg ("vidomove_dispatch: unknown operator %d", m->op);-
1502 r = 1;-
1503 break;
never executed: break;
0
1504 }-
1505-
1506 RL_UNSETSTATE (RL_STATE_VIMOTION);-
1507 return r;
never executed: return r;
0
1508}-
1509-
1510int-
1511rl_vi_rubout (int count, int key)-
1512{-
1513 int opoint;-
1514-
1515 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1516 return (rl_vi_delete (-count, key));
never executed: return (rl_vi_delete (-count, key));
0
1517-
1518 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1519 {-
1520 rl_ding ();-
1521 return 1;
never executed: return 1;
0
1522 }-
1523-
1524 opoint = rl_point;-
1525 if (count > 1 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
count > 1Description
TRUEnever evaluated
FALSEnever evaluated
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1526 rl_backward_char (count, key);
never executed: rl_backward_char (count, key);
0
1527 else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1528 rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
never executed: rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, 0x01);
0
1529 else-
1530 rl_point -= count;
never executed: rl_point -= count;
0
1531-
1532 if (rl_point < 0)
rl_point < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1533 rl_point = 0;
never executed: rl_point = 0;
0
1534-
1535 rl_kill_text (rl_point, opoint);-
1536 -
1537 return (0);
never executed: return (0);
0
1538}-
1539-
1540int-
1541rl_vi_delete (int count, int key)-
1542{-
1543 int end;-
1544-
1545 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1546 return (rl_vi_rubout (-count, key));
never executed: return (rl_vi_rubout (-count, key));
0
1547-
1548 if (rl_end == 0)
rl_end == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1549 {-
1550 rl_ding ();-
1551 return 1;
never executed: return 1;
0
1552 }-
1553-
1554 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1555 end = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO);
never executed: end = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, 0x01);
0
1556 else-
1557 end = rl_point + count;
never executed: end = rl_point + count;
0
1558-
1559 if (end >= rl_end)
end >= rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1560 end = rl_end;
never executed: end = rl_end;
0
1561-
1562 rl_kill_text (rl_point, end);-
1563 -
1564 if (rl_point > 0 && rl_point == rl_end)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_point == rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1565 rl_backward_char (1, key);
never executed: rl_backward_char (1, key);
0
1566-
1567 return (0);
never executed: return (0);
0
1568}-
1569-
1570/* This does what Posix specifies vi-mode C-w to do: using whitespace and-
1571 punctuation characters as the word boundaries. */-
1572-
1573#define vi_unix_word_boundary(c) (whitespace(c) || ispunct(c))-
1574-
1575int-
1576rl_vi_unix_word_rubout (int count, int key)-
1577{-
1578 int orig_point;-
1579-
1580 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1581 rl_ding ();
never executed: rl_ding ();
0
1582 else-
1583 {-
1584 orig_point = rl_point;-
1585 if (count <= 0)
count <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1586 count = 1;
never executed: count = 1;
0
1587-
1588 while (count--)
count--Description
TRUEnever evaluated
FALSEnever evaluated
0
1589 {-
1590 /* This isn't quite what ksh93 does but it seems to match what the-
1591 Posix description of sh specifies, with a few accommodations-
1592 for sequences of whitespace characters between words and at-
1593 the end of the line. */-
1594-
1595 /* Skip over whitespace at the end of the line as a special case */-
1596 if (rl_point > 0 && (rl_line_buffer[rl_point] == 0) &&
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
(rl_line_buffe...l_point] == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1597 whitespace (rl_line_buffer[rl_point - 1]))
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1598 while (--rl_point > 0 && whitespace (rl_line_buffer[rl_point]))
--rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1599 ;
never executed: ;
0
1600-
1601 /* If we're at the start of a word, move back to word boundary so we-
1602 move back to the `preceding' word */-
1603 if (rl_point > 0 && (vi_unix_word_boundary (rl_line_buffer[rl_point]) == 0) &&
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
(((((rl_line_b...punct) ) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISpunct)Description
TRUEnever evaluated
FALSEnever evaluated
0
1604 vi_unix_word_boundary (rl_line_buffer[rl_point - 1]))
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISpunct)Description
TRUEnever evaluated
FALSEnever evaluated
0
1605 rl_point--;
never executed: rl_point--;
0
1606-
1607 /* If we are at a word boundary (whitespace/punct), move backward-
1608 past a sequence of word boundary characters. If we are at the-
1609 end of a word (non-word boundary), move back to a word boundary */-
1610 if (rl_point > 0 && vi_unix_word_boundary (rl_line_buffer[rl_point]))
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISpunct)Description
TRUEnever evaluated
FALSEnever evaluated
0
1611 while (rl_point && vi_unix_word_boundary (rl_line_buffer[rl_point - 1]))
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISpunct)Description
TRUEnever evaluated
FALSEnever evaluated
0
1612 rl_point--;
never executed: rl_point--;
0
1613 else if (rl_point > 0 && vi_unix_word_boundary (rl_line_buffer[rl_point]) == 0)
rl_point > 0Description
TRUEnever evaluated
FALSEnever evaluated
((((rl_line_bu...Spunct) ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISpunct)Description
TRUEnever evaluated
FALSEnever evaluated
0
1614 while (rl_point && (vi_unix_word_boundary (rl_line_buffer[rl_point - 1]) == 0))
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
(((((rl_line_b...punct) ) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISpunct)Description
TRUEnever evaluated
FALSEnever evaluated
0
1615 rl_point--;
never executed: rl_point--;
0
1616 }
never executed: end of block
0
1617-
1618 rl_kill_text (orig_point, rl_point);-
1619 }
never executed: end of block
0
1620-
1621 return 0;
never executed: return 0;
0
1622}-
1623-
1624-
1625int-
1626rl_vi_back_to_indent (int count, int key)-
1627{-
1628 rl_beg_of_line (1, key);-
1629 while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...oint]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...int]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1630 rl_point++;
never executed: rl_point++;
0
1631 return (0);
never executed: return (0);
0
1632}-
1633-
1634int-
1635rl_vi_first_print (int count, int key)-
1636{-
1637 return (rl_vi_back_to_indent (1, key));
never executed: return (rl_vi_back_to_indent (1, key));
0
1638}-
1639-
1640static int _rl_cs_dir, _rl_cs_orig_dir;-
1641-
1642#if defined (READLINE_CALLBACKS)-
1643static int-
1644_rl_vi_callback_char_search (_rl_callback_generic_arg *data)-
1645{-
1646 int c;-
1647#if defined (HANDLE_MULTIBYTE)-
1648 c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);-
1649#else-
1650 RL_SETSTATE(RL_STATE_MOREINPUT);-
1651 c = rl_read_key ();-
1652 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
1653#endif-
1654-
1655 if (c <= 0)
c <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1656 {-
1657 RL_UNSETSTATE (RL_STATE_CHARSEARCH);-
1658 return -1;
never executed: return -1;
0
1659 }-
1660-
1661#if !defined (HANDLE_MULTIBYTE)-
1662 _rl_vi_last_search_char = c;-
1663#endif-
1664-
1665 _rl_callback_func = 0;-
1666 _rl_want_redisplay = 1;-
1667 RL_UNSETSTATE (RL_STATE_CHARSEARCH);-
1668-
1669#if defined (HANDLE_MULTIBYTE)-
1670 return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_mbchar, _rl_vi_last_search_mblen));
never executed: return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_mbchar, _rl_vi_last_search_mblen));
0
1671#else-
1672 return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_char));-
1673#endif -
1674}-
1675#endif-
1676-
1677int-
1678rl_vi_char_search (int count, int key)-
1679{-
1680 int c;-
1681#if defined (HANDLE_MULTIBYTE)-
1682 static char *target;-
1683 static int tlen;-
1684#else-
1685 static char target;-
1686#endif-
1687-
1688 if (key == ';' || key == ',')
key == ';'Description
TRUEnever evaluated
FALSEnever evaluated
key == ','Description
TRUEnever evaluated
FALSEnever evaluated
0
1689 {-
1690 if (_rl_cs_orig_dir == 0)
_rl_cs_orig_dir == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1691 return 1;
never executed: return 1;
0
1692#if defined (HANDLE_MULTIBYTE)-
1693 if (_rl_vi_last_search_mblen == 0)
_rl_vi_last_search_mblen == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1694 return 1;
never executed: return 1;
0
1695#else-
1696 if (_rl_vi_last_search_char == 0)-
1697 return 1;-
1698#endif-
1699 _rl_cs_dir = (key == ';') ? _rl_cs_orig_dir : -_rl_cs_orig_dir;
(key == ';')Description
TRUEnever evaluated
FALSEnever evaluated
0
1700 }
never executed: end of block
0
1701 else-
1702 {-
1703 switch (key)-
1704 {-
1705 case 't':
never executed: case 't':
0
1706 _rl_cs_orig_dir = _rl_cs_dir = FTO;-
1707 break;
never executed: break;
0
1708-
1709 case 'T':
never executed: case 'T':
0
1710 _rl_cs_orig_dir = _rl_cs_dir = BTO;-
1711 break;
never executed: break;
0
1712-
1713 case 'f':
never executed: case 'f':
0
1714 _rl_cs_orig_dir = _rl_cs_dir = FFIND;-
1715 break;
never executed: break;
0
1716-
1717 case 'F':
never executed: case 'F':
0
1718 _rl_cs_orig_dir = _rl_cs_dir = BFIND;-
1719 break;
never executed: break;
0
1720 }-
1721-
1722 if (_rl_vi_redoing)
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
0
1723 {-
1724 /* set target and tlen below */-
1725 }
never executed: end of block
0
1726#if defined (READLINE_CALLBACKS)-
1727 else if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1728 {-
1729 _rl_callback_data = _rl_callback_data_alloc (count);-
1730 _rl_callback_data->i1 = _rl_cs_dir;-
1731 _rl_callback_data->i2 = key;-
1732 _rl_callback_func = _rl_vi_callback_char_search;-
1733 RL_SETSTATE (RL_STATE_CHARSEARCH);-
1734 return (0);
never executed: return (0);
0
1735 }-
1736#endif-
1737 else-
1738 {-
1739#if defined (HANDLE_MULTIBYTE)-
1740 c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);-
1741 if (c <= 0)
c <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1742 return -1;
never executed: return -1;
0
1743 _rl_vi_last_search_mblen = c;-
1744#else-
1745 RL_SETSTATE(RL_STATE_MOREINPUT);-
1746 c = rl_read_key ();-
1747 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
1748 if (c < 0)-
1749 return -1;-
1750 _rl_vi_last_search_char = c;-
1751#endif-
1752 }
never executed: end of block
0
1753 }-
1754-
1755#if defined (HANDLE_MULTIBYTE)-
1756 target = _rl_vi_last_search_mbchar;-
1757 tlen = _rl_vi_last_search_mblen;-
1758#else-
1759 target = _rl_vi_last_search_char;-
1760#endif-
1761-
1762#if defined (HANDLE_MULTIBYTE)-
1763 return (_rl_char_search_internal (count, _rl_cs_dir, target, tlen));
never executed: return (_rl_char_search_internal (count, _rl_cs_dir, target, tlen));
0
1764#else-
1765 return (_rl_char_search_internal (count, _rl_cs_dir, target));-
1766#endif-
1767}-
1768-
1769/* Match brackets */-
1770int-
1771rl_vi_match (int ignore, int key)-
1772{-
1773 int count = 1, brack, pos, tmp, pre;-
1774-
1775 pos = rl_point;-
1776 if ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0)
(brack = rl_vi..._point])) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1777 {-
1778 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1779 {-
1780 while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0)
(brack = rl_vi..._point])) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1781 {-
1782 pre = rl_point;-
1783 rl_forward_char (1, key);-
1784 if (pre == rl_point)
pre == rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
1785 break;
never executed: break;
0
1786 }
never executed: end of block
0
1787 }
never executed: end of block
0
1788 else-
1789 while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0 &&
(brack = rl_vi..._point])) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1790 rl_point < rl_end - 1)
rl_point < rl_end - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1791 rl_forward_char (1, key);
never executed: rl_forward_char (1, key);
0
1792-
1793 if (brack <= 0)
brack <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1794 {-
1795 rl_point = pos;-
1796 rl_ding ();-
1797 return 1;
never executed: return 1;
0
1798 }-
1799 }
never executed: end of block
0
1800-
1801 pos = rl_point;-
1802-
1803 if (brack < 0)
brack < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1804 {-
1805 while (count)
countDescription
TRUEnever evaluated
FALSEnever evaluated
0
1806 {-
1807 tmp = pos;-
1808 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1809 pos--;
never executed: pos--;
0
1810 else-
1811 {-
1812 pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY);-
1813 if (tmp == pos)
tmp == posDescription
TRUEnever evaluated
FALSEnever evaluated
0
1814 pos--;
never executed: pos--;
0
1815 }
never executed: end of block
0
1816 if (pos >= 0)
pos >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1817 {-
1818 int b = rl_vi_bracktype (rl_line_buffer[pos]);-
1819 if (b == -brack)
b == -brackDescription
TRUEnever evaluated
FALSEnever evaluated
0
1820 count--;
never executed: count--;
0
1821 else if (b == brack)
b == brackDescription
TRUEnever evaluated
FALSEnever evaluated
0
1822 count++;
never executed: count++;
0
1823 }
never executed: end of block
0
1824 else-
1825 {-
1826 rl_ding ();-
1827 return 1;
never executed: return 1;
0
1828 }-
1829 }-
1830 }
never executed: end of block
0
1831 else-
1832 { /* brack > 0 */-
1833 while (count)
countDescription
TRUEnever evaluated
FALSEnever evaluated
0
1834 {-
1835 if (MB_CUR_MAX == 1 || rl_byte_oriented)
(__ctype_get_m...r_max ()) == 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_orientedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1836 pos++;
never executed: pos++;
0
1837 else-
1838 pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY);
never executed: pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, 0x00);
0
1839-
1840 if (pos < rl_end)
pos < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1841 {-
1842 int b = rl_vi_bracktype (rl_line_buffer[pos]);-
1843 if (b == -brack)
b == -brackDescription
TRUEnever evaluated
FALSEnever evaluated
0
1844 count--;
never executed: count--;
0
1845 else if (b == brack)
b == brackDescription
TRUEnever evaluated
FALSEnever evaluated
0
1846 count++;
never executed: count++;
0
1847 }
never executed: end of block
0
1848 else-
1849 {-
1850 rl_ding ();-
1851 return 1;
never executed: return 1;
0
1852 }-
1853 }-
1854 }
never executed: end of block
0
1855 rl_point = pos;-
1856 return (0);
never executed: return (0);
0
1857}-
1858-
1859int-
1860rl_vi_bracktype (int c)-
1861{-
1862 switch (c)-
1863 {-
1864 case '(': return 1;
never executed: return 1;
never executed: case '(':
0
1865 case ')': return -1;
never executed: return -1;
never executed: case ')':
0
1866 case '[': return 2;
never executed: return 2;
never executed: case '[':
0
1867 case ']': return -2;
never executed: return -2;
never executed: case ']':
0
1868 case '{': return 3;
never executed: return 3;
never executed: case '{':
0
1869 case '}': return -3;
never executed: return -3;
never executed: case '}':
0
1870 default: return 0;
never executed: return 0;
never executed: default:
0
1871 }-
1872}-
1873-
1874static int-
1875_rl_vi_change_char (int count, int c, char *mb)-
1876{-
1877 int p;-
1878-
1879 if (c == '\033' || c == CTRL ('C'))
c == '\033'Description
TRUEnever evaluated
FALSEnever evaluated
c == (('C') & 0x1f)Description
TRUEnever evaluated
FALSEnever evaluated
0
1880 return -1;
never executed: return -1;
0
1881-
1882 rl_begin_undo_group ();-
1883 while (count-- && rl_point < rl_end)
count--Description
TRUEnever evaluated
FALSEnever evaluated
rl_point < rl_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
1884 {-
1885 p = rl_point;-
1886 rl_vi_delete (1, c);-
1887 if (rl_point < p) /* Did we retreat at EOL? */
rl_point < pDescription
TRUEnever evaluated
FALSEnever evaluated
0
1888 _rl_vi_append_forward (c);
never executed: _rl_vi_append_forward (c);
0
1889#if defined (HANDLE_MULTIBYTE)-
1890 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1891 rl_insert_text (mb);
never executed: rl_insert_text (mb);
0
1892 else-
1893#endif-
1894 _rl_insert_char (1, c);
never executed: _rl_insert_char (1, c);
0
1895 }-
1896-
1897 /* The cursor shall be left on the last character changed. */-
1898 rl_backward_char (1, c);-
1899-
1900 rl_end_undo_group ();-
1901-
1902 return (0);
never executed: return (0);
0
1903}-
1904-
1905static int-
1906_rl_vi_callback_getchar (char *mb, int mlen)-
1907{-
1908 int c;-
1909-
1910 RL_SETSTATE(RL_STATE_MOREINPUT);-
1911 c = rl_read_key ();-
1912 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
1913-
1914 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1915 return -1;
never executed: return -1;
0
1916-
1917#if defined (HANDLE_MULTIBYTE)-
1918 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEnever evaluated
rl_byte_oriented == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1919 c = _rl_read_mbstring (c, mb, mlen);
never executed: c = _rl_read_mbstring (c, mb, mlen);
0
1920#endif-
1921-
1922 return c;
never executed: return c;
0
1923}-
1924-
1925#if defined (READLINE_CALLBACKS)-
1926static int-
1927_rl_vi_callback_change_char (_rl_callback_generic_arg *data)-
1928{-
1929 int c;-
1930 char mb[MB_LEN_MAX+1];-
1931-
1932 c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);-
1933#if defined (HANDLE_MULTIBYTE)-
1934 strncpy (_rl_vi_last_replacement, mb, MB_LEN_MAX);-
1935#else-
1936 _rl_vi_last_replacement[0] = c;-
1937#endif-
1938 _rl_vi_last_replacement[MB_LEN_MAX] = '\0'; /* XXX */-
1939-
1940 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1941 return -1;
never executed: return -1;
0
1942-
1943 _rl_callback_func = 0;-
1944 _rl_want_redisplay = 1;-
1945-
1946 return (_rl_vi_change_char (data->count, c, mb));
never executed: return (_rl_vi_change_char (data->count, c, mb));
0
1947}-
1948#endif-
1949-
1950int-
1951rl_vi_change_char (int count, int key)-
1952{-
1953 int c;-
1954 char mb[MB_LEN_MAX+1];-
1955-
1956 if (_rl_vi_redoing)
_rl_vi_redoingDescription
TRUEnever evaluated
FALSEnever evaluated
0
1957 {-
1958 strncpy (mb, _rl_vi_last_replacement, MB_LEN_MAX);-
1959 c = (unsigned char)_rl_vi_last_replacement[0]; /* XXX */-
1960 mb[MB_LEN_MAX] = '\0';-
1961 }
never executed: end of block
0
1962#if defined (READLINE_CALLBACKS)-
1963 else if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1964 {-
1965 _rl_callback_data = _rl_callback_data_alloc (count);-
1966 _rl_callback_func = _rl_vi_callback_change_char;-
1967 return (0);
never executed: return (0);
0
1968 }-
1969#endif-
1970 else-
1971 {-
1972 c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);-
1973#ifdef HANDLE_MULTIBYTE-
1974 strncpy (_rl_vi_last_replacement, mb, MB_LEN_MAX);-
1975#else-
1976 _rl_vi_last_replacement[0] = c;-
1977#endif-
1978 _rl_vi_last_replacement[MB_LEN_MAX] = '\0'; /* just in case */ -
1979 }
never executed: end of block
0
1980-
1981 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1982 return -1;
never executed: return -1;
0
1983-
1984 return (_rl_vi_change_char (count, c, mb));
never executed: return (_rl_vi_change_char (count, c, mb));
0
1985}-
1986-
1987int-
1988rl_vi_subst (int count, int key)-
1989{-
1990 /* If we are redoing, rl_vi_change_to will stuff the last motion char */-
1991 if (_rl_vi_redoing == 0)
_rl_vi_redoing == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1992 rl_stuff_char ((key == 'S') ? 'c' : 'l'); /* `S' == `cc', `s' == `cl' */
never executed: rl_stuff_char ((key == 'S') ? 'c' : 'l');
0
1993-
1994 return (rl_vi_change_to (count, 'c'));
never executed: return (rl_vi_change_to (count, 'c'));
0
1995}-
1996-
1997int-
1998rl_vi_overstrike (int count, int key)-
1999{-
2000 if (_rl_vi_doing_insert == 0)
_rl_vi_doing_insert == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2001 {-
2002 _rl_vi_doing_insert = 1;-
2003 rl_begin_undo_group ();-
2004 }
never executed: end of block
0
2005-
2006 if (count > 0)
count > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2007 {-
2008 _rl_overwrite_char (count, key);-
2009 vi_replace_count += count;-
2010 }
never executed: end of block
0
2011-
2012 return (0);
never executed: return (0);
0
2013}-
2014-
2015int-
2016rl_vi_overstrike_delete (int count, int key)-
2017{-
2018 int i, s;-
2019-
2020 for (i = 0; i < count; i++)
i < countDescription
TRUEnever evaluated
FALSEnever evaluated
0
2021 {-
2022 if (vi_replace_count == 0)
vi_replace_count == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2023 {-
2024 rl_ding ();-
2025 break;
never executed: break;
0
2026 }-
2027 s = rl_point;-
2028-
2029 if (rl_do_undo ())
rl_do_undo ()Description
TRUEnever evaluated
FALSEnever evaluated
0
2030 vi_replace_count--;
never executed: vi_replace_count--;
0
2031-
2032 if (rl_point == s)
rl_point == sDescription
TRUEnever evaluated
FALSEnever evaluated
0
2033 rl_backward_char (1, key);
never executed: rl_backward_char (1, key);
0
2034 }
never executed: end of block
0
2035-
2036 if (vi_replace_count == 0 && _rl_vi_doing_insert)
vi_replace_count == 0Description
TRUEnever evaluated
FALSEnever evaluated
_rl_vi_doing_insertDescription
TRUEnever evaluated
FALSEnever evaluated
0
2037 {-
2038 rl_end_undo_group ();-
2039 rl_do_undo ();-
2040 _rl_vi_doing_insert = 0;-
2041 }
never executed: end of block
0
2042 return (0);
never executed: return (0);
0
2043}-
2044-
2045int-
2046rl_vi_replace (int count, int key)-
2047{-
2048 int i;-
2049-
2050 vi_replace_count = 0;-
2051-
2052 if (vi_replace_map == 0)
vi_replace_map == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2053 {-
2054 vi_replace_map = rl_make_bare_keymap ();-
2055-
2056 for (i = 0; i < ' '; i++)
i < ' 'Description
TRUEnever evaluated
FALSEnever evaluated
0
2057 if (vi_insertion_keymap[i].type == ISFUNC)
vi_insertion_k...p[i].type == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2058 vi_replace_map[i].function = vi_insertion_keymap[i].function;
never executed: vi_replace_map[i].function = vi_insertion_keymap[i].function;
0
2059-
2060 for (i = ' '; i < KEYMAP_SIZE; i++)
i < 257Description
TRUEnever evaluated
FALSEnever evaluated
0
2061 vi_replace_map[i].function = rl_vi_overstrike;
never executed: vi_replace_map[i].function = rl_vi_overstrike;
0
2062-
2063 vi_replace_map[RUBOUT].function = rl_vi_overstrike_delete;-
2064-
2065 /* Make sure these are what we want. */-
2066 vi_replace_map[ESC].function = rl_vi_movement_mode;-
2067 vi_replace_map[RETURN].function = rl_newline;-
2068 vi_replace_map[NEWLINE].function = rl_newline;-
2069-
2070 /* If the normal vi insertion keymap has ^H bound to erase, do the-
2071 same here. Probably should remove the assignment to RUBOUT up-
2072 there, but I don't think it will make a difference in real life. */-
2073 if (vi_insertion_keymap[CTRL ('H')].type == ISFUNC &&
vi_insertion_k...1f)].type == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2074 vi_insertion_keymap[CTRL ('H')].function == rl_rubout)
vi_insertion_k...n == rl_ruboutDescription
TRUEnever evaluated
FALSEnever evaluated
0
2075 vi_replace_map[CTRL ('H')].function = rl_vi_overstrike_delete;
never executed: vi_replace_map[(('H') & 0x1f)].function = rl_vi_overstrike_delete;
0
2076-
2077 /* Make sure this is the value we need. */-
2078 vi_replace_map[ANYOTHERKEY].type = ISFUNC;-
2079 vi_replace_map[ANYOTHERKEY].function = (rl_command_func_t *)NULL;-
2080 }
never executed: end of block
0
2081-
2082 rl_vi_start_inserting (key, 1, rl_arg_sign);-
2083-
2084 _rl_vi_last_key_before_insert = key;-
2085 _rl_keymap = vi_replace_map;-
2086-
2087 return (0);
never executed: return (0);
0
2088}-
2089-
2090#if 0-
2091/* Try to complete the word we are standing on or the word that ends with-
2092 the previous character. A space matches everything. Word delimiters are-
2093 space and ;. */-
2094int-
2095rl_vi_possible_completions (void)-
2096{-
2097 int save_pos = rl_point;-
2098-
2099 if (rl_line_buffer[rl_point] != ' ' && rl_line_buffer[rl_point] != ';')-
2100 {-
2101 while (rl_point < rl_end && rl_line_buffer[rl_point] != ' ' &&-
2102 rl_line_buffer[rl_point] != ';')-
2103 rl_point++;-
2104 }-
2105 else if (rl_line_buffer[rl_point - 1] == ';')-
2106 {-
2107 rl_ding ();-
2108 return (0);-
2109 }-
2110-
2111 rl_possible_completions ();-
2112 rl_point = save_pos;-
2113-
2114 return (0);-
2115}-
2116#endif-
2117-
2118/* Functions to save and restore marks. */-
2119static int-
2120_rl_vi_set_mark (void)-
2121{-
2122 int ch;-
2123-
2124 RL_SETSTATE(RL_STATE_MOREINPUT);-
2125 ch = rl_read_key ();-
2126 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
2127-
2128 if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */
ch < 0Description
TRUEnever evaluated
FALSEnever evaluated
ch < 'a'Description
TRUEnever evaluated
FALSEnever evaluated
ch > 'z'Description
TRUEnever evaluated
FALSEnever evaluated
0
2129 {-
2130 rl_ding ();-
2131 return 1;
never executed: return 1;
0
2132 }-
2133 ch -= 'a';-
2134 vi_mark_chars[ch] = rl_point;-
2135 return 0;
never executed: return 0;
0
2136}-
2137-
2138#if defined (READLINE_CALLBACKS)-
2139static int-
2140_rl_vi_callback_set_mark (_rl_callback_generic_arg *data)-
2141{-
2142 _rl_callback_func = 0;-
2143 _rl_want_redisplay = 1;-
2144-
2145 return (_rl_vi_set_mark ());
never executed: return (_rl_vi_set_mark ());
0
2146}-
2147#endif-
2148-
2149int-
2150rl_vi_set_mark (int count, int key)-
2151{-
2152#if defined (READLINE_CALLBACKS)-
2153 if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
2154 {-
2155 _rl_callback_data = 0;-
2156 _rl_callback_func = _rl_vi_callback_set_mark;-
2157 return (0);
never executed: return (0);
0
2158 }-
2159#endif-
2160-
2161 return (_rl_vi_set_mark ());
never executed: return (_rl_vi_set_mark ());
0
2162}-
2163-
2164static int-
2165_rl_vi_goto_mark (void)-
2166{-
2167 int ch;-
2168-
2169 RL_SETSTATE(RL_STATE_MOREINPUT);-
2170 ch = rl_read_key ();-
2171 RL_UNSETSTATE(RL_STATE_MOREINPUT);-
2172-
2173 if (ch == '`')
ch == '`'Description
TRUEnever evaluated
FALSEnever evaluated
0
2174 {-
2175 rl_point = rl_mark;-
2176 return 0;
never executed: return 0;
0
2177 }-
2178 else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */
ch < 0Description
TRUEnever evaluated
FALSEnever evaluated
ch < 'a'Description
TRUEnever evaluated
FALSEnever evaluated
ch > 'z'Description
TRUEnever evaluated
FALSEnever evaluated
0
2179 {-
2180 rl_ding ();-
2181 return 1;
never executed: return 1;
0
2182 }-
2183-
2184 ch -= 'a';-
2185 if (vi_mark_chars[ch] == -1)
vi_mark_chars[ch] == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
2186 {-
2187 rl_ding ();-
2188 return 1;
never executed: return 1;
0
2189 }-
2190 rl_point = vi_mark_chars[ch];-
2191 return 0;
never executed: return 0;
0
2192}-
2193-
2194#if defined (READLINE_CALLBACKS)-
2195static int-
2196_rl_vi_callback_goto_mark (_rl_callback_generic_arg *data)-
2197{-
2198 _rl_callback_func = 0;-
2199 _rl_want_redisplay = 1;-
2200-
2201 return (_rl_vi_goto_mark ());
never executed: return (_rl_vi_goto_mark ());
0
2202}-
2203#endif-
2204-
2205int-
2206rl_vi_goto_mark (int count, int key)-
2207{-
2208#if defined (READLINE_CALLBACKS)-
2209 if (RL_ISSTATE (RL_STATE_CALLBACK))
(rl_readline_s...& (0x0080000))Description
TRUEnever evaluated
FALSEnever evaluated
0
2210 {-
2211 _rl_callback_data = 0;-
2212 _rl_callback_func = _rl_vi_callback_goto_mark;-
2213 return (0);
never executed: return (0);
0
2214 }-
2215#endif-
2216-
2217 return (_rl_vi_goto_mark ());
never executed: return (_rl_vi_goto_mark ());
0
2218}-
2219#endif /* VI_MODE */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2