annotate src/ex_cmds2.c @ 18478:94223687df0e

Added tag v8.1.2233 for changeset e93cab5d0f0f27fad7882f1f412927df055b090d
author Bram Moolenaar <Bram@vim.org>
date Tue, 29 Oct 2019 04:30:05 +0100
parents d1e77015f60b
children 8f05b3cf8557
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: 9812
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 * ex_cmds2.c: some more functions for command line commands
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 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 #include "version.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 #if defined(FEAT_EVAL) || defined(PROTO)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
18 # if defined(FEAT_TIMERS) || defined(PROTO)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
19 static timer_T *first_timer = NULL;
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
20 static long last_timer_id = 0;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
21
16594
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
22 /*
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
23 * Return time left until "due". Negative if past "due".
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
24 */
13878
a590029f16a0 patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
25 long
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
26 proftime_time_left(proftime_T *due, proftime_T *now)
12495
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
27 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15842
diff changeset
28 # ifdef MSWIN
12495
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
29 LARGE_INTEGER fr;
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
30
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
31 if (now->QuadPart > due->QuadPart)
12495
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
32 return 0;
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
33 QueryPerformanceFrequency(&fr);
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
34 return (long)(((double)(due->QuadPart - now->QuadPart)
12495
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
35 / (double)fr.QuadPart) * 1000);
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
36 # else
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
37 if (now->tv_sec > due->tv_sec)
12495
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
38 return 0;
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
39 return (due->tv_sec - now->tv_sec) * 1000
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
40 + (due->tv_usec - now->tv_usec) / 1000;
12495
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
41 # endif
65f8c6fcfd83 patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
42 }
10066
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
43
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
44 /*
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
45 * Insert a timer in the list of timers.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
46 */
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
47 static void
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
48 insert_timer(timer_T *timer)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
49 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
50 timer->tr_next = first_timer;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
51 timer->tr_prev = NULL;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
52 if (first_timer != NULL)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
53 first_timer->tr_prev = timer;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
54 first_timer = timer;
9179
5e18efdad322 commit https://github.com/vim/vim/commit/4231da403e3c879dd6ac261e51f4ca60813935e3
Christian Brabandt <cb@256bit.org>
parents: 9155
diff changeset
55 did_add_timer = TRUE;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
56 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
57
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
58 /*
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
59 * Take a timer out of the list of timers.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
60 */
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
61 static void
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
62 remove_timer(timer_T *timer)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
63 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
64 if (timer->tr_prev == NULL)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
65 first_timer = timer->tr_next;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
66 else
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
67 timer->tr_prev->tr_next = timer->tr_next;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
68 if (timer->tr_next != NULL)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
69 timer->tr_next->tr_prev = timer->tr_prev;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
70 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
71
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
72 static void
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
73 free_timer(timer_T *timer)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
74 {
16872
a836d122231a patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
75 free_callback(&timer->tr_callback);
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
76 vim_free(timer);
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
77 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
78
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
79 /*
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
80 * Create a timer and return it. NULL if out of memory.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
81 * Caller should set the callback.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
82 */
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
83 timer_T *
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
84 create_timer(long msec, int repeat)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
85 {
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
86 timer_T *timer = ALLOC_CLEAR_ONE(timer_T);
10182
40f6ce4fe30e commit https://github.com/vim/vim/commit/ee39ef0b93d31763d05e54ba99801e3f1a254c0d
Christian Brabandt <cb@256bit.org>
parents: 10122
diff changeset
87 long prev_id = last_timer_id;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
88
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
89 if (timer == NULL)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
90 return NULL;
10182
40f6ce4fe30e commit https://github.com/vim/vim/commit/ee39ef0b93d31763d05e54ba99801e3f1a254c0d
Christian Brabandt <cb@256bit.org>
parents: 10122
diff changeset
91 if (++last_timer_id <= prev_id)
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
92 /* Overflow! Might cause duplicates... */
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
93 last_timer_id = 0;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
94 timer->tr_id = last_timer_id;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
95 insert_timer(timer);
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
96 if (repeat != 0)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
97 timer->tr_repeat = repeat - 1;
9790
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
98 timer->tr_interval = msec;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
99
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
100 profile_setlimit(msec, &timer->tr_due);
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
101 return timer;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
102 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
103
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
104 /*
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
105 * Invoke the callback of "timer".
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
106 */
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
107 static void
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
108 timer_callback(timer_T *timer)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
109 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
110 typval_T rettv;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
111 typval_T argv[2];
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
112
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
113 argv[0].v_type = VAR_NUMBER;
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
114 argv[0].vval.v_number = (varnumber_T)timer->tr_id;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
115 argv[1].v_type = VAR_UNKNOWN;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
116
17606
ff097edaae89 patch 8.1.1800: function call functions have too many arguments
Bram Moolenaar <Bram@vim.org>
parents: 17596
diff changeset
117 call_callback(&timer->tr_callback, -1, &rettv, 1, argv);
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
118 clear_tv(&rettv);
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
119 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
120
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
121 /*
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
122 * Call timers that are due.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
123 * Return the time in msec until the next timer is due.
11631
3b53bb2a0e39 patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents: 11595
diff changeset
124 * Returns -1 if there are no pending timers.
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
125 */
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
126 long
9282
9f97a6290c63 commit https://github.com/vim/vim/commit/cf089463492fab53b2a5d81517829d22f882f82e
Christian Brabandt <cb@256bit.org>
parents: 9179
diff changeset
127 check_due_timer(void)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
128 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
129 timer_T *timer;
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
130 timer_T *timer_next;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
131 long this_due;
8587
fb8d7086e99d commit https://github.com/vim/vim/commit/597385ab43093ba27adcb86cdc1b46aba86a0093
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
132 long next_due = -1;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
133 proftime_T now;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
134 int did_one = FALSE;
12244
d0b039e2ed56 patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents: 12206
diff changeset
135 int need_update_screen = FALSE;
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
136 long current_id = last_timer_id;
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11631
diff changeset
137
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11631
diff changeset
138 /* Don't run any timers while exiting or dealing with an error. */
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11631
diff changeset
139 if (exiting || aborting())
11631
3b53bb2a0e39 patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents: 11595
diff changeset
140 return next_due;
3b53bb2a0e39 patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents: 11595
diff changeset
141
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
142 profile_start(&now);
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
143 for (timer = first_timer; timer != NULL && !got_int; timer = timer_next)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
144 {
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
145 timer_next = timer->tr_next;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
146
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
147 if (timer->tr_id == -1 || timer->tr_firing || timer->tr_paused)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
148 continue;
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
149 this_due = proftime_time_left(&timer->tr_due, &now);
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
150 if (this_due <= 1)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
151 {
13892
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13878
diff changeset
152 /* Save and restore a lot of flags, because the timer fires while
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13878
diff changeset
153 * waiting for a character, which might be halfway a command. */
11575
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 11457
diff changeset
154 int save_timer_busy = timer_busy;
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 11457
diff changeset
155 int save_vgetc_busy = vgetc_busy;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
156 int save_did_emsg = did_emsg;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
157 int save_called_emsg = called_emsg;
17184
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
158 int save_must_redraw = must_redraw;
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
159 int save_trylevel = trylevel;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
160 int save_did_throw = did_throw;
12459
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
161 int save_ex_pressedreturn = get_pressedreturn();
17178
40c4cb095d53 patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents: 17151
diff changeset
162 int save_may_garbage_collect = may_garbage_collect;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
163 except_T *save_current_exception = current_exception;
13892
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13878
diff changeset
164 vimvars_save_T vvsave;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
165
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
166 /* Create a scope for running the timer callback, ignoring most of
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
167 * the current scope, such as being inside a try/catch. */
11575
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 11457
diff changeset
168 timer_busy = timer_busy > 0 || vgetc_busy > 0;
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 11457
diff changeset
169 vgetc_busy = 0;
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11631
diff changeset
170 called_emsg = FALSE;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
171 did_emsg = FALSE;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
172 did_uncaught_emsg = FALSE;
12244
d0b039e2ed56 patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents: 12206
diff changeset
173 must_redraw = 0;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
174 trylevel = 0;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
175 did_throw = FALSE;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
176 current_exception = NULL;
17178
40c4cb095d53 patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents: 17151
diff changeset
177 may_garbage_collect = FALSE;
13892
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13878
diff changeset
178 save_vimvars(&vvsave);
17178
40c4cb095d53 patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents: 17151
diff changeset
179
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
180 timer->tr_firing = TRUE;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
181 timer_callback(timer);
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
182 timer->tr_firing = FALSE;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
183
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
184 timer_next = timer->tr_next;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
185 did_one = TRUE;
11575
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 11457
diff changeset
186 timer_busy = save_timer_busy;
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 11457
diff changeset
187 vgetc_busy = save_vgetc_busy;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
188 if (did_uncaught_emsg)
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11631
diff changeset
189 ++timer->tr_emsg_count;
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
190 did_emsg = save_did_emsg;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
191 called_emsg = save_called_emsg;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
192 trylevel = save_trylevel;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
193 did_throw = save_did_throw;
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12244
diff changeset
194 current_exception = save_current_exception;
13892
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13878
diff changeset
195 restore_vimvars(&vvsave);
12244
d0b039e2ed56 patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents: 12206
diff changeset
196 if (must_redraw != 0)
d0b039e2ed56 patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents: 12206
diff changeset
197 need_update_screen = TRUE;
d0b039e2ed56 patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents: 12206
diff changeset
198 must_redraw = must_redraw > save_must_redraw
d0b039e2ed56 patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents: 12206
diff changeset
199 ? must_redraw : save_must_redraw;
12459
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
200 set_pressedreturn(save_ex_pressedreturn);
17178
40c4cb095d53 patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents: 17151
diff changeset
201 may_garbage_collect = save_may_garbage_collect;
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
202
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
203 /* Only fire the timer again if it repeats and stop_timer() wasn't
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
204 * called while inside the callback (tr_id == -1). */
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11631
diff changeset
205 if (timer->tr_repeat != 0 && timer->tr_id != -1
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11631
diff changeset
206 && timer->tr_emsg_count < 3)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
207 {
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
208 profile_setlimit(timer->tr_interval, &timer->tr_due);
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
209 this_due = proftime_time_left(&timer->tr_due, &now);
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
210 if (this_due < 1)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
211 this_due = 1;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
212 if (timer->tr_repeat > 0)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
213 --timer->tr_repeat;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
214 }
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
215 else
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
216 {
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
217 this_due = -1;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
218 remove_timer(timer);
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
219 free_timer(timer);
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
220 }
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
221 }
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
222 if (this_due > 0 && (next_due == -1 || next_due > this_due))
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
223 next_due = this_due;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
224 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
225
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
226 if (did_one)
12244
d0b039e2ed56 patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents: 12206
diff changeset
227 redraw_after_callback(need_update_screen);
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
228
12871
1a450ce6980c patch 8.0.1312: balloon_show() only works in terminal when compiled with GUI
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
229 #ifdef FEAT_BEVAL_TERM
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
230 if (bevalexpr_due_set)
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
231 {
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
232 this_due = proftime_time_left(&bevalexpr_due, &now);
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
233 if (this_due <= 1)
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
234 {
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
235 bevalexpr_due_set = FALSE;
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
236 if (balloonEval == NULL)
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
237 {
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
238 balloonEval = ALLOC_CLEAR_ONE(BalloonEval);
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
239 balloonEvalForTerm = TRUE;
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
240 }
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
241 if (balloonEval != NULL)
16594
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
242 {
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
243 general_beval_cb(balloonEval, 0);
16594
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
244 setcursor();
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
245 out_flush();
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
246 }
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
247 }
13762
9de2b25932eb patch 8.0.1753: various warnings from a static analyser
Christian Brabandt <cb@256bit.org>
parents: 13736
diff changeset
248 else if (next_due == -1 || next_due > this_due)
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
249 next_due = this_due;
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
250 }
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
251 #endif
13878
a590029f16a0 patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
252 #ifdef FEAT_TERMINAL
a590029f16a0 patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
253 /* Some terminal windows may need their buffer updated. */
a590029f16a0 patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
254 next_due = term_check_timers(next_due, &now);
a590029f16a0 patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
255 #endif
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
256
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
257 return current_id != last_timer_id ? 1 : next_due;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
258 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
259
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
260 /*
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
261 * Find a timer by ID. Returns NULL if not found;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
262 */
18051
d1e77015f60b patch 8.1.2021: some global functions can be local to the file
Bram Moolenaar <Bram@vim.org>
parents: 17986
diff changeset
263 static timer_T *
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
264 find_timer(long id)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
265 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
266 timer_T *timer;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
267
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
268 if (id >= 0)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
269 {
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
270 for (timer = first_timer; timer != NULL; timer = timer->tr_next)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
271 if (timer->tr_id == id)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
272 return timer;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
273 }
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
274 return NULL;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
275 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
276
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
277
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
278 /*
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
279 * Stop a timer and delete it.
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
280 */
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
281 void
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
282 stop_timer(timer_T *timer)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
283 {
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
284 if (timer->tr_firing)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
285 /* Free the timer after the callback returns. */
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
286 timer->tr_id = -1;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
287 else
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
288 {
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
289 remove_timer(timer);
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
290 free_timer(timer);
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
291 }
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
292 }
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
293
18051
d1e77015f60b patch 8.1.2021: some global functions can be local to the file
Bram Moolenaar <Bram@vim.org>
parents: 17986
diff changeset
294 static void
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9792
diff changeset
295 stop_all_timers(void)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9792
diff changeset
296 {
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
297 timer_T *timer;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
298 timer_T *timer_next;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
299
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
300 for (timer = first_timer; timer != NULL; timer = timer_next)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
301 {
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
302 timer_next = timer->tr_next;
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
303 stop_timer(timer);
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
304 }
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9792
diff changeset
305 }
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9792
diff changeset
306
18051
d1e77015f60b patch 8.1.2021: some global functions can be local to the file
Bram Moolenaar <Bram@vim.org>
parents: 17986
diff changeset
307 static void
9790
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
308 add_timer_info(typval_T *rettv, timer_T *timer)
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
309 {
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
310 list_T *list = rettv->vval.v_list;
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
311 dict_T *dict = dict_alloc();
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
312 dictitem_T *di;
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
313 long remaining;
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
314 proftime_T now;
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
315
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
316 if (dict == NULL)
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
317 return;
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
318 list_append_dict(list, dict);
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
319
14301
3c80092eb211 patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents: 14208
diff changeset
320 dict_add_number(dict, "id", timer->tr_id);
3c80092eb211 patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents: 14208
diff changeset
321 dict_add_number(dict, "time", (long)timer->tr_interval);
9790
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
322
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
323 profile_start(&now);
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12678
diff changeset
324 remaining = proftime_time_left(&timer->tr_due, &now);
14301
3c80092eb211 patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents: 14208
diff changeset
325 dict_add_number(dict, "remaining", (long)remaining);
3c80092eb211 patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents: 14208
diff changeset
326
3c80092eb211 patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents: 14208
diff changeset
327 dict_add_number(dict, "repeat",
3c80092eb211 patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents: 14208
diff changeset
328 (long)(timer->tr_repeat < 0 ? -1 : timer->tr_repeat + 1));
3c80092eb211 patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents: 14208
diff changeset
329 dict_add_number(dict, "paused", (long)(timer->tr_paused));
9790
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
330
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
331 di = dictitem_alloc((char_u *)"callback");
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
332 if (di != NULL)
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
333 {
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
334 if (dict_add(dict, di) == FAIL)
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
335 vim_free(di);
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
336 else
16872
a836d122231a patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
337 put_callback(&timer->tr_callback, &di->di_tv);
9790
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
338 }
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
339 }
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
340
18051
d1e77015f60b patch 8.1.2021: some global functions can be local to the file
Bram Moolenaar <Bram@vim.org>
parents: 17986
diff changeset
341 static void
9790
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
342 add_timer_info_all(typval_T *rettv)
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
343 {
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
344 timer_T *timer;
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
345
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
346 for (timer = first_timer; timer != NULL; timer = timer->tr_next)
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
347 if (timer->tr_id != -1)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10078
diff changeset
348 add_timer_info(rettv, timer);
9790
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
349 }
34cc6a101340 commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents: 9778
diff changeset
350
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
351 /*
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
352 * Mark references in partials of timers.
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
353 */
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
354 int
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
355 set_ref_in_timer(int copyID)
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
356 {
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
357 int abort = FALSE;
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
358 timer_T *timer;
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
359 typval_T tv;
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
360
17151
ebe9aab81898 patch 8.1.1575: callbacks may be garbage collected
Bram Moolenaar <Bram@vim.org>
parents: 17111
diff changeset
361 for (timer = first_timer; !abort && timer != NULL; timer = timer->tr_next)
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
362 {
16872
a836d122231a patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
363 if (timer->tr_callback.cb_partial != NULL)
9686
8c2553beff0f commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
364 {
8c2553beff0f commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
365 tv.v_type = VAR_PARTIAL;
16872
a836d122231a patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
366 tv.vval.v_partial = timer->tr_callback.cb_partial;
9686
8c2553beff0f commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
367 }
8c2553beff0f commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
368 else
8c2553beff0f commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
369 {
8c2553beff0f commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
370 tv.v_type = VAR_FUNC;
16872
a836d122231a patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
371 tv.vval.v_string = timer->tr_callback.cb_name;
9686
8c2553beff0f commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
372 }
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
373 abort = abort || set_ref_in_item(&tv, copyID, NULL, NULL);
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
374 }
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
375 return abort;
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 9112
diff changeset
376 }
9709
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
377
17986
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
378 # if defined(EXITFREE) || defined(PROTO)
9709
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
379 void
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
380 timer_free_all()
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
381 {
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
382 timer_T *timer;
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
383
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
384 while (first_timer != NULL)
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
385 {
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
386 timer = first_timer;
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
387 remove_timer(timer);
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
388 free_timer(timer);
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
389 }
cce76af1cc6a commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents: 9686
diff changeset
390 }
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
391 # endif
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8526
diff changeset
392
17986
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
393 /*
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
394 * "timer_info([timer])" function
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
395 */
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
396 void
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
397 f_timer_info(typval_T *argvars, typval_T *rettv)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
398 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
399 timer_T *timer = NULL;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
400
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
401 if (rettv_list_alloc(rettv) != OK)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
402 return;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
403 if (argvars[0].v_type != VAR_UNKNOWN)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
404 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
405 if (argvars[0].v_type != VAR_NUMBER)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
406 emsg(_(e_number_exp));
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
407 else
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
408 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
409 timer = find_timer((int)tv_get_number(&argvars[0]));
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
410 if (timer != NULL)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
411 add_timer_info(rettv, timer);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
412 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
413 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
414 else
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
415 add_timer_info_all(rettv);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
416 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
417
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
418 /*
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
419 * "timer_pause(timer, paused)" function
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
420 */
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
421 void
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
422 f_timer_pause(typval_T *argvars, typval_T *rettv UNUSED)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
423 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
424 timer_T *timer = NULL;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
425 int paused = (int)tv_get_number(&argvars[1]);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
426
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
427 if (argvars[0].v_type != VAR_NUMBER)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
428 emsg(_(e_number_exp));
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
429 else
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
430 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
431 timer = find_timer((int)tv_get_number(&argvars[0]));
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
432 if (timer != NULL)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
433 timer->tr_paused = paused;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
434 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
435 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
436
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
437 /*
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
438 * "timer_start(time, callback [, options])" function
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
439 */
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
440 void
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
441 f_timer_start(typval_T *argvars, typval_T *rettv)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
442 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
443 long msec = (long)tv_get_number(&argvars[0]);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
444 timer_T *timer;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
445 int repeat = 0;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
446 callback_T callback;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
447 dict_T *dict;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
448
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
449 rettv->vval.v_number = -1;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
450 if (check_secure())
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
451 return;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
452 if (argvars[2].v_type != VAR_UNKNOWN)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
453 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
454 if (argvars[2].v_type != VAR_DICT
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
455 || (dict = argvars[2].vval.v_dict) == NULL)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
456 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
457 semsg(_(e_invarg2), tv_get_string(&argvars[2]));
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
458 return;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
459 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
460 if (dict_find(dict, (char_u *)"repeat", -1) != NULL)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
461 repeat = dict_get_number(dict, (char_u *)"repeat");
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
462 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
463
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
464 callback = get_callback(&argvars[1]);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
465 if (callback.cb_name == NULL)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
466 return;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
467
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
468 timer = create_timer(msec, repeat);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
469 if (timer == NULL)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
470 free_callback(&callback);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
471 else
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
472 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
473 set_callback(&timer->tr_callback, &callback);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
474 rettv->vval.v_number = (varnumber_T)timer->tr_id;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
475 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
476 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
477
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
478 /*
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
479 * "timer_stop(timer)" function
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
480 */
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
481 void
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
482 f_timer_stop(typval_T *argvars, typval_T *rettv UNUSED)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
483 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
484 timer_T *timer;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
485
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
486 if (argvars[0].v_type != VAR_NUMBER)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
487 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
488 emsg(_(e_number_exp));
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
489 return;
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
490 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
491 timer = find_timer((int)tv_get_number(&argvars[0]));
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
492 if (timer != NULL)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
493 stop_timer(timer);
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
494 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
495
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
496 /*
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
497 * "timer_stopall()" function
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
498 */
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
499 void
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
500 f_timer_stopall(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
501 {
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
502 stop_all_timers();
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
503 }
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
504
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
505 # endif // FEAT_TIMERS
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
506
5c8906f653f5 patch 8.1.1989: the evalfunc.c file is still too big
Bram Moolenaar <Bram@vim.org>
parents: 17861
diff changeset
507 #endif // FEAT_EVAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 * If 'autowrite' option set, try to write the file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 * Careful: autocommands may make "buf" invalid!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 * return FAIL for failure, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
516 autowrite(buf_T *buf, int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 {
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
518 int r;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
519 bufref_T bufref;
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
520
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 if (!(p_aw || p_awa) || !p_write
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 #ifdef FEAT_QUICKFIX
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
523 /* never autowrite a "nofile" or "nowrite" buffer */
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
524 || bt_dontwrite(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 #endif
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
526 || (!forceit && buf->b_p_ro) || buf->b_ffname == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 return FAIL;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
528 set_bufref(&bufref, buf);
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
529 r = buf_write_all(buf, forceit);
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
530
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
531 /* Writing may succeed but the buffer still changed, e.g., when there is a
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
532 * conversion error. We do want to return FAIL then. */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
533 if (bufref_valid(&bufref) && bufIsChanged(buf))
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
534 r = FAIL;
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
535 return r;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 /*
14642
96858d612aff patch 8.1.0334: 'autowrite' takes effect when buffer is not to be written
Christian Brabandt <cb@256bit.org>
parents: 14303
diff changeset
539 * Flush all buffers, except the ones that are readonly or are never written.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
542 autowrite_all(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 if (!(p_aw || p_awa) || !p_write)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 return;
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
548 FOR_ALL_BUFFERS(buf)
14642
96858d612aff patch 8.1.0334: 'autowrite' takes effect when buffer is not to be written
Christian Brabandt <cb@256bit.org>
parents: 14303
diff changeset
549 if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
551 bufref_T bufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
552
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
553 set_bufref(&bufref, buf);
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
554
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 (void)buf_write_all(buf, FALSE);
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
556
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 /* an autocommand may have deleted the buffer */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
558 if (!bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 buf = firstbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 /*
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
564 * Return TRUE if buffer was changed and cannot be abandoned.
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
565 * For flags use the CCGD_ values.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
568 check_changed(buf_T *buf, int flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
570 int forceit = (flags & CCGD_FORCEIT);
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
571 bufref_T bufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
572
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
573 set_bufref(&bufref, buf);
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
574
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 if ( !forceit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 && bufIsChanged(buf)
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
577 && ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
578 && (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 if ((p_confirm || cmdmod.confirm) && p_write)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 buf_T *buf2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 int count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
586 if (flags & CCGD_ALLBUF)
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
587 FOR_ALL_BUFFERS(buf2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 if (bufIsChanged(buf2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 && (buf2->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 # ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 || cmdmod.browse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 ++count;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
595 if (!bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 /* Autocommand deleted buffer, oops! It's not changed now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 return FALSE;
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
598
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 dialog_changed(buf, count > 1);
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
600
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
601 if (!bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 /* Autocommand deleted buffer, oops! It's not changed now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 return bufIsChanged(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 #endif
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
607 if (flags & CCGD_EXCMD)
12146
59c1e09cf1a9 patch 8.0.0953: get "no write since last change" error in terminal window
Christian Brabandt <cb@256bit.org>
parents: 12039
diff changeset
608 no_write_message();
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
609 else
13302
b5806be0b36d patch 8.0.1525: using :wqa exits even if a job runs in a terminal window
Christian Brabandt <cb@256bit.org>
parents: 13274
diff changeset
610 no_write_message_nobang(curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 #if defined(FEAT_BROWSE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 * When wanting to write a file without a file name, ask the user for a name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
623 browse_save_fname(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 if (buf->b_fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628
29
ac33b7c03fac updated for version 7.0018
vimboss
parents: 22
diff changeset
629 fname = do_browse(BROWSE_SAVE, (char_u *)_("Save As"),
ac33b7c03fac updated for version 7.0018
vimboss
parents: 22
diff changeset
630 NULL, NULL, NULL, NULL, buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 if (setfname(buf, fname, NULL, TRUE) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 buf->b_flags |= BF_NOTEDITED;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 }
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 /*
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
642 * Ask the user what to do when abandoning a changed buffer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 * Must check 'write' option first!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
646 dialog_changed(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
647 buf_T *buf,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
648 int checkall) /* may abandon all changed buffers */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 {
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2711
diff changeset
650 char_u buff[DIALOG_MSG_SIZE];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 int ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 buf_T *buf2;
3486
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
653 exarg_T ea;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654
12206
bd8d767fb36f patch 8.0.0983: unnecessary check for NULL pointer
Christian Brabandt <cb@256bit.org>
parents: 12146
diff changeset
655 dialog_msg(buff, _("Save changes to \"%s\"?"), buf->b_fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 if (checkall)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 ret = vim_dialog_yesnoallcancel(VIM_QUESTION, NULL, buff, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660
16619
8f0ea605ec96 patch 8.1.1312: Coverity warning for using uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents: 16594
diff changeset
661 // Init ea pseudo-structure, this is needed for the check_overwrite()
8f0ea605ec96 patch 8.1.1312: Coverity warning for using uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents: 16594
diff changeset
662 // function.
8f0ea605ec96 patch 8.1.1312: Coverity warning for using uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents: 16594
diff changeset
663 vim_memset(&ea, 0, sizeof(ea));
3486
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
664
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 if (ret == VIM_YES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 /* May get file name, when there is none */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 browse_save_fname(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 #endif
3486
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
671 if (buf->b_fname != NULL && check_overwrite(&ea, buf,
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
672 buf->b_fname, buf->b_ffname, FALSE) == OK)
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
673 /* didn't hit Cancel */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 (void)buf_write_all(buf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 else if (ret == VIM_NO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 {
16996
d5e1e09a829f patch 8.1.1498: ":write" increments b:changedtick even though nothing changed
Bram Moolenaar <Bram@vim.org>
parents: 16874
diff changeset
678 unchanged(buf, TRUE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 else if (ret == VIM_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 * Write all modified files that can be written.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 * Skip readonly buffers, these need to be confirmed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 * individually.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
687 FOR_ALL_BUFFERS(buf2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 if (bufIsChanged(buf2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 && (buf2->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692 || cmdmod.browse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 && !buf2->b_p_ro)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
697 bufref_T bufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
698
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
699 set_bufref(&bufref, buf2);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 /* May get file name, when there is none */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 browse_save_fname(buf2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 #endif
3486
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
704 if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
705 buf2->b_fname, buf2->b_ffname, FALSE) == OK)
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
706 /* didn't hit Cancel */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 (void)buf_write_all(buf2, FALSE);
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
708
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 /* an autocommand may have deleted the buffer */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
710 if (!bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 buf2 = firstbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 else if (ret == VIM_DISCARDALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 * mark all buffers as unchanged
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
720 FOR_ALL_BUFFERS(buf2)
16996
d5e1e09a829f patch 8.1.1498: ":write" increments b:changedtick even though nothing changed
Bram Moolenaar <Bram@vim.org>
parents: 16874
diff changeset
721 unchanged(buf2, TRUE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 * Return TRUE if the buffer "buf" can be abandoned, either by making it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 * hidden, autowriting it or unloading it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
731 can_abandon(buf_T *buf, int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 {
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
733 return ( buf_hide(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 || !bufIsChanged(buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 || buf->b_nwindows > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736 || autowrite(buf, forceit) == OK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 || forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
740 /*
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
741 * Add a buffer number to "bufnrs", unless it's already there.
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
742 */
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
743 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
744 add_bufnum(int *bufnrs, int *bufnump, int nr)
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
745 {
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
746 int i;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
747
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
748 for (i = 0; i < *bufnump; ++i)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
749 if (bufnrs[i] == nr)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
750 return;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
751 bufnrs[*bufnump] = nr;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
752 *bufnump = *bufnump + 1;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
753 }
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
754
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 * Return TRUE if any buffer was changed and cannot be abandoned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 * That changed buffer becomes the current buffer.
13438
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
758 * When "unload" is TRUE the current buffer is unloaded instead of making it
7469
15eefe1b0dad commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents: 7107
diff changeset
759 * hidden. This is used for ":q!".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
762 check_changed_any(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
763 int hidden, /* Only check hidden buffers */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
764 int unload)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 {
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
766 int ret = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 int save;
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
769 int i;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
770 int bufnum = 0;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
771 int bufcount = 0;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
772 int *bufnrs;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
773 tabpage_T *tp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775
13438
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
776 /* Make a list of all buffers, with the most important ones first. */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
777 FOR_ALL_BUFFERS(buf)
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
778 ++bufcount;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
779
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
780 if (bufcount == 0)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
781 return FALSE;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
782
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
783 bufnrs = ALLOC_MULT(int, bufcount);
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
784 if (bufnrs == NULL)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
785 return FALSE;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
786
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
787 /* curbuf */
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
788 bufnrs[bufnum++] = curbuf->b_fnum;
13438
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
789
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
790 /* buffers in current tab */
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
791 FOR_ALL_WINDOWS(wp)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
792 if (wp->w_buffer != curbuf)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
793 add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
794
13438
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
795 /* buffers in other tabs */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
796 FOR_ALL_TABPAGES(tp)
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
797 if (tp != curtab)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
798 for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
799 add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
13438
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
800
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
801 /* any other buffer */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
802 FOR_ALL_BUFFERS(buf)
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
803 add_bufnum(bufnrs, &bufnum, buf->b_fnum);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
804
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
805 for (i = 0; i < bufnum; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 {
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
807 buf = buflist_findnr(bufnrs[i]);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
808 if (buf == NULL)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
809 continue;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
810 if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
812 bufref_T bufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
813
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
814 set_bufref(&bufref, buf);
13438
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
815 #ifdef FEAT_TERMINAL
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
816 if (term_job_running(buf->b_term))
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
817 {
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
818 if (term_try_stop_job(buf) == FAIL)
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
819 break;
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
820 }
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
821 else
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
822 #endif
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
823 /* Try auto-writing the buffer. If this fails but the buffer no
16223
abb67309c1ca patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents: 15967
diff changeset
824 * longer exists it's not changed, that's OK. */
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
825 if (check_changed(buf, (p_awa ? CCGD_AW : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
826 | CCGD_MULTWIN
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
827 | CCGD_ALLBUF) && bufref_valid(&bufref))
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
828 break; /* didn't save - still changes */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
832 if (i >= bufnum)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
833 goto theend;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
834
13438
33eea5ce5415 patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
835 /* Get here if "buf" cannot be abandoned. */
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
836 ret = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 exiting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840 * When ":confirm" used, don't give an error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 if (!(p_confirm || cmdmod.confirm))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 /* There must be a wait_return for this message, do_buffer()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 * may cause a redraw. But wait_return() is a no-op when vgetc()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 * is busy (Quit used from window menu), then make sure we don't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 * cause a scroll up. */
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
849 if (vgetc_busy > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
851 msg_row = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
852 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 }
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
855 if (
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
856 #ifdef FEAT_TERMINAL
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
857 term_job_running(buf->b_term)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15448
diff changeset
858 ? semsg(_("E947: Job still running in buffer \"%s\""),
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
859 buf->b_fname)
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
860 :
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
861 #endif
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15448
diff changeset
862 semsg(_("E162: No write since last change for buffer \"%s\""),
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3620
diff changeset
863 buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 save = no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 no_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 wait_return(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 no_wait_return = save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 /* Try to find a window that contains the buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 if (buf != curbuf)
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
874 FOR_ALL_TAB_WINDOWS(tp, wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 if (wp->w_buffer == buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
877 bufref_T bufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
878
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
879 set_bufref(&bufref, buf);
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
880
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
881 goto_tabpage_win(tp, wp);
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
882
15967
ddd82b1c9e9d patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
883 // Paranoia: did autocmd wipe out the buffer with changes?
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9410
diff changeset
884 if (!bufref_valid(&bufref))
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
885 goto theend;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
886 goto buf_found;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 }
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
888 buf_found:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 /* Open the changed buffer in the current window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 if (buf != curbuf)
7469
15eefe1b0dad commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents: 7107
diff changeset
892 set_curbuf(buf, unload ? DOBUF_UNLOAD : DOBUF_GOTO);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
894 theend:
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
895 vim_free(bufnrs);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
896 return ret;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 * return FAIL if there is no file name, OK if there is one
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 * give error message for FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
904 check_fname(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 if (curbuf->b_ffname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15448
diff changeset
908 emsg(_(e_noname));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 return OK;
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 * flush the contents of a buffer, unless it has no file name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 * return FAIL for failure, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
920 buf_write_all(buf_T *buf, int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 buf_T *old_curbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 retval = (buf_write(buf, buf->b_ffname, buf->b_fname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 (linenr_T)1, buf->b_ml.ml_line_count, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 FALSE, forceit, TRUE, FALSE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 if (curbuf != old_curbuf)
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 15
diff changeset
929 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
930 msg_source(HL_ATTR(HLF_W));
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
931 msg(_("Warning: Entered other buffer unexpectedly (check autocommands)"));
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 15
diff changeset
932 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 /*
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
937 * ":argdo", ":windo", ":bufdo", ":tabdo", ":cdo", ":ldo", ":cfdo" and ":lfdo"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
940 ex_listdo(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 int i;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
943 win_T *wp;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
944 tabpage_T *tp;
6641
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
945 buf_T *buf = curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 int next_fnum = 0;
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
947 #if defined(FEAT_SYN_HL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 char_u *save_ei = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 #endif
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
950 char_u *p_shm_save;
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
951 #ifdef FEAT_QUICKFIX
7107
84efaf06f195 commit https://github.com/vim/vim/commit/ed84b76021df763619cabaedddc44eb5ee849136
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
952 int qf_size = 0;
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
953 int qf_idx;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
954 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955
8220
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
956 #ifndef FEAT_QUICKFIX
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
957 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo ||
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
958 eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
959 {
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
960 ex_ni(eap);
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
961 return;
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
962 }
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
963 #endif
ad9edad64d22 commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
964
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
965 #if defined(FEAT_SYN_HL)
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
966 if (eap->cmdidx != CMD_windo && eap->cmdidx != CMD_tabdo)
17596
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
967 {
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 45
diff changeset
968 /* Don't do syntax HL autocommands. Skipping the syntax file is a
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 45
diff changeset
969 * great speed improvement. */
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 45
diff changeset
970 save_ei = au_event_disable(",Syntax");
17596
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
971
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
972 for (buf = firstbuf; buf != NULL; buf = buf->b_next)
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
973 buf->b_flags &= ~BF_SYN_SET;
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
974 buf = curbuf;
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
975 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 #endif
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
977 #ifdef FEAT_CLIPBOARD
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
978 start_global_changes();
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
979 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 if (eap->cmdidx == CMD_windo
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
982 || eap->cmdidx == CMD_tabdo
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11935
diff changeset
983 || buf_hide(curbuf)
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
984 || !check_changed(curbuf, CCGD_AW
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
985 | (eap->forceit ? CCGD_FORCEIT : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
986 | CCGD_EXCMD))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 i = 0;
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
989 /* start at the eap->line1 argument/window/buffer */
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
990 wp = firstwin;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
991 tp = first_tabpage;
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
992 switch (eap->cmdidx)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
993 {
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
994 case CMD_windo:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
995 for ( ; wp != NULL && i + 1 < eap->line1; wp = wp->w_next)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
996 i++;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
997 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
998 case CMD_tabdo:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
999 for( ; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1000 i++;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1001 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1002 case CMD_argdo:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1003 i = eap->line1 - 1;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1004 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1005 default:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1006 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1007 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 /* set pcmark now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 if (eap->cmdidx == CMD_bufdo)
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1010 {
6641
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1011 /* Advance to the first listed buffer after "eap->line1". */
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1012 for (buf = firstbuf; buf != NULL && (buf->b_fnum < eap->line1
6641
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1013 || !buf->b_p_bl); buf = buf->b_next)
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1014 if (buf->b_fnum > eap->line2)
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1015 {
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1016 buf = NULL;
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1017 break;
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1018 }
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1019 if (buf != NULL)
6641
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1020 goto_buffer(eap, DOBUF_FIRST, FORWARD, buf->b_fnum);
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1021 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1022 #ifdef FEAT_QUICKFIX
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1023 else if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1024 || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1025 {
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16381
diff changeset
1026 qf_size = qf_get_valid_size(eap);
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1027 if (qf_size <= 0 || eap->line1 > qf_size)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1028 buf = NULL;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1029 else
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1030 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1031 ex_cc(eap);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1032
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1033 buf = curbuf;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1034 i = eap->line1 - 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1035 if (eap->addr_count <= 0)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1036 /* default is all the quickfix/location list entries */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1037 eap->line2 = qf_size;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1038 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1039 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1040 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 listcmd_busy = TRUE; /* avoids setting pcmark below */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044
6641
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
1045 while (!got_int && buf != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 if (eap->cmdidx == CMD_argdo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 /* go to argument "i" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 if (i == ARGCOUNT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 /* Don't call do_argfile() when already there, it will try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 * reloading the file. */
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1054 if (curwin->w_arg_idx != i || !editing_arg_idx(curwin))
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1055 {
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1056 /* Clear 'shm' to avoid that the file message overwrites
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1057 * any output from the command. */
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1058 p_shm_save = vim_strsave(p_shm);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1059 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 do_argfile(eap, i);
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1061 set_option_value((char_u *)"shm", 0L, p_shm_save, 0);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1062 vim_free(p_shm_save);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1063 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 if (curwin->w_arg_idx != i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 else if (eap->cmdidx == CMD_windo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 {
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1069 /* go to window "wp" */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1070 if (!win_valid(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 break;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1072 win_goto(wp);
1115
11c004cc1a4d updated for version 7.0-241
vimboss
parents: 1069
diff changeset
1073 if (curwin != wp)
11c004cc1a4d updated for version 7.0-241
vimboss
parents: 1069
diff changeset
1074 break; /* something must be wrong */
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1075 wp = curwin->w_next;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1076 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1077 else if (eap->cmdidx == CMD_tabdo)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1078 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1079 /* go to window "tp" */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1080 if (!valid_tabpage(tp))
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1081 break;
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
1082 goto_tabpage_tp(tp, TRUE, TRUE);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
1083 tp = tp->tp_next;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 else if (eap->cmdidx == CMD_bufdo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 /* Remember the number of the next listed buffer, in case
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 * ":bwipe" is used or autocommands do something strange. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 next_fnum = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 for (buf = curbuf->b_next; buf != NULL; buf = buf->b_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 if (buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 next_fnum = buf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1098 ++i;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1099
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 /* execute the command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 do_cmdline(eap->arg, eap->getline, eap->cookie,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 DOCMD_VERBOSE + DOCMD_NOWAIT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 if (eap->cmdidx == CMD_bufdo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 /* Done? */
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1107 if (next_fnum < 0 || next_fnum > eap->line2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 /* Check if the buffer still exists. */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9626
diff changeset
1110 FOR_ALL_BUFFERS(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 if (buf->b_fnum == next_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 break;
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1115
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1116 /* Go to the next buffer. Clear 'shm' to avoid that the file
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1117 * message overwrites any output from the command. */
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1118 p_shm_save = vim_strsave(p_shm);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1119 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 goto_buffer(eap, DOBUF_FIRST, FORWARD, next_fnum);
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1121 set_option_value((char_u *)"shm", 0L, p_shm_save, 0);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1122 vim_free(p_shm_save);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1123
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1124 /* If autocommands took us elsewhere, quit here. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 if (curbuf->b_fnum != next_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1129 #ifdef FEAT_QUICKFIX
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1130 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1131 || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1132 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1133 if (i >= qf_size || i >= eap->line2)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1134 break;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1135
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1136 qf_idx = qf_get_cur_idx(eap);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1137
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1138 ex_cnext(eap);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1139
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1140 /* If jumping to the next quickfix entry fails, quit here */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1141 if (qf_get_cur_idx(eap) == qf_idx)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1142 break;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1143 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1144 #endif
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
1145
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 if (eap->cmdidx == CMD_windo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 validate_cursor(); /* cursor may have moved */
13384
6740c499de13 patch 8.0.1566: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
1149
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 /* required when 'scrollbind' has been set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 do_check_scrollbind(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 }
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1154
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1155 if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1156 if (i+1 > eap->line2)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1157 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1158 if (eap->cmdidx == CMD_argdo && i >= eap->line2)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1159 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 listcmd_busy = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
1164 #if defined(FEAT_SYN_HL)
154
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
1165 if (save_ei != NULL)
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
1166 {
17596
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1167 buf_T *bnext;
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1168 aco_save_T aco;
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1169
154
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
1170 au_event_restore(save_ei);
17596
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1171
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1172 for (buf = firstbuf; buf != NULL; buf = bnext)
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1173 {
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1174 bnext = buf->b_next;
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1175 if (buf->b_nwindows > 0 && (buf->b_flags & BF_SYN_SET))
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1176 {
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1177 buf->b_flags &= ~BF_SYN_SET;
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1178
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1179 // buffer was opened while Syntax autocommands were disabled,
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1180 // need to trigger them now.
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1181 if (buf == curbuf)
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1182 apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
154
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
1183 curbuf->b_fname, TRUE, curbuf);
17596
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1184 else
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1185 {
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1186 aucmd_prepbuf(&aco, buf);
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1187 apply_autocmds(EVENT_SYNTAX, buf->b_p_syn,
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1188 buf->b_fname, TRUE, buf);
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1189 aucmd_restbuf(&aco);
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1190 }
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1191
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1192 // start over, in case autocommands messed things up.
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1193 bnext = firstbuf;
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1194 }
892b4ea3bad6 patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents: 17381
diff changeset
1195 }
154
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
1196 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 #endif
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
1198 #ifdef FEAT_CLIPBOARD
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
1199 end_global_changes();
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
1200 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 * ":compiler[!] {name}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1208 ex_compiler(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 char_u *old_cur_comp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 /* List all compiler scripts. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 do_cmdline_cmd((char_u *)"echo globpath(&rtp, 'compiler/*.vim')");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 /* ) keep the indenter happy... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 {
16764
ef00b6bc186b patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 16738
diff changeset
1222 buf = alloc(STRLEN(eap->arg) + 14);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 if (eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 /* ":compiler! {name}" sets global options */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 do_cmdline_cmd((char_u *)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 "command -nargs=* CompilerSet set <args>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 /* ":compiler! {name}" sets local options.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 * To remain backwards compatible "current_compiler" is always
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 * used. A user's compiler plugin may set it, the distributed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 * plugin will then skip the settings. Afterwards set
2051
ef2890033e88 updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents: 1882
diff changeset
1237 * "b:current_compiler" and restore "current_compiler".
ef2890033e88 updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents: 1882
diff changeset
1238 * Explicitly prepend "g:" to make it work in a function. */
ef2890033e88 updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents: 1882
diff changeset
1239 old_cur_comp = get_var_value((char_u *)"g:current_compiler");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 if (old_cur_comp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 old_cur_comp = vim_strsave(old_cur_comp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 do_cmdline_cmd((char_u *)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 "command -nargs=* CompilerSet setlocal <args>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 }
2051
ef2890033e88 updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents: 1882
diff changeset
1245 do_unlet((char_u *)"g:current_compiler", TRUE);
148
72aefd4c1e0d updated for version 7.0046
vimboss
parents: 123
diff changeset
1246 do_unlet((char_u *)"b:current_compiler", TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 sprintf((char *)buf, "compiler/%s.vim", eap->arg);
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8522
diff changeset
1249 if (source_runtime(buf, DIP_ALL) == FAIL)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15448
diff changeset
1250 semsg(_("E666: compiler not supported: %s"), eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 do_cmdline_cmd((char_u *)":delcommand CompilerSet");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 /* Set "b:current_compiler" from "current_compiler". */
2051
ef2890033e88 updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents: 1882
diff changeset
1256 p = get_var_value((char_u *)"g:current_compiler");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 set_internal_string_var((char_u *)"b:current_compiler", p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 /* Restore "current_compiler" for ":compiler {name}". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 if (!eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 if (old_cur_comp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 {
2051
ef2890033e88 updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents: 1882
diff changeset
1265 set_internal_string_var((char_u *)"g:current_compiler",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 old_cur_comp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 vim_free(old_cur_comp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 else
2051
ef2890033e88 updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents: 1882
diff changeset
1270 do_unlet((char_u *)"g:current_compiler", TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276
10722
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1277 #if defined(FEAT_PYTHON3) || defined(FEAT_PYTHON) || defined(PROTO)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1278
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1279 # if (defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)) || defined(PROTO)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1280 /*
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1281 * Detect Python 3 or 2, and initialize 'pyxversion'.
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1282 */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1283 void
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1284 init_pyxversion(void)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1285 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1286 if (p_pyx == 0)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1287 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1288 if (python3_enabled(FALSE))
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1289 p_pyx = 3;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1290 else if (python_enabled(FALSE))
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1291 p_pyx = 2;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1292 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1293 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1294 # endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1295
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1296 /*
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1297 * Does a file contain one of the following strings at the beginning of any
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1298 * line?
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1299 * "#!(any string)python2" => returns 2
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1300 * "#!(any string)python3" => returns 3
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1301 * "# requires python 2.x" => returns 2
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1302 * "# requires python 3.x" => returns 3
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1303 * otherwise return 0.
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1304 */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1305 static int
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1306 requires_py_version(char_u *filename)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1307 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1308 FILE *file;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1309 int requires_py_version = 0;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1310 int i, lines;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1311
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1312 lines = (int)p_mls;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1313 if (lines < 0)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1314 lines = 5;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1315
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1316 file = mch_fopen((char *)filename, "r");
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1317 if (file != NULL)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1318 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1319 for (i = 0; i < lines; i++)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1320 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1321 if (vim_fgets(IObuff, IOSIZE, file))
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1322 break;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1323 if (i == 0 && IObuff[0] == '#' && IObuff[1] == '!')
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1324 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1325 /* Check shebang. */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1326 if (strstr((char *)IObuff + 2, "python2") != NULL)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1327 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1328 requires_py_version = 2;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1329 break;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1330 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1331 if (strstr((char *)IObuff + 2, "python3") != NULL)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1332 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1333 requires_py_version = 3;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1334 break;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1335 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1336 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1337 IObuff[21] = '\0';
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1338 if (STRCMP("# requires python 2.x", IObuff) == 0)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1339 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1340 requires_py_version = 2;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1341 break;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1342 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1343 if (STRCMP("# requires python 3.x", IObuff) == 0)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1344 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1345 requires_py_version = 3;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1346 break;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1347 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1348 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1349 fclose(file);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1350 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1351 return requires_py_version;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1352 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1353
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1354
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1355 /*
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1356 * Source a python file using the requested python version.
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1357 */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1358 static void
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1359 source_pyx_file(exarg_T *eap, char_u *fname)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1360 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1361 exarg_T ex;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1362 int v = requires_py_version(fname);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1363
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1364 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1365 init_pyxversion();
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1366 # endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1367 if (v == 0)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1368 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1369 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1370 /* user didn't choose a preference, 'pyx' is used */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1371 v = p_pyx;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1372 # elif defined(FEAT_PYTHON)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1373 v = 2;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1374 # elif defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1375 v = 3;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1376 # endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1377 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1378
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1379 /*
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1380 * now source, if required python version is not supported show
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1381 * unobtrusive message.
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1382 */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1383 if (eap == NULL)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1384 vim_memset(&ex, 0, sizeof(ex));
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1385 else
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1386 ex = *eap;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1387 ex.arg = fname;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1388 ex.cmd = (char_u *)(v == 2 ? "pyfile" : "pyfile3");
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1389
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1390 if (v == 2)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1391 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1392 # ifdef FEAT_PYTHON
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1393 ex_pyfile(&ex);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1394 # else
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1395 vim_snprintf((char *)IObuff, IOSIZE,
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1396 _("W20: Required python version 2.x not supported, ignoring file: %s"),
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1397 fname);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1398 msg((char *)IObuff);
10722
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1399 # endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1400 return;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1401 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1402 else
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1403 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1404 # ifdef FEAT_PYTHON3
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1405 ex_py3file(&ex);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1406 # else
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1407 vim_snprintf((char *)IObuff, IOSIZE,
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1408 _("W21: Required python version 3.x not supported, ignoring file: %s"),
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1409 fname);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1410 msg((char *)IObuff);
10722
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1411 # endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1412 return;
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1413 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1414 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1415
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1416 /*
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1417 * ":pyxfile {fname}"
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1418 */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1419 void
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1420 ex_pyxfile(exarg_T *eap)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1421 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1422 source_pyx_file(eap, eap->arg);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1423 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1424
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1425 /*
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1426 * ":pyx"
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1427 */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1428 void
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1429 ex_pyx(exarg_T *eap)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1430 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1431 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1432 init_pyxversion();
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1433 if (p_pyx == 2)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1434 ex_python(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1435 else
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1436 ex_py3(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1437 # elif defined(FEAT_PYTHON)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1438 ex_python(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1439 # elif defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1440 ex_py3(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1441 # endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1442 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1443
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1444 /*
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1445 * ":pyxdo"
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1446 */
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1447 void
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1448 ex_pyxdo(exarg_T *eap)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1449 {
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1450 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1451 init_pyxversion();
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1452 if (p_pyx == 2)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1453 ex_pydo(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1454 else
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1455 ex_py3do(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1456 # elif defined(FEAT_PYTHON)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1457 ex_pydo(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1458 # elif defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1459 ex_py3do(eap);
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1460 # endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1461 }
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1462
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1463 #endif
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10569
diff changeset
1464
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 * ":checktime [buffer]"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1469 ex_checktime(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 int save_no_check_timestamps = no_check_timestamps;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 no_check_timestamps = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 if (eap->addr_count == 0) /* default is all buffers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 check_timestamps(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 buf = buflist_findnr((int)eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 if (buf != NULL) /* cannot happen? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 (void)buf_check_timestamp(buf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 no_check_timestamps = save_no_check_timestamps;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 && (defined(FEAT_EVAL) || defined(FEAT_MULTI_LANG))
2419
f579b934f51d Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
1488 # define HAVE_GET_LOCALE_VAL
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1489 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1490 get_locale_val(int what)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 {
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1492 char_u *loc;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8206
diff changeset
1494 /* Obtain the locale value from the libraries. */
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1495 loc = (char_u *)setlocale(what, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15842
diff changeset
1497 # ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 if (loc != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
1502 /* setocale() returns something like "LC_COLLATE=<name>;LC_..." when
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
1503 * one of the values (e.g., LC_CTYPE) differs. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 p = vim_strchr(loc, '=');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 loc = ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 while (*p != NUL) /* remove trailing newline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509 {
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
1510 if (*p < ' ' || *p == ';')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 return loc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15842
diff changeset
1526 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 * On MS-Windows locale names are strings like "German_Germany.1252", but
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 * gettext expects "de". Try to translate one into another here for a few
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 * supported languages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 static char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 gettext_lang(char_u *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 static char *(mtable[]) = {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 "afrikaans", "af",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 "czech", "cs",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 "dutch", "nl",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 "german", "de",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 "english_united kingdom", "en_GB",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 "spanish", "es",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 "french", "fr",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 "italian", "it",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 "japanese", "ja",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 "korean", "ko",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 "norwegian", "no",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 "polish", "pl",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 "russian", "ru",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 "slovak", "sk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 "swedish", "sv",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 "ukrainian", "uk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553 "chinese_china", "zh_CN",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 "chinese_taiwan", "zh_TW",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 NULL};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 for (i = 0; mtable[i] != NULL; i += 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 if (STRNICMP(mtable[i], name, STRLEN(mtable[i])) == 0)
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1559 return (char_u *)mtable[i + 1];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 return name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 #if defined(FEAT_MULTI_LANG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 /*
15002
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1566 * Return TRUE when "lang" starts with a valid language name.
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1567 * Rejects NULL, empty string, "C", "C.UTF-8" and others.
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1568 */
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1569 static int
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1570 is_valid_mess_lang(char_u *lang)
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1571 {
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1572 return lang != NULL && ASCII_ISALPHA(lang[0]) && ASCII_ISALPHA(lang[1]);
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1573 }
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1574
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1575 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 * Obtain the current messages language. Used to set the default for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 * 'helplang'. May return NULL or an empty string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1580 get_mess_lang(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583
2419
f579b934f51d Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
1584 # ifdef HAVE_GET_LOCALE_VAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 # if defined(LC_MESSAGES)
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1586 p = get_locale_val(LC_MESSAGES);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 /* This is necessary for Win32, where LC_MESSAGES is not defined and $LANG
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
1589 * may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
1590 * and LC_MONETARY may be set differently for a Japanese working in the
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
1591 * US. */
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1592 p = get_locale_val(LC_COLLATE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 p = mch_getenv((char_u *)"LC_ALL");
15002
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1596 if (!is_valid_mess_lang(p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 p = mch_getenv((char_u *)"LC_MESSAGES");
15002
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1599 if (!is_valid_mess_lang(p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 p = mch_getenv((char_u *)"LANG");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 # endif
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15842
diff changeset
1603 # ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 p = gettext_lang(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 # endif
15002
9ae60773dd03 patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents: 14927
diff changeset
1606 return is_valid_mess_lang(p) ? p : NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609
45
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
1610 /* Complicated #if; matches with where get_mess_env() is used below. */
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
1611 #if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
1612 && defined(LC_MESSAGES))) \
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
1613 || ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
1614 && !defined(LC_MESSAGES))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 * Get the language used for messages from the environment.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1619 get_mess_env(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 p = mch_getenv((char_u *)"LC_ALL");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 if (p == NULL || *p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 p = mch_getenv((char_u *)"LC_MESSAGES");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 if (p == NULL || *p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 p = mch_getenv((char_u *)"LANG");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 if (p != NULL && VIM_ISDIGIT(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 p = NULL; /* ignore something like "1043" */
2419
f579b934f51d Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
1632 # ifdef HAVE_GET_LOCALE_VAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 if (p == NULL || *p == NUL)
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1634 p = get_locale_val(LC_CTYPE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 #if defined(FEAT_EVAL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 * Set the "v:lang" variable according to the current locale setting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 * Also do "v:lc_time"and "v:ctype".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1649 set_lang_var(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 char_u *loc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652
2419
f579b934f51d Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
1653 # ifdef HAVE_GET_LOCALE_VAL
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1654 loc = get_locale_val(LC_CTYPE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 /* setlocale() not supported: use the default value */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 loc = (char_u *)"C";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 set_vim_var_string(VV_CTYPE, loc, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 /* When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 * back to LC_CTYPE if it's empty. */
2419
f579b934f51d Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
1663 # if defined(HAVE_GET_LOCALE_VAL) && defined(LC_MESSAGES)
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1664 loc = get_locale_val(LC_MESSAGES);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 loc = get_mess_env();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 set_vim_var_string(VV_LANG, loc, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669
2419
f579b934f51d Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
1670 # ifdef HAVE_GET_LOCALE_VAL
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7979
diff changeset
1671 loc = get_locale_val(LC_TIME);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673 set_vim_var_string(VV_LC_TIME, loc, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15595
diff changeset
1677 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) \
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 * ":language": Set the language (locale).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1682 ex_language(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 char *loc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 int what = LC_ALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 char *whatstr = "";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 #ifdef LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 # define VIM_LC_MESSAGES LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 # define VIM_LC_MESSAGES 6789
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 name = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 /* Check for "messages {name}", "ctype {name}" or "time {name}" argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 * Allow abbreviation, but require at least 3 characters to avoid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 * confusion with a two letter language name "me" or "ct". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 p = skiptowhite(eap->arg);
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
1701 if ((*p == NUL || VIM_ISWHITE(*p)) && p - eap->arg >= 3)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 what = VIM_LC_MESSAGES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 name = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 whatstr = "messages ";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 else if (STRNICMP(eap->arg, "ctype", p - eap->arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 what = LC_CTYPE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 name = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 whatstr = "ctype ";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 else if (STRNICMP(eap->arg, "time", p - eap->arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 what = LC_TIME;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 name = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 whatstr = "time ";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 if (*name == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 #ifndef LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 if (what == VIM_LC_MESSAGES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 p = get_mess_env();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 p = (char_u *)setlocale(what, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 if (p == NULL || *p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732 p = (char_u *)"Unknown";
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15448
diff changeset
1733 smsg(_("Current %slanguage: \"%s\""), whatstr, p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 #ifndef LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 if (what == VIM_LC_MESSAGES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 loc = "";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 #endif
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
1742 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 loc = setlocale(what, (char *)name);
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
1744 #if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
1745 /* Make sure strtod() uses a decimal point, not a comma. */
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
1746 setlocale(LC_NUMERIC, "C");
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
1747 #endif
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
1748 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 if (loc == NULL)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15448
diff changeset
1750 semsg(_("E197: Cannot set language to \"%s\""), name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 #ifdef HAVE_NL_MSG_CAT_CNTR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 /* Need to do this for GNU gettext, otherwise cached translations
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 * will be used again. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 extern int _nl_msg_cat_cntr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 ++_nl_msg_cat_cntr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 #endif
1222
756bed568f5d updated for version 7.1b
vimboss
parents: 1115
diff changeset
1760 /* Reset $LC_ALL, otherwise it would overrule everything. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 vim_setenv((char_u *)"LC_ALL", (char_u *)"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 if (what != LC_TIME)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 /* Tell gettext() what to translate to. It apparently doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 * use the currently effective locale. Also do this when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 * FEAT_GETTEXT isn't defined, so that shell commands use this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 * value. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 if (what == LC_ALL)
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
1770 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 vim_setenv((char_u *)"LANG", name);
5027
5751284311f3 updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents: 4833
diff changeset
1772
5751284311f3 updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents: 4833
diff changeset
1773 /* Clear $LANGUAGE because GNU gettext uses it. */
5751284311f3 updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents: 4833
diff changeset
1774 vim_setenv((char_u *)"LANGUAGE", (char_u *)"");
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15842
diff changeset
1775 # ifdef MSWIN
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
1776 /* Apparently MS-Windows printf() may cause a crash when
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
1777 * we give it 8-bit text while it's expecting text in the
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
1778 * current locale. This call avoids that. */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
1779 setlocale(LC_CTYPE, "C");
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
1780 # endif
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
1781 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 if (what != LC_CTYPE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 char_u *mname;
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15842
diff changeset
1785 #ifdef MSWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 mname = gettext_lang(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 mname = name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 vim_setenv((char_u *)"LC_MESSAGES", mname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 #ifdef FEAT_MULTI_LANG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 set_helplang_default(mname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 /* Set v:lang, v:lc_time and v:ctype to the final result. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 set_lang_var();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 # endif
3149
35f098371af6 updated for version 7.3.345
Bram Moolenaar <bram@vim.org>
parents: 2921
diff changeset
1801 # ifdef FEAT_TITLE
35f098371af6 updated for version 7.3.345
Bram Moolenaar <bram@vim.org>
parents: 2921
diff changeset
1802 maketitle();
35f098371af6 updated for version 7.3.345
Bram Moolenaar <bram@vim.org>
parents: 2921
diff changeset
1803 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1808 static char_u **locales = NULL; /* Array of all available locales */
10569
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1809
17781
04245f071792 patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
1810 # ifndef MSWIN
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1811 static int did_init_locales = FALSE;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1812
17781
04245f071792 patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
1813 /*
04245f071792 patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
1814 * Return an array of strings for all available locales + NULL for the
04245f071792 patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
1815 * last element. Return NULL in case of error.
04245f071792 patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
1816 */
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1817 static char_u **
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1818 find_locales(void)
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1819 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1820 garray_T locales_ga;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1821 char_u *loc;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1822
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1823 /* Find all available locales by running command "locale -a". If this
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1824 * doesn't work we won't have completion. */
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1825 char_u *locale_a = get_cmd_output((char_u *)"locale -a",
5808
e5f1f2ea0b4a updated for version 7.4.248
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
1826 NULL, SHELL_SILENT, NULL);
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1827 if (locale_a == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1828 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1829 ga_init2(&locales_ga, sizeof(char_u *), 20);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1830
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1831 /* Transform locale_a string where each locale is separated by "\n"
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1832 * into an array of locale strings. */
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1833 loc = (char_u *)strtok((char *)locale_a, "\n");
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1834
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1835 while (loc != NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1836 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1837 if (ga_grow(&locales_ga, 1) == FAIL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1838 break;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1839 loc = vim_strsave(loc);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1840 if (loc == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1841 break;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1842
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1843 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1844 loc = (char_u *)strtok(NULL, "\n");
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1845 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1846 vim_free(locale_a);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1847 if (ga_grow(&locales_ga, 1) == FAIL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1848 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1849 ga_clear(&locales_ga);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1850 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1851 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1852 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1853 return (char_u **)locales_ga.ga_data;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1854 }
17781
04245f071792 patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
1855 # endif
10569
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1856
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1857 /*
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1858 * Lazy initialization of all available locales.
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1859 */
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1860 static void
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1861 init_locales(void)
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1862 {
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15842
diff changeset
1863 # ifndef MSWIN
10569
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1864 if (!did_init_locales)
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1865 {
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1866 did_init_locales = TRUE;
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1867 locales = find_locales();
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1868 }
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1869 # endif
0bf064e7917a patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents: 10262
diff changeset
1870 }
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1871
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1872 # if defined(EXITFREE) || defined(PROTO)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1873 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1874 free_locales(void)
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1875 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1876 int i;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1877 if (locales != NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1878 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1879 for (i = 0; locales[i] != NULL; i++)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1880 vim_free(locales[i]);
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13190
diff changeset
1881 VIM_CLEAR(locales);
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1882 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1883 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1884 # endif
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1885
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 * Function given to ExpandGeneric() to obtain the possible arguments of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 * ":language" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1891 get_lang_arg(expand_T *xp UNUSED, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 if (idx == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 return (char_u *)"messages";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 if (idx == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 return (char_u *)"ctype";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 if (idx == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 return (char_u *)"time";
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1899
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1900 init_locales();
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1901 if (locales == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1902 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1903 return locales[idx - 3];
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1904 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1905
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1906 /*
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1907 * Function given to ExpandGeneric() to obtain the available locales.
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1908 */
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1909 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
1910 get_locales(expand_T *xp UNUSED, int idx)
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1911 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1912 init_locales();
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1913 if (locales == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1914 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
1915 return locales[idx];
7
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 #endif