annotate src/message.c @ 16150:b23048205589 v8.1.1080

patch 8.1.1080: when a screendump test fails, moving the file is a hassle commit https://github.com/vim/vim/commit/ef7f0e367eeaf6fb31b1caa0e3de1a4b07e86af3 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 30 15:59:51 2019 +0100 patch 8.1.1080: when a screendump test fails, moving the file is a hassle Problem: When a screendump test fails, moving the file is a hassle. Solution: Instead of appending ".failed" to the file name, keep the same file name but put the screendump in the "failed" directory. Then the file name only needs to be typed once when moving a screendump.
author Bram Moolenaar <Bram@vim.org>
date Sat, 30 Mar 2019 16:00:06 +0100
parents 78faa25f9698
children c1c25e2523a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 10040
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
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() */
9988
cafe247c949a commit https://github.com/vim/vim/commit/44ca54aeb9a0eca41aea203786e33d82e69d0615
Christian Brabandt <cb@256bit.org>
parents: 9986
diff changeset
15 #define USING_FLOAT_STUFF
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
19 static void add_msg_hist(char_u *s, int len, int attr);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
20 static void hit_return_msg(void);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
21 static void msg_home_replace_attr(char_u *fname, int attr);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
22 static void msg_puts_attr_len(char *str, int maxlen, int attr);
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
23 static void msg_puts_display(char_u *str, int maxlen, int attr, int recurse);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
24 static void msg_scroll_up(void);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
25 static void inc_msg_scrolled(void);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
26 static void store_sb_text(char_u **sb_str, char_u *s, int attr, int *sb_col, int finish);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
27 static void t_puts(int *t_col, char_u *t_s, char_u *s, int attr);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
28 static void msg_puts_printf(char_u *str, int maxlen);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
29 static int do_more_prompt(int typed_char);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
30 static void msg_screen_putchar(int c, int attr);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
31 static int msg_check_screen(void);
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
32 static void redir_write(char_u *s, int maxlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 #ifdef FEAT_CON_DIALOG
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
34 static char_u *msg_show_console_dialog(char_u *message, char_u *buttons, int dfltbutton);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 static int confirm_msg_used = FALSE; /* displaying confirm_msg */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 static char_u *confirm_msg = NULL; /* ":confirm" message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 static char_u *confirm_msg_tail; /* tail of confirm_msg */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 #endif
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
39 #ifdef FEAT_JOB_CHANNEL
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
40 static int emsg_to_channel_log = FALSE;
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
41 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 struct msg_hist
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 struct msg_hist *next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 char_u *msg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 static struct msg_hist *first_msg_hist = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 static struct msg_hist *last_msg_hist = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 static int msg_hist_len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
54 static FILE *verbose_fd = NULL;
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
55 static int verbose_did_open = FALSE;
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
56
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 * When writing messages to the screen, there are many different situations.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 * A number of variables is used to remember the current state:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 * msg_didany TRUE when messages were written since the last time the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 * user reacted to a prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 * Reset: After hitting a key for the hit-return prompt,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 * hitting <CR> for the command line or input().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 * Set: When any message is written to the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 * msg_didout TRUE when something was written to the current line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 * Reset: When advancing to the next line, when the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 * text can be overwritten.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 * Set: When any message is written to the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 * msg_nowait No extra delay for the last drawn message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 * Used in normal_cmd() before the mode message is drawn.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 * emsg_on_display There was an error message recently. Indicates that there
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 * should be a delay before redrawing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 * msg_scroll The next message should not overwrite the current one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 * msg_scrolled How many lines the screen has been scrolled (because of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 * messages). Used in update_screen() to scroll the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 * back. Incremented each time the screen scrolls a line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 * msg_scrolled_ign TRUE when msg_scrolled is non-zero and msg_puts_attr()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 * writes something without scrolling should not make
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 * need_wait_return to be set. This is a hack to make ":ts"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 * work without an extra prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 * 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
82 * more-prompt is to be given. -1 when not set.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 * need_wait_return TRUE when the hit-return prompt is needed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 * Reset: After giving the hit-return prompt, when the user
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 * has answered some other prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 * Set: When the ruler or typeahead display is overwritten,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 * scrolling the screen for some message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 * keep_msg Message to be displayed after redrawing the screen, in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 * main_loop().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 * This is an allocated string or NULL when not used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 * msg(s) - displays the string 's' on the status line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 * When terminal not initialized (yet) mch_errmsg(..) is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 * return TRUE if wait_return not called
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 int
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
99 msg(char *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 return msg_attr_keep(s, 0, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
104 #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \
1924
75a69023117c updated for version 7.2-221
vimboss
parents: 1883
diff changeset
105 || defined(FEAT_GUI_GTK) || defined(PROTO)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
106 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
107 * Like msg() but keep it silent when 'verbosefile' is set.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
108 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
109 int
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
110 verb_msg(char *s)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
111 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
112 int n;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
113
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
114 verbose_enter();
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
115 n = msg_attr_keep(s, 0, FALSE);
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
116 verbose_leave();
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
117
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
118 return n;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
119 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
120 #endif
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
121
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 int
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
123 msg_attr(char *s, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 return msg_attr_keep(s, attr, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
129 msg_attr_keep(
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
130 char *s,
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
131 int attr,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
132 int keep) /* TRUE: set keep_msg if it doesn't scroll */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 static int entered = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 char_u *buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
138 /* Skip messages not matching ":filter pattern".
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
139 * Don't filter when there is an error. */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
140 if (!emsg_on_display && message_filtered((char_u *)s))
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
141 return TRUE;
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
142
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 if (attr == 0)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
145 set_vim_var_string(VV_STATUSMSG, (char_u *)s, -1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 * It is possible that displaying a messages causes a problem (e.g.,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 * when redrawing the window), which causes another message, etc.. To
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 * break this loop, limit the recursiveness to 3 levels.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 if (entered >= 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 ++entered;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 /* Add message to history (unless it's a repeated kept message or a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 * truncated message) */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
159 if ((char_u *)s != keep_msg
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 || (*s != '<'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 && last_msg_hist != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 && last_msg_hist->msg != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 && STRCMP(s, last_msg_hist->msg)))
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
164 add_msg_hist((char_u *)s, -1, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
166 #ifdef FEAT_JOB_CHANNEL
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
167 if (emsg_to_channel_log)
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
168 /* Write message in the channel log. */
11937
c893d6c00497 patch 8.0.0848: using multiple ch_log functions is clumsy
Christian Brabandt <cb@256bit.org>
parents: 11653
diff changeset
169 ch_log(NULL, "ERROR: %s", (char *)s);
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
170 #endif
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
171
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 /* When displaying keep_msg, don't let msg_start() free it, caller must do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 * that. */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
174 if ((char_u *)s == keep_msg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 keep_msg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 /* Truncate the message if needed. */
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
178 msg_start();
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
179 buf = msg_strtrunc((char_u *)s, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 if (buf != NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
181 s = (char *)buf;
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
182
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
183 msg_outtrans_attr((char_u *)s, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 retval = msg_end();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
187 if (keep && retval && vim_strsize((char_u *)s)
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
188 < (int)(Rows - cmdline_row - 1) * Columns + sc_col)
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
189 set_keep_msg((char_u *)s, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 --entered;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 return retval;
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 * Truncate a string such that it can be printed without causing a scroll.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 * Returns an allocated string or NULL when no truncating is done.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
201 msg_strtrunc(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
202 char_u *s,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
203 int force) /* always truncate */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 char_u *buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 int room;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 /* May truncate message to avoid a hit-return prompt */
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
210 if ((!msg_scroll && !need_wait_return && shortmess(SHM_TRUNCALL)
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
211 && !exmode_active && msg_silent == 0) || force)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 len = vim_strsize(s);
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
214 if (msg_scrolled != 0)
513
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
215 /* Use all the columns. */
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
216 room = (int)(Rows - msg_row) * Columns - 1;
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
217 else
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
218 /* Use up to 'showcmd' column. */
6e2a7416d228 updated for version 7.0144
vimboss
parents: 482
diff changeset
219 room = (int)(Rows - msg_row - 1) * Columns + sc_col - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 if (len > room && room > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 {
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
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
230 len = room + 2;
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
231 buf = alloc(len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 if (buf != NULL)
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
233 trunc_string(s, buf, room, len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 }
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 * Truncate a string "s" to "buf" with cell width "room".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 * "s" and "buf" may be equal.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
244 trunc_string(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
245 char_u *s,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
246 char_u *buf,
9640
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
247 int room_in,
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
248 int buflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 {
9640
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
250 size_t room = room_in - 3; /* "..." takes 3 chars */
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
251 size_t half;
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
252 size_t len = 0;
7
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
9640
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
257 if (room_in < 3)
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
258 room = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 half = room / 2;
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);
9542
00ee8d8c2e0c commit https://github.com/vim/vim/commit/502ae4ba63561c98ac69af26cd9883bfd18d225f
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
271 if (len + n > half)
7
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 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
276 for (n = (*mb_ptr2len)(s + e); --n > 0; )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 {
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
278 if (++e == buflen)
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
279 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 buf[e] = s[e];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 /* Last part: End of the string. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 i = e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 if (enc_dbcs != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 /* For DBCS going backwards in a string is slow, but
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 * computing the cell width isn't too slow: go forward
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 * until the rest fits. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 n = vim_strsize(s + i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 while (len + n > room)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 n -= ptr2cells(s + i);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
295 i += (*mb_ptr2len)(s + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 else if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 /* For UTF-8 we can go backwards easily. */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
301 half = i = (int)STRLEN(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
304 do
11269
121d29004998 patch 8.0.0520: using a function pointer while the function is known
Christian Brabandt <cb@256bit.org>
parents: 11163
diff changeset
305 half = half - utf_head_off(s, s + half - 1) - 1;
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
306 while (half > 0 && utf_iscomposing(utf_ptr2char(s + half)));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 n = ptr2cells(s + half);
9581
716382aaa0c0 commit https://github.com/vim/vim/commit/b9644433d2728e99fab874e5e33147ad95d23a31
Christian Brabandt <cb@256bit.org>
parents: 9542
diff changeset
308 if (len + n > room || half == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 len += n;
9698
a1b1405a33ca commit https://github.com/vim/vim/commit/a5c0cc11330157c721748e317e8ff54b649610ca
Christian Brabandt <cb@256bit.org>
parents: 9640
diff changeset
311 i = (int)half;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 for (i = (int)STRLEN(s); len + (n = ptr2cells(s + i - 1)) <= room; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 len += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
320
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
321 if (i <= e + 3)
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
322 {
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
323 /* text fits without truncating */
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
324 if (s != buf)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
325 {
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
326 len = STRLEN(s);
9640
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
327 if (len >= (size_t)buflen)
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
328 len = buflen - 1;
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
329 len = len - e + 1;
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
330 if (len < 1)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
331 buf[e - 1] = NUL;
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
332 else
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
333 mch_memmove(buf + e, s + e, len);
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
334 }
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
335 }
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
336 else if (e + 3 < buflen)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
337 {
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
338 /* 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
339 mch_memmove(buf + e, "...", (size_t)3);
9640
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
340 len = STRLEN(s + i) + 1;
bc0a6d9a9a07 commit https://github.com/vim/vim/commit/d4f31dc45482e8db527ca044b9c3436b1e750006
Christian Brabandt <cb@256bit.org>
parents: 9605
diff changeset
341 if (len >= (size_t)buflen - e - 3)
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
342 len = buflen - e - 3 - 1;
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
343 mch_memmove(buf + e + 3, s + i, len);
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
344 buf[e + 3 + len - 1] = NUL;
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
345 }
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
346 else
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
347 {
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
348 /* can't fit in the "...", just truncate it */
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9497
diff changeset
349 buf[e - 1] = NUL;
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
350 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 * Automatic prototype generation does not understand this function.
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
355 * Note: Caller of smsg() and smsg_attr() must check the resulting string is
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 * shorter than IOSIZE!!!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 #ifndef PROTO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
360 int vim_snprintf(char *str, size_t str_m, const char *fmt, ...);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
361
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 int
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
363 # ifdef __BORLANDC__
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 _RTLENTRYF
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
365 # endif
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
366 smsg(const char *s, ...)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 va_list arglist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 va_start(arglist, s);
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
371 vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 va_end(arglist);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
373 return msg((char *)IObuff);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 int
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
377 # ifdef __BORLANDC__
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 _RTLENTRYF
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
379 # endif
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
380 smsg_attr(int attr, const char *s, ...)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 va_list arglist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 va_start(arglist, s);
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
385 vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 va_end(arglist);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
387 return msg_attr((char *)IObuff, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389
14237
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
390 int
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
391 # ifdef __BORLANDC__
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
392 _RTLENTRYF
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
393 # endif
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
394 smsg_attr_keep(int attr, const char *s, ...)
14237
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
395 {
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
396 va_list arglist;
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
397
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
398 va_start(arglist, s);
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
399 vim_vsnprintf((char *)IObuff, IOSIZE, s, arglist);
14237
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
400 va_end(arglist);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
401 return msg_attr_keep((char *)IObuff, attr, TRUE);
14237
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
402 }
487d7bda80ea patch 8.1.0135: undo message delays screen update for CTRL-O u
Christian Brabandt <cb@256bit.org>
parents: 14210
diff changeset
403
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 * Remember the last sourcing name/lnum used in an error message, so that it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 * isn't printed each time when it didn't change.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 static int last_sourcing_lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 static char_u *last_sourcing_name = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 * Reset the last used sourcing name/lnum. Makes sure it is displayed again
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 * for the next error message;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 */
360
22c8aff09ad3 updated for version 7.0094
vimboss
parents: 355
diff changeset
417 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
418 reset_last_sourcing(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 {
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13188
diff changeset
420 VIM_CLEAR(last_sourcing_name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 last_sourcing_lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 /*
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
425 * Return TRUE if "sourcing_name" differs from "last_sourcing_name".
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
426 */
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
427 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
428 other_sourcing_name(void)
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
429 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
430 if (sourcing_name != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
431 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
432 if (last_sourcing_name != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
433 return STRCMP(sourcing_name, last_sourcing_name) != 0;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
434 return TRUE;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
435 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
436 return FALSE;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
437 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
438
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
439 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 * Get the message about the source, as used for an error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 * Returns an allocated string with room for one more character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 * Returns NULL when no message is to be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 static char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
445 get_emsg_source(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 char_u *Buf, *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
449 if (sourcing_name != NULL && other_sourcing_name())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 p = (char_u *)_("Error detected while processing %s:");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 Buf = alloc((unsigned)(STRLEN(sourcing_name) + STRLEN(p)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 if (Buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 sprintf((char *)Buf, (char *)p, sourcing_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 return Buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 * Get the message about the source lnum, as used for an error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 * Returns an allocated string with room for one more character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 * Returns NULL when no message is to be given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 static char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
466 get_emsg_lnum(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 char_u *Buf, *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 /* lnum is 0 when executing a command from the command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 * argument, we don't want a line number then */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 if (sourcing_name != NULL
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
473 && (other_sourcing_name() || sourcing_lnum != last_sourcing_lnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 && sourcing_lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 p = (char_u *)_("line %4ld:");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 Buf = alloc((unsigned)(STRLEN(p) + 20));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 if (Buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 sprintf((char *)Buf, (char *)p, (long)sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 return Buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 /*
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
486 * Display name and line number for the source of an error.
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
487 * 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
488 * is only displayed if it changed.
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
489 */
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
490 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
491 msg_source(int attr)
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
492 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
493 char_u *p;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
494
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
495 ++no_wait_return;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
496 p = get_emsg_source();
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
497 if (p != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
498 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
499 msg_attr((char *)p, attr);
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
500 vim_free(p);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
501 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
502 p = get_emsg_lnum();
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
503 if (p != NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
504 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
505 msg_attr((char *)p, HL_ATTR(HLF_N));
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
506 vim_free(p);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
507 last_sourcing_lnum = sourcing_lnum; /* only once for each line */
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
508 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
509
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
510 /* remember the last sourcing name printed, also when it's empty */
36
125e80798a85 updated for version 7.0021
vimboss
parents: 28
diff changeset
511 if (sourcing_name == NULL || other_sourcing_name())
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
512 {
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
513 vim_free(last_sourcing_name);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
514 if (sourcing_name == NULL)
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
515 last_sourcing_name = NULL;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
516 else
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
517 last_sourcing_name = vim_strsave(sourcing_name);
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
518 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
519 --no_wait_return;
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
520 }
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
521
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
522 /*
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
523 * Return TRUE if not giving error messages right now:
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
524 * If "emsg_off" is set: no error messages at the moment.
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
525 * If "msg" is in 'debug': do error message but without side effects.
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
526 * If "emsg_skip" is set: never do error messages.
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
527 */
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
528 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
529 emsg_not_now(void)
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
530 {
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
531 if ((emsg_off > 0 && vim_strchr(p_debug, 'm') == NULL
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
532 && vim_strchr(p_debug, 't') == NULL)
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
533 #ifdef FEAT_EVAL
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
534 || emsg_skip > 0
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
535 #endif
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
536 )
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
537 return TRUE;
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
538 return FALSE;
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
539 }
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
540
11016
4e7308525fe7 patch 8.0.0397: can't build with +viminfo but without +eval
Christian Brabandt <cb@256bit.org>
parents: 11012
diff changeset
541 #if defined(FEAT_EVAL) || defined(PROTO)
11006
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
542 static garray_T ignore_error_list = GA_EMPTY;
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
543
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
544 void
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
545 ignore_error_for_testing(char_u *error)
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
546 {
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
547 if (ignore_error_list.ga_itemsize == 0)
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
548 ga_init2(&ignore_error_list, sizeof(char_u *), 1);
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
549
15219
dada0b389d4f patch 8.1.0619: :echomsg and :echoerr do not handle List and Dict
Bram Moolenaar <Bram@vim.org>
parents: 15211
diff changeset
550 if (STRCMP("RESET", error) == 0)
dada0b389d4f patch 8.1.0619: :echomsg and :echoerr do not handle List and Dict
Bram Moolenaar <Bram@vim.org>
parents: 15211
diff changeset
551 ga_clear_strings(&ignore_error_list);
dada0b389d4f patch 8.1.0619: :echomsg and :echoerr do not handle List and Dict
Bram Moolenaar <Bram@vim.org>
parents: 15211
diff changeset
552 else
dada0b389d4f patch 8.1.0619: :echomsg and :echoerr do not handle List and Dict
Bram Moolenaar <Bram@vim.org>
parents: 15211
diff changeset
553 ga_add_string(&ignore_error_list, error);
11006
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
554 }
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
555
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
556 static int
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
557 ignore_error(char_u *msg)
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
558 {
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
559 int i;
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
560
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
561 for (i = 0; i < ignore_error_list.ga_len; ++i)
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
562 if (strstr((char *)msg,
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
563 (char *)((char_u **)(ignore_error_list.ga_data))[i]) != NULL)
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
564 return TRUE;
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
565 return FALSE;
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
566 }
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
567 #endif
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
568
9605
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
569 #if !defined(HAVE_STRERROR) || defined(PROTO)
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
570 /*
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
571 * Replacement for perror() that behaves more or less like emsg() was called.
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
572 * v:errmsg will be set and called_emsg will be set.
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
573 */
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
574 void
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
575 do_perror(char *msg)
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
576 {
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
577 perror(msg);
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
578 ++emsg_silent;
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
579 emsg(msg);
9605
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
580 --emsg_silent;
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
581 }
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
582 #endif
846d4bad2df7 commit https://github.com/vim/vim/commit/b869c0da31716ff14bbfd63346d140d0a1d68af7
Christian Brabandt <cb@256bit.org>
parents: 9581
diff changeset
583
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
584 /*
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
585 * emsg_core() - display an error message
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 * Rings the bell, if appropriate, and calls message() to do the real work
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 * When terminal not initialized (yet) mch_errmsg(..) is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 *
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
590 * Return TRUE if wait_return not called.
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
591 * Note: caller must check 'emsg_not_now()' before calling this.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 */
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
593 static int
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
594 emsg_core(char_u *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 char_u *p;
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
598 int r;
7
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 int ignore = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 int severe;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603
11006
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
604 #ifdef FEAT_EVAL
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
605 /* When testing some errors are turned into a normal message. */
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
606 if (ignore_error(s))
11012
ae2de10e8398 patch 8.0.0395: testing the + register fails with Motif
Christian Brabandt <cb@256bit.org>
parents: 11006
diff changeset
607 /* don't call msg() if it results in a dialog */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
608 return msg_use_printf() ? FALSE : msg((char *)s);
11006
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
609 #endif
b3601a8eb679 patch 8.0.0392: GUI test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 10589
diff changeset
610
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 called_emsg = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 #ifdef FEAT_EVAL
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12152
diff changeset
614 /* If "emsg_severe" is TRUE: When an error exception is to be thrown,
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12152
diff changeset
615 * prefer this message over previous messages for the same command. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 severe = emsg_severe;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 emsg_severe = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619
839
1f3b1021f002 updated for version 7.0e05
vimboss
parents: 835
diff changeset
620 if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 * Cause a throw of an error exception if appropriate. Don't display
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 * the error message in this case. (If no matching catch clause will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 * be found, the message will be displayed later on.) "ignore" is set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 * when the message should be ignored completely (used for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 * interrupt message).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 if (cause_errthrow(s, severe, &ignore) == TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 if (!ignore)
15079
a527110d5f56 patch 8.1.0550: expression evaluation may repeat an error message
Bram Moolenaar <Bram@vim.org>
parents: 14909
diff changeset
633 ++did_emsg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 /* set "v:errmsg", also when using ":silent! cmd" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 set_vim_var_string(VV_ERRMSG, s, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 /*
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
642 * When using ":silent! cmd" ignore error messages.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 * But do write it to the redirection file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 if (emsg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 {
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
647 if (emsg_noredir == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 {
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
649 msg_start();
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
650 p = get_emsg_source();
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
651 if (p != NULL)
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
652 {
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
653 STRCAT(p, "\n");
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
654 redir_write(p, -1);
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
655 vim_free(p);
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
656 }
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
657 p = get_emsg_lnum();
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
658 if (p != NULL)
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
659 {
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
660 STRCAT(p, "\n");
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
661 redir_write(p, -1);
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
662 vim_free(p);
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
663 }
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
664 redir_write(s, -1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 }
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
666 #ifdef FEAT_JOB_CHANNEL
11937
c893d6c00497 patch 8.0.0848: using multiple ch_log functions is clumsy
Christian Brabandt <cb@256bit.org>
parents: 11653
diff changeset
667 ch_log(NULL, "ERROR: %s", (char *)s);
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
668 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671
10589
b0c9c1a05054 patch 8.0.0184: when an error is caught Vim still exits with non-zero result
Christian Brabandt <cb@256bit.org>
parents: 10426
diff changeset
672 ex_exitval = 1;
b0c9c1a05054 patch 8.0.0184: when an error is caught Vim still exits with non-zero result
Christian Brabandt <cb@256bit.org>
parents: 10426
diff changeset
673
12674
e769c912fcd9 patch 8.0.1215: newer gcc warns for implicit fallthrough
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
674 /* Reset msg_silent, an error causes messages to be switched back on.
e769c912fcd9 patch 8.0.1215: newer gcc warns for implicit fallthrough
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
675 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 msg_silent = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 cmd_silent = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 if (global_busy) /* break :global command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 ++global_busy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 if (p_eb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 beep_flush(); /* also includes flush_buffers() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 else
14909
c97b4b537572 patch 8.1.0466: autocmd test fails
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
685 flush_buffers(FLUSH_MINIMAL); // flush internal buffers
15079
a527110d5f56 patch 8.1.0550: expression evaluation may repeat an error message
Bram Moolenaar <Bram@vim.org>
parents: 14909
diff changeset
686 ++did_emsg; // flag for DoOneCmd()
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12152
diff changeset
687 #ifdef FEAT_EVAL
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12152
diff changeset
688 did_uncaught_emsg = TRUE;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12152
diff changeset
689 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 emsg_on_display = TRUE; /* remember there is an error message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 ++msg_scroll; /* don't overwrite a previous message */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
694 attr = HL_ATTR(HLF_E); /* set highlight mode for error messages */
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
695 if (msg_scrolled != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 need_wait_return = TRUE; /* needed in case emsg() is called after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 * wait_return has reset need_wait_return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 * and a redraw is expected because
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 * msg_scrolled is non-zero */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
701 #ifdef FEAT_JOB_CHANNEL
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
702 emsg_to_channel_log = TRUE;
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
703 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 * Display name and line number for the source of the error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 */
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
707 msg_source(attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 * Display the error message itself.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 */
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 8
diff changeset
712 msg_nowait = FALSE; /* wait for this msg */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
713 r = msg_attr((char *)s, attr);
10426
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
714
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
715 #ifdef FEAT_JOB_CHANNEL
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
716 emsg_to_channel_log = FALSE;
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
717 #endif
acfc83aca8ee commit https://github.com/vim/vim/commit/958dc6923d341390531888058495569d73c356c3
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
718 return r;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 /*
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
722 * Print an error message.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 int
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
725 emsg(char *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
727 /* Skip this if not giving error messages at the moment. */
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
728 if (!emsg_not_now())
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
729 return emsg_core((char_u *)s);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
730 return TRUE; /* no error messages at the moment */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732
15896
ac080f6a4db8 patch 8.1.0954: arguments of semsg() and siemsg() are not checked
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
733 #ifndef PROTO // manual proto with __attribute__
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
734 /*
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
735 * Print an error message with format string and variable arguments.
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
736 * Note: caller must not pass 'IObuff' as 1st argument.
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
737 */
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
738 int
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
739 semsg(const char *s, ...)
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
740 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
741 /* Skip this if not giving error messages at the moment. */
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
742 if (!emsg_not_now())
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
743 {
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
744 va_list ap;
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
745
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
746 va_start(ap, s);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
747 vim_vsnprintf((char *)IObuff, IOSIZE, s, ap);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
748 va_end(ap);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
749 return emsg_core(IObuff);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
750 }
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
751 return TRUE; /* no error messages at the moment */
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
752 }
15896
ac080f6a4db8 patch 8.1.0954: arguments of semsg() and siemsg() are not checked
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
753 #endif
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
754
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
755 /*
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
756 * Same as emsg(...), but abort on error when ABORT_ON_INTERNAL_ERROR is
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
757 * defined. It is used for internal errors only, so that they can be
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
758 * detected when fuzzing vim.
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
759 */
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
760 void
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
761 iemsg(char *s)
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
762 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
763 if (!emsg_not_now())
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
764 emsg_core((char_u *)s);
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
765 #ifdef ABORT_ON_INTERNAL_ERROR
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
766 abort();
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
767 #endif
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
768 }
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
769
15896
ac080f6a4db8 patch 8.1.0954: arguments of semsg() and siemsg() are not checked
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
770 #ifndef PROTO // manual proto with __attribute__
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
771 /*
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
772 * Same as semsg(...) but abort on error when ABORT_ON_INTERNAL_ERROR is
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
773 * defined. It is used for internal errors only, so that they can be
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
774 * detected when fuzzing vim.
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
775 * Note: caller must not pass 'IObuff' as 1st argument.
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
776 */
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
777 void
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
778 siemsg(const char *s, ...)
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
779 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
780 if (!emsg_not_now())
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
781 {
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
782 va_list ap;
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
783
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
784 va_start(ap, s);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
785 vim_vsnprintf((char *)IObuff, IOSIZE, s, ap);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
786 va_end(ap);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
787 emsg_core(IObuff);
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
788 }
15896
ac080f6a4db8 patch 8.1.0954: arguments of semsg() and siemsg() are not checked
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
789 # ifdef ABORT_ON_INTERNAL_ERROR
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
790 abort();
15896
ac080f6a4db8 patch 8.1.0954: arguments of semsg() and siemsg() are not checked
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
791 # endif
ac080f6a4db8 patch 8.1.0954: arguments of semsg() and siemsg() are not checked
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
792 }
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
793 #endif
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
794
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
795 /*
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
796 * Give an "Internal error" message.
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
797 */
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
798 void
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
799 internal_error(char *where)
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
800 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
801 siemsg(_(e_intern2), where);
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
802 }
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10158
diff changeset
803
330
f76b0d38b6bd updated for version 7.0086
vimboss
parents: 291
diff changeset
804 /* emsg3() and emsgn() are in misc2.c to avoid warnings for the prototypes. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
806 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
807 emsg_invreg(int name)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
808 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
809 semsg(_("E354: Invalid register name: '%s'"), transchar(name));
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
810 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
811
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 * 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
814 * "force" is TRUE. This truncates in another way as for normal messages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 * Careful: The string may be changed by msg_may_trunc()!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 * Returns a pointer to the printed message, if wait_return() not called.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
818 char *
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
819 msg_trunc_attr(char *s, int force, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 int n;
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
822 char *ts;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 /* Add message to history before truncating */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
825 add_msg_hist((char_u *)s, -1, attr);
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
826
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
827 ts = (char *)msg_may_trunc(force, (char_u *)s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 msg_hist_off = TRUE;
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
830 n = msg_attr(ts, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 msg_hist_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 if (n)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
834 return ts;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
836 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839 * Check if message "s" should be truncated at the start (for filenames).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840 * Return a pointer to where the truncated message starts.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 * Note: May change the message by replacing a character with '<'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
844 msg_may_trunc(int force, char_u *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 int room;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 room = (int)(Rows - cmdline_row - 1) * Columns + sc_col - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 if ((force || (shortmess(SHM_TRUNC) && !exmode_active))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
851 && (n = (int)STRLEN(s) - room) > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
852 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855 int size = vim_strsize(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856
615
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
857 /* There may be room anyway when there are multibyte chars. */
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
858 if (size <= room)
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
859 return s;
7fe13e0f5dce updated for version 7.0175
vimboss
parents: 539
diff changeset
860
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 for (n = 0; size >= room; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 size -= (*mb_ptr2cells)(s + n);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
864 n += (*mb_ptr2len)(s + n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 --n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 s += n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 *s = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
875 add_msg_hist(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
876 char_u *s,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
877 int len, /* -1 for undetermined length */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
878 int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 struct msg_hist *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882 if (msg_hist_off || msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 /* Don't let the message history get too big */
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 615
diff changeset
886 while (msg_hist_len > MAX_MSG_HIST_LEN)
355
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
887 (void)delete_first_msg();
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
888
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 /* allocate an entry and add the message at the end of the history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 p = (struct msg_hist *)alloc((int)sizeof(struct msg_hist));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 if (len < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 len = (int)STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 /* remove leading and trailing newlines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 while (len > 0 && *s == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 --len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 while (len > 0 && s[len - 1] == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 --len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 p->msg = vim_strnsave(s, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 p->next = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 p->attr = attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 if (last_msg_hist != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 last_msg_hist->next = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 last_msg_hist = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 if (first_msg_hist == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 first_msg_hist = last_msg_hist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 ++msg_hist_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 }
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 /*
355
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
916 * Delete the first (oldest) message from the history.
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
917 * Returns FAIL if there are no messages.
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
918 */
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
919 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
920 delete_first_msg(void)
355
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
921 {
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
922 struct msg_hist *p;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
923
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
924 if (msg_hist_len <= 0)
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
925 return FAIL;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
926 p = first_msg_hist;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
927 first_msg_hist = p->next;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
928 if (first_msg_hist == NULL)
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2280
diff changeset
929 last_msg_hist = NULL; /* history is empty */
355
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
930 vim_free(p->msg);
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
931 vim_free(p);
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
932 --msg_hist_len;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
933 return OK;
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
934 }
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
935
644578c9e219 updated for version 7.0092
vimboss
parents: 339
diff changeset
936 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 * ":messages" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 void
8901
b4dad96ade29 commit https://github.com/vim/vim/commit/52196b2dbe3b64b5054e1df3d3aa8fc65e30addc
Christian Brabandt <cb@256bit.org>
parents: 8897
diff changeset
940 ex_messages(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 struct msg_hist *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 char_u *s;
8897
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
944 int c = 0;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
945
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
946 if (STRCMP(eap->arg, "clear") == 0)
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
947 {
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
948 int keep = eap->addr_count == 0 ? 0 : eap->line2;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
949
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
950 while (msg_hist_len > keep)
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
951 (void)delete_first_msg();
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
952 return;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
953 }
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
954
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
955 if (*eap->arg != NUL)
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
956 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
957 emsg(_(e_invarg));
8897
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
958 return;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
959 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 msg_hist_off = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962
8897
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
963 p = first_msg_hist;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
964 if (eap->addr_count != 0)
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
965 {
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
966 /* Count total messages */
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
967 for (; p != NULL && !got_int; p = p->next)
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
968 c++;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
969
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
970 c -= eap->line2;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
971
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
972 /* Skip without number of messages specified */
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
973 for (p = first_msg_hist; p != NULL && !got_int && c > 0;
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
974 p = p->next, c--);
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
975 }
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
976
8905
9200836eee15 commit https://github.com/vim/vim/commit/bea1ede1c59a11ca5bf9d91cd30b7b2937b9fb41
Christian Brabandt <cb@256bit.org>
parents: 8901
diff changeset
977 if (p == first_msg_hist)
9200836eee15 commit https://github.com/vim/vim/commit/bea1ede1c59a11ca5bf9d91cd30b7b2937b9fb41
Christian Brabandt <cb@256bit.org>
parents: 8901
diff changeset
978 {
9200836eee15 commit https://github.com/vim/vim/commit/bea1ede1c59a11ca5bf9d91cd30b7b2937b9fb41
Christian Brabandt <cb@256bit.org>
parents: 8901
diff changeset
979 s = mch_getenv((char_u *)"LANG");
9200836eee15 commit https://github.com/vim/vim/commit/bea1ede1c59a11ca5bf9d91cd30b7b2937b9fb41
Christian Brabandt <cb@256bit.org>
parents: 8901
diff changeset
980 if (s != NULL && *s != NUL)
14210
1681178c4434 patch 8.1.0122: translators don't always understand the maintainer message
Christian Brabandt <cb@256bit.org>
parents: 14175
diff changeset
981 // The next comment is extracted by xgettext and put in po file for
1681178c4434 patch 8.1.0122: translators don't always understand the maintainer message
Christian Brabandt <cb@256bit.org>
parents: 14175
diff changeset
982 // translators to read.
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
983 msg_attr(
14210
1681178c4434 patch 8.1.0122: translators don't always understand the maintainer message
Christian Brabandt <cb@256bit.org>
parents: 14175
diff changeset
984 // Translator: Please replace the name and email address
1681178c4434 patch 8.1.0122: translators don't always understand the maintainer message
Christian Brabandt <cb@256bit.org>
parents: 14175
diff changeset
985 // with the appropriate text for your translation.
8905
9200836eee15 commit https://github.com/vim/vim/commit/bea1ede1c59a11ca5bf9d91cd30b7b2937b9fb41
Christian Brabandt <cb@256bit.org>
parents: 8901
diff changeset
986 _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"),
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
987 HL_ATTR(HLF_T));
8905
9200836eee15 commit https://github.com/vim/vim/commit/bea1ede1c59a11ca5bf9d91cd30b7b2937b9fb41
Christian Brabandt <cb@256bit.org>
parents: 8901
diff changeset
988 }
9200836eee15 commit https://github.com/vim/vim/commit/bea1ede1c59a11ca5bf9d91cd30b7b2937b9fb41
Christian Brabandt <cb@256bit.org>
parents: 8901
diff changeset
989
8897
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
990 /* Display what was not skipped. */
a410390e340b commit https://github.com/vim/vim/commit/451f849fd6282a4facd4f0f58af62837443fb5a6
Christian Brabandt <cb@256bit.org>
parents: 8627
diff changeset
991 for (; p != NULL && !got_int; p = p->next)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 if (p->msg != NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
993 msg_attr((char *)p->msg, p->attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 msg_hist_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
998 #if defined(FEAT_CON_DIALOG) || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 * Call this after prompting the user. This will avoid a hit-return message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 * and a delay.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 */
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
1003 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1004 msg_end_prompt(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 emsg_on_display = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 msg_clr_eos();
3240
c97c3272d7a6 updated for version 7.3.389
Bram Moolenaar <bram@vim.org>
parents: 3072
diff changeset
1011 lines_left = -1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 /*
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1016 * Wait for the user to hit a key (normally Enter).
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1017 * If "redraw" is TRUE, clear and redraw the screen.
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1018 * If "redraw" is FALSE, just redraw the screen.
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1019 * If "redraw" is -1, don't redraw at all.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1022 wait_return(int redraw)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 int oldState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 int tmpState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 int had_got_int;
14004
e124262d435e patch 8.1.0020: cannot tell whether a register is executing or recording
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
1028 int save_reg_recording;
5430
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1029 FILE *save_scriptout;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 if (redraw == TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 must_redraw = CLEAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 /* If using ":silent cmd", don't wait for a return. Also don't set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 * need_wait_return to do it later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 if (msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038
2723
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
1039 /*
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
1040 * 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
1041 * 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
1042 * 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
1043 * last one.
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
1044 */
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 810
diff changeset
1045 if (vgetc_busy > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 return;
2723
2e72d84e8965 updated for version 7.3.139
Bram Moolenaar <bram@vim.org>
parents: 2692
diff changeset
1047 need_wait_return = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 if (no_wait_return)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 if (!exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 redir_off = TRUE; /* don't redirect this message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 oldState = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 if (quit_more)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 c = CAR; /* just pretend CR was hit */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 quit_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 else if (exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1065 msg_puts(" "); /* make sure the cursor is on the right line */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 c = CAR; /* no need for a return in ex mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 /* Make sure the hit-return prompt is on screen when 'guioptions' was
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 * just changed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 screenalloc(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 State = HITRETURN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 dont_scroll = TRUE; /* disallow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 #endif
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
1082 cmdline_row = msg_row;
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
1083
4325
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
1084 /* 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
1085 * 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
1086 * way. */
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
1087 if (need_check_timestamps)
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
1088 check_timestamps(FALSE);
62eadd7de409 updated for version 7.3.912
Bram Moolenaar <bram@vim.org>
parents: 4234
diff changeset
1089
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 hit_return_msg();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 /* Remember "got_int", if it is set vgetc() probably returns a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 * CTRL-C, but we need to loop then. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 had_got_int = got_int;
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1097
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1098 /* Don't do mappings here, we put the character back in the
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1099 * typeahead buffer. */
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1100 ++no_mapping;
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1101 ++allow_keys;
5430
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1102
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1103 /* Temporarily disable Recording. If Recording is active, the
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1104 * character will be recorded later, since it will be added to the
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1105 * typebuf after the loop */
14004
e124262d435e patch 8.1.0020: cannot tell whether a register is executing or recording
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
1106 save_reg_recording = reg_recording;
5430
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1107 save_scriptout = scriptout;
14004
e124262d435e patch 8.1.0020: cannot tell whether a register is executing or recording
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
1108 reg_recording = 0;
5430
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1109 scriptout = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 c = safe_vgetc();
216
da182deebec7 updated for version 7.0061
vimboss
parents: 180
diff changeset
1111 if (had_got_int && !global_busy)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 got_int = FALSE;
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1113 --no_mapping;
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1114 --allow_keys;
14004
e124262d435e patch 8.1.0020: cannot tell whether a register is executing or recording
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
1115 reg_recording = save_reg_recording;
5430
7f341db39d5b updated for version 7.4.065
Bram Moolenaar <bram@vim.org>
parents: 5290
diff changeset
1116 scriptout = save_scriptout;
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1117
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 /* Strange way to allow copying (yanking) a modeless selection at
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 * the hit-enter prompt. Use CTRL-Y, because the same is used in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 * Cmdline-mode and it's harmless when there is no selection. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 if (c == Ctrl_Y && clip_star.state == SELECT_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 clip_copy_modeless_selection(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 c = K_IGNORE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 #endif
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
1128
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1129 /*
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1130 * Allow scrolling back in the messages.
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1131 * Also accept scroll-down commands when messages fill the screen,
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1132 * to avoid that typing one 'j' too many makes the messages
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1133 * disappear.
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1134 */
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1135 if (p_more && !p_cp)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1136 {
4234
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1137 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
1138 || c == K_UP || c == K_PAGEUP)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1139 {
4234
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1140 if (msg_scrolled > Rows)
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1141 /* scroll back to show older messages */
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1142 do_more_prompt(c);
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1143 else
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1144 {
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1145 msg_didout = FALSE;
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1146 c = K_IGNORE;
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1147 msg_col =
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1148 #ifdef FEAT_RIGHTLEFT
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1149 cmdmsg_rl ? Columns - 1 :
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1150 #endif
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1151 0;
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1152 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1153 if (quit_more)
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1154 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1155 c = CAR; /* just pretend CR was hit */
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1156 quit_more = FALSE;
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1157 got_int = FALSE;
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1158 }
5290
059c8a4b103f updated for version 7.4b.021
Bram Moolenaar <bram@vim.org>
parents: 5245
diff changeset
1159 else if (c != K_IGNORE)
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1160 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1161 c = K_IGNORE;
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1162 hit_return_msg();
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1163 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1164 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 678
diff changeset
1165 else if (msg_scrolled > Rows - 2
4234
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1166 && (c == 'j' || c == 'd' || c == 'f'
b31989e2b058 updated for version 7.3.868
Bram Moolenaar <bram@vim.org>
parents: 3914
diff changeset
1167 || c == K_DOWN || c == K_PAGEDOWN))
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1168 c = K_IGNORE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1169 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 } while ((had_got_int && c == Ctrl_C)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 || c == K_IGNORE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 || c == K_LEFTDRAG || c == K_LEFTRELEASE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 || c == K_MIDDLEDRAG || c == K_MIDDLERELEASE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 || 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
1179 || c == K_MOUSELEFT || c == K_MOUSERIGHT
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1180 || c == K_MOUSEDOWN || c == K_MOUSEUP
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12716
diff changeset
1181 || c == K_MOUSEMOVE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 || (!mouse_has(MOUSE_RETURN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 && mouse_row < msg_row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 && (c == K_LEFTMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 || c == K_MIDDLEMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 || c == K_RIGHTMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 || c == K_X1MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 || c == K_X2MOUSE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 * Avoid that the mouse-up event causes visual mode to start.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 if (c == K_LEFTMOUSE || c == K_MIDDLEMOUSE || c == K_RIGHTMOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 || c == K_X1MOUSE || c == K_X2MOUSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 (void)jump_to_mouse(MOUSE_SETPOS, NULL, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 {
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1203 /* Put the character back in the typeahead buffer. Don't use the
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1204 * stuff buffer, because lmaps wouldn't work. */
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 840
diff changeset
1205 ins_char_typebuf(c);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 do_redraw = TRUE; /* need a redraw even though there is
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 275
diff changeset
1207 typeahead */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 redir_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 * If the user hits ':', '?' or '/' we get a command line from the next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 * line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 if (c == ':' || c == '?' || c == '/')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 if (!exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 skip_redraw = TRUE; /* skip redraw once */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 do_redraw = FALSE;
14129
cb731d098241 patch 8.1.0082: in terminal window, typing : at more prompt, inserts ':'
Christian Brabandt <cb@256bit.org>
parents: 14004
diff changeset
1222 #ifdef FEAT_TERMINAL
cb731d098241 patch 8.1.0082: in terminal window, typing : at more prompt, inserts ':'
Christian Brabandt <cb@256bit.org>
parents: 14004
diff changeset
1223 skip_term_loop = TRUE;
cb731d098241 patch 8.1.0082: in terminal window, typing : at more prompt, inserts ':'
Christian Brabandt <cb@256bit.org>
parents: 14004
diff changeset
1224 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 * If the window size changed set_shellsize() will redraw the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 * Otherwise the screen is only redrawn if 'redraw' is set and no ':'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 * typed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 tmpState = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 State = oldState; /* restore State before set_shellsize */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 #if defined(UNIX) || defined(VMS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 * When switching screens, we need to output an extra newline on exit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 if (swapping_screen() && !termcap_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 newline_on_exit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 did_wait_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 emsg_on_display = FALSE; /* can delete error message now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 lines_left = -1; /* reset lines_left at next msg_start() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 reset_last_sourcing();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 if (keep_msg != NULL && vim_strsize(keep_msg) >=
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 (Rows - cmdline_row - 1) * Columns + sc_col)
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13188
diff changeset
1254 VIM_CLEAR(keep_msg); /* don't redisplay message, it's too long */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 if (tmpState == SETWSIZE) /* got resize event while in vgetc() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 starttermcap(); /* start termcap before redrawing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 shell_resized();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 else if (!skip_redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 && (redraw == TRUE || (msg_scrolled != 0 && redraw != -1)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 starttermcap(); /* start termcap before redrawing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 * Write the hit-return prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1273 hit_return_msg(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1275 int save_p_more = p_more;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1276
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1277 p_more = FALSE; /* don't want see this message when scrolling back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1278 if (msg_didout) /* start on a new line */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 if (got_int)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1281 msg_puts(_("Interrupt: "));
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1282
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1283 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
1284 if (!msg_use_printf())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 msg_clr_eos();
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1286 p_more = save_p_more;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 * Set "keep_msg" to "s". Free the old value and check for NULL pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1293 set_keep_msg(char_u *s, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 vim_free(keep_msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296 if (s != NULL && msg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 keep_msg = vim_strsave(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 keep_msg = NULL;
127
616289ecb7c8 updated for version 7.0044
vimboss
parents: 105
diff changeset
1300 keep_msg_more = FALSE;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1301 keep_msg_attr = attr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1304 #if defined(FEAT_TERMRESPONSE) || defined(PROTO)
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1305 /*
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1306 * 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
1307 * that it will be displayed again after redraw.
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1308 */
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1309 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1310 set_keep_msg_from_hist(void)
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1311 {
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1312 if (keep_msg == NULL && last_msg_hist != NULL && msg_scrolled == 0
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1313 && (State & NORMAL))
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1314 set_keep_msg(last_msg_hist->msg, last_msg_hist->attr);
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1315 }
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1316 #endif
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
1317
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 * Prepare for outputting characters in the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1322 msg_start(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 int did_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325
2491
904cd1c26a1e After entering a crypt key would need to hit return to continue.
Bram Moolenaar <bram@vim.org>
parents: 2409
diff changeset
1326 if (!msg_silent)
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13188
diff changeset
1327 VIM_CLEAR(keep_msg);
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1328
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1329 #ifdef FEAT_EVAL
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1330 if (need_clr_eos)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1331 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1332 /* Halfway an ":echo" command and getting an (error) message: clear
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1333 * any text from the command. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1334 need_clr_eos = FALSE;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1335 msg_clr_eos();
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1336 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1337 #endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
1338
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 if (!msg_scroll && full_screen) /* overwrite last message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 msg_row = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 msg_col =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 cmdmsg_rl ? Columns - 1 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 else if (msg_didout) /* start message on next line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 did_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 if (exmode_active != EXMODE_NORMAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 if (!msg_didany || lines_left < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 msg_starthere();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 if (msg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 msg_didout = FALSE; /* no output on current line yet */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 cursor_off();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 /* when redirecting, may need to start a new line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 if (!did_return)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 redir_write((char_u *)"\n", -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 * Note that the current msg position is where messages start.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1372 msg_starthere(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 lines_left = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 msg_didany = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1379 msg_putchar(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 msg_putchar_attr(c, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1385 msg_putchar_attr(int c, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 {
15551
b069a878bbeb patch 8.1.0783: compiler warning for signed/unsigned
Bram Moolenaar <Bram@vim.org>
parents: 15543
diff changeset
1387 char_u buf[MB_MAXBYTES + 1];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 if (IS_SPECIAL(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 buf[0] = K_SPECIAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 buf[1] = K_SECOND(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 buf[2] = K_THIRD(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 buf[3] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 else
15551
b069a878bbeb patch 8.1.0783: compiler warning for signed/unsigned
Bram Moolenaar <Bram@vim.org>
parents: 15543
diff changeset
1397 buf[(*mb_char2bytes)(c, buf)] = NUL;
b069a878bbeb patch 8.1.0783: compiler warning for signed/unsigned
Bram Moolenaar <Bram@vim.org>
parents: 15543
diff changeset
1398 msg_puts_attr((char *)buf, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1402 msg_outnum(long n)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1404 char buf[20];
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1405
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1406 sprintf(buf, "%ld", n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 msg_puts(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1411 msg_home_replace(char_u *fname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 msg_home_replace_attr(fname, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 #if defined(FEAT_FIND_ID) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1418 msg_home_replace_hl(char_u *fname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1420 msg_home_replace_attr(fname, HL_ATTR(HLF_D));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1425 msg_home_replace_attr(char_u *fname, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 name = home_replace_save(NULL, fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 if (name != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 msg_outtrans_attr(name, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 * Output 'len' characters in 'str' (including NULs) with translation
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 * if 'len' is -1, output upto a NUL character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 * Use attributes 'attr'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 * Return the number of characters it takes on the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1442 msg_outtrans(char_u *str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 return msg_outtrans_attr(str, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1448 msg_outtrans_attr(char_u *str, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 return msg_outtrans_len_attr(str, (int)STRLEN(str), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1454 msg_outtrans_len(char_u *str, int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456 return msg_outtrans_len_attr(str, len, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 * Output one character at "p". Return pointer to the next character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 * Handles multi-byte characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1464 msg_outtrans_one(char_u *p, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1468 if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 msg_outtrans_len_attr(p, l, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 return p + l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 }
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1473 msg_puts_attr((char *)transchar_byte(*p), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 return p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1478 msg_outtrans_len_attr(char_u *msgstr, int len, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 int retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 char_u *str = msgstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 char_u *plain_start = msgstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 int mb_l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 /* if MSG_HIST flag set, add message to history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 if (attr & MSG_HIST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 add_msg_hist(str, len, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 attr &= ~MSG_HIST;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 /* If the string starts with a composing character first draw a space on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 * which the composing char can be drawn. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 if (enc_utf8 && utf_iscomposing(utf_ptr2char(msgstr)))
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1497 msg_puts_attr(" ", attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 * Go over the string. Special characters are translated and printed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 * Normal characters are printed several at a time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 while (--len >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 /* Don't include composing chars after the end. */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1507 mb_l = utfc_ptr2len_len(str, len + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 else if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1509 mb_l = (*mb_ptr2len)(str);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 mb_l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 if (has_mbyte && mb_l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 c = (*mb_ptr2char)(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 if (vim_isprintc(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 /* printable multi-byte char: count the cells. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 retval += (*mb_ptr2cells)(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520 /* unprintable multi-byte char: print the printable chars so
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 * far and the translation of the unprintable char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 if (str > plain_start)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1523 msg_puts_attr_len((char *)plain_start,
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1524 (int)(str - plain_start), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 plain_start = str + mb_l;
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1526 msg_puts_attr((char *)transchar(c),
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1527 attr == 0 ? HL_ATTR(HLF_8) : attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 retval += char2cells(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 len -= mb_l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 str += mb_l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 s = transchar_byte(*str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 if (s[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 /* unprintable char: print the printable chars so far and the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 * translation of the unprintable char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 if (str > plain_start)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1541 msg_puts_attr_len((char *)plain_start,
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1542 (int)(str - plain_start), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 plain_start = str + 1;
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1544 msg_puts_attr((char *)s, attr == 0 ? HL_ATTR(HLF_8) : attr);
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1663
diff changeset
1545 retval += (int)STRLEN(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 }
1663
bae8347a9ae1 updated for version 7.2a-015
vimboss
parents: 1658
diff changeset
1547 else
bae8347a9ae1 updated for version 7.2a-015
vimboss
parents: 1658
diff changeset
1548 ++retval;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 ++str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553 if (str > plain_start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 /* print the printable chars at the end */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1555 msg_puts_attr_len((char *)plain_start, (int)(str - plain_start), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 #if defined(FEAT_QUICKFIX) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1562 msg_make(char_u *arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 static char_u *str = (char_u *)"eeffoc", *rs = (char_u *)"Plon#dqg#vxjduB";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 for (i = 5; *arg && i >= 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 if (*arg++ != str[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 for (i = 0; rs[i]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 msg_putchar(rs[i] - 3);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 * Output the string 'str' upto a NUL character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 * Return the number of characters it takes on the screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 * If K_SPECIAL is encountered, then it is taken in conjunction with the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 * following character and shown as <F1>, <S-Up> etc. Any other character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 * which is not printable shown in <> form.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 * If 'from' is TRUE (lhs of a mapping), a space is shown as <Space>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 * If a character is displayed in one of these special ways, is also
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 * highlighted (its highlight name is '8' in the p_hl variable).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1590 * Otherwise characters are not highlighted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1591 * 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
1592 * the character/string -- webb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1595 msg_outtrans_special(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1596 char_u *strstart,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1597 int from) /* TRUE for lhs of a mapping */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 char_u *str = strstart;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 int retval = 0;
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1601 char *text;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1605 attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 while (*str != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 /* Leading and trailing spaces need to be displayed in <> form. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 if ((str == strstart || str[1] == NUL) && *str == ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1611 text = "<Space>";
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 ++str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1615 text = (char *)str2special(&str, from);
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1616 len = vim_strsize((char_u *)text);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 /* Highlight special keys */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1618 msg_puts_attr(text, len > 1
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
1619 && (*mb_ptr2len)((char_u *)text) <= 1 ? attr : 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 retval += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624
2610
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1625 #if defined(FEAT_EVAL) || defined(PROTO)
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1626 /*
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1627 * 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
1628 * strings, in an allocated string.
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1629 */
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1630 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1631 str2special_save(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1632 char_u *str,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1633 int is_lhs) /* TRUE for lhs, FALSE for rhs */
2610
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1634 {
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1635 garray_T ga;
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1636 char_u *p = str;
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1637
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1638 ga_init2(&ga, 1, 40);
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1639 while (*p != NUL)
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1640 ga_concat(&ga, str2special(&p, is_lhs));
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1641 ga_append(&ga, NUL);
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1642 return (char_u *)ga.ga_data;
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1643 }
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1644 #endif
6c05b5e5c1be updated for version 7.3.032
Bram Moolenaar <bram@vim.org>
parents: 2491
diff changeset
1645
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 * Return the printable string for the key codes at "*sp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 * Used for translating the lhs or rhs of a mapping to printable chars.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 * Advances "sp" to the next code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1652 str2special(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1653 char_u **sp,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1654 int from) /* TRUE for lhs of mapping */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 static char_u buf[7];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 char_u *str = *sp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 int modifiers = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 int special = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 /* Try to un-escape a multi-byte character. Return the un-escaped
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 * string if it is a multi-byte character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 p = mb_unescape(sp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673 c = *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 if (str[1] == KS_MODIFIER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 modifiers = str[2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 str += 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 c = *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682 if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 c = TO_SPECIAL(str[1], str[2]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 str += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 if (IS_SPECIAL(c) || modifiers) /* special key */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 special = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1691 if (has_mbyte && !IS_SPECIAL(c))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 {
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1693 int len = (*mb_ptr2len)(str);
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1694
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1695 /* 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
1696 if (has_mbyte && MB_BYTE2LEN(*str) > len)
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1697 {
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1698 transchar_nonprint(buf, c);
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1699 *sp = str + 1;
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1700 return buf;
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1701 }
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1702 /* 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
1703 * processed by get_special_key_name() */
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1704 c = (*mb_ptr2char)(str);
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1705 *sp = str + len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 }
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1707 else
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2723
diff changeset
1708 *sp = str + 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 * Use <Space> only for lhs of a mapping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 if (special || char2cells(c) > 1 || (from && c == ' '))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 return get_special_key_name(c, modifiers);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 buf[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 buf[1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720 * Translate a key sequence into special key names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1723 str2specialbuf(char_u *sp, char_u *buf, int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 *buf = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 while (*sp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 s = str2special(&sp, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 if ((int)(STRLEN(s) + STRLEN(buf)) < len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 STRCAT(buf, s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 * print line for :print or :list command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1740 msg_prt_line(char_u *s, int list)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 int col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 int n_extra = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 int c_extra = 0;
15502
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1746 int c_final = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 char_u *p_extra = NULL; /* init to make SASC shut up */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 int n;
1059
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1749 int attr = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 char_u *trail = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 char_u buf[MB_MAXBYTES + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1754 if (curwin->w_p_list)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1755 list = TRUE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1756
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 /* find start of trailing whitespace */
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1758 if (list && lcs_trail)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 trail = s + STRLEN(s);
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
1761 while (trail > s && VIM_ISWHITE(trail[-1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 --trail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 /* output a space for an empty line, otherwise the line will be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 * overwritten */
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1767 if (*s == NUL && !(list && lcs_eol != NUL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
1770 while (!got_int)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 {
1059
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1772 if (n_extra > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 --n_extra;
15502
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1775 if (n_extra == 0 && c_final)
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1776 c = c_final;
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1777 else if (c_extra)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 c = c_extra;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 c = *p_extra++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 }
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
1782 else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 col += (*mb_ptr2cells)(s);
6801
47ebd4065059 patch 7.4.722
Bram Moolenaar <bram@vim.org>
parents: 6781
diff changeset
1785 if (lcs_nbsp != NUL && list
47ebd4065059 patch 7.4.722
Bram Moolenaar <bram@vim.org>
parents: 6781
diff changeset
1786 && (mb_ptr2char(s) == 160
47ebd4065059 patch 7.4.722
Bram Moolenaar <bram@vim.org>
parents: 6781
diff changeset
1787 || mb_ptr2char(s) == 0x202f))
2692
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1788 {
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1789 mb_char2bytes(lcs_nbsp, buf);
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1790 buf[(*mb_ptr2len)(buf)] = NUL;
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1791 }
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1792 else
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1793 {
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1794 mch_memmove(buf, s, (size_t)l);
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1795 buf[l] = NUL;
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1796 }
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1797 msg_puts((char *)buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 s += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 attr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 c = *s++;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1805 if (c == TAB && (!list || lcs_tab1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 /* tab amount depends on current column */
14175
2ad722003b36 patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents: 14129
diff changeset
1808 #ifdef FEAT_VARTABS
2ad722003b36 patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents: 14129
diff changeset
1809 n_extra = tabstop_padding(col, curbuf->b_p_ts,
2ad722003b36 patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents: 14129
diff changeset
1810 curbuf->b_p_vts_array) - 1;
2ad722003b36 patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents: 14129
diff changeset
1811 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 n_extra = curbuf->b_p_ts - col % curbuf->b_p_ts - 1;
14175
2ad722003b36 patch 8.1.0105: all tab stops are the same
Christian Brabandt <cb@256bit.org>
parents: 14129
diff changeset
1813 #endif
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1814 if (!list)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 c = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 c_extra = ' ';
15502
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1818 c_final = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 {
15502
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1822 c = (n_extra == 0 && lcs_tab3) ? lcs_tab3 : lcs_tab1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 c_extra = lcs_tab2;
15502
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1824 c_final = lcs_tab3;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1825 attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 }
2692
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1828 else if (c == 160 && list && lcs_nbsp != NUL)
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1829 {
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1830 c = lcs_nbsp;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1831 attr = HL_ATTR(HLF_8);
2692
42cafbf4b6e8 updated for version 7.3.110
Bram Moolenaar <bram@vim.org>
parents: 2684
diff changeset
1832 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
1833 else if (c == NUL && list && lcs_eol != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 p_extra = (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 c_extra = NUL;
15502
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1837 c_final = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838 n_extra = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 c = lcs_eol;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1840 attr = HL_ATTR(HLF_AT);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 --s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 else if (c != NUL && (n = byte2cells(c)) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 n_extra = n - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 p_extra = transchar_byte(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 c_extra = NUL;
15502
bc17a9d37810 patch 8.1.0759: showing two characters for tab is limited
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1848 c_final = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 c = *p_extra++;
1059
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1850 /* Use special coloring to be able to distinguish <hex> from
b8c880d61acb updated for version 7.0-185
vimboss
parents: 1007
diff changeset
1851 * the same in plain text. */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1852 attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 else if (c == ' ' && trail != NULL && s > trail)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856 c = lcs_trail;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1857 attr = HL_ATTR(HLF_8);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 }
6781
f2a751a9ee72 patch 7.4.712
Bram Moolenaar <bram@vim.org>
parents: 6448
diff changeset
1859 else if (c == ' ' && list && lcs_space != NUL)
f2a751a9ee72 patch 7.4.712
Bram Moolenaar <bram@vim.org>
parents: 6448
diff changeset
1860 {
f2a751a9ee72 patch 7.4.712
Bram Moolenaar <bram@vim.org>
parents: 6448
diff changeset
1861 c = lcs_space;
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1862 attr = HL_ATTR(HLF_8);
6781
f2a751a9ee72 patch 7.4.712
Bram Moolenaar <bram@vim.org>
parents: 6448
diff changeset
1863 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 if (c == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 msg_putchar_attr(c, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 col++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 msg_clr_eos();
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 * Use screen_puts() to output one multi-byte character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 * Return the pointer "s" advanced to the next character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 static char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1880 screen_puts_mbyte(char_u *s, int l, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 int cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 msg_didout = TRUE; /* remember that line is not empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 cw = (*mb_ptr2cells)(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 if (cw > 1 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 cmdmsg_rl ? msg_col <= 1 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 msg_col == Columns - 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 /* Doesn't fit, print a highlighted '>' to fill it up. */
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1893 msg_screen_putchar('>', HL_ATTR(HLF_AT));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 screen_puts_len(s, l, msg_row, msg_col, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1900 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 msg_col -= cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 if (msg_col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904 msg_col = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1905 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 msg_col += cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 if (msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 return s + l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 * Output a string to the screen at position msg_row, msg_col.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 * Update msg_row and msg_col for the next message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 void
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1926 msg_puts(char *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 {
10141
b67088aae933 commit https://github.com/vim/vim/commit/aeac9006d5d14910f214f09df52c026a5936e737
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
1928 msg_puts_attr(s, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 void
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1932 msg_puts_title(char *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
1934 msg_puts_attr(s, HL_ATTR(HLF_T));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938 * 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
1939 * part in the middle and replace it with "..." when necessary.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 * Does not handle multi-byte characters!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 void
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1943 msg_outtrans_long_attr(char_u *longstr, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1945 msg_outtrans_long_len_attr(longstr, (int)STRLEN(longstr), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1946 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1947
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1948 void
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1949 msg_outtrans_long_len_attr(char_u *longstr, int len, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1951 int slen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 int room;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954 room = Columns - msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1955 if (len > room && room >= 20)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1956 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957 slen = (room - 3) / 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 msg_outtrans_len_attr(longstr, slen, attr);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1959 msg_puts_attr("...", HL_ATTR(HLF_8));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1960 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 msg_outtrans_len_attr(longstr + len - slen, slen, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 * Basic function for writing a message with highlight attributes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 void
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1968 msg_puts_attr(char *s, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 msg_puts_attr_len(s, -1, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 * Like msg_puts_attr(), but with a maximum length "maxlen" (in bytes).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 * When "maxlen" is -1 there is no maximum length.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 * When "maxlen" is >= 0 the message is not put in the history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 static void
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1979 msg_puts_attr_len(char *str, int maxlen, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982 * If redirection is on, also write to the redirection file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 */
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1984 redir_write((char_u *)str, maxlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1985
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 * Don't print anything when using ":silent cmd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 if (msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 /* if MSG_HIST flag set, add message to history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 if ((attr & MSG_HIST) && maxlen < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
1995 add_msg_hist((char_u *)str, -1, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 attr &= ~MSG_HIST;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000 * When writing something to the screen after it has scrolled, requires a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001 * wait-return prompt later. Needed when scrolling, resetting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2002 * need_wait_return after some prompt, and then outputting something
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2003 * without scrolling
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2004 */
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2005 if (msg_scrolled != 0 && !msg_scrolled_ign)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006 need_wait_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2007 msg_didany = TRUE; /* remember that something was outputted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2009 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 * If there is no valid screen, use fprintf so we can see error messages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 * If termcap is not active, we may be writing in an alternate console
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2012 * window, cursor positioning may not work correctly (window size may be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 * different, e.g. for Win32 console) or we just don't know where the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 * cursor is.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 if (msg_use_printf())
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
2017 msg_puts_printf((char_u *)str, maxlen);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2018 else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
2019 msg_puts_display((char_u *)str, maxlen, attr, FALSE);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2020 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2021
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2022 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2023 * The display part of msg_puts_attr_len().
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2024 * May be called recursively to display scroll-back text.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2025 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2026 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2027 msg_puts_display(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2028 char_u *str,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2029 int maxlen,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2030 int attr,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2031 int recurse)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2032 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2033 char_u *s = str;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2034 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
2035 int t_col = 0; /* screen cells todo, 0 when "t_s" not used */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2036 int l;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2037 int cw;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2038 char_u *sb_str = str;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2039 int sb_col = msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2040 int wrap;
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2041 int did_last_char;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 did_wait_return = FALSE;
1339
3bfd2e1e2609 updated for version 7.1-053
vimboss
parents: 1306
diff changeset
2044 while ((maxlen < 0 || (int)(s - str) < maxlen) && *s != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2047 * We are at the end of the screen line when:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2048 * - When outputting a newline.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2049 * - When outputting a character in the last column.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2051 if (!recurse && msg_row >= Rows - 1 && (*s == '\n' || (
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 cmdmsg_rl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 ? (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 msg_col <= 1
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
2056 || (*s == TAB && msg_col <= 7)
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
2057 || (has_mbyte && (*mb_ptr2cells)(s) > 1 && msg_col <= 2))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 (msg_col + t_col >= Columns - 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 || (*s == TAB && msg_col + t_col >= ((Columns - 1) & ~7))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 || (has_mbyte && (*mb_ptr2cells)(s) > 1
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
2063 && msg_col + t_col >= Columns - 2)))))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2065 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2066 * The screen is scrolled up when at the last row (some terminals
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2067 * scroll automatically, some don't. To avoid problems we scroll
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2068 * ourselves).
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2069 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 if (t_col > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 /* output postponed text */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2072 t_puts(&t_col, t_s, s, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073
1342
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
2074 /* When no more prompt and no more room, truncate here */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 if (msg_no_more && lines_left == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 break;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2077
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2078 /* Scroll the screen up one line. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2079 msg_scroll_up();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 msg_row = Rows - 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 if (msg_col >= Columns) /* can happen after screen resize */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 msg_col = Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2085 /* Display char in last column before showing more-prompt. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2086 if (*s >= ' '
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2087 #ifdef FEAT_RIGHTLEFT
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2088 && !cmdmsg_rl
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2089 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2090 )
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2091 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2092 if (has_mbyte)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2093 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2094 if (enc_utf8 && maxlen >= 0)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2095 /* avoid including composing chars after the end */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2096 l = utfc_ptr2len_len(s, (int)((str + maxlen) - s));
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2097 else
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2098 l = (*mb_ptr2len)(s);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2099 s = screen_puts_mbyte(s, l, attr);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2100 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2101 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2102 msg_screen_putchar(*s++, attr);
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2103 did_last_char = TRUE;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2104 }
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2105 else
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2106 did_last_char = FALSE;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2107
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2108 if (p_more)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2109 /* store text for scrolling back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2110 store_sb_text(&sb_str, s, attr, &sb_col, TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2111
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2112 inc_msg_scrolled();
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2113 need_wait_return = TRUE; /* may need wait_return in main() */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 if (cmdline_row > 0 && !exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 --cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2119 * If screen is completely filled and 'more' is set then wait
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2120 * for a character.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 */
1342
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
2122 if (lines_left > 0)
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
2123 --lines_left;
957
3dc6072e0a25 updated for version 7.0-083
vimboss
parents: 881
diff changeset
2124 if (p_more && lines_left == 0 && State != HITRETURN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 && !msg_no_more && !exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 #ifdef FEAT_CON_DIALOG
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2128 if (do_more_prompt(NUL))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2129 s = confirm_msg_tail;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2130 #else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2131 (void)do_more_prompt(NUL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133 if (quit_more)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2134 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2135 }
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2136
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2137 /* When we displayed a char in last column need to check if there
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2138 * is still more. */
1381
826f00fef9e3 updated for version 7.1-096
vimboss
parents: 1342
diff changeset
2139 if (did_last_char)
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2140 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2143 wrap = *s == '\n'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 || msg_col + t_col >= Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 || (has_mbyte && (*mb_ptr2cells)(s) > 1
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
2146 && msg_col + t_col >= Columns - 1);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2147 if (t_col > 0 && (wrap || *s == '\r' || *s == '\b'
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2148 || *s == '\t' || *s == BELL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 /* output any postponed text */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2150 t_puts(&t_col, t_s, s, attr);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2151
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2152 if (wrap && p_more && !recurse)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2153 /* store text for scrolling back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2154 store_sb_text(&sb_str, s, attr, &sb_col, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 if (*s == '\n') /* go to next line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 msg_didout = FALSE; /* remember that line is empty */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2159 #ifdef FEAT_RIGHTLEFT
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2160 if (cmdmsg_rl)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2161 msg_col = Columns - 1;
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2162 else
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2163 #endif
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2164 msg_col = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 if (++msg_row >= Rows) /* safety check */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 else if (*s == '\r') /* go to column 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 else if (*s == '\b') /* go to previous char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 if (msg_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 --msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2177 else if (*s == TAB) /* translate Tab into spaces */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180 msg_screen_putchar(' ', attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181 while (msg_col & 7);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2182 }
6949
1e621b31948b patch 7.4.793
Bram Moolenaar <bram@vim.org>
parents: 6801
diff changeset
2183 else if (*s == BELL) /* beep (from ":sh") */
1e621b31948b patch 7.4.793
Bram Moolenaar <bram@vim.org>
parents: 6801
diff changeset
2184 vim_beep(BO_SH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2185 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2186 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2187 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2188 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 cw = (*mb_ptr2cells)(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190 if (enc_utf8 && maxlen >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2191 /* avoid including composing chars after the end */
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2192 l = utfc_ptr2len_len(s, (int)((str + maxlen) - s));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 else
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
2194 l = (*mb_ptr2len)(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 cw = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199 l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 }
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
2201
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 /* When drawing from right to left or when a double-wide character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2203 * doesn't fit, draw a single character here. Otherwise collect
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 * characters and draw them all at once later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 # ifdef FEAT_RIGHTLEFT
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
2207 cmdmsg_rl ||
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 # endif
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
2209 (cw > 1 && msg_col + t_col >= Columns - 1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 if (l > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 s = screen_puts_mbyte(s, l, attr) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 msg_screen_putchar(*s, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 /* postpone this character until later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 if (t_col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 t_s = s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 t_col += cw;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 s += l - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 /* output any postponed text */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 if (t_col > 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2230 t_puts(&t_col, t_s, s, attr);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2231 if (p_more && !recurse)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2232 store_sb_text(&sb_str, s, attr, &sb_col, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 /*
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2238 * Return TRUE when ":filter pattern" was used and "msg" does not match
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2239 * "pattern".
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2240 */
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2241 int
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2242 message_filtered(char_u *msg)
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2243 {
9980
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
2244 int match;
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
2245
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
2246 if (cmdmod.filter_regmatch.regprog == NULL)
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
2247 return FALSE;
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
2248 match = vim_regexec(&cmdmod.filter_regmatch, msg, (colnr_T)0);
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
2249 return cmdmod.filter_force ? match : !match;
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2250 }
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2251
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9894
diff changeset
2252 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2253 * Scroll the screen up one line for displaying the next message line.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2254 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2255 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2256 msg_scroll_up(void)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2257 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2258 #ifdef FEAT_GUI
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2259 /* Remove the cursor before scrolling, ScreenLines[] is going
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2260 * to become invalid. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2261 if (gui.in_use)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2262 gui_undraw_cursor();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2263 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2264 /* scrolling up always works */
13150
808625d4b71b patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
2265 mch_disable_flush();
12152
69af108df70e patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents: 12015
diff changeset
2266 screen_del_lines(0, 0, 1, (int)Rows, TRUE, 0, NULL);
13150
808625d4b71b patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
2267 mch_enable_flush();
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2268
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2269 if (!can_clear((char_u *)" "))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2270 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2271 /* Scrolling up doesn't result in the right background. Set the
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2272 * background here. It's not efficient, but avoids that we have to do
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2273 * it all over the code. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2274 screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2275
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2276 /* 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
2277 * cleared before to avoid a scroll-up. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2278 if (ScreenAttrs[LineOffset[Rows - 2] + Columns - 1] == (sattr_T)-1)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2279 screen_fill((int)Rows - 2, (int)Rows - 1,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2280 (int)Columns - 1, (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2281 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2282 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2283
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2284 /*
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2285 * Increment "msg_scrolled".
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2286 */
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2287 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2288 inc_msg_scrolled(void)
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2289 {
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2290 #ifdef FEAT_EVAL
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2291 if (*get_vim_var_str(VV_SCROLLSTART) == NUL)
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2292 {
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2293 char_u *p = sourcing_name;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2294 char_u *tofree = NULL;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2295 int len;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2296
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2297 /* v:scrollstart is empty, set it to the script/function name and line
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2298 * number */
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2299 if (p == NULL)
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2300 p = (char_u *)_("Unknown");
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2301 else
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2302 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
2303 len = (int)STRLEN(p) + 40;
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2304 tofree = alloc(len);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2305 if (tofree != NULL)
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2306 {
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2307 vim_snprintf((char *)tofree, len, _("%s line %ld"),
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2308 p, (long)sourcing_lnum);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2309 p = tofree;
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2310 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2311 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2312 set_vim_var_string(VV_SCROLLSTART, p, -1);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2313 vim_free(tofree);
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2314 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2315 #endif
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2316 ++msg_scrolled;
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2317 if (must_redraw < VALID)
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2318 must_redraw = VALID;
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2319 }
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2320
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2321 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2322 * 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
2323 * store the displayed text and remember where screen lines start.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2324 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2325 typedef struct msgchunk_S msgchunk_T;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2326 struct msgchunk_S
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2327 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2328 msgchunk_T *sb_next;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2329 msgchunk_T *sb_prev;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2330 char sb_eol; /* TRUE when line ends after this text */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2331 int sb_msg_col; /* column in which text starts */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2332 int sb_attr; /* text attributes */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2333 char_u sb_text[1]; /* text to be displayed, actually longer */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2334 };
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2335
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2336 static msgchunk_T *last_msgchunk = NULL; /* last displayed text */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2337
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
2338 static msgchunk_T *msg_sb_start(msgchunk_T *mps);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2339
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2340 typedef enum {
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2341 SB_CLEAR_NONE = 0,
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2342 SB_CLEAR_ALL,
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2343 SB_CLEAR_CMDLINE_BUSY,
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2344 SB_CLEAR_CMDLINE_DONE
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2345 } sb_clear_T;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2346
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2347 /* When to clear text on next msg. */
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2348 static sb_clear_T do_clear_sb_text = SB_CLEAR_NONE;
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2349
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2350 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2351 * Store part of a printed message for displaying when scrolling back.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2352 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2353 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2354 store_sb_text(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2355 char_u **sb_str, /* start of string */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2356 char_u *s, /* just after string */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2357 int attr,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2358 int *sb_col,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2359 int finish) /* line ends */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2360 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2361 msgchunk_T *mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2362
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2363 if (do_clear_sb_text == SB_CLEAR_ALL
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2364 || do_clear_sb_text == SB_CLEAR_CMDLINE_DONE)
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2365 {
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2366 clear_sb_text(do_clear_sb_text == SB_CLEAR_ALL);
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2367 do_clear_sb_text = SB_CLEAR_NONE;
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2368 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2369
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2370 if (s > *sb_str)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2371 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2372 mp = (msgchunk_T *)alloc((int)(sizeof(msgchunk_T) + (s - *sb_str)));
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2373 if (mp != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2374 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2375 mp->sb_eol = finish;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2376 mp->sb_msg_col = *sb_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2377 mp->sb_attr = attr;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2378 vim_strncpy(mp->sb_text, *sb_str, s - *sb_str);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2379
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2380 if (last_msgchunk == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2381 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2382 last_msgchunk = mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2383 mp->sb_prev = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2384 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2385 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2386 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2387 mp->sb_prev = last_msgchunk;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2388 last_msgchunk->sb_next = mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2389 last_msgchunk = mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2390 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2391 mp->sb_next = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2392 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2393 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2394 else if (finish && last_msgchunk != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2395 last_msgchunk->sb_eol = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2396
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2397 *sb_str = s;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2398 *sb_col = 0;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2399 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2400
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2401 /*
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2402 * Finished showing messages, clear the scroll-back text on the next message.
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2403 */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2404 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2405 may_clear_sb_text(void)
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2406 {
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2407 do_clear_sb_text = SB_CLEAR_ALL;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2408 }
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2409
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2410 /*
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2411 * Starting to edit the command line, do not clear messages now.
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2412 */
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2413 void
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2414 sb_text_start_cmdline(void)
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2415 {
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2416 do_clear_sb_text = SB_CLEAR_CMDLINE_BUSY;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2417 msg_sb_eol();
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2418 }
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2419
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2420 /*
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2421 * Ending to edit the command line. Clear old lines but the last one later.
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2422 */
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2423 void
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2424 sb_text_end_cmdline(void)
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2425 {
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2426 do_clear_sb_text = SB_CLEAR_CMDLINE_DONE;
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2427 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2428
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2429 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2430 * Clear any text remembered for scrolling back.
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2431 * When "all" is FALSE keep the last line.
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2432 * Called when redrawing the screen.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2433 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2434 void
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2435 clear_sb_text(int all)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2436 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2437 msgchunk_T *mp;
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2438 msgchunk_T **lastp;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2439
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2440 if (all)
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2441 lastp = &last_msgchunk;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2442 else
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2443 {
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2444 if (last_msgchunk == NULL)
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2445 return;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2446 lastp = &last_msgchunk->sb_prev;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2447 }
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2448
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2449 while (*lastp != NULL)
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2450 {
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2451 mp = (*lastp)->sb_prev;
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2452 vim_free(*lastp);
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2453 *lastp = mp;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2454 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2455 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2456
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2457 /*
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2458 * "g<" command.
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2459 */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2460 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2461 show_sb_text(void)
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2462 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2463 msgchunk_T *mp;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2464
1342
6974b167d75e updated for version 7.1-056
vimboss
parents: 1339
diff changeset
2465 /* 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
2466 * weird, typing a command without output results in one line. */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2467 mp = msg_sb_start(last_msgchunk);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2468 if (mp == NULL || mp->sb_prev == NULL)
6949
1e621b31948b patch 7.4.793
Bram Moolenaar <bram@vim.org>
parents: 6801
diff changeset
2469 vim_beep(BO_MESS);
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2470 else
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2471 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2472 do_more_prompt('G');
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2473 wait_return(FALSE);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2474 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2475 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2476
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2477 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2478 * Move to the start of screen line in already displayed text.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2479 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2480 static msgchunk_T *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2481 msg_sb_start(msgchunk_T *mps)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2482 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2483 msgchunk_T *mp = mps;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2484
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2485 while (mp != NULL && mp->sb_prev != NULL && !mp->sb_prev->sb_eol)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2486 mp = mp->sb_prev;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2487 return mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2488 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2489
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2490 /*
3435
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2491 * 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
2492 */
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2493 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2494 msg_sb_eol(void)
3435
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2495 {
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2496 if (last_msgchunk != NULL)
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2497 last_msgchunk->sb_eol = TRUE;
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2498 }
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2499
19040069b8bf updated for version 7.3.483
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
2500 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2501 * Display a screen line from previously displayed text at row "row".
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2502 * Returns a pointer to the text for the next line (can be NULL).
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2503 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2504 static msgchunk_T *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2505 disp_sb_line(int row, msgchunk_T *smp)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2506 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2507 msgchunk_T *mp = smp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2508 char_u *p;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2509
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2510 for (;;)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2511 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2512 msg_row = row;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2513 msg_col = mp->sb_msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2514 p = mp->sb_text;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2515 if (*p == '\n') /* don't display the line break */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2516 ++p;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2517 msg_puts_display(p, -1, mp->sb_attr, TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2518 if (mp->sb_eol || mp->sb_next == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2519 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2520 mp = mp->sb_next;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2521 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2522 return mp->sb_next;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2523 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2524
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2525 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526 * Output any postponed text for msg_puts_attr_len().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2529 t_puts(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2530 int *t_col,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2531 char_u *t_s,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2532 char_u *s,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2533 int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 /* output postponed text */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 msg_didout = TRUE; /* remember that line is not empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 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
2538 msg_col += *t_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2539 *t_col = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 /* If the string starts with a composing character don't increment the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2541 * column position for it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2542 if (enc_utf8 && utf_iscomposing(utf_ptr2char(t_s)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 --msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 if (msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2550
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2552 * Returns TRUE when messages should be printed with mch_errmsg().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553 * 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
2554 * If termcap is not active, we may be writing in an alternate console
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2555 * window, cursor positioning may not work correctly (window size may be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556 * different, e.g. for Win32 console) or we just don't know where the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 * cursor is.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2560 msg_use_printf(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 return (!msg_check_screen()
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15840
diff changeset
2563 #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2564 || !termcap_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 || (swapping_screen() && !termcap_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2570 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2571 * Print a message when there is no valid screen.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2572 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2573 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2574 msg_puts_printf(char_u *str, int maxlen)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2575 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2576 char_u *s = str;
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2577 char_u *buf = NULL;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2578 char_u *p = s;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2579
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15840
diff changeset
2580 #ifdef MSWIN
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2581 if (!(silent_mode && p_verbose == 0))
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2582 mch_settmode(TMODE_COOK); /* handle CR and NL correctly */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2583 #endif
10158
dd0531938cb6 commit https://github.com/vim/vim/commit/2321ca2a78286bc026fa7f407281ddbeb04114bb
Christian Brabandt <cb@256bit.org>
parents: 10141
diff changeset
2584 while ((maxlen < 0 || (int)(s - str) < maxlen) && *s != NUL)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2585 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2586 if (!(silent_mode && p_verbose == 0))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2587 {
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2588 // NL --> CR NL translation (for Unix, not for "--version")
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2589 if (*s == NL)
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2590 {
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2591 int n = (int)(s - p);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2592
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2593 buf = alloc(n + 3);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2594 memcpy(buf, p, n);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2595 if (!info_message)
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2596 buf[n++] = CAR;
15840
734b1928a5aa patch 8.1.0927: USE_CR is never defined
Bram Moolenaar <Bram@vim.org>
parents: 15824
diff changeset
2597 buf[n++] = NL;
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2598 buf[n++] = NUL;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2599 if (info_message) // informative message, not an error
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2600 mch_msg((char *)buf);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2601 else
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2602 mch_errmsg((char *)buf);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2603 vim_free(buf);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2604 p = s + 1;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2605 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2606 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2607
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2608 // primitive way to compute the current column
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2609 #ifdef FEAT_RIGHTLEFT
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2610 if (cmdmsg_rl)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2611 {
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2612 if (*s == CAR || *s == NL)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2613 msg_col = Columns - 1;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2614 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2615 --msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2616 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2617 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2618 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2619 {
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2620 if (*s == CAR || *s == NL)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2621 msg_col = 0;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2622 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2623 ++msg_col;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2624 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2625 ++s;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2626 }
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2627
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2628 if (*p != NUL && !(silent_mode && p_verbose == 0))
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2629 {
15926
ca0a0b64809c patch 8.1.0969: message written during startup is truncated
Bram Moolenaar <Bram@vim.org>
parents: 15896
diff changeset
2630 int c = -1;
ca0a0b64809c patch 8.1.0969: message written during startup is truncated
Bram Moolenaar <Bram@vim.org>
parents: 15896
diff changeset
2631
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2632 if (maxlen > 0 && STRLEN(p) > (size_t)maxlen)
15926
ca0a0b64809c patch 8.1.0969: message written during startup is truncated
Bram Moolenaar <Bram@vim.org>
parents: 15896
diff changeset
2633 {
ca0a0b64809c patch 8.1.0969: message written during startup is truncated
Bram Moolenaar <Bram@vim.org>
parents: 15896
diff changeset
2634 c = p[maxlen];
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2635 p[maxlen] = 0;
15926
ca0a0b64809c patch 8.1.0969: message written during startup is truncated
Bram Moolenaar <Bram@vim.org>
parents: 15896
diff changeset
2636 }
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2637 if (info_message)
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2638 mch_msg((char *)p);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2639 else
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2640 mch_errmsg((char *)p);
15926
ca0a0b64809c patch 8.1.0969: message written during startup is truncated
Bram Moolenaar <Bram@vim.org>
parents: 15896
diff changeset
2641 if (c != -1)
ca0a0b64809c patch 8.1.0969: message written during startup is truncated
Bram Moolenaar <Bram@vim.org>
parents: 15896
diff changeset
2642 p[maxlen] = c;
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2643 }
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2644
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2645 msg_didout = TRUE; // assume that line is not empty
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2646
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15840
diff changeset
2647 #ifdef MSWIN
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2648 if (!(silent_mode && p_verbose == 0))
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2649 mch_settmode(TMODE_RAW);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2650 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2651 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2652
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2653 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2654 * Show the more-prompt and handle the user response.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2655 * This takes care of scrolling back and displaying previously displayed text.
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2656 * When at hit-enter prompt "typed_char" is the already typed character,
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2657 * otherwise it's NUL.
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2658 * Returns TRUE when jumping ahead to "confirm_msg_tail".
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2659 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2660 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2661 do_more_prompt(int typed_char)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2662 {
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
2663 static int entered = FALSE;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2664 int used_typed_char = typed_char;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2665 int oldState = State;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2666 int c;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2667 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2668 int retval = FALSE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2669 #endif
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2670 int toscroll;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2671 msgchunk_T *mp_last = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2672 msgchunk_T *mp;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2673 int i;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2674
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
2675 /* We get called recursively when a timer callback outputs a message. In
9185
70d3337ff173 commit https://github.com/vim/vim/commit/a0055ad3a789b8eeb0c983d8a18d4bcaeaf456b8
Christian Brabandt <cb@256bit.org>
parents: 8905
diff changeset
2676 * that case don't show another prompt. Also when at the hit-Enter prompt
70d3337ff173 commit https://github.com/vim/vim/commit/a0055ad3a789b8eeb0c983d8a18d4bcaeaf456b8
Christian Brabandt <cb@256bit.org>
parents: 8905
diff changeset
2677 * and nothing was typed. */
70d3337ff173 commit https://github.com/vim/vim/commit/a0055ad3a789b8eeb0c983d8a18d4bcaeaf456b8
Christian Brabandt <cb@256bit.org>
parents: 8905
diff changeset
2678 if (entered || (State == HITRETURN && typed_char == 0))
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
2679 return FALSE;
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
2680 entered = TRUE;
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
2681
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2682 if (typed_char == 'G')
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2683 {
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2684 /* "g<": Find first line on the last page. */
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2685 mp_last = msg_sb_start(last_msgchunk);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2686 for (i = 0; i < Rows - 2 && mp_last != NULL
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2687 && mp_last->sb_prev != NULL; ++i)
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2688 mp_last = msg_sb_start(mp_last->sb_prev);
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2689 }
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2690
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2691 State = ASKMORE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2692 #ifdef FEAT_MOUSE
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2693 setmouse();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2694 #endif
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2695 if (typed_char == NUL)
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2696 msg_moremsg(FALSE);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2697 for (;;)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2698 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2699 /*
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2700 * Get a typed character directly from the user.
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2701 */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2702 if (used_typed_char != NUL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2703 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2704 c = used_typed_char; /* was typed at hit-enter prompt */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2705 used_typed_char = NUL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2706 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2707 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2708 c = get_keystroke();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2709
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2710 #if defined(FEAT_MENU) && defined(FEAT_GUI)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2711 if (c == K_MENU)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2712 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2713 int idx = get_menu_index(current_menu, ASKMORE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2714
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2715 /* Used a menu. If it starts with CTRL-Y, it must
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2716 * be a "Copy" for the clipboard. Otherwise
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2717 * assume that we end */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2718 if (idx == MENU_INDEX_INVALID)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2719 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2720 c = *current_menu->strings[idx];
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2721 if (c != NUL && current_menu->strings[idx][1] != NUL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2722 ins_typebuf(current_menu->strings[idx] + 1,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2723 current_menu->noremap[idx], 0, TRUE,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2724 current_menu->silent[idx]);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2725 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2726 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2727
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2728 toscroll = 0;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2729 switch (c)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2730 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2731 case BS: /* scroll one line back */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2732 case K_BS:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2733 case 'k':
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2734 case K_UP:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2735 toscroll = -1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2736 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2737
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2738 case CAR: /* one extra line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2739 case NL:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2740 case 'j':
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2741 case K_DOWN:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2742 toscroll = 1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2743 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2744
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2745 case 'u': /* Up half a page */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2746 toscroll = -(Rows / 2);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2747 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2748
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2749 case 'd': /* Down half a page */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2750 toscroll = Rows / 2;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2751 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2752
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2753 case 'b': /* one page back */
1820
484987f8e04c updated for version 7.2-118
vimboss
parents: 1809
diff changeset
2754 case K_PAGEUP:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2755 toscroll = -(Rows - 1);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2756 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2757
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2758 case ' ': /* one extra page */
1820
484987f8e04c updated for version 7.2-118
vimboss
parents: 1809
diff changeset
2759 case 'f':
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2760 case K_PAGEDOWN:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2761 case K_LEFTMOUSE:
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2762 toscroll = Rows - 1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2763 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2764
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2765 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
2766 toscroll = -999999;
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2767 break;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2768
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2769 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
2770 toscroll = 999999;
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2771 lines_left = 999999;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2772 break;
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2773
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2774 case ':': /* start new command line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2775 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2776 if (!confirm_msg_used)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2777 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2778 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2779 /* Since got_int is set all typeahead will be flushed, but we
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2780 * want to keep this ':', remember that in a special way. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2781 typeahead_noflush(':');
14129
cb731d098241 patch 8.1.0082: in terminal window, typing : at more prompt, inserts ':'
Christian Brabandt <cb@256bit.org>
parents: 14004
diff changeset
2782 #ifdef FEAT_TERMINAL
cb731d098241 patch 8.1.0082: in terminal window, typing : at more prompt, inserts ':'
Christian Brabandt <cb@256bit.org>
parents: 14004
diff changeset
2783 skip_term_loop = TRUE;
cb731d098241 patch 8.1.0082: in terminal window, typing : at more prompt, inserts ':'
Christian Brabandt <cb@256bit.org>
parents: 14004
diff changeset
2784 #endif
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2785 cmdline_row = Rows - 1; /* put ':' on this line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2786 skip_redraw = TRUE; /* skip redraw once */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2787 need_wait_return = FALSE; /* don't wait in main() */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2788 }
12674
e769c912fcd9 patch 8.0.1215: newer gcc warns for implicit fallthrough
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
2789 /* FALLTHROUGH */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2790 case 'q': /* quit */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2791 case Ctrl_C:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2792 case ESC:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2793 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2794 if (confirm_msg_used)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2795 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2796 /* Jump to the choices of the dialog. */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2797 retval = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2798 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2799 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2800 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2801 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2802 got_int = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2803 quit_more = TRUE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2804 }
1829
b54d2f702d41 updated for version 7.2-127
vimboss
parents: 1820
diff changeset
2805 /* When there is some more output (wrapping line) display that
b54d2f702d41 updated for version 7.2-127
vimboss
parents: 1820
diff changeset
2806 * without another prompt. */
b54d2f702d41 updated for version 7.2-127
vimboss
parents: 1820
diff changeset
2807 lines_left = Rows - 1;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2808 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2809
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2810 #ifdef FEAT_CLIPBOARD
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2811 case Ctrl_Y:
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2812 /* Strange way to allow copying (yanking) a modeless
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2813 * selection at the more prompt. Use CTRL-Y,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2814 * because the same is used in Cmdline-mode and at the
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2815 * hit-enter prompt. However, scrolling one line up
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2816 * might be expected... */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2817 if (clip_star.state == SELECT_DONE)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2818 clip_copy_modeless_selection(TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2819 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2820 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2821 default: /* no valid response */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2822 msg_moremsg(TRUE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2823 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2824 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2825
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2826 if (toscroll != 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2827 {
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2828 if (toscroll < 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2829 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2830 /* go to start of last line */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2831 if (mp_last == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2832 mp = msg_sb_start(last_msgchunk);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2833 else if (mp_last->sb_prev != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2834 mp = msg_sb_start(mp_last->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2835 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2836 mp = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2837
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2838 /* go to start of line at top of the screen */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2839 for (i = 0; i < Rows - 2 && mp != NULL && mp->sb_prev != NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2840 ++i)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2841 mp = msg_sb_start(mp->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2842
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2843 if (mp != NULL && mp->sb_prev != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2844 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2845 /* Find line to be displayed at top. */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2846 for (i = 0; i > toscroll; --i)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2847 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2848 if (mp == NULL || mp->sb_prev == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2849 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2850 mp = msg_sb_start(mp->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2851 if (mp_last == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2852 mp_last = msg_sb_start(last_msgchunk);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2853 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2854 mp_last = msg_sb_start(mp_last->sb_prev);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2855 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2856
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2857 if (toscroll == -1 && screen_ins_lines(0, 0, 1,
12152
69af108df70e patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents: 12015
diff changeset
2858 (int)Rows, 0, NULL) == OK)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2859 {
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2860 /* display line at top */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2861 (void)disp_sb_line(0, mp);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2862 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2863 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2864 {
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2865 /* redisplay all lines */
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2866 screenclear();
870
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2867 for (i = 0; mp != NULL && i < Rows - 1; ++i)
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2868 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2869 mp = disp_sb_line(i, mp);
870
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2870 ++msg_scrolled;
591fb953a280 updated for version 7.0g05
vimboss
parents: 856
diff changeset
2871 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2872 }
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2873 toscroll = 0;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2874 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2875 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2876 else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2877 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2878 /* 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
2879 while (toscroll > 0 && mp_last != NULL)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2880 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2881 /* scroll up, display line at bottom */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2882 msg_scroll_up();
539
b13dbb7b797c updated for version 7.0153
vimboss
parents: 532
diff changeset
2883 inc_msg_scrolled();
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2884 screen_fill((int)Rows - 2, (int)Rows - 1, 0,
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2885 (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2886 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
2887 --toscroll;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2888 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2889 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2890
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2891 if (toscroll <= 0)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2892 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2893 /* displayed the requested text, more prompt again */
447
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2894 screen_fill((int)Rows - 1, (int)Rows, 0,
8347d456f7e5 updated for version 7.0118
vimboss
parents: 446
diff changeset
2895 (int)Columns, ' ', ' ', 0);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2896 msg_moremsg(FALSE);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2897 continue;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2898 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2899
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2900 /* display more text, return to caller */
3263
320cc46d0eb0 updated for version 7.3.400
Bram Moolenaar <bram@vim.org>
parents: 3240
diff changeset
2901 lines_left = toscroll;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2902 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2903
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2904 break;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2905 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2906
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2907 /* clear the --more-- message */
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2908 screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2909 State = oldState;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2910 #ifdef FEAT_MOUSE
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2911 setmouse();
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2912 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2913 if (quit_more)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2914 {
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2915 msg_row = Rows - 1;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2916 msg_col = 0;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2917 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2918 #ifdef FEAT_RIGHTLEFT
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2919 else if (cmdmsg_rl)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2920 msg_col = Columns - 1;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2921 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2922
8627
7c98c5d0298c commit https://github.com/vim/vim/commit/bfb96c047b79b2aab5fd57a2472871508819f3ef
Christian Brabandt <cb@256bit.org>
parents: 8289
diff changeset
2923 entered = FALSE;
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2924 #ifdef FEAT_CON_DIALOG
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2925 return retval;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2926 #else
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2927 return FALSE;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2928 #endif
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2929 }
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
2930
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931 #if defined(USE_MCH_ERRMSG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 #ifdef mch_errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 # undef mch_errmsg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 #ifdef mch_msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 # undef mch_msg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 * Give an error message. To be used when the screen hasn't been initialized
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 * yet. When stderr can't be used, collect error messages until the GUI has
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 * started and they can be displayed in a message box.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2946 mch_errmsg(char *str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2947 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15840
diff changeset
2948 #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
15824
6733b8b1caf3 patch 8.1.0919: compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 15822
diff changeset
2949 int len = (int)STRLEN(str);
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2950 DWORD nwrite = 0;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2951 DWORD mode = 0;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2952 HANDLE h = GetStdHandle(STD_ERROR_HANDLE);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2953
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2954 if (GetConsoleMode(h, &mode) && enc_codepage >= 0
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2955 && (int)GetConsoleCP() != enc_codepage)
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2956 {
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2957 WCHAR *w = enc_to_utf16((char_u *)str, &len);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2958
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2959 WriteConsoleW(h, w, len, &nwrite, NULL);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2960 vim_free(w);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2961 }
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2962 else
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2963 {
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2964 fprintf(stderr, "%s", str);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2965 }
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2966 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2969 # if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 /* On Unix use stderr if it's a tty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971 * When not going to start the GUI also use stderr.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 * On Mac, when started from Finder, stderr is the console. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 if (
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2974 # ifdef UNIX
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2975 # ifdef MACOS_X
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976 (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2977 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 isatty(2)
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2979 # endif
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2980 # ifdef FEAT_GUI
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2981 ||
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2982 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 # ifdef FEAT_GUI
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2985 !(gui.in_use || gui.starting)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 fprintf(stderr, "%s", str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 }
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
2992 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 /* avoid a delay for a message that isn't there */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 emsg_on_display = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 len = (int)STRLEN(str) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 if (error_ga.ga_growsize == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 error_ga.ga_growsize = 80;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001 error_ga.ga_itemsize = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 if (ga_grow(&error_ga, len) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 mch_memmove((char_u *)error_ga.ga_data + error_ga.ga_len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3006 (char_u *)str, len);
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3007 # ifdef UNIX
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 /* remove CR characters, they are displayed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012 p = (char_u *)error_ga.ga_data + error_ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 p = vim_strchr(p, '\r');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3017 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018 *p = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3019 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3020 }
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3021 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 --len; /* don't count the NUL at the end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3023 error_ga.ga_len += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3024 }
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3025 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3029 * Give a message. To be used when the screen hasn't been initialized yet.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 * When there is no tty, collect messages until the GUI has started and they
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031 * can be displayed in a message box.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3032 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3033 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3034 mch_msg(char *str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3035 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15840
diff changeset
3036 #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
15824
6733b8b1caf3 patch 8.1.0919: compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 15822
diff changeset
3037 int len = (int)STRLEN(str);
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3038 DWORD nwrite = 0;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3039 DWORD mode;
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3040 HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3041
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3042
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3043 if (GetConsoleMode(h, &mode) && enc_codepage >= 0
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3044 && (int)GetConsoleCP() != enc_codepage)
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3045 {
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3046 WCHAR *w = enc_to_utf16((char_u *)str, &len);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3047
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3048 WriteConsoleW(h, w, len, &nwrite, NULL);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3049 vim_free(w);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3050 }
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3051 else
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3052 {
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3053 printf("%s", str);
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3054 }
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3055 #else
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3056 # if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 /* 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
3058 * uses mch_errmsg() when started from the desktop.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059 * When not going to start the GUI also use stdout.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3060 * On Mac, when started from Finder, stderr is the console. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 # ifdef UNIX
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12674
diff changeset
3063 # ifdef MACOS_X
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064 (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066 isatty(2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3069 ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3071 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 !(gui.in_use || gui.starting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 printf("%s", str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 mch_errmsg(str);
15822
9745c25da3bc patch 8.1.0918: MS-Windows: startup messages are not converted
Bram Moolenaar <Bram@vim.org>
parents: 15607
diff changeset
3082 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 #endif /* USE_MCH_ERRMSG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3087 * Put a character on the screen at the current message position and advance
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 * to the next position. Only for printable ASCII!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3089 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3091 msg_screen_putchar(int c, int attr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 msg_didout = TRUE; /* remember that line is not empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 screen_putchar(c, msg_row, msg_col, attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 if (--msg_col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 msg_col = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3106 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107 if (++msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3108 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3116 msg_moremsg(int full)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 {
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
3118 int attr;
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
3119 char_u *s = (char_u *)_("-- More --");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
3121 attr = HL_ATTR(HLF_M);
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
3122 screen_puts(s, (int)Rows - 1, 0, attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 if (full)
446
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
3124 screen_puts((char_u *)
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
3125 _(" SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "),
7472c565592a updated for version 7.0117
vimboss
parents: 437
diff changeset
3126 (int)Rows - 1, vim_strsize(s), attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3130 * Repeat the message for the current mode: ASKMORE, EXTERNCMD, CONFIRM or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131 * exmode_active.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3132 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3133 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3134 repeat_message(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3135 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3136 if (State == ASKMORE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3137 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3138 msg_moremsg(TRUE); /* display --more-- message again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3139 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3141 #ifdef FEAT_CON_DIALOG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142 else if (State == CONFIRM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3144 display_confirm_msg(); /* display ":confirm" message again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3147 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 else if (State == EXTERNCMD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 windgoto(msg_row, msg_col); /* put cursor back */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3151 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3152 else if (State == HITRETURN || State == SETWSIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3153 {
1445
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3154 if (msg_row == Rows - 1)
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3155 {
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3156 /* Avoid drawing the "hit-enter" prompt below the previous one,
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3157 * overwrite it. Esp. useful when regaining focus and a
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3158 * FocusGained autocmd exists but didn't draw anything. */
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3159 msg_didout = FALSE;
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3160 msg_col = 0;
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3161 msg_clr_eos();
54a6b47d473e updated for version 7.1-160
vimboss
parents: 1391
diff changeset
3162 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 hit_return_msg();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3168 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3169 * msg_check_screen - check if the screen is initialized.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3170 * 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
3171 * 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
3172 * output goes to the terminal. Don't use the terminal codes then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3173 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3174 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3175 msg_check_screen(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3177 if (!full_screen || !screen_valid(FALSE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3178 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3179
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3180 if (msg_row >= Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3181 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3182 if (msg_col >= Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3183 msg_col = Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3184 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3185 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3186
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3187 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3188 * Clear from current message position to end of screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3189 * Skip this when ":silent" was used, no need to clear for redirection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3190 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3191 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3192 msg_clr_eos(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3193 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3194 if (msg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3195 msg_clr_eos_force();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3196 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3197
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3198 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3199 * Clear from current message position to end of screen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3200 * Note: msg_col is not updated, so we remember the end of the message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3201 * for msg_check().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3202 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3203 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3204 msg_clr_eos_force(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3205 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3206 if (msg_use_printf())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3207 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3208 if (full_screen) /* only when termcap codes are valid */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3209 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3210 if (*T_CD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3211 out_str(T_CD); /* clear to end of display */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3212 else if (*T_CE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3213 out_str(T_CE); /* clear to end of line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3214 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3215 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3216 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3218 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3219 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3221 screen_fill(msg_row, msg_row + 1, 0, msg_col + 1, ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3222 screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3224 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3225 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3226 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3227 screen_fill(msg_row, msg_row + 1, msg_col, (int)Columns,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3228 ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3229 screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, ' ', ' ', 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3230 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3231 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235 * Clear the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3236 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3237 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3238 msg_clr_cmdline(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3240 msg_row = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3241 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3242 msg_clr_eos_force();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3243 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3244
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3245 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3246 * end putting a message on the screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3247 * call wait_return if the message does not fit in the available space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3248 * return TRUE if wait_return not called.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3249 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3250 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3251 msg_end(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3252 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3253 /*
5245
8c6615a30951 updated for version 7.4a.047
Bram Moolenaar <bram@vim.org>
parents: 4793
diff changeset
3254 * If the string is larger than the window,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3255 * or the ruler option is set and we run into it,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3256 * we have to redraw the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3257 * 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
3258 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3259 if (!exiting && need_wait_return && !(State & CMDLINE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3260 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3261 wait_return(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3262 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3263 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3264 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3265 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3266 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3267
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3268 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269 * If the written message runs into the shown command or ruler, we have to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3270 * wait for hit-return and redraw the window later.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3271 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3272 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3273 msg_check(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275 if (msg_row == Rows - 1 && msg_col >= sc_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3276 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3277 need_wait_return = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3278 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3279 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3280 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3281
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3282 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3283 * May write a string to the redirection file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3284 * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3285 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3286 static void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3287 redir_write(char_u *str, int maxlen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3289 char_u *s = str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3290 static int cur_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3291
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3292 /* Don't do anything for displaying prompts and the like. */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3293 if (redir_off)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3294 return;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3295
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3296 /* 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
3297 if (*p_vfile != NUL && verbose_fd == NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3298 verbose_open();
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3299
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3300 if (redirecting())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3302 /* If the string doesn't start with CR or NL, go to msg_col */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 if (*s != '\n' && *s != '\r')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3305 while (cur_col < msg_col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3306 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3307 #ifdef FEAT_EVAL
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
3308 if (redir_execute)
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
3309 execute_redir_str((char_u *)" ", -1);
9436
f048e5a27253 commit https://github.com/vim/vim/commit/bc5d6dd1dd1dc3a06e4e655fc9479529db288365
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
3310 else if (redir_reg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3311 write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
3312 else if (redir_vname)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
3313 var_redir_str((char_u *)" ", -1);
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3314 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3315 #endif
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3316 if (redir_fd != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 fputs(" ", redir_fd);
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3318 if (verbose_fd != NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3319 fputs(" ", verbose_fd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 ++cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 #ifdef FEAT_EVAL
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
3325 if (redir_execute)
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
3326 execute_redir_str(s, maxlen);
9436
f048e5a27253 commit https://github.com/vim/vim/commit/bc5d6dd1dd1dc3a06e4e655fc9479529db288365
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
3327 else if (redir_reg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 write_reg_contents(redir_reg, s, maxlen, TRUE);
9436
f048e5a27253 commit https://github.com/vim/vim/commit/bc5d6dd1dd1dc3a06e4e655fc9479529db288365
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
3329 else if (redir_vname)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 127
diff changeset
3330 var_redir_str(s, maxlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3331 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3333 /* Write and adjust the current column. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3334 while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 #ifdef FEAT_EVAL
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
3337 if (!redir_reg && !redir_vname && !redir_execute)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3338 #endif
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3339 if (redir_fd != NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3340 putc(*s, redir_fd);
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3341 if (verbose_fd != NULL)
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3342 putc(*s, verbose_fd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3343 if (*s == '\r' || *s == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3344 cur_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345 else if (*s == '\t')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 cur_col += (8 - cur_col % 8);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3347 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 ++cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 if (msg_silent != 0) /* should update msg_col */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 msg_col = cur_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3356
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3357 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3358 redirecting(void)
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3359 {
3072
61c5e1527bd8 updated for version 7.3.308
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
3360 return redir_fd != NULL || *p_vfile != NUL
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3361 #ifdef FEAT_EVAL
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9436
diff changeset
3362 || redir_reg || redir_vname || redir_execute
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3363 #endif
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3364 ;
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3365 }
a58806285f20 updated for version 7.2-152
vimboss
parents: 1829
diff changeset
3366
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 /*
1189
7cdd85615e4e updated for version 7.1b
vimboss
parents: 1059
diff changeset
3368 * Before giving verbose message.
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3369 * Must always be called paired with verbose_leave()!
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3370 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3371 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3372 verbose_enter(void)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3373 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3374 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3375 ++msg_silent;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3376 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3377
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3378 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3379 * After giving verbose message.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3380 * Must always be called paired with verbose_enter()!
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3381 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3382 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3383 verbose_leave(void)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3384 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3385 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3386 if (--msg_silent < 0)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3387 msg_silent = 0;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3388 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3389
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3390 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3391 * Like verbose_enter() and set msg_scroll when displaying the message.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3392 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3393 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3394 verbose_enter_scroll(void)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3395 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3396 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3397 ++msg_silent;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3398 else
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3399 /* always scroll up, don't overwrite */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3400 msg_scroll = TRUE;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3401 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3402
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3403 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3404 * Like verbose_leave() and set cmdline_row when displaying the message.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3405 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3406 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3407 verbose_leave_scroll(void)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3408 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3409 if (*p_vfile != NUL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3410 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3411 if (--msg_silent < 0)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3412 msg_silent = 0;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3413 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3414 else
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3415 cmdline_row = msg_row;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3416 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3417
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3418 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3419 * Called when 'verbosefile' is set: stop writing to the file.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3420 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3421 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3422 verbose_stop(void)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3423 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3424 if (verbose_fd != NULL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3425 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3426 fclose(verbose_fd);
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3427 verbose_fd = NULL;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3428 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3429 verbose_did_open = FALSE;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3430 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3431
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3432 /*
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3433 * Open the file 'verbosefile'.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3434 * Return FAIL or OK.
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3435 */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3436 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3437 verbose_open(void)
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3438 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3439 if (verbose_fd == NULL && !verbose_did_open)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3440 {
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3441 /* Only give the error message once. */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3442 verbose_did_open = TRUE;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3443
531
da9142bd190a updated for version 7.0149
vimboss
parents: 513
diff changeset
3444 verbose_fd = mch_fopen((char *)p_vfile, "a");
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3445 if (verbose_fd == NULL)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3446 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
3447 semsg(_(e_notopen), p_vfile);
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3448 return FAIL;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3449 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3450 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3451 return OK;
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3452 }
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3453
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
3454 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 * Give a warning message (for searching).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456 * Use 'w' highlighting and may repeat the message after redrawing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3459 give_warning(char_u *message, int hl)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 /* Don't do this for ":silent". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462 if (msg_silent != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3463 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 /* Don't want a hit-enter prompt here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466 ++no_wait_return;
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
3467
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 set_vim_var_string(VV_WARNINGMSG, message, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 #endif
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13188
diff changeset
3471 VIM_CLEAR(keep_msg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472 if (hl)
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
3473 keep_msg_attr = HL_ATTR(HLF_W);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 keep_msg_attr = 0;
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
3476 if (msg_attr((char *)message, keep_msg_attr) && msg_scrolled == 0)
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 626
diff changeset
3477 set_keep_msg(message, keep_msg_attr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 msg_didout = FALSE; /* overwrite this message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 msg_nowait = TRUE; /* don't wait for this message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 msg_col = 0;
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
3481
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484
15555
d89c5b339c2a patch 8.1.0785: depending on the configuration some functions are unused
Bram Moolenaar <Bram@vim.org>
parents: 15551
diff changeset
3485 #if defined(FEAT_EVAL) || defined(PROTO)
11561
7ad79766365a patch 8.0.0663: unexpected error message only when 'verbose' is set
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
3486 void
7ad79766365a patch 8.0.0663: unexpected error message only when 'verbose' is set
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
3487 give_warning2(char_u *message, char_u *a1, int hl)
7ad79766365a patch 8.0.0663: unexpected error message only when 'verbose' is set
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
3488 {
7ad79766365a patch 8.0.0663: unexpected error message only when 'verbose' is set
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
3489 vim_snprintf((char *)IObuff, IOSIZE, (char *)message, a1);
7ad79766365a patch 8.0.0663: unexpected error message only when 'verbose' is set
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
3490 give_warning(IObuff, hl);
7ad79766365a patch 8.0.0663: unexpected error message only when 'verbose' is set
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
3491 }
15555
d89c5b339c2a patch 8.1.0785: depending on the configuration some functions are unused
Bram Moolenaar <Bram@vim.org>
parents: 15551
diff changeset
3492 #endif
11561
7ad79766365a patch 8.0.0663: unexpected error message only when 'verbose' is set
Christian Brabandt <cb@256bit.org>
parents: 11269
diff changeset
3493
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3494 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3495 * Advance msg cursor to column "col".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3496 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3497 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3498 msg_advance(int col)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3500 if (msg_silent != 0) /* nothing to advance to */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3502 msg_col = col; /* for redirection, may fill it up later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 if (col >= Columns) /* not enough room */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 col = Columns - 1;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3507 #ifdef FEAT_RIGHTLEFT
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3508 if (cmdmsg_rl)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3509 while (msg_col > Columns - col)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3510 msg_putchar(' ');
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3511 else
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3512 #endif
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3513 while (msg_col < col)
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3514 msg_putchar(' ');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517 #if defined(FEAT_CON_DIALOG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 * Used for "confirm()" function, and the :confirm command prefix.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 * Versions which haven't got flexible dialogs yet, and console
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 * versions, get this generic handler which uses the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 * type = one of:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 * VIM_QUESTION, VIM_INFO, VIM_WARNING, VIM_ERROR or VIM_GENERIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 * title = title string (can be NULL for default)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 * (neither used in console dialogs at the moment)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3527 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 * Format of the "buttons" string:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 * "Button1Name\nButton2Name\nButton3Name"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 * The first button should normally be the default/accept
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 * The second button should be the 'Cancel' button
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 * Other buttons- use your imagination!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3533 * A '&' in a button name becomes a shortcut, so each '&' should be before a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3534 * different letter.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3537 do_dialog(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3538 int type UNUSED,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3539 char_u *title UNUSED,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3540 char_u *message,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3541 char_u *buttons,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3542 int dfltbutton,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3543 char_u *textfield UNUSED, /* IObuff for inputdialog(), NULL
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
3544 otherwise */
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3545 int ex_cmd) /* when TRUE pressing : accepts default and starts
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3546 Ex command */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548 int oldState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3549 int retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 char_u *hotkeys;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 #ifndef NO_CONSOLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 /* Don't output anything in silent mode ("ex -s") */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 if (silent_mode)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 return dfltbutton; /* return default option */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 #ifdef FEAT_GUI_DIALOG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 /* When GUI is running and 'c' not in 'guioptions', use the GUI dialog */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 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
3565 textfield, ex_cmd);
1809
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3566 /* avoid a hit-enter prompt without clearing the cmdline */
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3567 need_wait_return = FALSE;
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3568 emsg_on_display = FALSE;
e9d018b58830 updated for version 7.2-107
vimboss
parents: 1783
diff changeset
3569 cmdline_row = msg_row;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3570
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3571 /* Flush output to avoid that further messages and redrawing is done
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 * in the wrong order. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574 gui_mch_update();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 return c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3577 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3580 oldState = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581 State = CONFIRM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3586 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 * Since we wait for a keypress, don't make the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3588 * user press RETURN as well afterwards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590 ++no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 hotkeys = msg_show_console_dialog(message, buttons, dfltbutton);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3593 if (hotkeys != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 /* Get a typed character directly from the user. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598 c = get_keystroke();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3599 switch (c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 case CAR: /* User accepts default option */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3602 case NL:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3603 retval = dfltbutton;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3604 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3605 case Ctrl_C: /* User aborts/cancels */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3606 case ESC:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3607 retval = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3609 default: /* Could be a hotkey? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3610 if (c < 0) /* special keys are ignored here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3611 continue;
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3612 if (c == ':' && ex_cmd)
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3613 {
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3614 retval = dfltbutton;
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3615 ins_char_typebuf(':');
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3616 break;
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3617 }
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3618
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619 /* Make the character lowercase, as chars in "hotkeys" are. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 c = MB_TOLOWER(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 retval = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 for (i = 0; hotkeys[i]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3624 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 if ((*mb_ptr2char)(hotkeys + i) == c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627 break;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3628 i += (*mb_ptr2len)(hotkeys + i) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 if (hotkeys[i] == c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3632 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 ++retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635 if (hotkeys[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637 /* No hotkey match, so keep waiting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3638 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3640 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3642
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3643 vim_free(hotkeys);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3646 State = oldState;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3649 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 msg_end_prompt();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 * Copy one character from "*from" to "*to", taking care of multi-byte
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 * characters. Return the length of the character in bytes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3659 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 static int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3661 copy_char(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3662 char_u *from,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3663 char_u *to,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3664 int lowercase) /* make character lower case */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3668
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3669 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 if (lowercase)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 c = MB_TOLOWER((*mb_ptr2char)(from));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 return (*mb_char2bytes)(c, to);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 455
diff changeset
3678 len = (*mb_ptr2len)(from);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 mch_memmove(to, from, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 if (lowercase)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686 *to = (char_u)TOLOWER_LOC(*from);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3687 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688 *to = *from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694 * Format the dialog string, and display it at the bottom of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3695 * the screen. Return a string of hotkey chars (if defined) for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3696 * each 'button'. If a button has no hotkey defined, the first character of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 * the button is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698 * The hotkeys can be multi-byte characters, but without combining chars.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3700 * Returns an allocated string with hotkeys, or NULL for error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3701 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 static char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3703 msg_show_console_dialog(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3704 char_u *message,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3705 char_u *buttons,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3706 int dfltbutton)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3707 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3708 int len = 0;
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
3709 #define HOTK_LEN (has_mbyte ? MB_MAXBYTES : 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3710 int lenhotkey = HOTK_LEN; /* count first button */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3711 char_u *hotk = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3712 char_u *msgp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3713 char_u *hotkp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714 char_u *r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3715 int copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3716 #define HAS_HOTKEY_LEN 30
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717 char_u has_hotkey[HAS_HOTKEY_LEN];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3718 int first_hotkey = FALSE; /* first char of button is hotkey */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 has_hotkey[0] = FALSE;
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 * First loop: compute the size of memory to allocate.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725 * Second loop: copy to the allocated memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3726 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 for (copy = 0; copy <= 1; ++copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3728 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 r = buttons;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730 idx = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3731 while (*r)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3732 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3733 if (*r == DLG_BUTTON_SEP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3734 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3735 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3736 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 *msgp++ = ',';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738 *msgp++ = ' '; /* '\n' -> ', ' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 /* advance to next hotkey and set default hotkey */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 if (has_mbyte)
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3742 hotkp += STRLEN(hotkp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744 ++hotkp;
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3745 hotkp[copy_char(r + 1, hotkp, TRUE)] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 if (dfltbutton)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 --dfltbutton;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749 /* If no hotkey is specified first char is used. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 if (idx < HAS_HOTKEY_LEN - 1 && !has_hotkey[++idx])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 first_hotkey = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 len += 3; /* '\n' -> ', '; 'x' -> '(x)' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 lenhotkey += HOTK_LEN; /* each button needs a hotkey */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 if (idx < HAS_HOTKEY_LEN - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 has_hotkey[++idx] = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 else if (*r == DLG_HOTKEY_CHAR || first_hotkey)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 if (*r == DLG_HOTKEY_CHAR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 ++r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 first_hotkey = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 if (*r == DLG_HOTKEY_CHAR) /* '&&a' -> '&a' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 *msgp++ = *r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 /* '&a' -> '[a]' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773 *msgp++ = (dfltbutton == 1) ? '[' : '(';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 msgp += copy_char(r, msgp, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 *msgp++ = (dfltbutton == 1) ? ']' : ')';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777 /* redefine hotkey */
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3778 hotkp[copy_char(r, hotkp, TRUE)] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 ++len; /* '&a' -> '[a]' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 if (idx < HAS_HOTKEY_LEN - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 has_hotkey[idx] = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 /* everything else copy literally */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 msgp += copy_char(r, msgp, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 /* advance to the next character */
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
3796 MB_PTR_ADV(r);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799 if (copy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 *msgp++ = ':';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 *msgp++ = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3803 *msgp = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3807 len += (int)(STRLEN(message)
856
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
3808 + 2 /* for the NL's */
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
3809 + STRLEN(buttons)
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
3810 + 3); /* for the ": " and NUL */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
3811 lenhotkey++; /* for the NUL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 /* If no hotkey is specified first char is used. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 if (!has_hotkey[0])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3815 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816 first_hotkey = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817 len += 2; /* "x" -> "[x]" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 * Now allocate and load the strings
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 vim_free(confirm_msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 confirm_msg = alloc(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3825 if (confirm_msg == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3826 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827 *confirm_msg = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 hotk = alloc(lenhotkey);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3829 if (hotk == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3830 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3832 *confirm_msg = '\n';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3833 STRCPY(confirm_msg + 1, message);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3835 msgp = confirm_msg + 1 + STRLEN(message);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836 hotkp = hotk;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837
1306
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3838 /* Define first default hotkey. Keep the hotkey string NUL
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3839 * terminated to avoid reading past the end. */
a5fd859f69f1 updated for version 7.1-020
vimboss
parents: 1189
diff changeset
3840 hotkp[copy_char(buttons, hotkp, TRUE)] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3842 /* Remember where the choices start, displaying starts here when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 * "hotkp" typed at the more prompt. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3844 confirm_msg_tail = msgp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 *msgp++ = '\n';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 display_confirm_msg();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850 return hotk;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3851 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 * Display the ":confirm" message. Also called when screen resized.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 void
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3857 display_confirm_msg(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859 /* avoid that 'q' at the more prompt truncates the message here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 ++confirm_msg_used;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861 if (confirm_msg != NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15502
diff changeset
3862 msg_puts_attr((char *)confirm_msg, HL_ATTR(HLF_M));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863 --confirm_msg_used;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3865
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 #endif /* FEAT_CON_DIALOG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3867
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 #if defined(FEAT_CON_DIALOG) || defined(FEAT_GUI_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3871 vim_dialog_yesno(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3872 int type,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3873 char_u *title,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3874 char_u *message,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3875 int dflt)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 if (do_dialog(type,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 title == NULL ? (char_u *)_("Question") : title,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 message,
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3880 (char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3881 return VIM_YES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 return VIM_NO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3886 vim_dialog_yesnocancel(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3887 int type,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3888 char_u *title,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3889 char_u *message,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3890 int dflt)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892 switch (do_dialog(type,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 title == NULL ? (char_u *)_("Question") : title,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 message,
2684
951641b8784d updated for version 7.3.102
Bram Moolenaar <bram@vim.org>
parents: 2679
diff changeset
3895 (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 case 1: return VIM_YES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 case 2: return VIM_NO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3900 return VIM_CANCEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3901 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3902
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3904 vim_dialog_yesnoallcancel(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3905 int type,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3906 char_u *title,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3907 char_u *message,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3908 int dflt)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3910 switch (do_dialog(type,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3911 title == NULL ? (char_u *)"Question" : title,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3912 message,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 (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
3914 dflt, NULL, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3915 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3916 case 1: return VIM_YES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 case 2: return VIM_NO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 case 3: return VIM_ALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3919 case 4: return VIM_DISCARDALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3920 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3921 return VIM_CANCEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3922 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3924 #endif /* FEAT_GUI_DIALOG || FEAT_CON_DIALOG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3925
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3926 #if defined(FEAT_BROWSE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3927 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3928 * Generic browse function. Calls gui_mch_browse() when possible.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3929 * Later this may pop-up a non-GUI file selector (external command?).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3930 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 char_u *
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3932 do_browse(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3933 int flags, /* BROWSE_SAVE and BROWSE_DIR */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3934 char_u *title, /* title for the window */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3935 char_u *dflt, /* default file name (may include directory) */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3936 char_u *ext, /* extension added */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3937 char_u *initdir, /* initial directory, NULL for current dir or
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 when using path from "dflt" */
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3939 char_u *filter, /* file name filter */
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
3940 buf_T *buf) /* buffer to read/write for */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 static char_u *last_dir = NULL; /* last used directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3944 char_u *tofree = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3945 int save_browse = cmdmod.browse;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3947 /* Must turn off browse to avoid that autocommands will get the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3948 * flag too! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3949 cmdmod.browse = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3950
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3951 if (title == NULL || *title == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952 {
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3953 if (flags & BROWSE_DIR)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3954 title = (char_u *)_("Select Directory dialog");
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3955 else if (flags & BROWSE_SAVE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3956 title = (char_u *)_("Save File dialog");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3957 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3958 title = (char_u *)_("Open File dialog");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3959 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3961 /* When no directory specified, use default file name, default dir, buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3962 * dir, last dir or current dir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3963 if ((initdir == NULL || *initdir == NUL) && dflt != NULL && *dflt != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3965 if (mch_isdir(dflt)) /* default file name is a directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3966 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3967 initdir = dflt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3968 dflt = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3969 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 else if (gettail(dflt) != dflt) /* default file name includes a path */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 tofree = vim_strsave(dflt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3973 if (tofree != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975 initdir = tofree;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3976 *gettail(initdir) = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 dflt = gettail(dflt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3978 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 if (initdir == NULL || *initdir == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3983 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984 /* When 'browsedir' is a directory, use it */
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3985 if (STRCMP(p_bsdir, "last") != 0
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3986 && STRCMP(p_bsdir, "buffer") != 0
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3987 && STRCMP(p_bsdir, "current") != 0
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3988 && mch_isdir(p_bsdir))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989 initdir = p_bsdir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3990 /* When saving or 'browsedir' is "buffer", use buffer fname */
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
3991 else if (((flags & BROWSE_SAVE) || *p_bsdir == 'b')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3992 && buf != NULL && buf->b_ffname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3993 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3994 if (dflt == NULL || *dflt == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3995 dflt = gettail(curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3996 tofree = vim_strsave(curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3997 if (tofree != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3998 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3999 initdir = tofree;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4000 *gettail(initdir) = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4003 /* When 'browsedir' is "last", use dir from last browse */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4004 else if (*p_bsdir == 'l')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4005 initdir = last_dir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4006 /* When 'browsedir is "current", use current directory. This is the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4007 * default already, leave initdir empty. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4008 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4009
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4010 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4011 if (gui.in_use) /* when this changes, also adjust f_has()! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4012 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4013 if (filter == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4014 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 && (filter = get_var_value((char_u *)"b:browsefilter")) == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4016 && (filter = get_var_value((char_u *)"g:browsefilter")) == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4017 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4018 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4019 filter = BROWSE_FILTER_DEFAULT;
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4020 if (flags & BROWSE_DIR)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4021 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15840
diff changeset
4022 # if defined(FEAT_GUI_GTK) || defined(MSWIN)
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4023 /* For systems that have a directory dialog. */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4024 fname = gui_mch_browsedir(title, initdir);
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4025 # else
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4026 /* Generic solution for selecting a directory: select a file and
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4027 * remove the file name. */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4028 fname = gui_mch_browse(0, title, dflt, ext, initdir, (char_u *)"");
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4029 # endif
2277
f42e0b5ff9e9 Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents: 1924
diff changeset
4030 # if !defined(FEAT_GUI_GTK)
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4031 /* Win32 adds a dummy file name, others return an arbitrary file
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4032 * name. GTK+ 2 returns only the directory, */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4033 if (fname != NULL && *fname != NUL && !mch_isdir(fname))
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4034 {
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4035 /* Remove the file name. */
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
4036 char_u *tail = gettail_sep(fname);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4037
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4038 if (tail == fname)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4039 *tail++ = '.'; /* use current dir */
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4040 *tail = NUL;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4041 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4042 # endif
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4043 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4044 else
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4045 fname = gui_mch_browse(flags & BROWSE_SAVE,
13802
378f9f8e6d8f patch 8.0.1773: dialog messages are not translated
Christian Brabandt <cb@256bit.org>
parents: 13712
diff changeset
4046 title, dflt, ext, initdir, (char_u *)_(filter));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4047
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4048 /* We hang around in the dialog for a while, the user might do some
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4049 * things to our files. The Win32 dialog allows deleting or renaming
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4050 * a file, check timestamps. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4051 need_check_timestamps = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4052 did_check_timestamps = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4054 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4055 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4056 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4057 /* TODO: non-GUI file selector here */
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4058 emsg(_("E338: Sorry, no file browser in console mode"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4059 fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4060 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062 /* keep the directory for next time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4064 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065 vim_free(last_dir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4066 last_dir = vim_strsave(fname);
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 16
diff changeset
4067 if (last_dir != NULL && !(flags & BROWSE_DIR))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069 *gettail(last_dir) = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4070 if (*last_dir == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072 /* filename only returned, must be in current dir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4073 vim_free(last_dir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4074 last_dir = alloc(MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075 if (last_dir != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 mch_dirname(last_dir, MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4079 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4081 vim_free(tofree);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4082 cmdmod.browse = save_browse;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4083
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 return fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4086 #endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4087
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4088 #if defined(FEAT_EVAL)
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4089 static char *e_printf = N_("E766: Insufficient arguments for printf()");
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4090
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4091 /*
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4092 * Get number argument from "idxp" entry in "tvs". First entry is 1.
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4093 */
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4094 static varnumber_T
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4095 tv_nr(typval_T *tvs, int *idxp)
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4096 {
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4097 int idx = *idxp - 1;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4098 varnumber_T n = 0;
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4099 int err = FALSE;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4100
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4101 if (tvs[idx].v_type == VAR_UNKNOWN)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4102 emsg(_(e_printf));
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4103 else
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4104 {
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4105 ++*idxp;
15211
de63593896b3 patch 8.1.0615: get_tv function names are not consistent
Bram Moolenaar <Bram@vim.org>
parents: 15079
diff changeset
4106 n = tv_get_number_chk(&tvs[idx], &err);
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4107 if (err)
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4108 n = 0;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4109 }
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4110 return n;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4111 }
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4112
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4113 /*
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4114 * Get string argument from "idxp" entry in "tvs". First entry is 1.
15211
de63593896b3 patch 8.1.0615: get_tv function names are not consistent
Bram Moolenaar <Bram@vim.org>
parents: 15079
diff changeset
4115 * If "tofree" is NULL tv_get_string_chk() is used. Some types (e.g. List)
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4116 * are not converted to a string.
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4117 * If "tofree" is not NULL echo_string() is used. All types are converted to
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4118 * a string with the same format as ":echo". The caller must free "*tofree".
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
4119 * Returns NULL for an error.
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4120 */
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4121 static char *
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4122 tv_str(typval_T *tvs, int *idxp, char_u **tofree)
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4123 {
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4124 int idx = *idxp - 1;
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4125 char *s = NULL;
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4126 static char_u numbuf[NUMBUFLEN];
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4127
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4128 if (tvs[idx].v_type == VAR_UNKNOWN)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4129 emsg(_(e_printf));
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4130 else
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4131 {
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4132 ++*idxp;
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4133 if (tofree != NULL)
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4134 s = (char *)echo_string(&tvs[idx], tofree, numbuf, get_copyID());
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4135 else
15211
de63593896b3 patch 8.1.0615: get_tv function names are not consistent
Bram Moolenaar <Bram@vim.org>
parents: 15079
diff changeset
4136 s = (char *)tv_get_string_chk(&tvs[idx]);
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4137 }
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4138 return s;
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4139 }
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4140
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4141 # ifdef FEAT_FLOAT
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4142 /*
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4143 * Get float argument from "idxp" entry in "tvs". First entry is 1.
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4144 */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4145 static double
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4146 tv_float(typval_T *tvs, int *idxp)
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4147 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4148 int idx = *idxp - 1;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4149 double f = 0;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4150
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4151 if (tvs[idx].v_type == VAR_UNKNOWN)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4152 emsg(_(e_printf));
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4153 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4154 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4155 ++*idxp;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4156 if (tvs[idx].v_type == VAR_FLOAT)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4157 f = tvs[idx].vval.v_float;
1656
eb6fc577c96c updated for version 7.2a-008
vimboss
parents: 1619
diff changeset
4158 else if (tvs[idx].v_type == VAR_NUMBER)
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4159 f = (double)tvs[idx].vval.v_number;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4160 else
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4161 emsg(_("E807: Expected Float argument for printf()"));
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4162 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4163 return f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4164 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4165 # endif
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4166 #endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4167
10036
ab6320d74331 commit https://github.com/vim/vim/commit/7f7bd297d6d989254f71c694f1c72d07cbc5c306
Christian Brabandt <cb@256bit.org>
parents: 10015
diff changeset
4168 #ifdef FEAT_FLOAT
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4169 /*
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4170 * Return the representation of infinity for printf() function:
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4171 * "-inf", "inf", "+inf", " inf", "-INF", "INF", "+INF" or " INF".
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4172 */
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4173 static const char *
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4174 infinity_str(int positive,
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4175 char fmt_spec,
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4176 int force_sign,
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4177 int space_for_positive)
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4178 {
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4179 static const char *table[] =
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4180 {
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4181 "-inf", "inf", "+inf", " inf",
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4182 "-INF", "INF", "+INF", " INF"
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4183 };
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4184 int idx = positive * (1 + force_sign + force_sign * space_for_positive);
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4185
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4186 if (ASCII_ISUPPER(fmt_spec))
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4187 idx += 4;
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4188 return table[idx];
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4189 }
10036
ab6320d74331 commit https://github.com/vim/vim/commit/7f7bd297d6d989254f71c694f1c72d07cbc5c306
Christian Brabandt <cb@256bit.org>
parents: 10015
diff changeset
4190 #endif
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4191
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4192 /*
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4193 * This code was included to provide a portable vsnprintf() and snprintf().
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4194 * 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
4195 * consistency.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4196 *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4197 * This code is based on snprintf.c - a portable implementation of snprintf
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4198 * 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
4199 * Included with permission. It was heavily modified to fit in Vim.
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4200 * The original code, including useful comments, can be found here:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4201 * http://www.ijs.si/software/snprintf/
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4202 *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4203 * This snprintf() only supports the following conversion specifiers:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4204 * 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
4205 * with flags: '-', '+', ' ', '0' and '#'.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4206 * An asterisk is supported for field width as well as precision.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4207 *
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4208 * Limited support for floating point was added: 'f', 'F', 'e', 'E', 'g', 'G'.
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4209 *
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4210 * Length modifiers 'h' (short int) and 'l' (long int) and 'll' (long long int)
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4211 * are supported.
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4212 *
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4213 * 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
4214 * relevant for double-byte encodings where the second byte may be '%'.
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4215 *
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4216 * 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
4217 * 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
4218 *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4219 * The return value is the number of characters which would be generated
6448
e13f8073c9f9 updated for version 7.4.553
Bram Moolenaar <bram@vim.org>
parents: 5684
diff changeset
4220 * for the given input, excluding the trailing NUL. If this value
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4221 * is greater or equal to "str_m", not all characters from the result
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
4222 * 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
4223 * are discarded. If "str_m" is greater than zero it is guaranteed
6448
e13f8073c9f9 updated for version 7.4.553
Bram Moolenaar <bram@vim.org>
parents: 5684
diff changeset
4224 * the resulting string will be NUL-terminated.
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4225 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4226
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4227 /*
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4228 * When va_list is not supported we only define vim_snprintf().
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4229 *
11653
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4230 * vim_vsnprintf_typval() can be invoked with either "va_list" or a list of
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4231 * "typval_T". When the latter is not used it must be NULL.
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4232 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4233
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4234 /* When generating prototypes all of this is skipped, cproto doesn't
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4235 * understand this. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4236 #ifndef PROTO
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4237
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4238 /* 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
4239 int
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4240 vim_snprintf_add(char *str, size_t str_m, const char *fmt, ...)
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4241 {
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4242 va_list ap;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4243 int str_l;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4244 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
4245 size_t space;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4246
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4247 if (str_m <= len)
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4248 space = 0;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4249 else
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4250 space = str_m - len;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4251 va_start(ap, fmt);
11653
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4252 str_l = vim_vsnprintf(str + len, space, fmt, ap);
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4253 va_end(ap);
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4254 return str_l;
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2277
diff changeset
4255 }
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4256
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4257 int
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4258 vim_snprintf(char *str, size_t str_m, const char *fmt, ...)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4259 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4260 va_list ap;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4261 int str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4262
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4263 va_start(ap, fmt);
11653
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4264 str_l = vim_vsnprintf(str, str_m, fmt, ap);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4265 va_end(ap);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4266 return str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4267 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4268
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4269 int
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4270 vim_vsnprintf(
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4271 char *str,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4272 size_t str_m,
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4273 const char *fmt,
11653
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4274 va_list ap)
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4275 {
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4276 return vim_vsnprintf_typval(str, str_m, fmt, ap, NULL);
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4277 }
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4278
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4279 int
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4280 vim_vsnprintf_typval(
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4281 char *str,
67cf0d45b006 patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents: 11561
diff changeset
4282 size_t str_m,
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4283 const char *fmt,
7827
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4284 va_list ap,
41789f16d6b2 commit https://github.com/vim/vim/commit/52ea13da0fe86df1abf34de52841e367035170c0
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
4285 typval_T *tvs)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4286 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4287 size_t str_l = 0;
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4288 const char *p = fmt;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4289 int arg_idx = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4290
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4291 if (p == NULL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4292 p = "";
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4293 while (*p != NUL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4294 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4295 if (*p != '%')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4296 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4297 char *q = strchr(p + 1, '%');
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4298 size_t n = (q == NULL) ? STRLEN(p) : (size_t)(q - p);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4299
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
4300 /* Copy up to the next '%' or NUL without any changes. */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4301 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4302 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4303 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4304
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4305 mch_memmove(str + str_l, p, n > avail ? avail : n);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4306 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4307 p += n;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4308 str_l += n;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4309 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4310 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4311 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4312 size_t min_field_width = 0, precision = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4313 int zero_padding = 0, precision_specified = 0, justify_left = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4314 int alternate_form = 0, force_sign = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4315
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4316 /* If both the ' ' and '+' flags appear, the ' ' flag should be
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4317 * ignored. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4318 int space_for_positive = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4319
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4320 /* allowed values: \0, h, l, L */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4321 char length_modifier = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4322
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4323 /* temporary buffer for simple numeric->string conversion */
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4324 # if defined(FEAT_FLOAT)
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4325 # define TMP_LEN 350 /* On my system 1e308 is the biggest number possible.
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4326 * That sounds reasonable to use as the maximum
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4327 * printable. */
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4328 # elif defined(FEAT_NUM64)
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4329 # define TMP_LEN 66
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4330 # else
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4331 # define TMP_LEN 34
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4332 # endif
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4333 char tmp[TMP_LEN];
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4334
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4335 /* string address in case of string argument */
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
4336 const char *str_arg = NULL;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4337
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4338 /* natural field width of arg without padding and sign */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4339 size_t str_arg_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4340
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4341 /* unsigned char argument value - only defined for c conversion.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4342 * N.B. standard explicitly states the char argument for the c
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4343 * conversion is unsigned */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4344 unsigned char uchar_arg;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4345
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4346 /* number of zeros to be inserted for numeric conversions as
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4347 * required by the precision or minimal field width */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4348 size_t number_of_zeros_to_pad = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4349
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4350 /* index into tmp where zero padding is to be inserted */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4351 size_t zero_padding_insertion_ind = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4352
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4353 /* current conversion specifier character */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4354 char fmt_spec = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4355
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4356 /* buffer for 's' and 'S' specs */
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4357 char_u *tofree = NULL;
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4358
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4359
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4360 p++; /* skip '%' */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4361
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4362 /* parse flags */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4363 while (*p == '0' || *p == '-' || *p == '+' || *p == ' '
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4364 || *p == '#' || *p == '\'')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4365 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4366 switch (*p)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4367 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4368 case '0': zero_padding = 1; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4369 case '-': justify_left = 1; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4370 case '+': force_sign = 1; space_for_positive = 0; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4371 case ' ': force_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4372 /* If both the ' ' and '+' flags appear, the ' '
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4373 * flag should be ignored */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4374 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4375 case '#': alternate_form = 1; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4376 case '\'': break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4377 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4378 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4379 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4380 /* If the '0' and '-' flags both appear, the '0' flag should be
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4381 * ignored. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4382
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4383 /* parse field width */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4384 if (*p == '*')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4385 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4386 int j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4387
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4388 p++;
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4389 j =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4390 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4391 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4392 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4393 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4394 if (j >= 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4395 min_field_width = j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4396 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4397 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4398 min_field_width = -j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4399 justify_left = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4400 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4401 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4402 else if (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4403 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4404 /* size_t could be wider than unsigned int; make sure we treat
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4405 * argument like common implementations do */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4406 unsigned int uj = *p++ - '0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4407
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4408 while (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4409 uj = 10 * uj + (unsigned int)(*p++ - '0');
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4410 min_field_width = uj;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4411 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4412
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4413 /* parse precision */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4414 if (*p == '.')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4415 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4416 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4417 precision_specified = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4418 if (*p == '*')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4419 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4420 int j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4421
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4422 j =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4423 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4424 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4425 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4426 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4427 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4428 if (j >= 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4429 precision = j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4430 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4431 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4432 precision_specified = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4433 precision = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4434 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4435 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4436 else if (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4437 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4438 /* size_t could be wider than unsigned int; make sure we
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4439 * treat argument like common implementations do */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4440 unsigned int uj = *p++ - '0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4441
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4442 while (VIM_ISDIGIT((int)(*p)))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4443 uj = 10 * uj + (unsigned int)(*p++ - '0');
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4444 precision = uj;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4445 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4446 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4447
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4448 /* parse 'h', 'l' and 'll' length modifiers */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4449 if (*p == 'h' || *p == 'l')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4450 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4451 length_modifier = *p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4452 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4453 if (length_modifier == 'l' && *p == 'l')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4454 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4455 /* double l = long long */
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4456 # ifdef FEAT_NUM64
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4457 length_modifier = 'L';
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4458 # else
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4459 length_modifier = 'l'; /* treat it as a single 'l' */
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4460 # endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4461 p++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4462 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4463 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4464 fmt_spec = *p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4465
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4466 /* common synonyms: */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4467 switch (fmt_spec)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4468 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4469 case 'i': fmt_spec = 'd'; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4470 case 'D': fmt_spec = 'd'; length_modifier = 'l'; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4471 case 'U': fmt_spec = 'u'; length_modifier = 'l'; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4472 case 'O': fmt_spec = 'o'; length_modifier = 'l'; break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4473 default: break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4474 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4475
9497
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4476 # if defined(FEAT_EVAL) && defined(FEAT_NUM64)
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4477 switch (fmt_spec)
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4478 {
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4479 case 'd': case 'u': case 'o': case 'x': case 'X':
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4480 if (tvs != NULL && length_modifier == '\0')
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4481 length_modifier = 'L';
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4482 }
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4483 # endif
d18d71ae21e5 commit https://github.com/vim/vim/commit/38ee6b041e73ad31c3b6b99d56d20833b59b2b57
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
4484
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4485 /* get parameter value, do initial processing */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4486 switch (fmt_spec)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4487 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4488 /* '%' and 'c' behave similar to 's' regarding flags and field
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4489 * widths */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4490 case '%':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4491 case 'c':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4492 case 's':
3914
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4493 case 'S':
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4494 str_arg_l = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4495 switch (fmt_spec)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4496 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4497 case '%':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4498 str_arg = p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4499 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4500
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4501 case 'c':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4502 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4503 int j;
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4504
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4505 j =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4506 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4507 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4508 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4509 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4510 /* standard demands unsigned char */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4511 uchar_arg = (unsigned char)j;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4512 str_arg = (char *)&uchar_arg;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4513 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4514 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4515
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4516 case 's':
3914
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4517 case 'S':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4518 str_arg =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4519 # if defined(FEAT_EVAL)
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4520 tvs != NULL ? tv_str(tvs, &arg_idx, &tofree) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4521 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4522 va_arg(ap, char *);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4523 if (str_arg == NULL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4524 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4525 str_arg = "[NULL]";
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4526 str_arg_l = 6;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4527 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4528 /* make sure not to address string beyond the specified
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4529 * precision !!! */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4530 else if (!precision_specified)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4531 str_arg_l = strlen(str_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4532 /* truncate string if necessary as requested by precision */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4533 else if (precision == 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4534 str_arg_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4535 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4536 {
881
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4537 /* Don't put the #if inside memchr(), it can be a
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4538 * macro. */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4539 /* memchr on HP does not like n > 2^31 !!! */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4540 char *q = memchr(str_arg, '\0',
881
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4541 precision <= (size_t)0x7fffffffL ? precision
48775ea99f24 updated for version 7.0-007
vimboss
parents: 870
diff changeset
4542 : (size_t)0x7fffffffL);
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4543 str_arg_l = (q == NULL) ? precision
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4544 : (size_t)(q - str_arg);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4545 }
3914
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4546 if (fmt_spec == 'S')
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4547 {
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4548 if (min_field_width != 0)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4549 min_field_width += STRLEN(str_arg)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4550 - mb_string2cells((char_u *)str_arg, -1);
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4551 if (precision)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4552 {
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4553 char_u *p1 = (char_u *)str_arg;
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4554 size_t i;
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4555
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4556 for (i = 0; i < precision && *p1; i++)
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4557 p1 += mb_ptr2len(p1);
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4558
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4559 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
4560 }
f15769bce0b8 updated for version 7.3.713
Bram Moolenaar <bram@vim.org>
parents: 3435
diff changeset
4561 }
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4562 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4563
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4564 default:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4565 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4566 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4567 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4568
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4569 case 'd': case 'u':
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4570 case 'b': case 'B':
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4571 case 'o':
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4572 case 'x': case 'X':
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4573 case 'p':
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4574 {
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4575 /* NOTE: the u, b, o, x, X and p conversion specifiers
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4576 * imply the value is unsigned; d implies a signed
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4577 * value */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4578
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4579 /* 0 if numeric argument is zero (or if pointer is
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4580 * NULL for 'p'), +1 if greater than zero (or nonzero
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4581 * for unsigned arguments), -1 if negative (unsigned
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4582 * argument is never negative) */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4583 int arg_sign = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4584
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4585 /* only defined for length modifier h, or for no
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4586 * length modifiers */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4587 int int_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4588 unsigned int uint_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4589
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4590 /* only defined for length modifier l */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4591 long int long_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4592 unsigned long int ulong_arg = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4593
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4594 # ifdef FEAT_NUM64
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4595 /* only defined for length modifier ll */
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4596 varnumber_T llong_arg = 0;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4597 uvarnumber_T ullong_arg = 0;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4598 # endif
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4599
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4600 /* only defined for b conversion */
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4601 uvarnumber_T bin_arg = 0;
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4602
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4603 /* pointer argument value -only defined for p
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4604 * conversion */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4605 void *ptr_arg = NULL;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4606
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4607 if (fmt_spec == 'p')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4608 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4609 length_modifier = '\0';
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4610 ptr_arg =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4611 # if defined(FEAT_EVAL)
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4612 tvs != NULL ? (void *)tv_str(tvs, &arg_idx,
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
4613 NULL) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4614 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4615 va_arg(ap, void *);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4616 if (ptr_arg != NULL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4617 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4618 }
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4619 else if (fmt_spec == 'b' || fmt_spec == 'B')
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4620 {
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4621 bin_arg =
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4622 # if defined(FEAT_EVAL)
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4623 tvs != NULL ?
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4624 (uvarnumber_T)tv_nr(tvs, &arg_idx) :
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4625 # endif
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4626 va_arg(ap, uvarnumber_T);
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4627 if (bin_arg != 0)
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4628 arg_sign = 1;
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4629 }
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4630 else if (fmt_spec == 'd')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4631 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4632 /* signed */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4633 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4634 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4635 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4636 case 'h':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4637 /* char and short arguments are passed as int. */
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4638 int_arg =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4639 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4640 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4641 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4642 va_arg(ap, int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4643 if (int_arg > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4644 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4645 else if (int_arg < 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4646 arg_sign = -1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4647 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4648 case 'l':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4649 long_arg =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4650 # if defined(FEAT_EVAL)
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
4651 tvs != NULL ? tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4652 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4653 va_arg(ap, long int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4654 if (long_arg > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4655 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4656 else if (long_arg < 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4657 arg_sign = -1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4658 break;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4659 # ifdef FEAT_NUM64
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4660 case 'L':
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4661 llong_arg =
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4662 # if defined(FEAT_EVAL)
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4663 tvs != NULL ? tv_nr(tvs, &arg_idx) :
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4664 # endif
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4665 va_arg(ap, varnumber_T);
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4666 if (llong_arg > 0)
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4667 arg_sign = 1;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4668 else if (llong_arg < 0)
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4669 arg_sign = -1;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4670 break;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4671 # endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4672 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4673 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4674 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4675 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4676 /* unsigned */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4677 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4678 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4679 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4680 case 'h':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4681 uint_arg =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4682 # if defined(FEAT_EVAL)
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4683 tvs != NULL ? (unsigned)
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4684 tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4685 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4686 va_arg(ap, unsigned int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4687 if (uint_arg != 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4688 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4689 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4690 case 'l':
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4691 ulong_arg =
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4692 # if defined(FEAT_EVAL)
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4693 tvs != NULL ? (unsigned long)
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
4694 tv_nr(tvs, &arg_idx) :
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4695 # endif
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
4696 va_arg(ap, unsigned long int);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4697 if (ulong_arg != 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4698 arg_sign = 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4699 break;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4700 # ifdef FEAT_NUM64
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4701 case 'L':
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4702 ullong_arg =
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4703 # if defined(FEAT_EVAL)
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4704 tvs != NULL ? (uvarnumber_T)
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4705 tv_nr(tvs, &arg_idx) :
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4706 # endif
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4707 va_arg(ap, uvarnumber_T);
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4708 if (ullong_arg != 0)
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4709 arg_sign = 1;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4710 break;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4711 # endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4712 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4713 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4714
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4715 str_arg = tmp;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4716 str_arg_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4717
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4718 /* NOTE:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4719 * For d, i, u, o, x, and X conversions, if precision is
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4720 * specified, the '0' flag should be ignored. This is so
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4721 * with Solaris 2.6, Digital UNIX 4.0, HPUX 10, Linux,
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4722 * FreeBSD, NetBSD; but not with Perl.
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4723 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4724 if (precision_specified)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4725 zero_padding = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4726 if (fmt_spec == 'd')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4727 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4728 if (force_sign && arg_sign >= 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4729 tmp[str_arg_l++] = space_for_positive ? ' ' : '+';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4730 /* leave negative numbers for sprintf to handle, to
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4731 * avoid handling tricky cases like (short int)-32768 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4732 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4733 else if (alternate_form)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4734 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4735 if (arg_sign != 0
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4736 && (fmt_spec == 'b' || fmt_spec == 'B'
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4737 || fmt_spec == 'x' || fmt_spec == 'X') )
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4738 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4739 tmp[str_arg_l++] = '0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4740 tmp[str_arg_l++] = fmt_spec;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4741 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4742 /* alternate form should have no effect for p
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4743 * conversion, but ... */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4744 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4745
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4746 zero_padding_insertion_ind = str_arg_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4747 if (!precision_specified)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4748 precision = 1; /* default precision is 1 */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4749 if (precision == 0 && arg_sign == 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4750 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4751 /* When zero value is formatted with an explicit
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4752 * precision 0, the resulting formatted string is
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4753 * empty (d, i, u, b, B, o, x, X, p). */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4754 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4755 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4756 {
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4757 char f[6];
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4758 int f_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4759
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4760 /* construct a simple format string for sprintf */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4761 f[f_l++] = '%';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4762 if (!length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4763 ;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4764 else if (length_modifier == 'L')
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4765 {
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4766 # ifdef FEAT_NUM64
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15840
diff changeset
4767 # ifdef MSWIN
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4768 f[f_l++] = 'I';
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4769 f[f_l++] = '6';
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4770 f[f_l++] = '4';
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4771 # else
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4772 f[f_l++] = 'l';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4773 f[f_l++] = 'l';
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4774 # endif
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4775 # else
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4776 f[f_l++] = 'l';
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4777 # endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4778 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4779 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4780 f[f_l++] = length_modifier;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4781 f[f_l++] = fmt_spec;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4782 f[f_l++] = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4783
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4784 if (fmt_spec == 'p')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4785 str_arg_l += sprintf(tmp + str_arg_l, f, ptr_arg);
9894
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4786 else if (fmt_spec == 'b' || fmt_spec == 'B')
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4787 {
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4788 char b[8 * sizeof(uvarnumber_T)];
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4789 size_t b_l = 0;
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4790 uvarnumber_T bn = bin_arg;
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4791
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4792 do
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4793 {
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4794 b[sizeof(b) - ++b_l] = '0' + (bn & 0x1);
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4795 bn >>= 1;
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4796 }
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4797 while (bn != 0);
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4798
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4799 memcpy(tmp + str_arg_l, b + sizeof(b) - b_l, b_l);
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4800 str_arg_l += b_l;
b01afb4e8f66 commit https://github.com/vim/vim/commit/91984b9034d3b698459622be277d963e0c6df60e
Christian Brabandt <cb@256bit.org>
parents: 9892
diff changeset
4801 }
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4802 else if (fmt_spec == 'd')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4803 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4804 /* signed */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4805 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4806 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4807 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4808 case 'h': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4809 tmp + str_arg_l, f, int_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4810 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4811 case 'l': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4812 tmp + str_arg_l, f, long_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4813 break;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4814 # ifdef FEAT_NUM64
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4815 case 'L': str_arg_l += sprintf(
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4816 tmp + str_arg_l, f, llong_arg);
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4817 break;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4818 # endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4819 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4820 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4821 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4822 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4823 /* unsigned */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4824 switch (length_modifier)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4825 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4826 case '\0':
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4827 case 'h': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4828 tmp + str_arg_l, f, uint_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4829 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4830 case 'l': str_arg_l += sprintf(
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4831 tmp + str_arg_l, f, ulong_arg);
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4832 break;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4833 # ifdef FEAT_NUM64
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4834 case 'L': str_arg_l += sprintf(
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4835 tmp + str_arg_l, f, ullong_arg);
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4836 break;
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9185
diff changeset
4837 # endif
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4838 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4839 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4840
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4841 /* include the optional minus sign and possible
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4842 * "0x" in the region before the zero padding
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4843 * insertion point */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4844 if (zero_padding_insertion_ind < str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4845 && tmp[zero_padding_insertion_ind] == '-')
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4846 zero_padding_insertion_ind++;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4847 if (zero_padding_insertion_ind + 1 < str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4848 && tmp[zero_padding_insertion_ind] == '0'
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4849 && (tmp[zero_padding_insertion_ind + 1] == 'x'
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4850 || tmp[zero_padding_insertion_ind + 1] == 'X'))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4851 zero_padding_insertion_ind += 2;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4852 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4853
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4854 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4855 size_t num_of_digits = str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4856 - zero_padding_insertion_ind;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4857
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4858 if (alternate_form && fmt_spec == 'o'
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4859 /* unless zero is already the first
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4860 * character */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4861 && !(zero_padding_insertion_ind < str_arg_l
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4862 && tmp[zero_padding_insertion_ind] == '0'))
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4863 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4864 /* assure leading zero for alternate-form
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4865 * octal numbers */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4866 if (!precision_specified
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4867 || precision < num_of_digits + 1)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4868 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4869 /* precision is increased to force the
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4870 * first character to be zero, except if a
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4871 * zero value is formatted with an
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4872 * explicit precision of zero */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4873 precision = num_of_digits + 1;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4874 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4875 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4876 /* zero padding to specified precision? */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4877 if (num_of_digits < precision)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4878 number_of_zeros_to_pad = precision - num_of_digits;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4879 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4880 /* zero padding to specified minimal field width? */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4881 if (!justify_left && zero_padding)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4882 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4883 int n = (int)(min_field_width - (str_arg_l
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
4884 + number_of_zeros_to_pad));
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4885 if (n > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4886 number_of_zeros_to_pad += n;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4887 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4888 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4889 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
4890
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4891 # ifdef FEAT_FLOAT
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4892 case 'f':
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4893 case 'F':
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4894 case 'e':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4895 case 'E':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4896 case 'g':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4897 case 'G':
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4898 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4899 /* Floating point. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4900 double f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4901 double abs_f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4902 char format[40];
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4903 int l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4904 int remove_trailing_zeroes = FALSE;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4905
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4906 f =
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4907 # if defined(FEAT_EVAL)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4908 tvs != NULL ? tv_float(tvs, &arg_idx) :
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4909 # endif
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4910 va_arg(ap, double);
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4911 abs_f = f < 0 ? -f : f;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4912
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4913 if (fmt_spec == 'g' || fmt_spec == 'G')
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4914 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4915 /* Would be nice to use %g directly, but it prints
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4916 * "1.0" as "1", we don't want that. */
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4917 if ((abs_f >= 0.001 && abs_f < 10000000.0)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4918 || abs_f == 0.0)
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4919 fmt_spec = ASCII_ISUPPER(fmt_spec) ? 'F' : 'f';
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4920 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4921 fmt_spec = fmt_spec == 'g' ? 'e' : 'E';
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4922 remove_trailing_zeroes = TRUE;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4923 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4924
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4925 if ((fmt_spec == 'f' || fmt_spec == 'F') &&
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4926 # ifdef VAX
1783
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4927 abs_f > 1.0e38
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4928 # else
1783
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4929 abs_f > 1.0e307
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
4930 # endif
1783
c3242ae88ef1 updated for version 7.2-081
vimboss
parents: 1757
diff changeset
4931 )
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4932 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4933 /* Avoid a buffer overflow */
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4934 STRCPY(tmp, infinity_str(f > 0.0, fmt_spec,
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4935 force_sign, space_for_positive));
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4936 str_arg_l = STRLEN(tmp);
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4937 zero_padding = 0;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4938 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4939 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4940 {
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4941 if (isnan(f))
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4942 {
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4943 /* Not a number: nan or NAN */
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4944 STRCPY(tmp, ASCII_ISUPPER(fmt_spec) ? "NAN"
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4945 : "nan");
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4946 str_arg_l = 3;
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4947 zero_padding = 0;
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4948 }
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4949 else if (isinf(f))
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4950 {
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4951 STRCPY(tmp, infinity_str(f > 0.0, fmt_spec,
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4952 force_sign, space_for_positive));
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4953 str_arg_l = STRLEN(tmp);
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4954 zero_padding = 0;
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4955 }
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4956 else
13188
a49a5419a83f patch 8.0.1468: illegal memory access in del_bytes()
Christian Brabandt <cb@256bit.org>
parents: 13150
diff changeset
4957 {
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4958 /* Regular float number */
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4959 format[0] = '%';
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4960 l = 1;
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4961 if (force_sign)
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4962 format[l++] = space_for_positive ? ' ' : '+';
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4963 if (precision_specified)
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4964 {
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4965 size_t max_prec = TMP_LEN - 10;
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4966
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4967 /* Make sure we don't get more digits than we
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4968 * have room for. */
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4969 if ((fmt_spec == 'f' || fmt_spec == 'F')
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4970 && abs_f > 1.0)
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4971 max_prec -= (size_t)log10(abs_f);
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4972 if (precision > max_prec)
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4973 precision = max_prec;
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4974 l += sprintf(format + l, ".%d", (int)precision);
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4975 }
10040
48f70e0c696a commit https://github.com/vim/vim/commit/965ed14973fd3f1b2aace7bae4d4722b71ca04f9
Christian Brabandt <cb@256bit.org>
parents: 10038
diff changeset
4976 format[l] = fmt_spec == 'F' ? 'f' : fmt_spec;
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4977 format[l + 1] = NUL;
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4978
10015
5ac2dd61ca8f commit https://github.com/vim/vim/commit/e999782e369999539a1783a7ebe4eadcc6da28a8
Christian Brabandt <cb@256bit.org>
parents: 9988
diff changeset
4979 str_arg_l = sprintf(tmp, format, f);
13188
a49a5419a83f patch 8.0.1468: illegal memory access in del_bytes()
Christian Brabandt <cb@256bit.org>
parents: 13150
diff changeset
4980 }
9986
9bef7b5d02cb commit https://github.com/vim/vim/commit/9992237a3e791fbc0c1ebf743ece1b75e1488410
Christian Brabandt <cb@256bit.org>
parents: 9980
diff changeset
4981
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4982 if (remove_trailing_zeroes)
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4983 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4984 int i;
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4985 char *tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4986
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4987 /* Using %g or %G: remove superfluous zeroes. */
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
4988 if (fmt_spec == 'f' || fmt_spec == 'F')
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4989 tp = tmp + str_arg_l - 1;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4990 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4991 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4992 tp = (char *)vim_strchr((char_u *)tmp,
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4993 fmt_spec == 'e' ? 'e' : 'E');
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4994 if (tp != NULL)
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4995 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4996 /* Remove superfluous '+' and leading
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4997 * zeroes from the exponent. */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
4998 if (tp[1] == '+')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
4999 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5000 /* Change "1.0e+07" to "1.0e07" */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5001 STRMOVE(tp + 1, tp + 2);
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5002 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5003 }
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5004 i = (tp[1] == '-') ? 2 : 1;
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5005 while (tp[i] == '0')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5006 {
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5007 /* Change "1.0e07" to "1.0e7" */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5008 STRMOVE(tp + i, tp + i + 1);
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5009 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5010 }
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5011 --tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5012 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5013 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5014
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5015 if (tp != NULL && !precision_specified)
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5016 /* Remove trailing zeroes, but keep the one
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5017 * just after a dot. */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5018 while (tp > tmp + 2 && *tp == '0'
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5019 && tp[-1] != '.')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5020 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5021 STRMOVE(tp, tp + 1);
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5022 --tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5023 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5024 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5025 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5026 else
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5027 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5028 char *tp;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5029
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5030 /* Be consistent: some printf("%e") use 1.0e+12
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5031 * and some 1.0e+012. Remove one zero in the last
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5032 * case. */
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5033 tp = (char *)vim_strchr((char_u *)tmp,
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5034 fmt_spec == 'e' ? 'e' : 'E');
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5035 if (tp != NULL && (tp[1] == '+' || tp[1] == '-')
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5036 && tp[2] == '0'
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5037 && vim_isdigit(tp[3])
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5038 && vim_isdigit(tp[4]))
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5039 {
1757
f10fe14748e2 updated for version 7.2-055
vimboss
parents: 1668
diff changeset
5040 STRMOVE(tp + 2, tp + 3);
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5041 --str_arg_l;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5042 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5043 }
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5044 }
10038
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
5045 if (zero_padding && min_field_width > str_arg_l
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
5046 && (tmp[0] == '-' || force_sign))
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
5047 {
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
5048 /* padding 0's should be inserted after the sign */
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
5049 number_of_zeros_to_pad = min_field_width - str_arg_l;
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
5050 zero_padding_insertion_ind = 1;
7cf4e210cf3c commit https://github.com/vim/vim/commit/04186095346daa60e82e981dad114de2b641d672
Christian Brabandt <cb@256bit.org>
parents: 10036
diff changeset
5051 }
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5052 str_arg = tmp;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5053 break;
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5054 }
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 6949
diff changeset
5055 # endif
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5056
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5057 default:
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5058 /* unrecognized conversion specifier, keep format string
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5059 * as-is */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5060 zero_padding = 0; /* turn zero padding off for non-numeric
1189
7cdd85615e4e updated for version 7.1b
vimboss
parents: 1059
diff changeset
5061 conversion */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5062 justify_left = 1;
856
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
5063 min_field_width = 0; /* reset flags */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5064
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5065 /* discard the unrecognized conversion, just keep *
856
8cd729851562 updated for version 7.0g
vimboss
parents: 852
diff changeset
5066 * the unrecognized conversion character */
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5067 str_arg = p;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5068 str_arg_l = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5069 if (*p != NUL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5070 str_arg_l++; /* include invalid conversion specifier
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5071 unchanged if not at end-of-string */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5072 break;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5073 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5074
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5075 if (*p != NUL)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5076 p++; /* step over the just processed conversion specifier */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5077
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5078 /* insert padding to the left as requested by min_field_width;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5079 * this does not include the zero padding in case of numerical
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5080 * conversions*/
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5081 if (!justify_left)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5082 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5083 /* left padding with blank or zero */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
5084 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
5085
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5086 if (pn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5087 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5088 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5089 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5090 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5091
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5092 vim_memset(str + str_l, zero_padding ? '0' : ' ',
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5093 (size_t)pn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5094 : (size_t)pn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5095 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5096 str_l += pn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5097 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5098 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5099
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5100 /* zero padding as requested by the precision or by the minimal
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5101 * field width for numeric conversions required? */
330
f76b0d38b6bd updated for version 7.0086
vimboss
parents: 291
diff changeset
5102 if (number_of_zeros_to_pad == 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5103 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5104 /* will not copy first part of numeric right now, *
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5105 * force it to be copied later in its entirety */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5106 zero_padding_insertion_ind = 0;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5107 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5108 else
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5109 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5110 /* insert first part of numerics (sign or '0x') before zero
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5111 * padding */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
5112 int zn = (int)zero_padding_insertion_ind;
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5113
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5114 if (zn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5115 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5116 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5117 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5118 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5119
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5120 mch_memmove(str + str_l, str_arg,
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5121 (size_t)zn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5122 : (size_t)zn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5123 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5124 str_l += zn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5125 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5126
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5127 /* insert zero padding as requested by the precision or min
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5128 * field width */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
5129 zn = (int)number_of_zeros_to_pad;
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5130 if (zn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5131 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5132 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5133 {
11937
c893d6c00497 patch 8.0.0848: using multiple ch_log functions is clumsy
Christian Brabandt <cb@256bit.org>
parents: 11653
diff changeset
5134 size_t avail = str_m - str_l;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5135
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5136 vim_memset(str + str_l, '0',
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5137 (size_t)zn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5138 : (size_t)zn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5139 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5140 str_l += zn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5141 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5142 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5143
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5144 /* insert formatted string
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5145 * (or as-is conversion specifier for unknown conversions) */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5146 {
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 822
diff changeset
5147 int sn = (int)(str_arg_l - zero_padding_insertion_ind);
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5148
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5149 if (sn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5150 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5151 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5152 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5153 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5154
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5155 mch_memmove(str + str_l,
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5156 str_arg + zero_padding_insertion_ind,
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5157 (size_t)sn > avail ? avail : (size_t)sn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5158 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5159 str_l += sn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5160 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5161 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5162
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5163 /* insert right padding */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5164 if (justify_left)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5165 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5166 /* right blank padding to the field width */
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5167 int pn = (int)(min_field_width
b9740fb41986 updated for version 7.2a
vimboss
parents: 1445
diff changeset
5168 - (str_arg_l + number_of_zeros_to_pad));
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5169
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5170 if (pn > 0)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5171 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5172 if (str_l < str_m)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5173 {
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5174 size_t avail = str_m - str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5175
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5176 vim_memset(str + str_l, ' ',
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5177 (size_t)pn > avail ? avail
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1854
diff changeset
5178 : (size_t)pn);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5179 }
275
fb70e333c94e updated for version 7.0074
vimboss
parents: 272
diff changeset
5180 str_l += pn;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5181 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5182 }
9892
41c5d59e7e10 commit https://github.com/vim/vim/commit/e5a8f35b4286135f3469f3b00a6c2220553d9658
Christian Brabandt <cb@256bit.org>
parents: 9698
diff changeset
5183 vim_free(tofree);
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5184 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5185 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5186
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5187 if (str_m > 0)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5188 {
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
5189 /* make sure the string is nul-terminated even at the expense of
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5190 * overwriting the last character (shouldn't happen, but just in case)
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5191 * */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5192 str[str_l <= str_m - 1 ? str_l : str_m - 1] = '\0';
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5193 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5194
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 474
diff changeset
5195 if (tvs != NULL && tvs[arg_idx - 1].v_type != VAR_UNKNOWN)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15219
diff changeset
5196 emsg(_("E767: Too many arguments to printf()"));
449
3709cf52b9b5 updated for version 7.0119
vimboss
parents: 447
diff changeset
5197
437
256118bd00f4 updated for version 7.0113
vimboss
parents: 360
diff changeset
5198 /* Return the number of characters formatted (excluding trailing nul
272
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5199 * character), that is, the number of characters that would have been
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5200 * written to the buffer if it were large enough. */
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5201 return (int)str_l;
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5202 }
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5203
ddada568db54 updated for version 7.0073
vimboss
parents: 229
diff changeset
5204 #endif /* PROTO */