annotate src/message.c @ 4444:ccecb03e5e8b v7.3.970

updated for version 7.3.970 Problem: Syntax highlighting can be slow. Solution: Include the NFA regexp engine. Add the 'regexpengine' option to select which one is used. (various authors, including Ken Takata, Andrei Aiordachioaie, Russ Cox, Xiaozhou Liua, Ian Young)
author Bram Moolenaar <bram@vim.org>
date Sun, 19 May 2013 19:40:29 +0200
parents 62eadd7de409
children 66e849c4558a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * message.c: functions for displaying messages on the command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #define MESSAGE_FILE /* don't include prototype for smsg() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
18 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
19 # include <math.h>
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
20 #endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
21
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
22 static int other_sourcing_name __ARGS((void));
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
23 static char_u *get_emsg_source __ARGS((void));
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
24 static char_u *get_emsg_lnum __ARGS((void));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 static void add_msg_hist __ARGS((char_u *s, int len, int attr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 static void hit_return_msg __ARGS((void));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 static void msg_home_replace_attr __ARGS((char_u *fname, int attr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 static char_u *screen_puts_mbyte __ARGS((char_u *s, int l, int attr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 static void msg_puts_attr_len __ARGS((char_u *str, int maxlen, int attr));
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
32 static void msg_puts_display __ARGS((char_u *str, int maxlen, int attr, int recurse));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
33 static void msg_scroll_up __ARGS((void));
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
34 static void inc_msg_scrolled __ARGS((void));
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
35 static void store_sb_text __ARGS((char_u **sb_str, char_u *s, int attr, int *sb_col, int finish));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
36 static void t_puts __ARGS((int *t_col, char_u *t_s, char_u *s, int attr));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
37 static void msg_puts_printf __ARGS((char_u *str, int maxlen));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
38 static int do_more_prompt __ARGS((int typed_char));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 static void msg_screen_putchar __ARGS((int c, int attr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 static int msg_check_screen __ARGS((void));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 static void redir_write __ARGS((char_u *s, int maxlen));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 #ifdef FEAT_CON_DIALOG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 static char_u *msg_show_console_dialog __ARGS((char_u *message, char_u *buttons, int dfltbutton));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 static int confirm_msg_used = FALSE; /* displaying confirm_msg */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 static char_u *confirm_msg = NULL; /* ":confirm" message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 static char_u *confirm_msg_tail; /* tail of confirm_msg */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 struct msg_hist
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 struct msg_hist *next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 char_u *msg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 static struct msg_hist *first_msg_hist = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 static struct msg_hist *last_msg_hist = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 static int msg_hist_len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
60 static FILE *verbose_fd = NULL;
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
61 static int verbose_did_open = FALSE;
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
62
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 * When writing messages to the screen, there are many different situations.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 * A number of variables is used to remember the current state:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 * msg_didany TRUE when messages were written since the last time the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 * user reacted to a prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 * Reset: After hitting a key for the hit-return prompt,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 * hitting <CR> for the command line or input().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 * Set: When any message is written to the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 * msg_didout TRUE when something was written to the current line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 * Reset: When advancing to the next line, when the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 * text can be overwritten.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 * Set: When any message is written to the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 * msg_nowait No extra delay for the last drawn message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 * Used in normal_cmd() before the mode message is drawn.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 * emsg_on_display There was an error message recently. Indicates that there
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 * should be a delay before redrawing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 * msg_scroll The next message should not overwrite the current one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 * msg_scrolled How many lines the screen has been scrolled (because of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 * messages). Used in update_screen() to scroll the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 * back. Incremented each time the screen scrolls a line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 * msg_scrolled_ign TRUE when msg_scrolled is non-zero and msg_puts_attr()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 * writes something without scrolling should not make
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 * need_wait_return to be set. This is a hack to make ":ts"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 * work without an extra prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 * lines_left Number of lines available for messages before the
3240
c97c3272d7a6 updated for version 7.3.389
Bram Moolenaar <bram@vim.org>
parents: 3072
diff changeset
88 * more-prompt is to be given. -1 when not set.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 * need_wait_return TRUE when the hit-return prompt is needed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 * Reset: After giving the hit-return prompt, when the user
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 * has answered some other prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 * Set: When the ruler or typeahead display is overwritten,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 * scrolling the screen for some message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 * keep_msg Message to be displayed after redrawing the screen, in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 * main_loop().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 * This is an allocated string or NULL when not used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 * msg(s) - displays the string 's' on the status line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 * When terminal not initialized (yet) mch_errmsg(..) is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 * return TRUE if wait_return not called
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 msg(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 return msg_attr_keep(s, 0, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
111 #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \
1924
75a69023117c updated for version 7.2-221
vimboss
parents: 1883
diff changeset
112 || defined(FEAT_GUI_GTK) || defined(PROTO)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
113 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
114 * Like msg() but keep it silent when 'verbosefile' is set.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
115 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
116 int
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
117 verb_msg(s)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
118 char_u *s;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
119 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
120 int n;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
121
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
122 verbose_enter();
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
123 n = msg_attr_keep(s, 0, FALSE);
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
124 verbose_leave();
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
125
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
126 return n;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
127 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
128 #endif
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
129
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 msg_attr(s, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 return msg_attr_keep(s, attr, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 msg_attr_keep(s, attr, keep)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 int keep; /* TRUE: set keep_msg if it doesn't scroll */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 static int entered = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 char_u *buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 if (attr == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 set_vim_var_string(VV_STATUSMSG, s, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 * It is possible that displaying a messages causes a problem (e.g.,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 * when redrawing the window), which causes another message, etc.. To
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 * break this loop, limit the recursiveness to 3 levels.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 if (entered >= 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 ++entered;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 /* Add message to history (unless it's a repeated kept message or a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 * truncated message) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 if (s != keep_msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 || (*s != '<'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 && last_msg_hist != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 && last_msg_hist->msg != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 && STRCMP(s, last_msg_hist->msg)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 add_msg_hist(s, -1, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 /* When displaying keep_msg, don't let msg_start() free it, caller must do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 * that. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 if (s == keep_msg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 keep_msg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 /* Truncate the message if needed. */
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
177 msg_start();
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
178 buf = msg_strtrunc(s, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 s = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 msg_outtrans_attr(s, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 retval = msg_end();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 if (keep && retval && vim_strsize(s) < (int)(Rows - cmdline_row - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 * Columns + sc_col)
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
188 set_keep_msg(s, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 --entered;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 * Truncate a string such that it can be printed without causing a scroll.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 * Returns an allocated string or NULL when no truncating is done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 char_u *
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
200 msg_strtrunc(s, force)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 char_u *s;
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
202 int force; /* always truncate */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 char_u *buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 int room;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 /* May truncate message to avoid a hit-return prompt */
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
209 if ((!msg_scroll && !need_wait_return && shortmess(SHM_TRUNCALL)
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
210 && !exmode_active && msg_silent == 0) || force)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 len = vim_strsize(s);
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
213 if (msg_scrolled != 0)
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
214 /* Use all the columns. */
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
215 room = (int)(Rows - msg_row) * Columns - 1;
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
216 else
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
217 /* Use up to 'showcmd' column. */
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
218 room = (int)(Rows - msg_row - 1) * Columns + sc_col - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 if (len > room && room > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 /* may have up to 18 bytes per cell (6 per char, up to two
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 * composing chars) */
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
225 len = (room + 2) * 18;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 else if (enc_dbcs == DBCS_JPNU)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 /* may have up to 2 bytes per cell for euc-jp */
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
228 len = (room + 2) * 2;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 #endif
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
231 len = room + 2;
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
232 buf = alloc(len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 if (buf != NULL)
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
234 trunc_string(s, buf, room, len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 * Truncate a string "s" to "buf" with cell width "room".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 * "s" and "buf" may be equal.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 void
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
245 trunc_string(s, buf, room, buflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 int room;
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
249 int buflen;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 int half;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 int e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 room -= 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 half = room / 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 /* First part: Start of the string. */
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
262 for (e = 0; len < half && e < buflen; ++e)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 if (s[e] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 /* text fits without truncating! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 buf[e] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 n = ptr2cells(s + e);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 if (len + n >= half)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 len += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 buf[e] = s[e];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
277 for (n = (*mb_ptr2len)(s + e); --n > 0; )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 {
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
279 if (++e == buflen)
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
280 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 buf[e] = s[e];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 /* Last part: End of the string. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 i = e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 if (enc_dbcs != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 /* For DBCS going backwards in a string is slow, but
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 * computing the cell width isn't too slow: go forward
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 * until the rest fits. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 n = vim_strsize(s + i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 while (len + n > room)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 n -= ptr2cells(s + i);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
298 i += (*mb_ptr2len)(s + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 else if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 /* For UTF-8 we can go backwards easily. */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
304 half = i = (int)STRLEN(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
307 do
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
308 half = half - (*mb_head_off)(s, s + half - 1) - 1;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
309 while (utf_iscomposing(utf_ptr2char(s + half)) && half > 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 n = ptr2cells(s + half);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 if (len + n > room)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 len += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 i = half;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 for (i = (int)STRLEN(s); len + (n = ptr2cells(s + i - 1)) <= room; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 len += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 /* Set the middle and copy the last part. */
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
325 if (e + 3 < buflen)
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
326 {
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
327 mch_memmove(buf + e, "...", (size_t)3);
3290
821c8be2e9d6 updated for version 7.3.413
Bram Moolenaar <bram@vim.org>
parents: 3284
diff changeset
328 len = (int)STRLEN(s + i) + 1;
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
329 if (len >= buflen - e - 3)
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
330 len = buflen - e - 3 - 1;
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
331 mch_memmove(buf + e + 3, s + i, len);
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
332 buf[e + 3 + len - 1] = NUL;
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
333 }
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
334 else
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
335 {
3284
5cf2a671d8eb updated for version 7.3.410
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
336 buf[e - 1] = NUL; /* make sure it is truncated */
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
337 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341 * Automatic prototype generation does not understand this function.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 * Note: Caller of smgs() and smsg_attr() must check the resulting string is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 * shorter than IOSIZE!!!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 #ifndef PROTO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 # ifndef HAVE_STDARG_H
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 #ifdef __BORLANDC__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 _RTLENTRYF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 smsg __ARGS((char_u *, long, long, long,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 long, long, long, long, long, long, long));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 #ifdef __BORLANDC__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 _RTLENTRYF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 smsg_attr __ARGS((int, char_u *, long, long, long,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 long, long, long, long, long, long, long));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
361 int vim_snprintf __ARGS((char *, size_t, char *, long, long, long,
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
362 long, long, long, long, long, long, long));
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
363
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
364 /*
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
365 * smsg(str, arg, ...) is like using sprintf(buf, str, arg, ...) and then
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
366 * calling msg(buf).
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
367 * The buffer used is IObuff, the message is truncated at IOSIZE.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
368 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
369
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 /* VARARGS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 #ifdef __BORLANDC__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 _RTLENTRYF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 smsg(s, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 long a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 return smsg_attr(0, s, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 /* VARARGS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 #ifdef __BORLANDC__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 _RTLENTRYF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 smsg_attr(attr, s, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 long a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 {
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
392 vim_snprintf((char *)IObuff, IOSIZE, (char *)s,
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
393 a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 return msg_attr(IObuff, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 # else /* HAVE_STDARG_H */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
399 int vim_snprintf(char *str, size_t str_m, char *fmt, ...);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
400
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 #ifdef __BORLANDC__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 _RTLENTRYF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 smsg(char_u *s, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 va_list arglist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 va_start(arglist, s);
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
410 vim_vsnprintf((char *)IObuff, IOSIZE, (char *)s, arglist, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 va_end(arglist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 return msg(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 #ifdef __BORLANDC__
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 _RTLENTRYF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 smsg_attr(int attr, char_u *s, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 va_list arglist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 va_start(arglist, s);
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
424 vim_vsnprintf((char *)IObuff, IOSIZE, (char *)s, arglist, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 va_end(arglist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 return msg_attr(IObuff, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 # endif /* HAVE_STDARG_H */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 * Remember the last sourcing name/lnum used in an error message, so that it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 * isn't printed each time when it didn't change.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 static int last_sourcing_lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 static char_u *last_sourcing_name = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 * Reset the last used sourcing name/lnum. Makes sure it is displayed again
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 * for the next error message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 */
360
22c8aff09ad3 updated for version 7.0094
vimboss
parents: 355
diff changeset
443 void
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 reset_last_sourcing()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 vim_free(last_sourcing_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 last_sourcing_name = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 last_sourcing_lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 /*
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
452 * Return TRUE if "sourcing_name" differs from "last_sourcing_name".
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
453 */
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
454 static int
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
455 other_sourcing_name()
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
456 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
457 if (sourcing_name != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
458 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
459 if (last_sourcing_name != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
460 return STRCMP(sourcing_name, last_sourcing_name) != 0;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
461 return TRUE;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
462 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
463 return FALSE;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
464 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
465
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
466 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 * Get the message about the source, as used for an error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 * Returns an allocated string with room for one more character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 * Returns NULL when no message is to be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 static char_u *
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
472 get_emsg_source()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 char_u *Buf, *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
476 if (sourcing_name != NULL && other_sourcing_name())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 p = (char_u *)_("Error detected while processing %s:");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 Buf = alloc((unsigned)(STRLEN(sourcing_name) + STRLEN(p)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 if (Buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 sprintf((char *)Buf, (char *)p, sourcing_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 return Buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 * Get the message about the source lnum, as used for an error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 * Returns an allocated string with room for one more character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 * Returns NULL when no message is to be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 static char_u *
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
493 get_emsg_lnum()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 char_u *Buf, *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 /* lnum is 0 when executing a command from the command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 * argument, we don't want a line number then */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 if (sourcing_name != NULL
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
500 && (other_sourcing_name() || sourcing_lnum != last_sourcing_lnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 && sourcing_lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 p = (char_u *)_("line %4ld:");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 Buf = alloc((unsigned)(STRLEN(p) + 20));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 if (Buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 sprintf((char *)Buf, (char *)p, (long)sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 return Buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 /*
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
513 * Display name and line number for the source of an error.
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
514 * Remember the file name and line number, so that for the next error the info
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
515 * is only displayed if it changed.
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
516 */
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
517 void
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
518 msg_source(attr)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
519 int attr;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
520 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
521 char_u *p;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
522
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
523 ++no_wait_return;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
524 p = get_emsg_source();
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
525 if (p != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
526 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
527 msg_attr(p, attr);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
528 vim_free(p);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
529 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
530 p = get_emsg_lnum();
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
531 if (p != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
532 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
533 msg_attr(p, hl_attr(HLF_N));
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
534 vim_free(p);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
535 last_sourcing_lnum = sourcing_lnum; /* only once for each line */
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
536 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
537
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
538 /* remember the last sourcing name printed, also when it's empty */
36
125e80798a85 updated for version 7.0021
vimboss
parents: 28
diff changeset
539 if (sourcing_name == NULL || other_sourcing_name())
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
540 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
541 vim_free(last_sourcing_name);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
542 if (sourcing_name == NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
543 last_sourcing_name = NULL;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
544 else
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
545 last_sourcing_name = vim_strsave(sourcing_name);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
546 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
547 --no_wait_return;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
548 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
549
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
550 /*
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
551 * Return TRUE if not giving error messages right now:
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
552 * If "emsg_off" is set: no error messages at the moment.
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
553 * If "msg" is in 'debug': do error message but without side effects.
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
554 * If "emsg_skip" is set: never do error messages.
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
555 */
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
556 int
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
557 emsg_not_now()
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
558 {
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
559 if ((emsg_off > 0 && vim_strchr(p_debug, 'm') == NULL
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
560 && vim_strchr(p_debug, 't') == NULL)
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
561 #ifdef FEAT_EVAL
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
562 || emsg_skip > 0
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
563 #endif
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
564 )
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
565 return TRUE;
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
566 return FALSE;
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
567 }
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
568
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
569 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 * emsg() - display an error message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 * Rings the bell, if appropriate, and calls message() to do the real work
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 * When terminal not initialized (yet) mch_errmsg(..) is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 * return TRUE if wait_return not called
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 emsg(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 int ignore = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 int severe;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587
2679
763272b18e4f updated for version 7.3.098
Bram Moolenaar <bram@vim.org>
parents: 2610
diff changeset
588 /* Skip this if not giving error messages at the moment. */
763272b18e4f updated for version 7.3.098
Bram Moolenaar <bram@vim.org>
parents: 2610
diff changeset
589 if (emsg_not_now())
763272b18e4f updated for version 7.3.098
Bram Moolenaar <bram@vim.org>
parents: 2610
diff changeset
590 return TRUE;
763272b18e4f updated for version 7.3.098
Bram Moolenaar <bram@vim.org>
parents: 2610
diff changeset
591
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 called_emsg = TRUE;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
593 ex_exitval = 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 /*
105
8800a9c402b2 updated for version 7.0040
vimboss
parents: 41
diff changeset
596 * If "emsg_severe" is TRUE: When an error exception is to be thrown,
8800a9c402b2 updated for version 7.0040
vimboss
parents: 41
diff changeset
597 * prefer this message over previous messages for the same command.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 severe = emsg_severe;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 emsg_severe = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 835
diff changeset
604 if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 * Cause a throw of an error exception if appropriate. Don't display
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 * the error message in this case. (If no matching catch clause will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 * be found, the message will be displayed later on.) "ignore" is set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 * when the message should be ignored completely (used for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 * interrupt message).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 if (cause_errthrow(s, severe, &ignore) == TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 if (!ignore)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 did_emsg = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 /* set "v:errmsg", also when using ":silent! cmd" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 set_vim_var_string(VV_ERRMSG, s, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 /*
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
626 * When using ":silent! cmd" ignore error messages.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 * But do write it to the redirection file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 if (emsg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 msg_start();
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
632 p = get_emsg_source();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 STRCAT(p, "\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 redir_write(p, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 }
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
639 p = get_emsg_lnum();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 STRCAT(p, "\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 redir_write(p, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 redir_write(s, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 /* Reset msg_silent, an error causes messages to be switched back on. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 msg_silent = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 cmd_silent = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 if (global_busy) /* break :global command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 ++global_busy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 if (p_eb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 beep_flush(); /* also includes flush_buffers() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 flush_buffers(FALSE); /* flush internal buffers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 did_emsg = TRUE; /* flag for DoOneCmd() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 emsg_on_display = TRUE; /* remember there is an error message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 ++msg_scroll; /* don't overwrite a previous message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 attr = hl_attr(HLF_E); /* set highlight mode for error messages */
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
667 if (msg_scrolled != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 need_wait_return = TRUE; /* needed in case emsg() is called after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 * wait_return has reset need_wait_return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 * and a redraw is expected because
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 * msg_scrolled is non-zero */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 * Display name and line number for the source of the error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 */
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
676 msg_source(attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 * Display the error message itself.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 */
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
681 msg_nowait = FALSE; /* wait for this msg */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 return msg_attr(s, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 * Print an error message with one "%s" and one string argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 emsg2(s, a1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 char_u *s, *a1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 return emsg3(s, a1, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694
330
f76b0d38b6bd updated for version 7.0086
vimboss
parents: 291
diff changeset
695 /* emsg3() and emsgn() are in misc2.c to avoid warnings for the prototypes. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
697 void
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
698 emsg_invreg(name)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
699 int name;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
700 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
701 EMSG2(_("E354: Invalid register name: '%s'"), transchar(name));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
702 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
703
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 * Like msg(), but truncate to a single line if p_shm contains 't', or when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 * "force" is TRUE. This truncates in another way as for normal messages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 * Careful: The string may be changed by msg_may_trunc()!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 * Returns a pointer to the printed message, if wait_return() not called.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 msg_trunc_attr(s, force, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 int force;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 /* Add message to history before truncating */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 add_msg_hist(s, -1, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 s = msg_may_trunc(force, s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 msg_hist_off = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 n = msg_attr(s, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 msg_hist_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 if (n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 * Check if message "s" should be truncated at the start (for filenames).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 * Return a pointer to where the truncated message starts.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 * Note: May change the message by replacing a character with '<'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 msg_may_trunc(force, s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 int force;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 int room;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 room = (int)(Rows - cmdline_row - 1) * Columns + sc_col - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 if ((force || (shortmess(SHM_TRUNC) && !exmode_active))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 && (n = (int)STRLEN(s) - room) > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 int size = vim_strsize(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753
615
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
754 /* There may be room anyway when there are multibyte chars. */
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
755 if (size <= room)
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
756 return s;
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
757
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 for (n = 0; size >= room; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 size -= (*mb_ptr2cells)(s + n);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
761 n += (*mb_ptr2len)(s + n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 --n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 s += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 *s = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 add_msg_hist(s, len, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775 int len; /* -1 for undetermined length */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 struct msg_hist *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 if (msg_hist_off || msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 /* Don't let the message history get too big */
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 615
diff changeset
784 while (msg_hist_len > MAX_MSG_HIST_LEN)
355
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
785 (void)delete_first_msg();
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
786
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 /* allocate an entry and add the message at the end of the history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 p = (struct msg_hist *)alloc((int)sizeof(struct msg_hist));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791 if (len < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792 len = (int)STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 /* remove leading and trailing newlines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 while (len > 0 && *s == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 --len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 while (len > 0 && s[len - 1] == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
800 --len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801 p->msg = vim_strnsave(s, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 p->next = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 p->attr = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 if (last_msg_hist != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 last_msg_hist->next = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 last_msg_hist = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 if (first_msg_hist == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 first_msg_hist = last_msg_hist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 ++msg_hist_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 /*
355
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
814 * Delete the first (oldest) message from the history.
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
815 * Returns FAIL if there are no messages.
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
816 */
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
817 int
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
818 delete_first_msg()
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
819 {
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
820 struct msg_hist *p;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
821
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
822 if (msg_hist_len <= 0)
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
823 return FAIL;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
824 p = first_msg_hist;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
825 first_msg_hist = p->next;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
826 if (first_msg_hist == NULL)
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2280
diff changeset
827 last_msg_hist = NULL; /* history is empty */
355
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
828 vim_free(p->msg);
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
829 vim_free(p);
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
830 --msg_hist_len;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
831 return OK;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
832 }
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
833
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
834 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 * ":messages" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
836 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 ex_messages(eap)
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
839 exarg_T *eap UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 struct msg_hist *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 msg_hist_off = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 s = mch_getenv((char_u *)"LANG");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 if (s != NULL && *s != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 msg_attr((char_u *)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 hl_attr(HLF_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
851
1391
c17ba3fb433e updated for version 7.1-106
vimboss
parents: 1381
diff changeset
852 for (p = first_msg_hist; p != NULL && !got_int; p = p->next)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 if (p->msg != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 msg_attr(p->msg, p->attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856 msg_hist_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
859 #if defined(FEAT_CON_DIALOG) || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 * Call this after prompting the user. This will avoid a hit-return message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 * and a delay.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 */
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
864 void
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 msg_end_prompt()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 emsg_on_display = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 msg_clr_eos();
3240
c97c3272d7a6 updated for version 7.3.389
Bram Moolenaar <bram@vim.org>
parents: 3072
diff changeset
872 lines_left = -1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 * wait for the user to hit a key (normally a return)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 * if 'redraw' is TRUE, clear and redraw the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 * if 'redraw' is FALSE, just redraw the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 * if 'redraw' is -1, don't redraw at all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 wait_return(redraw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 int redraw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 int oldState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 int tmpState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 int had_got_int;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 if (redraw == TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 must_redraw = CLEAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 /* If using ":silent cmd", don't wait for a return. Also don't set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 * need_wait_return to do it later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 if (msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898
2723
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
899 /*
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
900 * When inside vgetc(), we can't wait for a typed character at all.
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
901 * With the global command (and some others) we only need one return at
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
902 * the end. Adjust cmdline_row to avoid the next message overwriting the
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
903 * last one.
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
904 */
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 810
diff changeset
905 if (vgetc_busy > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 return;
2723
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
907 need_wait_return = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 if (no_wait_return)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 if (!exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 redir_off = TRUE; /* don't redirect this message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 oldState = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 if (quit_more)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 c = CAR; /* just pretend CR was hit */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 quit_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 else if (exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 MSG_PUTS(" "); /* make sure the cursor is on the right line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 c = CAR; /* no need for a return in ex mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 /* Make sure the hit-return prompt is on screen when 'guioptions' was
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 * just changed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 screenalloc(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 State = HITRETURN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 dont_scroll = TRUE; /* disallow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 #endif
4325
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
942 /* Avoid the sequence that the user types ":" at the hit-return prompt
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
943 * to start an Ex command, but the file-changed dialog gets in the
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
944 * way. */
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
945 if (need_check_timestamps)
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
946 check_timestamps(FALSE);
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
947
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 hit_return_msg();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 /* Remember "got_int", if it is set vgetc() probably returns a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 * CTRL-C, but we need to loop then. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 had_got_int = got_int;
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
955
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
956 /* Don't do mappings here, we put the character back in the
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
957 * typeahead buffer. */
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
958 ++no_mapping;
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
959 ++allow_keys;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 c = safe_vgetc();
216
da182deebec7 updated for version 7.0061
vimboss
parents: 180
diff changeset
961 if (had_got_int && !global_busy)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 got_int = FALSE;
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
963 --no_mapping;
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
964 --allow_keys;
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
965
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 /* Strange way to allow copying (yanking) a modeless selection at
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 * the hit-enter prompt. Use CTRL-Y, because the same is used in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 * Cmdline-mode and it's harmless when there is no selection. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 if (c == Ctrl_Y && clip_star.state == SELECT_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 clip_copy_modeless_selection(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 c = K_IGNORE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 #endif
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
976
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
977 /*
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
978 * Allow scrolling back in the messages.
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
979 * Also accept scroll-down commands when messages fill the screen,
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
980 * to avoid that typing one 'j' too many makes the messages
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
981 * disappear.
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
982 */
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
983 if (p_more && !p_cp)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
984 {
4234
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
985 if (c == 'b' || c == 'k' || c == 'u' || c == 'g'
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
986 || c == K_UP || c == K_PAGEUP)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
987 {
4234
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
988 if (msg_scrolled > Rows)
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
989 /* scroll back to show older messages */
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
990 do_more_prompt(c);
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
991 else
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
992 {
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
993 msg_didout = FALSE;
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
994 c = K_IGNORE;
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
995 msg_col =
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
996 #ifdef FEAT_RIGHTLEFT
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
997 cmdmsg_rl ? Columns - 1 :
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
998 #endif
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
999 0;
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1000 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1001 if (quit_more)
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1002 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1003 c = CAR; /* just pretend CR was hit */
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1004 quit_more = FALSE;
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1005 got_int = FALSE;
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1006 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1007 else
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1008 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1009 c = K_IGNORE;
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1010 hit_return_msg();
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1011 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1012 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1013 else if (msg_scrolled > Rows - 2
4234
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1014 && (c == 'j' || c == 'd' || c == 'f'
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1015 || c == K_DOWN || c == K_PAGEDOWN))
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1016 c = K_IGNORE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1017 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 } while ((had_got_int && c == Ctrl_C)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 || c == K_IGNORE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 || c == K_LEFTDRAG || c == K_LEFTRELEASE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 || c == K_MIDDLEDRAG || c == K_MIDDLERELEASE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 || c == K_RIGHTDRAG || c == K_RIGHTRELEASE
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1027 || c == K_MOUSELEFT || c == K_MOUSERIGHT
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 || c == K_MOUSEDOWN || c == K_MOUSEUP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 || (!mouse_has(MOUSE_RETURN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 && mouse_row < msg_row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 && (c == K_LEFTMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 || c == K_MIDDLEMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 || c == K_RIGHTMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 || c == K_X1MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 || c == K_X2MOUSE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 * Avoid that the mouse-up event causes visual mode to start.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 if (c == K_LEFTMOUSE || c == K_MIDDLEMOUSE || c == K_RIGHTMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 || c == K_X1MOUSE || c == K_X2MOUSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 (void)jump_to_mouse(MOUSE_SETPOS, NULL, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 {
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1050 /* Put the character back in the typeahead buffer. Don't use the
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1051 * stuff buffer, because lmaps wouldn't work. */
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 840
diff changeset
1052 ins_char_typebuf(c);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 do_redraw = TRUE; /* need a redraw even though there is
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1054 typeahead */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 redir_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 * If the user hits ':', '?' or '/' we get a command line from the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 * line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 if (c == ':' || c == '?' || c == '/')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 if (!exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 skip_redraw = TRUE; /* skip redraw once */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 do_redraw = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 * If the window size changed set_shellsize() will redraw the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 * Otherwise the screen is only redrawn if 'redraw' is set and no ':'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 * typed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 tmpState = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 State = oldState; /* restore State before set_shellsize */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 #if defined(UNIX) || defined(VMS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 * When switching screens, we need to output an extra newline on exit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 if (swapping_screen() && !termcap_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 newline_on_exit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 did_wait_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 emsg_on_display = FALSE; /* can delete error message now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 lines_left = -1; /* reset lines_left at next msg_start() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 reset_last_sourcing();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 if (keep_msg != NULL && vim_strsize(keep_msg) >=
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 (Rows - cmdline_row - 1) * Columns + sc_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 vim_free(keep_msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 keep_msg = NULL; /* don't redisplay message, it's too long */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 if (tmpState == SETWSIZE) /* got resize event while in vgetc() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 starttermcap(); /* start termcap before redrawing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 shell_resized();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 else if (!skip_redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 && (redraw == TRUE || (msg_scrolled != 0 && redraw != -1)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 starttermcap(); /* start termcap before redrawing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 * Write the hit-return prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 hit_return_msg()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1122 int save_p_more = p_more;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1123
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1124 p_more = FALSE; /* don't want see this message when scrolling back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1125 if (msg_didout) /* start on a new line */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 MSG_PUTS(_("Interrupt: "));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1130 MSG_PUTS_ATTR(_("Press ENTER or type command to continue"), hl_attr(HLF_R));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 if (!msg_use_printf())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 msg_clr_eos();
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1133 p_more = save_p_more;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 * Set "keep_msg" to "s". Free the old value and check for NULL pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 void
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1140 set_keep_msg(s, attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141 char_u *s;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1142 int attr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 vim_free(keep_msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 if (s != NULL && msg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 keep_msg = vim_strsave(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 keep_msg = NULL;
127
616289ecb7c8 updated for version 7.0044
vimboss
parents: 105
diff changeset
1149 keep_msg_more = FALSE;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1150 keep_msg_attr = attr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1153 #if defined(FEAT_TERMRESPONSE) || defined(PROTO)
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1154 /*
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1155 * If there currently is a message being displayed, set "keep_msg" to it, so
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1156 * that it will be displayed again after redraw.
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1157 */
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1158 void
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1159 set_keep_msg_from_hist()
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1160 {
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1161 if (keep_msg == NULL && last_msg_hist != NULL && msg_scrolled == 0
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1162 && (State & NORMAL))
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1163 set_keep_msg(last_msg_hist->msg, last_msg_hist->attr);
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1164 }
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1165 #endif
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1166
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 * Prepare for outputting characters in the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 msg_start()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 int did_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174
2491
904cd1c26a1e After entering a crypt key would need to hit return to continue.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
1175 if (!msg_silent)
904cd1c26a1e After entering a crypt key would need to hit return to continue.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
1176 {
904cd1c26a1e After entering a crypt key would need to hit return to continue.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
1177 vim_free(keep_msg);
904cd1c26a1e After entering a crypt key would need to hit return to continue.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
1178 keep_msg = NULL; /* don't display old message now */
904cd1c26a1e After entering a crypt key would need to hit return to continue.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
1179 }
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1180
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1181 #ifdef FEAT_EVAL
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1182 if (need_clr_eos)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1183 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1184 /* Halfway an ":echo" command and getting an (error) message: clear
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1185 * any text from the command. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1186 need_clr_eos = FALSE;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1187 msg_clr_eos();
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1188 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1189 #endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1190
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 if (!msg_scroll && full_screen) /* overwrite last message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 msg_row = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 msg_col =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 cmdmsg_rl ? Columns - 1 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 else if (msg_didout) /* start message on next line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 did_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 if (exmode_active != EXMODE_NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 if (!msg_didany || lines_left < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 msg_starthere();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 if (msg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 msg_didout = FALSE; /* no output on current line yet */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 cursor_off();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 /* when redirecting, may need to start a new line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 if (!did_return)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 redir_write((char_u *)"\n", -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 * Note that the current msg position is where messages start.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 msg_starthere()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 lines_left = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 msg_didany = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 msg_putchar(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 msg_putchar_attr(c, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 msg_putchar_attr(c, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 char_u buf[MB_MAXBYTES + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 char_u buf[4];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 if (IS_SPECIAL(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 buf[0] = K_SPECIAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 buf[1] = K_SECOND(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 buf[2] = K_THIRD(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 buf[3] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 buf[(*mb_char2bytes)(c, buf)] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 buf[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 buf[1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 msg_puts_attr(buf, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 msg_outnum(n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 char_u buf[20];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 sprintf((char *)buf, "%ld", n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 msg_puts(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 msg_home_replace(fname)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 msg_home_replace_attr(fname, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 #if defined(FEAT_FIND_ID) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286 msg_home_replace_hl(fname)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 msg_home_replace_attr(fname, hl_attr(HLF_D));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 msg_home_replace_attr(fname, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 name = home_replace_save(NULL, fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 if (name != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 msg_outtrans_attr(name, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 * Output 'len' characters in 'str' (including NULs) with translation
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 * if 'len' is -1, output upto a NUL character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 * Use attributes 'attr'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 * Return the number of characters it takes on the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 msg_outtrans(str)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 return msg_outtrans_attr(str, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 msg_outtrans_attr(str, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 return msg_outtrans_len_attr(str, (int)STRLEN(str), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 msg_outtrans_len(str, len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 return msg_outtrans_len_attr(str, len, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 * Output one character at "p". Return pointer to the next character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 * Handles multi-byte characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 msg_outtrans_one(p, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1347 if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 msg_outtrans_len_attr(p, l, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 return p + l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 msg_puts_attr(transchar_byte(*p), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 return p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 msg_outtrans_len_attr(msgstr, len, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 char_u *msgstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 int retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 char_u *str = msgstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 char_u *plain_start = msgstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 int mb_l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 /* if MSG_HIST flag set, add message to history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 if (attr & MSG_HIST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 add_msg_hist(str, len, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 attr &= ~MSG_HIST;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 /* If the string starts with a composing character first draw a space on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 * which the composing char can be drawn. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 if (enc_utf8 && utf_iscomposing(utf_ptr2char(msgstr)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 msg_puts_attr((char_u *)" ", attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 * Go over the string. Special characters are translated and printed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 * Normal characters are printed several at a time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 while (--len >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 /* Don't include composing chars after the end. */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1395 mb_l = utfc_ptr2len_len(str, len + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 else if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1397 mb_l = (*mb_ptr2len)(str);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 if (has_mbyte && mb_l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 c = (*mb_ptr2char)(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 if (vim_isprintc(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 /* printable multi-byte char: count the cells. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 retval += (*mb_ptr2cells)(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 /* unprintable multi-byte char: print the printable chars so
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 * far and the translation of the unprintable char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 if (str > plain_start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 msg_puts_attr_len(plain_start, (int)(str - plain_start),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 plain_start = str + mb_l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 msg_puts_attr(transchar(c), attr == 0 ? hl_attr(HLF_8) : attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 retval += char2cells(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 len -= mb_l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 str += mb_l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 s = transchar_byte(*str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 if (s[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 /* unprintable char: print the printable chars so far and the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 * translation of the unprintable char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 if (str > plain_start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 msg_puts_attr_len(plain_start, (int)(str - plain_start),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 plain_start = str + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 msg_puts_attr(s, attr == 0 ? hl_attr(HLF_8) : attr);
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1663
diff changeset
1433 retval += (int)STRLEN(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 }
1663
bae8347a9ae1 updated for version 7.2a-015
vimboss
parents: 1658
diff changeset
1435 else
bae8347a9ae1 updated for version 7.2a-015
vimboss
parents: 1658
diff changeset
1436 ++retval;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 ++str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 if (str > plain_start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1442 /* print the printable chars at the end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443 msg_puts_attr_len(plain_start, (int)(str - plain_start), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 #if defined(FEAT_QUICKFIX) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 msg_make(arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 char_u *arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 static char_u *str = (char_u *)"eeffoc", *rs = (char_u *)"Plon#dqg#vxjduB";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 for (i = 5; *arg && i >= 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 if (*arg++ != str[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 for (i = 0; rs[i]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 msg_putchar(rs[i] - 3);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 * Output the string 'str' upto a NUL character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 * Return the number of characters it takes on the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 * If K_SPECIAL is encountered, then it is taken in conjunction with the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 * following character and shown as <F1>, <S-Up> etc. Any other character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 * which is not printable shown in <> form.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 * If 'from' is TRUE (lhs of a mapping), a space is shown as <Space>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 * If a character is displayed in one of these special ways, is also
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 * highlighted (its highlight name is '8' in the p_hl variable).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 * Otherwise characters are not highlighted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 * This function is used to show mappings, where we want to see how to type
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 * the character/string -- webb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 msg_outtrans_special(strstart, from)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 char_u *strstart;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 int from; /* TRUE for lhs of a mapping */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 char_u *str = strstart;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 int retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 char_u *string;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 attr = hl_attr(HLF_8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 while (*str != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 /* Leading and trailing spaces need to be displayed in <> form. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 if ((str == strstart || str[1] == NUL) && *str == ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 string = (char_u *)"<Space>";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 ++str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 string = str2special(&str, from);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 len = vim_strsize(string);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 /* Highlight special keys */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 msg_puts_attr(string, len > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 #ifdef FEAT_MBYTE
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1509 && (*mb_ptr2len)(string) <= 1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 ? attr : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 retval += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516
2610
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1517 #if defined(FEAT_EVAL) || defined(PROTO)
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1518 /*
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1519 * Return the lhs or rhs of a mapping, with the key codes turned into printable
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1520 * strings, in an allocated string.
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1521 */
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1522 char_u *
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1523 str2special_save(str, is_lhs)
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1524 char_u *str;
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1525 int is_lhs; /* TRUE for lhs, FALSE for rhs */
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1526 {
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1527 garray_T ga;
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1528 char_u *p = str;
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1529
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1530 ga_init2(&ga, 1, 40);
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1531 while (*p != NUL)
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1532 ga_concat(&ga, str2special(&p, is_lhs));
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1533 ga_append(&ga, NUL);
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1534 return (char_u *)ga.ga_data;
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1535 }
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1536 #endif
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1537
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 * Return the printable string for the key codes at "*sp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 * Used for translating the lhs or rhs of a mapping to printable chars.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 * Advances "sp" to the next code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 str2special(sp, from)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 char_u **sp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 int from; /* TRUE for lhs of mapping */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 static char_u buf[7];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 char_u *str = *sp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 int modifiers = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 int special = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 /* Try to un-escape a multi-byte character. Return the un-escaped
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 * string if it is a multi-byte character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 p = mb_unescape(sp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 c = *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 if (str[1] == KS_MODIFIER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 modifiers = str[2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 str += 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 c = *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 c = TO_SPECIAL(str[1], str[2]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 str += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 if (c == K_ZERO) /* display <Nul> as ^@ */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 c = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 if (IS_SPECIAL(c) || modifiers) /* special key */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 special = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 #ifdef FEAT_MBYTE
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1588 if (has_mbyte && !IS_SPECIAL(c))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 {
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1590 int len = (*mb_ptr2len)(str);
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1591
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1592 /* For multi-byte characters check for an illegal byte. */
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1593 if (has_mbyte && MB_BYTE2LEN(*str) > len)
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1594 {
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1595 transchar_nonprint(buf, c);
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1596 *sp = str + 1;
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1597 return buf;
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1598 }
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1599 /* Since 'special' is TRUE the multi-byte character 'c' will be
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1600 * processed by get_special_key_name() */
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1601 c = (*mb_ptr2char)(str);
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1602 *sp = str + len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 }
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1604 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 #endif
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1606 *sp = str + 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 * Use <Space> only for lhs of a mapping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 if (special || char2cells(c) > 1 || (from && c == ' '))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 return get_special_key_name(c, modifiers);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 buf[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 buf[1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 * Translate a key sequence into special key names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 str2specialbuf(sp, buf, len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 char_u *sp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 *buf = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 while (*sp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 s = str2special(&sp, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 if ((int)(STRLEN(s) + STRLEN(buf)) < len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 STRCAT(buf, s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 * print line for :print or :list command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 void
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1641 msg_prt_line(s, list)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 char_u *s;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1643 int list;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 int col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 int n_extra = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 int c_extra = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 char_u *p_extra = NULL; /* init to make SASC shut up */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 int n;
1059
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1651 int attr = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 char_u *trail = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 char_u buf[MB_MAXBYTES + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1658 if (curwin->w_p_list)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1659 list = TRUE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1660
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 /* find start of trailing whitespace */
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1662 if (list && lcs_trail)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 trail = s + STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 while (trail > s && vim_iswhite(trail[-1]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 --trail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669 /* output a space for an empty line, otherwise the line will be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670 * overwritten */
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1671 if (*s == NUL && !(list && lcs_eol != NUL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1674 while (!got_int)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 {
1059
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1676 if (n_extra > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 --n_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 if (c_extra)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 c = c_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682 c = *p_extra++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 #ifdef FEAT_MBYTE
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1685 else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 col += (*mb_ptr2cells)(s);
2692
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1688 if (lcs_nbsp != NUL && list && mb_ptr2char(s) == 160)
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1689 {
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1690 mb_char2bytes(lcs_nbsp, buf);
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1691 buf[(*mb_ptr2len)(buf)] = NUL;
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1692 }
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1693 else
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1694 {
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1695 mch_memmove(buf, s, (size_t)l);
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1696 buf[l] = NUL;
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1697 }
1059
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1698 msg_puts(buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 s += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 c = *s++;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1707 if (c == TAB && (!list || lcs_tab1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 /* tab amount depends on current column */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 n_extra = curbuf->b_p_ts - col % curbuf->b_p_ts - 1;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1711 if (!list)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 c = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 c_extra = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 c = lcs_tab1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 c_extra = lcs_tab2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720 attr = hl_attr(HLF_8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 }
2692
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1723 else if (c == 160 && list && lcs_nbsp != NUL)
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1724 {
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1725 c = lcs_nbsp;
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1726 attr = hl_attr(HLF_8);
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1727 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1728 else if (c == NUL && list && lcs_eol != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 p_extra = (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 c_extra = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 n_extra = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 c = lcs_eol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 attr = hl_attr(HLF_AT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 --s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 else if (c != NUL && (n = byte2cells(c)) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 n_extra = n - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 p_extra = transchar_byte(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 c_extra = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 c = *p_extra++;
1059
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1743 /* Use special coloring to be able to distinguish <hex> from
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1744 * the same in plain text. */
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1745 attr = hl_attr(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 else if (c == ' ' && trail != NULL && s > trail)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 c = lcs_trail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 attr = hl_attr(HLF_8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 if (c == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 msg_putchar_attr(c, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 col++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 * Use screen_puts() to output one multi-byte character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 * Return the pointer "s" advanced to the next character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 static char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 screen_puts_mbyte(s, l, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 int cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 msg_didout = TRUE; /* remember that line is not empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 cw = (*mb_ptr2cells)(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 if (cw > 1 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 cmdmsg_rl ? msg_col <= 1 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 msg_col == Columns - 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 /* Doesn't fit, print a highlighted '>' to fill it up. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 msg_screen_putchar('>', hl_attr(HLF_AT));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 screen_puts_len(s, l, msg_row, msg_col, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 msg_col -= cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 if (msg_col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 msg_col = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 msg_col += cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 if (msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 return s + l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 * Output a string to the screen at position msg_row, msg_col.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 * Update msg_row and msg_col for the next message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 msg_puts(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 msg_puts_attr(s, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 msg_puts_title(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 msg_puts_attr(s, hl_attr(HLF_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 * Show a message in such a way that it always fits in the line. Cut out a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 * part in the middle and replace it with "..." when necessary.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 * Does not handle multi-byte characters!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838 msg_puts_long_attr(longstr, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 char_u *longstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
1842 msg_puts_long_len_attr(longstr, (int)STRLEN(longstr), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 msg_puts_long_len_attr(longstr, len, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 char_u *longstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 int slen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 int room;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 room = Columns - msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 if (len > room && room >= 20)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 slen = (room - 3) / 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 msg_outtrans_len_attr(longstr, slen, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859 msg_puts_attr((char_u *)"...", hl_attr(HLF_8));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1860 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 msg_outtrans_len_attr(longstr + len - slen, slen, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 * Basic function for writing a message with highlight attributes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868 msg_puts_attr(s, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 msg_puts_attr_len(s, -1, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1873 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 * Like msg_puts_attr(), but with a maximum length "maxlen" (in bytes).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 * When "maxlen" is -1 there is no maximum length.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 * When "maxlen" is >= 0 the message is not put in the history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 msg_puts_attr_len(str, maxlen, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 int maxlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 * If redirection is on, also write to the redirection file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1889 redir_write(str, maxlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 * Don't print anything when using ":silent cmd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 if (msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 /* if MSG_HIST flag set, add message to history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 if ((attr & MSG_HIST) && maxlen < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1900 add_msg_hist(str, -1, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 attr &= ~MSG_HIST;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1905 * When writing something to the screen after it has scrolled, requires a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906 * wait-return prompt later. Needed when scrolling, resetting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 * need_wait_return after some prompt, and then outputting something
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 * without scrolling
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909 */
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
1910 if (msg_scrolled != 0 && !msg_scrolled_ign)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 need_wait_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 msg_didany = TRUE; /* remember that something was outputted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 * If there is no valid screen, use fprintf so we can see error messages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 * If termcap is not active, we may be writing in an alternate console
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 * window, cursor positioning may not work correctly (window size may be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 * different, e.g. for Win32 console) or we just don't know where the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 * cursor is.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 if (msg_use_printf())
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1922 msg_puts_printf(str, maxlen);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1923 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1924 msg_puts_display(str, maxlen, attr, FALSE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1925 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1926
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1927 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1928 * The display part of msg_puts_attr_len().
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1929 * May be called recursively to display scroll-back text.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1930 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1931 static void
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1932 msg_puts_display(str, maxlen, attr, recurse)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1933 char_u *str;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1934 int maxlen;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1935 int attr;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1936 int recurse;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1937 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1938 char_u *s = str;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1939 char_u *t_s = str; /* string from "t_s" to "s" is still todo */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1940 int t_col = 0; /* screen cells todo, 0 when "t_s" not used */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1941 #ifdef FEAT_MBYTE
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1942 int l;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1943 int cw;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 #endif
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1945 char_u *sb_str = str;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1946 int sb_col = msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1947 int wrap;
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
1948 int did_last_char;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1949
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 did_wait_return = FALSE;
1339
3bfd2e1e2609 updated for version 7.1-053
vimboss
parents: 1306
diff changeset
1951 while ((maxlen < 0 || (int)(s - str) < maxlen) && *s != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1954 * We are at the end of the screen line when:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1955 * - When outputting a newline.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1956 * - When outputting a character in the last column.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957 */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1958 if (!recurse && msg_row >= Rows - 1 && (*s == '\n' || (
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1960 cmdmsg_rl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 ? (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 msg_col <= 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 || (*s == TAB && msg_col <= 7)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 || (has_mbyte && (*mb_ptr2cells)(s) > 1 && msg_col <= 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 (msg_col + t_col >= Columns - 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 || (*s == TAB && msg_col + t_col >= ((Columns - 1) & ~7))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 || (has_mbyte && (*mb_ptr2cells)(s) > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 && msg_col + t_col >= Columns - 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 ))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1978 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1979 * The screen is scrolled up when at the last row (some terminals
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1980 * scroll automatically, some don't. To avoid problems we scroll
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1981 * ourselves).
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1982 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 if (t_col > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 /* output postponed text */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1985 t_puts(&t_col, t_s, s, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986
1342
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
1987 /* When no more prompt and no more room, truncate here */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 if (msg_no_more && lines_left == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 break;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1990
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1991 /* Scroll the screen up one line. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1992 msg_scroll_up();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 msg_row = Rows - 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 if (msg_col >= Columns) /* can happen after screen resize */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 msg_col = Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1998 /* Display char in last column before showing more-prompt. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1999 if (*s >= ' '
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2000 #ifdef FEAT_RIGHTLEFT
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2001 && !cmdmsg_rl
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2002 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2003 )
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2004 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2005 #ifdef FEAT_MBYTE
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2006 if (has_mbyte)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2007 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2008 if (enc_utf8 && maxlen >= 0)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2009 /* avoid including composing chars after the end */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2010 l = utfc_ptr2len_len(s, (int)((str + maxlen) - s));
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2011 else
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2012 l = (*mb_ptr2len)(s);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2013 s = screen_puts_mbyte(s, l, attr);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2014 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2015 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2016 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2017 msg_screen_putchar(*s++, attr);
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2018 did_last_char = TRUE;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2019 }
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2020 else
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2021 did_last_char = FALSE;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2022
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2023 if (p_more)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2024 /* store text for scrolling back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2025 store_sb_text(&sb_str, s, attr, &sb_col, TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2026
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2027 inc_msg_scrolled();
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2028 need_wait_return = TRUE; /* may need wait_return in main() */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 if (must_redraw < VALID)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 must_redraw = VALID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 if (cmdline_row > 0 && !exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 --cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2036 * If screen is completely filled and 'more' is set then wait
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2037 * for a character.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 */
1342
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
2039 if (lines_left > 0)
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
2040 --lines_left;
957
3dc6072e0a25 updated for version 7.0-083
vimboss
parents: 881
diff changeset
2041 if (p_more && lines_left == 0 && State != HITRETURN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 && !msg_no_more && !exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 #ifdef FEAT_CON_DIALOG
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2045 if (do_more_prompt(NUL))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2046 s = confirm_msg_tail;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2047 #else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2048 (void)do_more_prompt(NUL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 if (quit_more)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2051 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 }
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2053
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2054 /* When we displayed a char in last column need to check if there
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2055 * is still more. */
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2056 if (did_last_char)
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2057 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2060 wrap = *s == '\n'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 || msg_col + t_col >= Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 || (has_mbyte && (*mb_ptr2cells)(s) > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 && msg_col + t_col >= Columns - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 #endif
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2066 ;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2067 if (t_col > 0 && (wrap || *s == '\r' || *s == '\b'
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2068 || *s == '\t' || *s == BELL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 /* output any postponed text */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2070 t_puts(&t_col, t_s, s, attr);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2071
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2072 if (wrap && p_more && !recurse)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2073 /* store text for scrolling back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2074 store_sb_text(&sb_str, s, attr, &sb_col, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 if (*s == '\n') /* go to next line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 msg_didout = FALSE; /* remember that line is empty */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2079 #ifdef FEAT_RIGHTLEFT
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2080 if (cmdmsg_rl)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2081 msg_col = Columns - 1;
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2082 else
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2083 #endif
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2084 msg_col = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085 if (++msg_row >= Rows) /* safety check */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088 else if (*s == '\r') /* go to column 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 else if (*s == '\b') /* go to previous char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 if (msg_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 --msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2097 else if (*s == TAB) /* translate Tab into spaces */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 msg_screen_putchar(' ', attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 while (msg_col & 7);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 else if (*s == BELL) /* beep (from ":sh") */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2104 vim_beep();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2107 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 cw = (*mb_ptr2cells)(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111 if (enc_utf8 && maxlen >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 /* avoid including composing chars after the end */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2113 l = utfc_ptr2len_len(s, (int)((str + maxlen) - s));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 else
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2115 l = (*mb_ptr2len)(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119 cw = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123 /* When drawing from right to left or when a double-wide character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 * doesn't fit, draw a single character here. Otherwise collect
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 * characters and draw them all at once later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 #if defined(FEAT_RIGHTLEFT) || defined(FEAT_MBYTE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 # ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 cmdmsg_rl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2134 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2135 (cw > 1 && msg_col + t_col >= Columns - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2136 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 if (l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 s = screen_puts_mbyte(s, l, attr) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 msg_screen_putchar(*s, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 /* postpone this character until later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 if (t_col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 t_s = s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 t_col += cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2154 s += l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 ++t_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 /* output any postponed text */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2164 if (t_col > 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2165 t_puts(&t_col, t_s, s, attr);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2166 if (p_more && !recurse)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2167 store_sb_text(&sb_str, s, attr, &sb_col, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2173 * Scroll the screen up one line for displaying the next message line.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2174 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2175 static void
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2176 msg_scroll_up()
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2177 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2178 #ifdef FEAT_GUI
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2179 /* Remove the cursor before scrolling, ScreenLines[] is going
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2180 * to become invalid. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2181 if (gui.in_use)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2182 gui_undraw_cursor();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2183 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2184 /* scrolling up always works */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2185 screen_del_lines(0, 0, 1, (int)Rows, TRUE, NULL);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2186
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2187 if (!can_clear((char_u *)" "))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2188 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2189 /* Scrolling up doesn't result in the right background. Set the
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2190 * background here. It's not efficient, but avoids that we have to do
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2191 * it all over the code. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2192 screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2193
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2194 /* Also clear the last char of the last but one line if it was not
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2195 * cleared before to avoid a scroll-up. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2196 if (ScreenAttrs[LineOffset[Rows - 2] + Columns - 1] == (sattr_T)-1)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2197 screen_fill((int)Rows - 2, (int)Rows - 1,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2198 (int)Columns - 1, (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2199 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2200 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2201
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2202 /*
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2203 * Increment "msg_scrolled".
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2204 */
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2205 static void
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2206 inc_msg_scrolled()
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2207 {
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2208 #ifdef FEAT_EVAL
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2209 if (*get_vim_var_str(VV_SCROLLSTART) == NUL)
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2210 {
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2211 char_u *p = sourcing_name;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2212 char_u *tofree = NULL;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2213 int len;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2214
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2215 /* v:scrollstart is empty, set it to the script/function name and line
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2216 * number */
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2217 if (p == NULL)
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2218 p = (char_u *)_("Unknown");
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2219 else
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2220 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
2221 len = (int)STRLEN(p) + 40;
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2222 tofree = alloc(len);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2223 if (tofree != NULL)
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2224 {
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2225 vim_snprintf((char *)tofree, len, _("%s line %ld"),
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2226 p, (long)sourcing_lnum);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2227 p = tofree;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2228 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2229 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2230 set_vim_var_string(VV_SCROLLSTART, p, -1);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2231 vim_free(tofree);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2232 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2233 #endif
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2234 ++msg_scrolled;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2235 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2236
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2237 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2238 * To be able to scroll back at the "more" and "hit-enter" prompts we need to
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2239 * store the displayed text and remember where screen lines start.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2240 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2241 typedef struct msgchunk_S msgchunk_T;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2242 struct msgchunk_S
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2243 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2244 msgchunk_T *sb_next;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2245 msgchunk_T *sb_prev;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2246 char sb_eol; /* TRUE when line ends after this text */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2247 int sb_msg_col; /* column in which text starts */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2248 int sb_attr; /* text attributes */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2249 char_u sb_text[1]; /* text to be displayed, actually longer */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2250 };
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2251
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2252 static msgchunk_T *last_msgchunk = NULL; /* last displayed text */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2253
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2254 static msgchunk_T *msg_sb_start __ARGS((msgchunk_T *mps));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2255 static msgchunk_T *disp_sb_line __ARGS((int row, msgchunk_T *smp));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2256
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2257 static int do_clear_sb_text = FALSE; /* clear text on next msg */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2258
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2259 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2260 * Store part of a printed message for displaying when scrolling back.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2261 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2262 static void
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2263 store_sb_text(sb_str, s, attr, sb_col, finish)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2264 char_u **sb_str; /* start of string */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2265 char_u *s; /* just after string */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2266 int attr;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2267 int *sb_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2268 int finish; /* line ends */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2269 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2270 msgchunk_T *mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2271
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2272 if (do_clear_sb_text)
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2273 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2274 clear_sb_text();
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2275 do_clear_sb_text = FALSE;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2276 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2277
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2278 if (s > *sb_str)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2279 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2280 mp = (msgchunk_T *)alloc((int)(sizeof(msgchunk_T) + (s - *sb_str)));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2281 if (mp != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2282 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2283 mp->sb_eol = finish;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2284 mp->sb_msg_col = *sb_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2285 mp->sb_attr = attr;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2286 vim_strncpy(mp->sb_text, *sb_str, s - *sb_str);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2287
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2288 if (last_msgchunk == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2289 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2290 last_msgchunk = mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2291 mp->sb_prev = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2292 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2293 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2294 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2295 mp->sb_prev = last_msgchunk;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2296 last_msgchunk->sb_next = mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2297 last_msgchunk = mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2298 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2299 mp->sb_next = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2300 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2301 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2302 else if (finish && last_msgchunk != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2303 last_msgchunk->sb_eol = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2304
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2305 *sb_str = s;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2306 *sb_col = 0;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2307 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2308
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2309 /*
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2310 * Finished showing messages, clear the scroll-back text on the next message.
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2311 */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2312 void
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2313 may_clear_sb_text()
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2314 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2315 do_clear_sb_text = TRUE;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2316 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2317
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2318 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2319 * Clear any text remembered for scrolling back.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2320 * Called when redrawing the screen.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2321 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2322 void
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2323 clear_sb_text()
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2324 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2325 msgchunk_T *mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2326
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2327 while (last_msgchunk != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2328 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2329 mp = last_msgchunk->sb_prev;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2330 vim_free(last_msgchunk);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2331 last_msgchunk = mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2332 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2333 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2334
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2335 /*
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2336 * "g<" command.
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2337 */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2338 void
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2339 show_sb_text()
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2340 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2341 msgchunk_T *mp;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2342
1342
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
2343 /* Only show something if there is more than one line, otherwise it looks
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2344 * weird, typing a command without output results in one line. */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2345 mp = msg_sb_start(last_msgchunk);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2346 if (mp == NULL || mp->sb_prev == NULL)
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2347 vim_beep();
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2348 else
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2349 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2350 do_more_prompt('G');
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2351 wait_return(FALSE);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2352 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2353 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2354
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2355 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2356 * Move to the start of screen line in already displayed text.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2357 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2358 static msgchunk_T *
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2359 msg_sb_start(mps)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2360 msgchunk_T *mps;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2361 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2362 msgchunk_T *mp = mps;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2363
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2364 while (mp != NULL && mp->sb_prev != NULL && !mp->sb_prev->sb_eol)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2365 mp = mp->sb_prev;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2366 return mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2367 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2368
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2369 /*
3435
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2370 * Mark the last message chunk as finishing the line.
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2371 */
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2372 void
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2373 msg_sb_eol()
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2374 {
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2375 if (last_msgchunk != NULL)
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2376 last_msgchunk->sb_eol = TRUE;
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2377 }
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2378
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2379 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2380 * Display a screen line from previously displayed text at row "row".
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2381 * Returns a pointer to the text for the next line (can be NULL).
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2382 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2383 static msgchunk_T *
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2384 disp_sb_line(row, smp)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2385 int row;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2386 msgchunk_T *smp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2387 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2388 msgchunk_T *mp = smp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2389 char_u *p;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2390
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2391 for (;;)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2392 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2393 msg_row = row;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2394 msg_col = mp->sb_msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2395 p = mp->sb_text;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2396 if (*p == '\n') /* don't display the line break */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2397 ++p;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2398 msg_puts_display(p, -1, mp->sb_attr, TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2399 if (mp->sb_eol || mp->sb_next == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2400 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2401 mp = mp->sb_next;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2402 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2403 return mp->sb_next;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2404 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2405
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2406 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2407 * Output any postponed text for msg_puts_attr_len().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2408 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2410 t_puts(t_col, t_s, s, attr)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2411 int *t_col;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 char_u *t_s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2413 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2414 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2416 /* output postponed text */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2417 msg_didout = TRUE; /* remember that line is not empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2418 screen_puts_len(t_s, (int)(s - t_s), msg_row, msg_col, attr);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2419 msg_col += *t_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2420 *t_col = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2422 /* If the string starts with a composing character don't increment the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423 * column position for it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2424 if (enc_utf8 && utf_iscomposing(utf_ptr2char(t_s)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2425 --msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2426 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2427 if (msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2431 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 * Returns TRUE when messages should be printed with mch_errmsg().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 * This is used when there is no valid screen, so we can see error messages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437 * If termcap is not active, we may be writing in an alternate console
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438 * window, cursor positioning may not work correctly (window size may be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2439 * different, e.g. for Win32 console) or we just don't know where the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 * cursor is.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2441 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 msg_use_printf()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 return (!msg_check_screen()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 #if defined(WIN3264) && !defined(FEAT_GUI_MSWIN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 || !termcap_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 || (swapping_screen() && !termcap_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2450 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2451 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2453 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2454 * Print a message when there is no valid screen.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2455 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2456 static void
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2457 msg_puts_printf(str, maxlen)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2458 char_u *str;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2459 int maxlen;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2460 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2461 char_u *s = str;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2462 char_u buf[4];
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2463 char_u *p;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2464
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2465 #ifdef WIN3264
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2466 if (!(silent_mode && p_verbose == 0))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2467 mch_settmode(TMODE_COOK); /* handle '\r' and '\n' correctly */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2468 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2469 while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2470 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2471 if (!(silent_mode && p_verbose == 0))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2472 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2473 /* NL --> CR NL translation (for Unix, not for "--version") */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2474 /* NL --> CR translation (for Mac) */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2475 p = &buf[0];
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2476 if (*s == '\n' && !info_message)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2477 *p++ = '\r';
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2478 #if defined(USE_CR) && !defined(MACOS_X_UNIX)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2479 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2480 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2481 *p++ = *s;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2482 *p = '\0';
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2483 if (info_message) /* informative message, not an error */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2484 mch_msg((char *)buf);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2485 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2486 mch_errmsg((char *)buf);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2487 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2488
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2489 /* primitive way to compute the current column */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2490 #ifdef FEAT_RIGHTLEFT
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2491 if (cmdmsg_rl)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2492 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2493 if (*s == '\r' || *s == '\n')
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2494 msg_col = Columns - 1;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2495 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2496 --msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2497 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2498 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2499 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2500 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2501 if (*s == '\r' || *s == '\n')
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2502 msg_col = 0;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2503 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2504 ++msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2505 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2506 ++s;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2507 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2508 msg_didout = TRUE; /* assume that line is not empty */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2509
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2510 #ifdef WIN3264
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2511 if (!(silent_mode && p_verbose == 0))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2512 mch_settmode(TMODE_RAW);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2513 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2514 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2515
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2516 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2517 * Show the more-prompt and handle the user response.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2518 * This takes care of scrolling back and displaying previously displayed text.
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2519 * When at hit-enter prompt "typed_char" is the already typed character,
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2520 * otherwise it's NUL.
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2521 * Returns TRUE when jumping ahead to "confirm_msg_tail".
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2522 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2523 static int
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2524 do_more_prompt(typed_char)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2525 int typed_char;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2526 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2527 int used_typed_char = typed_char;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2528 int oldState = State;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2529 int c;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2530 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2531 int retval = FALSE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2532 #endif
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2533 int toscroll;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2534 msgchunk_T *mp_last = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2535 msgchunk_T *mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2536 int i;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2537
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2538 if (typed_char == 'G')
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2539 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2540 /* "g<": Find first line on the last page. */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2541 mp_last = msg_sb_start(last_msgchunk);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2542 for (i = 0; i < Rows - 2 && mp_last != NULL
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2543 && mp_last->sb_prev != NULL; ++i)
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2544 mp_last = msg_sb_start(mp_last->sb_prev);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2545 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2546
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2547 State = ASKMORE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2548 #ifdef FEAT_MOUSE
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2549 setmouse();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2550 #endif
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2551 if (typed_char == NUL)
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2552 msg_moremsg(FALSE);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2553 for (;;)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2554 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2555 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2556 * Get a typed character directly from the user.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2557 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2558 if (used_typed_char != NUL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2559 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2560 c = used_typed_char; /* was typed at hit-enter prompt */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2561 used_typed_char = NUL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2562 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2563 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2564 c = get_keystroke();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2565
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2566 #if defined(FEAT_MENU) && defined(FEAT_GUI)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2567 if (c == K_MENU)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2568 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2569 int idx = get_menu_index(current_menu, ASKMORE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2570
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2571 /* Used a menu. If it starts with CTRL-Y, it must
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2572 * be a "Copy" for the clipboard. Otherwise
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2573 * assume that we end */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2574 if (idx == MENU_INDEX_INVALID)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2575 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2576 c = *current_menu->strings[idx];
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2577 if (c != NUL && current_menu->strings[idx][1] != NUL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2578 ins_typebuf(current_menu->strings[idx] + 1,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2579 current_menu->noremap[idx], 0, TRUE,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2580 current_menu->silent[idx]);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2581 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2582 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2583
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2584 toscroll = 0;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2585 switch (c)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2586 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2587 case BS: /* scroll one line back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2588 case K_BS:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2589 case 'k':
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2590 case K_UP:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2591 toscroll = -1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2592 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2593
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2594 case CAR: /* one extra line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2595 case NL:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2596 case 'j':
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2597 case K_DOWN:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2598 toscroll = 1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2599 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2600
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2601 case 'u': /* Up half a page */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2602 toscroll = -(Rows / 2);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2603 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2604
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2605 case 'd': /* Down half a page */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2606 toscroll = Rows / 2;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2607 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2608
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2609 case 'b': /* one page back */
1820
484987f8e04c updated for version 7.2-118
vimboss
parents: 1809
diff changeset
2610 case K_PAGEUP:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2611 toscroll = -(Rows - 1);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2612 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2613
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2614 case ' ': /* one extra page */
1820
484987f8e04c updated for version 7.2-118
vimboss
parents: 1809
diff changeset
2615 case 'f':
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2616 case K_PAGEDOWN:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2617 case K_LEFTMOUSE:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2618 toscroll = Rows - 1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2619 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2620
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2621 case 'g': /* all the way back to the start */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2622 toscroll = -999999;
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2623 break;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2624
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2625 case 'G': /* all the way to the end */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2626 toscroll = 999999;
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2627 lines_left = 999999;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2628 break;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2629
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2630 case ':': /* start new command line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2631 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2632 if (!confirm_msg_used)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2633 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2634 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2635 /* Since got_int is set all typeahead will be flushed, but we
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2636 * want to keep this ':', remember that in a special way. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2637 typeahead_noflush(':');
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2638 cmdline_row = Rows - 1; /* put ':' on this line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2639 skip_redraw = TRUE; /* skip redraw once */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2640 need_wait_return = FALSE; /* don't wait in main() */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2641 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2642 /*FALLTHROUGH*/
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2643 case 'q': /* quit */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2644 case Ctrl_C:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2645 case ESC:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2646 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2647 if (confirm_msg_used)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2648 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2649 /* Jump to the choices of the dialog. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2650 retval = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2651 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2652 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2653 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2654 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2655 got_int = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2656 quit_more = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2657 }
1829
b54d2f702d41 updated for version 7.2-127
vimboss
parents: 1820
diff changeset
2658 /* When there is some more output (wrapping line) display that
b54d2f702d41 updated for version 7.2-127
vimboss
parents: 1820
diff changeset
2659 * without another prompt. */
b54d2f702d41 updated for version 7.2-127
vimboss
parents: 1820
diff changeset
2660 lines_left = Rows - 1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2661 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2662
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2663 #ifdef FEAT_CLIPBOARD
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2664 case Ctrl_Y:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2665 /* Strange way to allow copying (yanking) a modeless
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2666 * selection at the more prompt. Use CTRL-Y,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2667 * because the same is used in Cmdline-mode and at the
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2668 * hit-enter prompt. However, scrolling one line up
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2669 * might be expected... */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2670 if (clip_star.state == SELECT_DONE)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2671 clip_copy_modeless_selection(TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2672 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2673 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2674 default: /* no valid response */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2675 msg_moremsg(TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2676 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2677 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2678
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2679 if (toscroll != 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2680 {
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2681 if (toscroll < 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2682 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2683 /* go to start of last line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2684 if (mp_last == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2685 mp = msg_sb_start(last_msgchunk);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2686 else if (mp_last->sb_prev != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2687 mp = msg_sb_start(mp_last->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2688 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2689 mp = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2690
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2691 /* go to start of line at top of the screen */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2692 for (i = 0; i < Rows - 2 && mp != NULL && mp->sb_prev != NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2693 ++i)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2694 mp = msg_sb_start(mp->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2695
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2696 if (mp != NULL && mp->sb_prev != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2697 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2698 /* Find line to be displayed at top. */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2699 for (i = 0; i > toscroll; --i)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2700 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2701 if (mp == NULL || mp->sb_prev == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2702 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2703 mp = msg_sb_start(mp->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2704 if (mp_last == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2705 mp_last = msg_sb_start(last_msgchunk);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2706 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2707 mp_last = msg_sb_start(mp_last->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2708 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2709
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2710 if (toscroll == -1 && screen_ins_lines(0, 0, 1,
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2711 (int)Rows, NULL) == OK)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2712 {
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2713 /* display line at top */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2714 (void)disp_sb_line(0, mp);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2715 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2716 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2717 {
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2718 /* redisplay all lines */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2719 screenclear();
870
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2720 for (i = 0; mp != NULL && i < Rows - 1; ++i)
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2721 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2722 mp = disp_sb_line(i, mp);
870
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2723 ++msg_scrolled;
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2724 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2725 }
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2726 toscroll = 0;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2727 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2728 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2729 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2730 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2731 /* First display any text that we scrolled back. */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2732 while (toscroll > 0 && mp_last != NULL)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2733 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2734 /* scroll up, display line at bottom */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2735 msg_scroll_up();
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2736 inc_msg_scrolled();
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2737 screen_fill((int)Rows - 2, (int)Rows - 1, 0,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2738 (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2739 mp_last = disp_sb_line((int)Rows - 2, mp_last);
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2740 --toscroll;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2741 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2742 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2743
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2744 if (toscroll <= 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2745 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2746 /* displayed the requested text, more prompt again */
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2747 screen_fill((int)Rows - 1, (int)Rows, 0,
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2748 (int)Columns, ' ', ' ', 0);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2749 msg_moremsg(FALSE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2750 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2751 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2752
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2753 /* display more text, return to caller */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2754 lines_left = toscroll;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2755 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2756
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2757 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2758 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2759
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2760 /* clear the --more-- message */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2761 screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2762 State = oldState;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2763 #ifdef FEAT_MOUSE
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2764 setmouse();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2765 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2766 if (quit_more)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2767 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2768 msg_row = Rows - 1;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2769 msg_col = 0;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2770 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2771 #ifdef FEAT_RIGHTLEFT
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2772 else if (cmdmsg_rl)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2773 msg_col = Columns - 1;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2774 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2775
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2776 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2777 return retval;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2778 #else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2779 return FALSE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2780 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2781 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2782
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 #if defined(USE_MCH_ERRMSG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 #ifdef mch_errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 # undef mch_errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 #ifdef mch_msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 # undef mch_msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 * Give an error message. To be used when the screen hasn't been initialized
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 * yet. When stderr can't be used, collect error messages until the GUI has
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 * started and they can be displayed in a message box.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 mch_errmsg(str)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 char *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 #if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 /* On Unix use stderr if it's a tty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 * When not going to start the GUI also use stderr.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 * On Mac, when started from Finder, stderr is the console. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 # ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 # ifdef MACOS_X_UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812 isatty(2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2818 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819 !(gui.in_use || gui.starting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2823 fprintf(stderr, "%s", str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2825 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828 /* avoid a delay for a message that isn't there */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2829 emsg_on_display = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831 len = (int)STRLEN(str) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 if (error_ga.ga_growsize == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834 error_ga.ga_growsize = 80;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 error_ga.ga_itemsize = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 if (ga_grow(&error_ga, len) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2839 mch_memmove((char_u *)error_ga.ga_data + error_ga.ga_len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2840 (char_u *)str, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2841 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 /* remove CR characters, they are displayed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2846 p = (char_u *)error_ga.ga_data + error_ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2849 p = vim_strchr(p, '\r');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2852 *p = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 --len; /* don't count the NUL at the end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857 error_ga.ga_len += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 * Give a message. To be used when the screen hasn't been initialized yet.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 * When there is no tty, collect messages until the GUI has started and they
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 * can be displayed in a message box.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867 mch_msg(str)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 char *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 #if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871 /* On Unix use stdout if we have a tty. This allows "vim -h | more" and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 * uses mch_errmsg() when started from the desktop.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 * When not going to start the GUI also use stdout.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874 * On Mac, when started from Finder, stderr is the console. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 # ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 # ifdef MACOS_X_UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878 (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2879 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2880 isatty(2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 !(gui.in_use || gui.starting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 printf("%s", str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 mch_errmsg(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 #endif /* USE_MCH_ERRMSG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 * Put a character on the screen at the current message position and advance
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 * to the next position. Only for printable ASCII!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 msg_screen_putchar(c, attr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 msg_didout = TRUE; /* remember that line is not empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 screen_putchar(c, msg_row, msg_col, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 if (--msg_col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2915 msg_col = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2917 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2922 if (++msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2925 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2927 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2928 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2930 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931 msg_moremsg(full)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 int full;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2934 int attr;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2935 char_u *s = (char_u *)_("-- More --");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 attr = hl_attr(HLF_M);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2938 screen_puts(s, (int)Rows - 1, 0, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 if (full)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2940 screen_puts((char_u *)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2941 _(" SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "),
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2942 (int)Rows - 1, vim_strsize(s), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 * Repeat the message for the current mode: ASKMORE, EXTERNCMD, CONFIRM or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2947 * exmode_active.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 repeat_message()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 if (State == ASKMORE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 msg_moremsg(TRUE); /* display --more-- message again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 #ifdef FEAT_CON_DIALOG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 else if (State == CONFIRM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2960 display_confirm_msg(); /* display ":confirm" message again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964 else if (State == EXTERNCMD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 windgoto(msg_row, msg_col); /* put cursor back */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968 else if (State == HITRETURN || State == SETWSIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 {
1445
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2970 if (msg_row == Rows - 1)
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2971 {
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2972 /* Avoid drawing the "hit-enter" prompt below the previous one,
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2973 * overwrite it. Esp. useful when regaining focus and a
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2974 * FocusGained autocmd exists but didn't draw anything. */
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2975 msg_didout = FALSE;
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2976 msg_col = 0;
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2977 msg_clr_eos();
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
2978 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 hit_return_msg();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2981 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 * msg_check_screen - check if the screen is initialized.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 * Also check msg_row and msg_col, if they are too big it may cause a crash.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 * While starting the GUI the terminal codes will be set for the GUI, but the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 * output goes to the terminal. Don't use the terminal codes then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 msg_check_screen()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 if (!full_screen || !screen_valid(FALSE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996 if (msg_row >= Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 if (msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 msg_col = Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 * Clear from current message position to end of screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 * Skip this when ":silent" was used, no need to clear for redirection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3006 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3007 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 msg_clr_eos()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 if (msg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011 msg_clr_eos_force();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 * Clear from current message position to end of screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016 * Note: msg_col is not updated, so we remember the end of the message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3017 * for msg_check().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3019 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3020 msg_clr_eos_force()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3021 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 if (msg_use_printf())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3023 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3024 if (full_screen) /* only when termcap codes are valid */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3025 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 if (*T_CD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027 out_str(T_CD); /* clear to end of display */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028 else if (*T_CE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3029 out_str(T_CE); /* clear to end of line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3032 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3033 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3034 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3035 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3036 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037 screen_fill(msg_row, msg_row + 1, 0, msg_col + 1, ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3038 screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3039 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3040 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3042 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3043 screen_fill(msg_row, msg_row + 1, msg_col, (int)Columns,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3048 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3049
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3050 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3051 * Clear the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3053 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 msg_clr_cmdline()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3055 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 msg_row = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058 msg_clr_eos_force();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3060
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 * end putting a message on the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3063 * call wait_return if the message does not fit in the available space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064 * return TRUE if wait_return not called.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067 msg_end()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3069 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070 * if the string is larger than the window,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3071 * or the ruler option is set and we run into it,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 * we have to redraw the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 * Do not do this if we are abandoning the file or editing the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 if (!exiting && need_wait_return && !(State & CMDLINE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 wait_return(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085 * If the written message runs into the shown command or ruler, we have to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086 * wait for hit-return and redraw the window later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3087 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3089 msg_check()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3091 if (msg_row == Rows - 1 && msg_col >= sc_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 need_wait_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099 * May write a string to the redirection file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103 redir_write(str, maxlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 int maxlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3106 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107 char_u *s = str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3108 static int cur_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3110 /* Don't do anything for displaying prompts and the like. */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3111 if (redir_off)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3112 return;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3113
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3114 /* If 'verbosefile' is set prepare for writing in that file. */
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3115 if (*p_vfile != NUL && verbose_fd == NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3116 verbose_open();
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3117
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3118 if (redirecting())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3119 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 /* If the string doesn't start with CR or NL, go to msg_col */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3121 if (*s != '\n' && *s != '\r')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 while (cur_col < msg_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3126 if (redir_reg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127 write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
3128 else if (redir_vname)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
3129 var_redir_str((char_u *)" ", -1);
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3130 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131 #endif
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3132 if (redir_fd != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3133 fputs(" ", redir_fd);
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3134 if (verbose_fd != NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3135 fputs(" ", verbose_fd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3136 ++cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3137 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3138 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3139
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3141 if (redir_reg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142 write_reg_contents(redir_reg, s, maxlen, TRUE);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
3143 if (redir_vname)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
3144 var_redir_str(s, maxlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3147 /* Write and adjust the current column. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 #ifdef FEAT_EVAL
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3151 if (!redir_reg && !redir_vname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3152 #endif
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3153 if (redir_fd != NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3154 putc(*s, redir_fd);
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3155 if (verbose_fd != NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3156 putc(*s, verbose_fd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157 if (*s == '\r' || *s == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3158 cur_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3159 else if (*s == '\t')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3160 cur_col += (8 - cur_col % 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3161 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3162 ++cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 if (msg_silent != 0) /* should update msg_col */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3167 msg_col = cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3168 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3169 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3170
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3171 int
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3172 redirecting()
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3173 {
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3174 return redir_fd != NULL || *p_vfile != NUL
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3175 #ifdef FEAT_EVAL
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3176 || redir_reg || redir_vname
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3177 #endif
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3178 ;
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3179 }
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3180
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3181 /*
1189
7cdd85615e4e updated for version 7.1b
vimboss
parents: 1059
diff changeset
3182 * Before giving verbose message.
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3183 * Must always be called paired with verbose_leave()!
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3184 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3185 void
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3186 verbose_enter()
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3187 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3188 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3189 ++msg_silent;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3190 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3191
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3192 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3193 * After giving verbose message.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3194 * Must always be called paired with verbose_enter()!
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3195 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3196 void
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3197 verbose_leave()
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3198 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3199 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3200 if (--msg_silent < 0)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3201 msg_silent = 0;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3202 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3203
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3204 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3205 * Like verbose_enter() and set msg_scroll when displaying the message.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3206 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3207 void
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3208 verbose_enter_scroll()
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3209 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3210 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3211 ++msg_silent;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3212 else
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3213 /* always scroll up, don't overwrite */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3214 msg_scroll = TRUE;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3215 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3216
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3217 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3218 * Like verbose_leave() and set cmdline_row when displaying the message.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3219 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3220 void
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3221 verbose_leave_scroll()
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3222 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3223 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3224 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3225 if (--msg_silent < 0)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3226 msg_silent = 0;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3227 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3228 else
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3229 cmdline_row = msg_row;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3230 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3231
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3232 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3233 * Called when 'verbosefile' is set: stop writing to the file.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3234 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3235 void
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3236 verbose_stop()
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3237 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3238 if (verbose_fd != NULL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3239 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3240 fclose(verbose_fd);
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3241 verbose_fd = NULL;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3242 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3243 verbose_did_open = FALSE;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3244 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3245
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3246 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3247 * Open the file 'verbosefile'.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3248 * Return FAIL or OK.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3249 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3250 int
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3251 verbose_open()
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3252 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3253 if (verbose_fd == NULL && !verbose_did_open)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3254 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3255 /* Only give the error message once. */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3256 verbose_did_open = TRUE;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3257
531
da9142bd190a updated for version 7.0149
vimboss
parents: 513
diff changeset
3258 verbose_fd = mch_fopen((char *)p_vfile, "a");
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3259 if (verbose_fd == NULL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3260 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3261 EMSG2(_(e_notopen), p_vfile);
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3262 return FAIL;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3263 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3264 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3265 return OK;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3266 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3267
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3268 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269 * Give a warning message (for searching).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3270 * Use 'w' highlighting and may repeat the message after redrawing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3271 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3272 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3273 give_warning(message, hl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 char_u *message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275 int hl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3276 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3277 /* Don't do this for ":silent". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3278 if (msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3279 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3280
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3281 /* Don't want a hit-enter prompt here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3282 ++no_wait_return;
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
3283
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3284 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3285 set_vim_var_string(VV_WARNINGMSG, message, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3286 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3287 vim_free(keep_msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3288 keep_msg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3289 if (hl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3290 keep_msg_attr = hl_attr(HLF_W);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3291 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3292 keep_msg_attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3293 if (msg_attr(message, keep_msg_attr) && msg_scrolled == 0)
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
3294 set_keep_msg(message, keep_msg_attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3295 msg_didout = FALSE; /* overwrite this message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3296 msg_nowait = TRUE; /* don't wait for this message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3297 msg_col = 0;
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
3298
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3299 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3300 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3302 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 * Advance msg cursor to column "col".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3305 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3306 msg_advance(col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3307 int col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3308 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3309 if (msg_silent != 0) /* nothing to advance to */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3310 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3311 msg_col = col; /* for redirection, may fill it up later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3312 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3314 if (col >= Columns) /* not enough room */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3315 col = Columns - 1;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3316 #ifdef FEAT_RIGHTLEFT
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3317 if (cmdmsg_rl)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3318 while (msg_col > Columns - col)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3319 msg_putchar(' ');
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3320 else
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3321 #endif
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3322 while (msg_col < col)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3323 msg_putchar(' ');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 #if defined(FEAT_CON_DIALOG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 * Used for "confirm()" function, and the :confirm command prefix.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 * Versions which haven't got flexible dialogs yet, and console
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 * versions, get this generic handler which uses the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3331 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332 * type = one of:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3333 * VIM_QUESTION, VIM_INFO, VIM_WARNING, VIM_ERROR or VIM_GENERIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3334 * title = title string (can be NULL for default)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 * (neither used in console dialogs at the moment)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3337 * Format of the "buttons" string:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3338 * "Button1Name\nButton2Name\nButton3Name"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339 * The first button should normally be the default/accept
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3340 * The second button should be the 'Cancel' button
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3341 * Other buttons- use your imagination!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3342 * A '&' in a button name becomes a shortcut, so each '&' should be before a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3343 * different letter.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3344 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345 int
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3346 do_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
3347 int type UNUSED;
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
3348 char_u *title UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 char_u *message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 char_u *buttons;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351 int dfltbutton;
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
3352 char_u *textfield UNUSED; /* IObuff for inputdialog(), NULL
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
3353 otherwise */
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3354 int ex_cmd; /* when TRUE pressing : accepts default and starts
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3355 Ex command */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3356 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3357 int oldState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3358 int retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359 char_u *hotkeys;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3361 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3362
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 #ifndef NO_CONSOLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 /* Don't output anything in silent mode ("ex -s") */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 if (silent_mode)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 return dfltbutton; /* return default option */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 #ifdef FEAT_GUI_DIALOG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 /* When GUI is running and 'c' not in 'guioptions', use the GUI dialog */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371 if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3374 textfield, ex_cmd);
1809
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3375 /* avoid a hit-enter prompt without clearing the cmdline */
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3376 need_wait_return = FALSE;
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3377 emsg_on_display = FALSE;
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3378 cmdline_row = msg_row;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3380 /* Flush output to avoid that further messages and redrawing is done
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3381 * in the wrong order. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3382 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3383 gui_mch_update();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3385 return c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3386 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3387 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3388
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3389 oldState = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3390 State = CONFIRM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3391 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3392 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3393 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3395 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3396 * Since we wait for a keypress, don't make the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3397 * user press RETURN as well afterwards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3398 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3399 ++no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3400 hotkeys = msg_show_console_dialog(message, buttons, dfltbutton);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3401
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3402 if (hotkeys != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3404 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3405 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3406 /* Get a typed character directly from the user. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3407 c = get_keystroke();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3408 switch (c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3409 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3410 case CAR: /* User accepts default option */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3411 case NL:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 retval = dfltbutton;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3413 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 case Ctrl_C: /* User aborts/cancels */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3415 case ESC:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418 default: /* Could be a hotkey? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3419 if (c < 0) /* special keys are ignored here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 continue;
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3421 if (c == ':' && ex_cmd)
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3422 {
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3423 retval = dfltbutton;
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3424 ins_char_typebuf(':');
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3425 break;
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3426 }
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3427
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3428 /* Make the character lowercase, as chars in "hotkeys" are. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3429 c = MB_TOLOWER(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3430 retval = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3431 for (i = 0; hotkeys[i]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3435 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 if ((*mb_ptr2char)(hotkeys + i) == c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3437 break;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3438 i += (*mb_ptr2len)(hotkeys + i) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3440 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 if (hotkeys[i] == c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 ++retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 if (hotkeys[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 /* No hotkey match, so keep waiting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 vim_free(hotkeys);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457 State = oldState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3459 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462 msg_end_prompt();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3463
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3467 static int copy_char __ARGS((char_u *from, char_u *to, int lowercase));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 * Copy one character from "*from" to "*to", taking care of multi-byte
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3471 * characters. Return the length of the character in bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3473 static int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 copy_char(from, to, lowercase)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 char_u *from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3476 char_u *to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477 int lowercase; /* make character lower case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 if (lowercase)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3486 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3487 c = MB_TOLOWER((*mb_ptr2char)(from));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3488 return (*mb_char2bytes)(c, to);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3489 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3490 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3491 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3492 len = (*mb_ptr2len)(from);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3493 mch_memmove(to, from, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3494 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3495 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3496 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3497 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3498 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3500 if (lowercase)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 *to = (char_u)TOLOWER_LOC(*from);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3502 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503 *to = *from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3509 * Format the dialog string, and display it at the bottom of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3510 * the screen. Return a string of hotkey chars (if defined) for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511 * each 'button'. If a button has no hotkey defined, the first character of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3512 * the button is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3513 * The hotkeys can be multi-byte characters, but without combining chars.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3514 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515 * Returns an allocated string with hotkeys, or NULL for error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517 static char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 msg_show_console_dialog(message, buttons, dfltbutton)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 char_u *message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 char_u *buttons;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 int dfltbutton;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 int len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 # define HOTK_LEN (has_mbyte ? MB_MAXBYTES : 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3527 # define HOTK_LEN 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 int lenhotkey = HOTK_LEN; /* count first button */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 char_u *hotk = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 char_u *msgp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 char_u *hotkp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3533 char_u *r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3534 int copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 #define HAS_HOTKEY_LEN 30
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 char_u has_hotkey[HAS_HOTKEY_LEN];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537 int first_hotkey = FALSE; /* first char of button is hotkey */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3538 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3539
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3540 has_hotkey[0] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3541
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3542 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3543 * First loop: compute the size of memory to allocate.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3544 * Second loop: copy to the allocated memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3545 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3546 for (copy = 0; copy <= 1; ++copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548 r = buttons;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3549 idx = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 while (*r)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552 if (*r == DLG_BUTTON_SEP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 *msgp++ = ',';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 *msgp++ = ' '; /* '\n' -> ', ' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559 /* advance to next hotkey and set default hotkey */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 if (has_mbyte)
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3562 hotkp += STRLEN(hotkp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3563 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565 ++hotkp;
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3566 hotkp[copy_char(r + 1, hotkp, TRUE)] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3567 if (dfltbutton)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3568 --dfltbutton;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3569
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3570 /* If no hotkey is specified first char is used. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3571 if (idx < HAS_HOTKEY_LEN - 1 && !has_hotkey[++idx])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 first_hotkey = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 len += 3; /* '\n' -> ', '; 'x' -> '(x)' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3577 lenhotkey += HOTK_LEN; /* each button needs a hotkey */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 if (idx < HAS_HOTKEY_LEN - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579 has_hotkey[++idx] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3580 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 else if (*r == DLG_HOTKEY_CHAR || first_hotkey)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 if (*r == DLG_HOTKEY_CHAR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585 ++r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3586 first_hotkey = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3588 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589 if (*r == DLG_HOTKEY_CHAR) /* '&&a' -> '&a' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590 *msgp++ = *r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3593 /* '&a' -> '[a]' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594 *msgp++ = (dfltbutton == 1) ? '[' : '(';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595 msgp += copy_char(r, msgp, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 *msgp++ = (dfltbutton == 1) ? ']' : ')';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598 /* redefine hotkey */
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3599 hotkp[copy_char(r, hotkp, TRUE)] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3602 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3604 ++len; /* '&a' -> '[a]' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3605 if (idx < HAS_HOTKEY_LEN - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3606 has_hotkey[idx] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3607 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3609 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3610 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3611 /* everything else copy literally */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3612 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3613 msgp += copy_char(r, msgp, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3614 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 /* advance to the next character */
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
3617 mb_ptr_adv(r);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 *msgp++ = ':';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 *msgp++ = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3624 *msgp = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3628 len += (int)(STRLEN(message)
856
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
3629 + 2 /* for the NL's */
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
3630 + STRLEN(buttons)
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
3631 + 3); /* for the ": " and NUL */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3632 lenhotkey++; /* for the NUL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 /* If no hotkey is specified first char is used. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635 if (!has_hotkey[0])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637 first_hotkey = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3638 len += 2; /* "x" -> "[x]" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3640
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3642 * Now allocate and load the strings
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3643 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644 vim_free(confirm_msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 confirm_msg = alloc(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3646 if (confirm_msg == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 *confirm_msg = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3649 hotk = alloc(lenhotkey);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 if (hotk == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 *confirm_msg = '\n';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 STRCPY(confirm_msg + 1, message);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 msgp = confirm_msg + 1 + STRLEN(message);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 hotkp = hotk;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3659 /* Define first default hotkey. Keep the hotkey string NUL
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3660 * terminated to avoid reading past the end. */
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3661 hotkp[copy_char(buttons, hotkp, TRUE)] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 /* Remember where the choices start, displaying starts here when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3664 * "hotkp" typed at the more prompt. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 confirm_msg_tail = msgp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 *msgp++ = '\n';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3668 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3669
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 display_confirm_msg();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 return hotk;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 * Display the ":confirm" message. Also called when screen resized.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 display_confirm_msg()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 /* avoid that 'q' at the more prompt truncates the message here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 ++confirm_msg_used;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 if (confirm_msg != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 msg_puts_attr(confirm_msg, hl_attr(HLF_M));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 --confirm_msg_used;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3687 #endif /* FEAT_CON_DIALOG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 #if defined(FEAT_CON_DIALOG) || defined(FEAT_GUI_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692 vim_dialog_yesno(type, title, message, dflt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694 char_u *title;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3695 char_u *message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3696 int dflt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698 if (do_dialog(type,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699 title == NULL ? (char_u *)_("Question") : title,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3700 message,
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3701 (char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 return VIM_YES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3703 return VIM_NO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3704 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3706 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3707 vim_dialog_yesnocancel(type, title, message, dflt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3708 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3709 char_u *title;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3710 char_u *message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3711 int dflt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3712 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3713 switch (do_dialog(type,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714 title == NULL ? (char_u *)_("Question") : title,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3715 message,
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3716 (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3718 case 1: return VIM_YES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 case 2: return VIM_NO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 return VIM_CANCEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725 vim_dialog_yesnoallcancel(type, title, message, dflt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3726 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 char_u *title;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3728 char_u *message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 int dflt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3731 switch (do_dialog(type,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3732 title == NULL ? (char_u *)"Question" : title,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3733 message,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3734 (char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"),
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3735 dflt, NULL, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3736 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 case 1: return VIM_YES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738 case 2: return VIM_NO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739 case 3: return VIM_ALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 case 4: return VIM_DISCARDALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 return VIM_CANCEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745 #endif /* FEAT_GUI_DIALOG || FEAT_CON_DIALOG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 #if defined(FEAT_BROWSE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749 * Generic browse function. Calls gui_mch_browse() when possible.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 * Later this may pop-up a non-GUI file selector (external command?).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 char_u *
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3753 do_browse(flags, title, dflt, ext, initdir, filter, buf)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3754 int flags; /* BROWSE_SAVE and BROWSE_DIR */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 char_u *title; /* title for the window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 char_u *dflt; /* default file name (may include directory) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 char_u *ext; /* extension added */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 char_u *initdir; /* initial directory, NULL for current dir or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 when using path from "dflt" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 char_u *filter; /* file name filter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 buf_T *buf; /* buffer to read/write for */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 static char_u *last_dir = NULL; /* last used directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 char_u *tofree = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 int save_browse = cmdmod.browse;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 /* Must turn off browse to avoid that autocommands will get the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 * flag too! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 cmdmod.browse = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3772 if (title == NULL || *title == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773 {
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3774 if (flags & BROWSE_DIR)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3775 title = (char_u *)_("Select Directory dialog");
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3776 else if (flags & BROWSE_SAVE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777 title = (char_u *)_("Save File dialog");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 title = (char_u *)_("Open File dialog");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 /* When no directory specified, use default file name, default dir, buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 * dir, last dir or current dir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 if ((initdir == NULL || *initdir == NUL) && dflt != NULL && *dflt != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 if (mch_isdir(dflt)) /* default file name is a directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 initdir = dflt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 dflt = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 else if (gettail(dflt) != dflt) /* default file name includes a path */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793 tofree = vim_strsave(dflt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 if (tofree != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 initdir = tofree;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 *gettail(initdir) = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798 dflt = gettail(dflt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3803 if (initdir == NULL || *initdir == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 /* When 'browsedir' is a directory, use it */
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3806 if (STRCMP(p_bsdir, "last") != 0
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3807 && STRCMP(p_bsdir, "buffer") != 0
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3808 && STRCMP(p_bsdir, "current") != 0
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3809 && mch_isdir(p_bsdir))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810 initdir = p_bsdir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811 /* When saving or 'browsedir' is "buffer", use buffer fname */
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3812 else if (((flags & BROWSE_SAVE) || *p_bsdir == 'b')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 && buf != NULL && buf->b_ffname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3815 if (dflt == NULL || *dflt == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816 dflt = gettail(curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817 tofree = vim_strsave(curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 if (tofree != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 initdir = tofree;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 *gettail(initdir) = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 /* When 'browsedir' is "last", use dir from last browse */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3825 else if (*p_bsdir == 'l')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3826 initdir = last_dir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827 /* When 'browsedir is "current", use current directory. This is the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 * default already, leave initdir empty. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3829 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3830
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3832 if (gui.in_use) /* when this changes, also adjust f_has()! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3833 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834 if (filter == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3835 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836 && (filter = get_var_value((char_u *)"b:browsefilter")) == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837 && (filter = get_var_value((char_u *)"g:browsefilter")) == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3838 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3839 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840 filter = BROWSE_FILTER_DEFAULT;
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3841 if (flags & BROWSE_DIR)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3842 {
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 1924
diff changeset
3843 # if defined(FEAT_GUI_GTK) || defined(WIN3264)
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3844 /* For systems that have a directory dialog. */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3845 fname = gui_mch_browsedir(title, initdir);
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3846 # else
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3847 /* Generic solution for selecting a directory: select a file and
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3848 * remove the file name. */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3849 fname = gui_mch_browse(0, title, dflt, ext, initdir, (char_u *)"");
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3850 # endif
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 1924
diff changeset
3851 # if !defined(FEAT_GUI_GTK)
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3852 /* Win32 adds a dummy file name, others return an arbitrary file
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3853 * name. GTK+ 2 returns only the directory, */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3854 if (fname != NULL && *fname != NUL && !mch_isdir(fname))
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3855 {
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3856 /* Remove the file name. */
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
3857 char_u *tail = gettail_sep(fname);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3858
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3859 if (tail == fname)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3860 *tail++ = '.'; /* use current dir */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3861 *tail = NUL;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3862 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3863 # endif
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3864 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3865 else
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3866 fname = gui_mch_browse(flags & BROWSE_SAVE,
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3867 title, dflt, ext, initdir, filter);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 /* We hang around in the dialog for a while, the user might do some
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 * things to our files. The Win32 dialog allows deleting or renaming
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871 * a file, check timestamps. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3872 need_check_timestamps = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3873 did_check_timestamps = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3875 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 /* TODO: non-GUI file selector here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 EMSG(_("E338: Sorry, no file browser in console mode"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880 fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3881 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 /* keep the directory for next time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 vim_free(last_dir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 last_dir = vim_strsave(fname);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3888 if (last_dir != NULL && !(flags & BROWSE_DIR))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890 *gettail(last_dir) = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 if (*last_dir == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 /* filename only returned, must be in current dir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 vim_free(last_dir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3895 last_dir = alloc(MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 if (last_dir != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 mch_dirname(last_dir, MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3900 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3901
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3902 vim_free(tofree);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903 cmdmod.browse = save_browse;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3904
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3905 return fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3906 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907 #endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
3908
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3909 #if defined(HAVE_STDARG_H) && defined(FEAT_EVAL)
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3910 static char *e_printf = N_("E766: Insufficient arguments for printf()");
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3911
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3912 static long tv_nr __ARGS((typval_T *tvs, int *idxp));
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3913 static char *tv_str __ARGS((typval_T *tvs, int *idxp));
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3914 # ifdef FEAT_FLOAT
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3915 static double tv_float __ARGS((typval_T *tvs, int *idxp));
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3916 # endif
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3917
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3918 /*
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3919 * Get number argument from "idxp" entry in "tvs". First entry is 1.
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3920 */
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3921 static long
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3922 tv_nr(tvs, idxp)
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3923 typval_T *tvs;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3924 int *idxp;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3925 {
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3926 int idx = *idxp - 1;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3927 long n = 0;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3928 int err = FALSE;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3929
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3930 if (tvs[idx].v_type == VAR_UNKNOWN)
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3931 EMSG(_(e_printf));
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3932 else
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3933 {
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3934 ++*idxp;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3935 n = get_tv_number_chk(&tvs[idx], &err);
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3936 if (err)
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3937 n = 0;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3938 }
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3939 return n;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3940 }
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3941
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3942 /*
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3943 * Get string argument from "idxp" entry in "tvs". First entry is 1.
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
3944 * Returns NULL for an error.
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3945 */
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3946 static char *
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3947 tv_str(tvs, idxp)
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3948 typval_T *tvs;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3949 int *idxp;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3950 {
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3951 int idx = *idxp - 1;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3952 char *s = NULL;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3953
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3954 if (tvs[idx].v_type == VAR_UNKNOWN)
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3955 EMSG(_(e_printf));
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3956 else
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3957 {
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3958 ++*idxp;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3959 s = (char *)get_tv_string_chk(&tvs[idx]);
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3960 }
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3961 return s;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3962 }
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3963
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3964 # ifdef FEAT_FLOAT
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3965 /*
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3966 * Get float argument from "idxp" entry in "tvs". First entry is 1.
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3967 */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3968 static double
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3969 tv_float(tvs, idxp)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3970 typval_T *tvs;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3971 int *idxp;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3972 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3973 int idx = *idxp - 1;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3974 double f = 0;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3975
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3976 if (tvs[idx].v_type == VAR_UNKNOWN)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3977 EMSG(_(e_printf));
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3978 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3979 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3980 ++*idxp;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3981 if (tvs[idx].v_type == VAR_FLOAT)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3982 f = tvs[idx].vval.v_float;
1656
eb6fc577c96c updated for version 7.2a-008
vimboss
parents: 1619
diff changeset
3983 else if (tvs[idx].v_type == VAR_NUMBER)
eb6fc577c96c updated for version 7.2a-008
vimboss
parents: 1619
diff changeset
3984 f = tvs[idx].vval.v_number;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3985 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3986 EMSG(_("E807: Expected Float argument for printf()"));
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3987 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3988 return f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3989 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
3990 # endif
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3991 #endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
3992
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
3993 /*
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
3994 * This code was included to provide a portable vsnprintf() and snprintf().
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
3995 * Some systems may provide their own, but we always use this one for
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
3996 * consistency.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
3997 *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
3998 * This code is based on snprintf.c - a portable implementation of snprintf
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
3999 * by Mark Martinec <mark.martinec@ijs.si>, Version 2.2, 2000-10-06.
1189
7cdd85615e4e updated for version 7.1b
vimboss
parents: 1059
diff changeset
4000 * Included with permission. It was heavily modified to fit in Vim.
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4001 * The original code, including useful comments, can be found here:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4002 * http://www.ijs.si/software/snprintf/
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4003 *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4004 * This snprintf() only supports the following conversion specifiers:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4005 * s, c, d, u, o, x, X, p (and synonyms: i, D, U, O - see below)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4006 * with flags: '-', '+', ' ', '0' and '#'.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4007 * An asterisk is supported for field width as well as precision.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4008 *
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4009 * Limited support for floating point was added: 'f', 'e', 'E', 'g', 'G'.
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4010 *
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4011 * Length modifiers 'h' (short int) and 'l' (long int) are supported.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4012 * 'll' (long long int) is not supported.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4013 *
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4014 * The locale is not used, the string is used as a byte string. This is only
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4015 * relevant for double-byte encodings where the second byte may be '%'.
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4016 *
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4017 * It is permitted for "str_m" to be zero, and it is permitted to specify NULL
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4018 * pointer for resulting string argument if "str_m" is zero (as per ISO C99).
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4019 *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4020 * The return value is the number of characters which would be generated
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4021 * for the given input, excluding the trailing null. If this value
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4022 * is greater or equal to "str_m", not all characters from the result
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4023 * have been stored in str, output bytes beyond the ("str_m"-1) -th character
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4024 * are discarded. If "str_m" is greater than zero it is guaranteed
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4025 * the resulting string will be null-terminated.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4026 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4027
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4028 /*
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4029 * When va_list is not supported we only define vim_snprintf().
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4030 *
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4031 * vim_vsnprintf() can be invoked with either "va_list" or a list of
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4032 * "typval_T". When the latter is not used it must be NULL.
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4033 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4034
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4035 /* When generating prototypes all of this is skipped, cproto doesn't
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4036 * understand this. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4037 #ifndef PROTO
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4038
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4039 # ifdef HAVE_STDARG_H
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4040 /* Like vim_vsnprintf() but append to the string. */
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4041 int
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4042 vim_snprintf_add(char *str, size_t str_m, char *fmt, ...)
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4043 {
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4044 va_list ap;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4045 int str_l;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4046 size_t len = STRLEN(str);
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4047 size_t space;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4048
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4049 if (str_m <= len)
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4050 space = 0;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4051 else
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4052 space = str_m - len;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4053 va_start(ap, fmt);
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4054 str_l = vim_vsnprintf(str + len, space, fmt, ap, NULL);
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4055 va_end(ap);
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4056 return str_l;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4057 }
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4058 # else
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4059 /* Like vim_vsnprintf() but append to the string. */
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4060 int
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4061 vim_snprintf_add(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4062 char *str;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4063 size_t str_m;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4064 char *fmt;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4065 long a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4066 {
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4067 size_t len = STRLEN(str);
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4068 size_t space;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4069
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4070 if (str_m <= len)
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4071 space = 0;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4072 else
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4073 space = str_m - len;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4074 return vim_vsnprintf(str + len, space, fmt,
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4075 a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4076 }
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4077 # endif
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4078
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4079 # ifdef HAVE_STDARG_H
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4080 int
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4081 vim_snprintf(char *str, size_t str_m, char *fmt, ...)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4082 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4083 va_list ap;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4084 int str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4085
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4086 va_start(ap, fmt);
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4087 str_l = vim_vsnprintf(str, str_m, fmt, ap, NULL);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4088 va_end(ap);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4089 return str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4090 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4091
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4092 int
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4093 vim_vsnprintf(str, str_m, fmt, ap, tvs)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4094 # else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4095 /* clumsy way to work around missing va_list */
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4096 # define get_a_arg(i) (++i, i == 2 ? a1 : i == 3 ? a2 : i == 4 ? a3 : i == 5 ? a4 : i == 6 ? a5 : i == 7 ? a6 : i == 8 ? a7 : i == 9 ? a8 : i == 10 ? a9 : a10)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4097
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4098 /* VARARGS */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4099 int
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4100 #ifdef __BORLANDC__
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4101 _RTLENTRYF
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4102 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4103 vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4104 # endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4105 char *str;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4106 size_t str_m;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4107 char *fmt;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4108 # ifdef HAVE_STDARG_H
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4109 va_list ap;
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4110 typval_T *tvs;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4111 # else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4112 long a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4113 # endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4114 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4115 size_t str_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4116 char *p = fmt;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4117 int arg_idx = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4118
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4119 if (p == NULL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4120 p = "";
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4121 while (*p != NUL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4122 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4123 if (*p != '%')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4124 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4125 char *q = strchr(p + 1, '%');
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4126 size_t n = (q == NULL) ? STRLEN(p) : (size_t)(q - p);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4127
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4128 /* Copy up to the next '%' or NUL without any changes. */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4129 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4130 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4131 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4132
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4133 mch_memmove(str + str_l, p, n > avail ? avail : n);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4134 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4135 p += n;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4136 str_l += n;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4137 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4138 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4139 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4140 size_t min_field_width = 0, precision = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4141 int zero_padding = 0, precision_specified = 0, justify_left = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4142 int alternate_form = 0, force_sign = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4143
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4144 /* If both the ' ' and '+' flags appear, the ' ' flag should be
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4145 * ignored. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4146 int space_for_positive = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4147
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4148 /* allowed values: \0, h, l, L */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4149 char length_modifier = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4150
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4151 /* temporary buffer for simple numeric->string conversion */
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4152 #ifdef FEAT_FLOAT
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4153 # define TMP_LEN 350 /* On my system 1e308 is the biggest number possible.
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4154 * That sounds reasonable to use as the maximum
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4155 * printable. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4156 #else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4157 # define TMP_LEN 32
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4158 #endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4159 char tmp[TMP_LEN];
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4160
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4161 /* string address in case of string argument */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4162 char *str_arg;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4163
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4164 /* natural field width of arg without padding and sign */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4165 size_t str_arg_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4166
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4167 /* unsigned char argument value - only defined for c conversion.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4168 * N.B. standard explicitly states the char argument for the c
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4169 * conversion is unsigned */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4170 unsigned char uchar_arg;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4171
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4172 /* number of zeros to be inserted for numeric conversions as
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4173 * required by the precision or minimal field width */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4174 size_t number_of_zeros_to_pad = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4175
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4176 /* index into tmp where zero padding is to be inserted */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4177 size_t zero_padding_insertion_ind = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4178
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4179 /* current conversion specifier character */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4180 char fmt_spec = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4181
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4182 str_arg = NULL;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4183 p++; /* skip '%' */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4184
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4185 /* parse flags */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4186 while (*p == '0' || *p == '-' || *p == '+' || *p == ' '
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4187 || *p == '#' || *p == '\'')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4188 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4189 switch (*p)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4190 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4191 case '0': zero_padding = 1; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4192 case '-': justify_left = 1; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4193 case '+': force_sign = 1; space_for_positive = 0; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4194 case ' ': force_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4195 /* If both the ' ' and '+' flags appear, the ' '
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4196 * flag should be ignored */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4197 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4198 case '#': alternate_form = 1; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4199 case '\'': break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4200 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4201 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4202 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4203 /* If the '0' and '-' flags both appear, the '0' flag should be
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4204 * ignored. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4205
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4206 /* parse field width */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4207 if (*p == '*')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4208 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4209 int j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4210
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4211 p++;
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4212 j =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4213 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4214 get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4215 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4216 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4217 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4218 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4219 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4220 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4221 if (j >= 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4222 min_field_width = j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4223 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4224 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4225 min_field_width = -j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4226 justify_left = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4227 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4228 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4229 else if (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4230 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4231 /* size_t could be wider than unsigned int; make sure we treat
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4232 * argument like common implementations do */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4233 unsigned int uj = *p++ - '0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4234
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4235 while (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4236 uj = 10 * uj + (unsigned int)(*p++ - '0');
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4237 min_field_width = uj;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4238 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4239
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4240 /* parse precision */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4241 if (*p == '.')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4242 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4243 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4244 precision_specified = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4245 if (*p == '*')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4246 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4247 int j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4248
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4249 j =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4250 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4251 get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4252 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4253 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4254 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4255 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4256 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4257 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4258 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4259 if (j >= 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4260 precision = j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4261 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4262 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4263 precision_specified = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4264 precision = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4265 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4266 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4267 else if (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4268 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4269 /* size_t could be wider than unsigned int; make sure we
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4270 * treat argument like common implementations do */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4271 unsigned int uj = *p++ - '0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4273 while (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4274 uj = 10 * uj + (unsigned int)(*p++ - '0');
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4275 precision = uj;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4276 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4277 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4278
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4279 /* parse 'h', 'l' and 'll' length modifiers */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4280 if (*p == 'h' || *p == 'l')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4281 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4282 length_modifier = *p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4283 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4284 if (length_modifier == 'l' && *p == 'l')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4285 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4286 /* double l = long long */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4287 length_modifier = 'l'; /* treat it as a single 'l' */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4288 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4289 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4290 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4291 fmt_spec = *p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4292
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4293 /* common synonyms: */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4294 switch (fmt_spec)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4295 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4296 case 'i': fmt_spec = 'd'; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4297 case 'D': fmt_spec = 'd'; length_modifier = 'l'; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4298 case 'U': fmt_spec = 'u'; length_modifier = 'l'; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4299 case 'O': fmt_spec = 'o'; length_modifier = 'l'; break;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4300 case 'F': fmt_spec = 'f'; break;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4301 default: break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4302 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4303
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4304 /* get parameter value, do initial processing */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4305 switch (fmt_spec)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4306 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4307 /* '%' and 'c' behave similar to 's' regarding flags and field
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4308 * widths */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4309 case '%':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4310 case 'c':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4311 case 's':
3914
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4312 case 'S':
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4313 length_modifier = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4314 str_arg_l = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4315 switch (fmt_spec)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4316 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4317 case '%':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4318 str_arg = p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4319 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4320
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4321 case 'c':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4322 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4323 int j;
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4324
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4325 j =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4326 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4327 get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4328 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4329 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4330 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4331 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4332 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4333 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4334 /* standard demands unsigned char */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4335 uchar_arg = (unsigned char)j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4336 str_arg = (char *)&uchar_arg;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4337 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4338 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4339
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4340 case 's':
3914
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4341 case 'S':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4342 str_arg =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4343 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4344 (char *)get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4345 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4346 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4347 tvs != NULL ? tv_str(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4348 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4349 va_arg(ap, char *);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4350 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4351 if (str_arg == NULL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4352 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4353 str_arg = "[NULL]";
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4354 str_arg_l = 6;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4355 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4356 /* make sure not to address string beyond the specified
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4357 * precision !!! */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4358 else if (!precision_specified)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4359 str_arg_l = strlen(str_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4360 /* truncate string if necessary as requested by precision */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4361 else if (precision == 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4362 str_arg_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4363 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4364 {
881
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4365 /* Don't put the #if inside memchr(), it can be a
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4366 * macro. */
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4367 #if SIZEOF_INT <= 2
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4368 char *q = memchr(str_arg, '\0', precision);
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4369 #else
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4370 /* memchr on HP does not like n > 2^31 !!! */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4371 char *q = memchr(str_arg, '\0',
881
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4372 precision <= (size_t)0x7fffffffL ? precision
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4373 : (size_t)0x7fffffffL);
810
9f345c48220b updated for version 7.0c
vimboss
parents: 799
diff changeset
4374 #endif
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4375 str_arg_l = (q == NULL) ? precision
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4376 : (size_t)(q - str_arg);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4377 }
3914
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4378 #ifdef FEAT_MBYTE
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4379 if (fmt_spec == 'S')
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4380 {
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4381 if (min_field_width != 0)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4382 min_field_width += STRLEN(str_arg)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4383 - mb_string2cells((char_u *)str_arg, -1);
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4384 if (precision)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4385 {
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4386 char_u *p1 = (char_u *)str_arg;
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4387 size_t i;
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4388
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4389 for (i = 0; i < precision && *p1; i++)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4390 p1 += mb_ptr2len(p1);
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4391
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4392 str_arg_l = precision = p1 - (char_u *)str_arg;
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4393 }
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4394 }
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4395 #endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4396 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4397
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4398 default:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4399 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4400 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4401 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4402
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4403 case 'd': case 'u': case 'o': case 'x': case 'X': case 'p':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4404 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4405 /* NOTE: the u, o, x, X and p conversion specifiers
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4406 * imply the value is unsigned; d implies a signed
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4407 * value */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4408
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4409 /* 0 if numeric argument is zero (or if pointer is
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4410 * NULL for 'p'), +1 if greater than zero (or nonzero
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4411 * for unsigned arguments), -1 if negative (unsigned
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4412 * argument is never negative) */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4413 int arg_sign = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4414
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4415 /* only defined for length modifier h, or for no
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4416 * length modifiers */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4417 int int_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4418 unsigned int uint_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4419
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4420 /* only defined for length modifier l */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4421 long int long_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4422 unsigned long int ulong_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4423
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4424 /* pointer argument value -only defined for p
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4425 * conversion */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4426 void *ptr_arg = NULL;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4427
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4428 if (fmt_spec == 'p')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4429 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4430 length_modifier = '\0';
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4431 ptr_arg =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4432 #ifndef HAVE_STDARG_H
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4433 (void *)get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4434 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4435 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4436 tvs != NULL ? (void *)tv_str(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4437 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4438 va_arg(ap, void *);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4439 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4440 if (ptr_arg != NULL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4441 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4442 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4443 else if (fmt_spec == 'd')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4444 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4445 /* signed */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4446 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4447 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4448 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4449 case 'h':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4450 /* char and short arguments are passed as int. */
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4451 int_arg =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4452 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4453 get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4454 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4455 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4456 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4457 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4458 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4459 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4460 if (int_arg > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4461 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4462 else if (int_arg < 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4463 arg_sign = -1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4464 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4465 case 'l':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4466 long_arg =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4467 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4468 get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4469 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4470 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4471 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4472 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4473 va_arg(ap, long int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4474 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4475 if (long_arg > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4476 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4477 else if (long_arg < 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4478 arg_sign = -1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4479 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4480 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4481 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4482 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4483 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4484 /* unsigned */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4485 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4486 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4487 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4488 case 'h':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4489 uint_arg =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4490 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4491 get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4492 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4493 # if defined(FEAT_EVAL)
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4494 tvs != NULL ? (unsigned)
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4495 tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4496 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4497 va_arg(ap, unsigned int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4498 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4499 if (uint_arg != 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4500 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4501 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4502 case 'l':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4503 ulong_arg =
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4504 #ifndef HAVE_STDARG_H
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4505 get_a_arg(arg_idx);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4506 #else
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4507 # if defined(FEAT_EVAL)
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4508 tvs != NULL ? (unsigned long)
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4509 tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4510 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4511 va_arg(ap, unsigned long int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4512 #endif
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4513 if (ulong_arg != 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4514 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4515 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4516 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4517 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4518
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4519 str_arg = tmp;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4520 str_arg_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4521
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4522 /* NOTE:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4523 * For d, i, u, o, x, and X conversions, if precision is
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4524 * specified, the '0' flag should be ignored. This is so
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4525 * with Solaris 2.6, Digital UNIX 4.0, HPUX 10, Linux,
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4526 * FreeBSD, NetBSD; but not with Perl.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4527 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4528 if (precision_specified)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4529 zero_padding = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4530 if (fmt_spec == 'd')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4531 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4532 if (force_sign && arg_sign >= 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4533 tmp[str_arg_l++] = space_for_positive ? ' ' : '+';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4534 /* leave negative numbers for sprintf to handle, to
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4535 * avoid handling tricky cases like (short int)-32768 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4536 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4537 else if (alternate_form)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4538 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4539 if (arg_sign != 0
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4540 && (fmt_spec == 'x' || fmt_spec == 'X') )
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4541 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4542 tmp[str_arg_l++] = '0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4543 tmp[str_arg_l++] = fmt_spec;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4544 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4545 /* alternate form should have no effect for p
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4546 * conversion, but ... */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4547 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4548
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4549 zero_padding_insertion_ind = str_arg_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4550 if (!precision_specified)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4551 precision = 1; /* default precision is 1 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4552 if (precision == 0 && arg_sign == 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4553 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4554 /* When zero value is formatted with an explicit
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4555 * precision 0, the resulting formatted string is
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4556 * empty (d, i, u, o, x, X, p). */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4557 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4558 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4559 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4560 char f[5];
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4561 int f_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4562
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4563 /* construct a simple format string for sprintf */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4564 f[f_l++] = '%';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4565 if (!length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4566 ;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4567 else if (length_modifier == '2')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4568 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4569 f[f_l++] = 'l';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4570 f[f_l++] = 'l';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4571 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4572 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4573 f[f_l++] = length_modifier;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4574 f[f_l++] = fmt_spec;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4575 f[f_l++] = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4576
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4577 if (fmt_spec == 'p')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4578 str_arg_l += sprintf(tmp + str_arg_l, f, ptr_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4579 else if (fmt_spec == 'd')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4580 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4581 /* signed */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4582 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4583 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4584 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4585 case 'h': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4586 tmp + str_arg_l, f, int_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4587 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4588 case 'l': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4589 tmp + str_arg_l, f, long_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4590 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4591 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4592 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4593 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4594 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4595 /* unsigned */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4596 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4597 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4598 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4599 case 'h': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4600 tmp + str_arg_l, f, uint_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4601 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4602 case 'l': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4603 tmp + str_arg_l, f, ulong_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4604 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4605 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4606 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4607
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4608 /* include the optional minus sign and possible
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4609 * "0x" in the region before the zero padding
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4610 * insertion point */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4611 if (zero_padding_insertion_ind < str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4612 && tmp[zero_padding_insertion_ind] == '-')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4613 zero_padding_insertion_ind++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4614 if (zero_padding_insertion_ind + 1 < str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4615 && tmp[zero_padding_insertion_ind] == '0'
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4616 && (tmp[zero_padding_insertion_ind + 1] == 'x'
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4617 || tmp[zero_padding_insertion_ind + 1] == 'X'))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4618 zero_padding_insertion_ind += 2;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4619 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4620
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4621 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4622 size_t num_of_digits = str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4623 - zero_padding_insertion_ind;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4624
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4625 if (alternate_form && fmt_spec == 'o'
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4626 /* unless zero is already the first
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4627 * character */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4628 && !(zero_padding_insertion_ind < str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4629 && tmp[zero_padding_insertion_ind] == '0'))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4630 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4631 /* assure leading zero for alternate-form
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4632 * octal numbers */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4633 if (!precision_specified
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4634 || precision < num_of_digits + 1)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4635 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4636 /* precision is increased to force the
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4637 * first character to be zero, except if a
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4638 * zero value is formatted with an
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4639 * explicit precision of zero */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4640 precision = num_of_digits + 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4641 precision_specified = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4642 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4643 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4644 /* zero padding to specified precision? */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4645 if (num_of_digits < precision)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4646 number_of_zeros_to_pad = precision - num_of_digits;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4647 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4648 /* zero padding to specified minimal field width? */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4649 if (!justify_left && zero_padding)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4650 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4651 int n = (int)(min_field_width - (str_arg_l
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4652 + number_of_zeros_to_pad));
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4653 if (n > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4654 number_of_zeros_to_pad += n;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4655 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4656 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4657 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4658
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4659 #ifdef FEAT_FLOAT
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4660 case 'f':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4661 case 'e':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4662 case 'E':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4663 case 'g':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4664 case 'G':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4665 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4666 /* Floating point. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4667 double f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4668 double abs_f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4669 char format[40];
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4670 int l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4671 int remove_trailing_zeroes = FALSE;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4672
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4673 f =
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4674 # ifndef HAVE_STDARG_H
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4675 get_a_arg(arg_idx);
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4676 # else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4677 # if defined(FEAT_EVAL)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4678 tvs != NULL ? tv_float(tvs, &arg_idx) :
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4679 # endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4680 va_arg(ap, double);
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4681 # endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4682 abs_f = f < 0 ? -f : f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4683
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4684 if (fmt_spec == 'g' || fmt_spec == 'G')
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4685 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4686 /* Would be nice to use %g directly, but it prints
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4687 * "1.0" as "1", we don't want that. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4688 if ((abs_f >= 0.001 && abs_f < 10000000.0)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4689 || abs_f == 0.0)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4690 fmt_spec = 'f';
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4691 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4692 fmt_spec = fmt_spec == 'g' ? 'e' : 'E';
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4693 remove_trailing_zeroes = TRUE;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4694 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4695
1783
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4696 if (fmt_spec == 'f' &&
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4697 #ifdef VAX
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4698 abs_f > 1.0e38
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4699 #else
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4700 abs_f > 1.0e307
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4701 #endif
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4702 )
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4703 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4704 /* Avoid a buffer overflow */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4705 strcpy(tmp, "inf");
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4706 str_arg_l = 3;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4707 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4708 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4709 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4710 format[0] = '%';
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4711 l = 1;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4712 if (precision_specified)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4713 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4714 size_t max_prec = TMP_LEN - 10;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4715
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4716 /* Make sure we don't get more digits than we
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4717 * have room for. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4718 if (fmt_spec == 'f' && abs_f > 1.0)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4719 max_prec -= (size_t)log10(abs_f);
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4720 if (precision > max_prec)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4721 precision = max_prec;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4722 l += sprintf(format + 1, ".%d", (int)precision);
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4723 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4724 format[l] = fmt_spec;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4725 format[l + 1] = NUL;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4726 str_arg_l = sprintf(tmp, format, f);
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4727
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4728 if (remove_trailing_zeroes)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4729 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4730 int i;
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4731 char *tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4732
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4733 /* Using %g or %G: remove superfluous zeroes. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4734 if (fmt_spec == 'f')
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4735 tp = tmp + str_arg_l - 1;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4736 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4737 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4738 tp = (char *)vim_strchr((char_u *)tmp,
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4739 fmt_spec == 'e' ? 'e' : 'E');
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4740 if (tp != NULL)
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4741 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4742 /* Remove superfluous '+' and leading
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4743 * zeroes from the exponent. */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4744 if (tp[1] == '+')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4745 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4746 /* Change "1.0e+07" to "1.0e07" */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4747 STRMOVE(tp + 1, tp + 2);
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4748 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4749 }
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4750 i = (tp[1] == '-') ? 2 : 1;
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4751 while (tp[i] == '0')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4752 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4753 /* Change "1.0e07" to "1.0e7" */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4754 STRMOVE(tp + i, tp + i + 1);
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4755 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4756 }
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4757 --tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4758 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4759 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4760
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4761 if (tp != NULL && !precision_specified)
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4762 /* Remove trailing zeroes, but keep the one
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4763 * just after a dot. */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4764 while (tp > tmp + 2 && *tp == '0'
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4765 && tp[-1] != '.')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4766 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4767 STRMOVE(tp, tp + 1);
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4768 --tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4769 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4770 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4771 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4772 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4773 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4774 char *tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4775
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4776 /* Be consistent: some printf("%e") use 1.0e+12
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4777 * and some 1.0e+012. Remove one zero in the last
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4778 * case. */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4779 tp = (char *)vim_strchr((char_u *)tmp,
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4780 fmt_spec == 'e' ? 'e' : 'E');
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4781 if (tp != NULL && (tp[1] == '+' || tp[1] == '-')
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4782 && tp[2] == '0'
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4783 && vim_isdigit(tp[3])
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4784 && vim_isdigit(tp[4]))
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4785 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4786 STRMOVE(tp + 2, tp + 3);
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4787 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4788 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4789 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4790 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4791 str_arg = tmp;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4792 break;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4793 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4794 #endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4795
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4796 default:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4797 /* unrecognized conversion specifier, keep format string
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4798 * as-is */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4799 zero_padding = 0; /* turn zero padding off for non-numeric
1189
7cdd85615e4e updated for version 7.1b
vimboss
parents: 1059
diff changeset
4800 conversion */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4801 justify_left = 1;
856
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
4802 min_field_width = 0; /* reset flags */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4803
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4804 /* discard the unrecognized conversion, just keep *
856
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
4805 * the unrecognized conversion character */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4806 str_arg = p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4807 str_arg_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4808 if (*p != NUL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4809 str_arg_l++; /* include invalid conversion specifier
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4810 unchanged if not at end-of-string */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4811 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4812 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4813
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4814 if (*p != NUL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4815 p++; /* step over the just processed conversion specifier */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4816
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4817 /* insert padding to the left as requested by min_field_width;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4818 * this does not include the zero padding in case of numerical
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4819 * conversions*/
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4820 if (!justify_left)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4821 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4822 /* left padding with blank or zero */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4823 int pn = (int)(min_field_width - (str_arg_l + number_of_zeros_to_pad));
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4824
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4825 if (pn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4826 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4827 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4828 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4829 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4830
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4831 vim_memset(str + str_l, zero_padding ? '0' : ' ',
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4832 (size_t)pn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4833 : (size_t)pn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4834 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4835 str_l += pn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4836 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4837 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4838
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4839 /* zero padding as requested by the precision or by the minimal
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4840 * field width for numeric conversions required? */
330
f76b0d38b6bd updated for version 7.0086
vimboss
parents: 291
diff changeset
4841 if (number_of_zeros_to_pad == 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4842 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4843 /* will not copy first part of numeric right now, *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4844 * force it to be copied later in its entirety */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4845 zero_padding_insertion_ind = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4846 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4847 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4848 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4849 /* insert first part of numerics (sign or '0x') before zero
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4850 * padding */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4851 int zn = (int)zero_padding_insertion_ind;
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4852
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4853 if (zn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4854 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4855 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4856 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4857 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4858
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4859 mch_memmove(str + str_l, str_arg,
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4860 (size_t)zn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4861 : (size_t)zn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4862 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4863 str_l += zn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4864 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4865
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4866 /* insert zero padding as requested by the precision or min
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4867 * field width */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4868 zn = (int)number_of_zeros_to_pad;
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4869 if (zn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4870 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4871 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4872 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4873 size_t avail = str_m-str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4874
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4875 vim_memset(str + str_l, '0',
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4876 (size_t)zn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4877 : (size_t)zn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4878 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4879 str_l += zn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4880 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4881 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4882
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4883 /* insert formatted string
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4884 * (or as-is conversion specifier for unknown conversions) */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4885 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4886 int sn = (int)(str_arg_l - zero_padding_insertion_ind);
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4887
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4888 if (sn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4889 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4890 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4891 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4892 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4893
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4894 mch_memmove(str + str_l,
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4895 str_arg + zero_padding_insertion_ind,
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4896 (size_t)sn > avail ? avail : (size_t)sn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4897 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4898 str_l += sn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4899 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4900 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4901
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4902 /* insert right padding */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4903 if (justify_left)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4904 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4905 /* right blank padding to the field width */
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4906 int pn = (int)(min_field_width
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4907 - (str_arg_l + number_of_zeros_to_pad));
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4908
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4909 if (pn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4910 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4911 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4912 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4913 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4914
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4915 vim_memset(str + str_l, ' ',
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4916 (size_t)pn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4917 : (size_t)pn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4918 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
4919 str_l += pn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4920 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4921 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4922 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4923 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4924
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4925 if (str_m > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4926 {
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4927 /* make sure the string is nul-terminated even at the expense of
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4928 * overwriting the last character (shouldn't happen, but just in case)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4929 * */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4930 str[str_l <= str_m - 1 ? str_l : str_m - 1] = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4931 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4932
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4933 #ifdef HAVE_STDARG_H
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4934 if (tvs != NULL && tvs[arg_idx - 1].v_type != VAR_UNKNOWN)
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4935 EMSG(_("E767: Too many arguments to printf()"));
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4936 #endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4937
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4938 /* Return the number of characters formatted (excluding trailing nul
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4939 * character), that is, the number of characters that would have been
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4940 * written to the buffer if it were large enough. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4941 return (int)str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4942 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4943
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4944 #endif /* PROTO */