Patch 9.0.0977
Problem: It is not easy to see what client-server commands are doing.
Solution: Add channel log messages if ch_log() is available. Move the
channel logging and make it available with the +eval feature.
Files: Filelist, runtime/doc/starting.txt, src/if_xcmdsrv.c,
src/clientserver.c, src/logfile.c, src/proto/
logfile.pro,
src/proto.h, src/channel.c, src/proto/
channel.pro, src/evalfunc.c,
src/gui_gtk_x11.c, src/main.c, src/message.c, src/os_unix.c,
src/os_win32.c, src/regexp_bt.c, src/regexp_nfa.c, src/term.c,
src/time.c, src/ui.c, src/globals.h, src/Makefile,
src/Make_ami.mak, src/Make_mvc.mak, src/Make_vms.mms,
src/Make_cyg_ming.mak
*** ../vim-9.0.0976/Filelist 2022-11-18 22:14:04.798988157 +0000
--- Filelist 2022-11-30 16:27:19.900260217 +0000
***************
*** 88,97 ****
src/job.c \
src/json.c \
src/json_test.c \
src/kword_test.c \
src/list.c \
src/locale.c \
! src/keymap.h \
src/macros.h \
src/main.c \
src/map.c \
--- 88,98 ----
src/job.c \
src/json.c \
src/json_test.c \
+ src/keymap.h \
src/kword_test.c \
src/list.c \
src/locale.c \
! src/logfile.c \
src/macros.h \
src/main.c \
src/map.c \
*** ../vim-9.0.0976/runtime/doc/starting.txt 2022-06-28 11:21:06.000000000 +0100
--- runtime/doc/starting.txt 2022-11-30 16:11:41.813626987 +0000
***************
*** 348,354 ****
Start logging and write entries to {filename}.
This works like calling `ch_logfile({filename}, 'ao')` very
early during startup.
! {only available with the |+channel| feature}
*-D*
-D Debugging. Go to debugging mode when executing the first
--- 348,354 ----
Start logging and write entries to {filename}.
This works like calling `ch_logfile({filename}, 'ao')` very
early during startup.
! {only available with the |+eval| feature}
*-D*
-D Debugging. Go to debugging mode when executing the first
*** ../vim-9.0.0976/src/if_xcmdsrv.c 2022-09-18 13:06:36.461124371 +0100
--- src/if_xcmdsrv.c 2022-11-30 17:15:14.519414590 +0000
***************
*** 388,398 ****
if (name == NULL || *name == NUL)
name = (char_u *)"GVIM"; // use a default name
! if (commProperty == None && dpy != NULL)
! {
! if (SendInit(dpy) < 0)
! return -1;
! }
// Execute locally if no display or target is ourselves
if (dpy == NULL || (serverName != NULL && STRICMP(name, serverName) == 0))
--- 388,399 ----
if (name == NULL || *name == NUL)
name = (char_u *)"GVIM"; // use a default name
! if (commProperty == None && dpy != NULL && SendInit(dpy) < 0)
! return -1;
!
! #if defined(FEAT_EVAL)
! ch_log(NULL, "serverSendToVim(%s, %s)", name, cmd);
! #endif
// Execute locally if no display or target is ourselves
if (dpy == NULL || (serverName != NULL && STRICMP(name, serverName) == 0))
***************
*** 494,499 ****
--- 495,505 ----
break;
}
}
+
+ #if defined(FEAT_EVAL)
+ ch_log(NULL, "serverSendToVim() result: %s",
+ pending.result == NULL ? "NULL" : (char *)pending.result);
+ #endif
if (result != NULL)
*result = pending.result;
else
***************
*** 1221,1226 ****
--- 1227,1236 ----
int code;
char_u *tofree;
+ #if defined(FEAT_EVAL)
+ ch_log(NULL, "server_parse_message() numItems: %ld", numItems);
+ #endif
+
/*
* Several commands and results could arrive in the property at
* one time; each iteration through the outer loop handles a
***************
*** 1240,1246 ****
continue;
}
! if ((*p == 'c' || *p == 'k') && (p[1] == 0))
{
Window resWindow;
char_u *name, *script, *serial, *end;
--- 1250,1256 ----
continue;
}
! if ((*p == 'c' || *p == 'k') && p[1] == 0)
{
Window resWindow;
char_u *name, *script, *serial, *end;
***************
*** 1261,1266 ****
--- 1271,1279 ----
enc = NULL;
while ((long_u)(p - propInfo) < numItems && *p == '-')
{
+ #if defined(FEAT_EVAL)
+ ch_log(NULL, "server_parse_message() item: %c, %s", p[-2], p);
+ #endif
switch (p[1])
{
case 'r':
***************
*** 1326,1332 ****
ga_concat(&reply, res);
else
{
! ga_concat(&reply, (char_u *)_(e_invalid_expression_received));
ga_append(&reply, 0);
ga_concat(&reply, (char_u *)"-c 1");
}
--- 1339,1346 ----
ga_concat(&reply, res);
else
{
! ga_concat(&reply,
! (char_u *)_(e_invalid_expression_received));
ga_append(&reply, 0);
ga_concat(&reply, (char_u *)"-c 1");
}
*** ../vim-9.0.0976/src/clientserver.c 2022-10-01 19:43:48.606494048 +0100
--- src/clientserver.c 2022-11-30 17:13:41.887414600 +0000
***************
*** 70,75 ****
--- 70,79 ----
funccal_entry_T funccal_entry;
int did_save_funccal = FALSE;
+ #if defined(FEAT_EVAL)
+ ch_log(NULL, "eval_client_expr_to_string(\"%s\")", expr);
+ #endif
+
// Evaluate the expression at the toplevel, don't use variables local to
// the calling function. Except when in debug mode.
if (!debug_mode)
*** ../vim-9.0.0976/src/logfile.c 2022-11-30 18:08:31.926958525 +0000
--- src/logfile.c 2022-11-30 16:35:44.379402674 +0000
***************
*** 0 ****
--- 1,208 ----
+ /* vi:set ts=8 sts=4 sw=4 noet:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+ * Do ":help uganda" in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+ /*
+ * Implements logging. Originally intended for the channel feature, which is
+ * why the "ch_" prefix is used. Also useful for any kind of low-level and
+ * async debuging.
+ */
+
+ #include "vim.h"
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+
+ // Log file opened with ch_logfile().
+ static FILE *log_fd = NULL;
+ static char_u *log_name = NULL;
+ #ifdef FEAT_RELTIME
+ static proftime_T log_start;
+ #endif
+
+ void
+ ch_logfile(char_u *fname, char_u *opt)
+ {
+ FILE *file = NULL;
+ char *mode = "a";
+
+ if (log_fd != NULL)
+ {
+ if (*fname != NUL)
+ ch_log(NULL, "closing this logfile, opening %s", fname);
+ else
+ ch_log(NULL, "closing logfile %s", log_name);
+ fclose(log_fd);
+ }
+
+ // The "a" flag overrules the "w" flag.
+ if (vim_strchr(opt, 'a') == NULL && vim_strchr(opt, 'w') != NULL)
+ mode = "w";
+ ch_log_output = vim_strchr(opt, 'o') != NULL ? LOG_ALWAYS : FALSE;
+
+ if (*fname != NUL)
+ {
+ file = fopen((char *)fname, mode);
+ if (file == NULL)
+ {
+ semsg(_(e_cant_open_file_str), fname);
+ return;
+ }
+ vim_free(log_name);
+ log_name = vim_strsave(fname);
+ }
+ log_fd = file;
+
+ if (log_fd != NULL)
+ {
+ fprintf(log_fd, "==== start log session %s ====\n",
+ get_ctime(time(NULL), FALSE));
+ // flush now, if fork/exec follows it could be written twice
+ fflush(log_fd);
+ #ifdef FEAT_RELTIME
+ profile_start(&log_start);
+ #endif
+ }
+ }
+
+ int
+ ch_log_active(void)
+ {
+ return log_fd != NULL;
+ }
+
+ static void
+ ch_log_lead(const char *what, channel_T *ch, ch_part_T part)
+ {
+ if (log_fd == NULL)
+ return;
+
+ #ifdef FEAT_RELTIME
+ proftime_T log_now;
+
+ profile_start(&log_now);
+ profile_sub(&log_now, &log_start);
+ fprintf(log_fd, "%s ", profile_msg(&log_now));
+ #endif
+ #ifdef FEAT_JOB_CHANNEL
+ if (ch != NULL)
+ {
+ if (part < PART_COUNT)
+ fprintf(log_fd, "%son %d(%s): ", what, ch->ch_id, ch_part_names[part]);
+ else
+ fprintf(log_fd, "%son %d: ", what, ch->ch_id);
+ }
+ else
+ #endif
+ fprintf(log_fd, "%s: ", what);
+ }
+
+ #ifndef PROTO // prototype is in proto.h
+ void
+ ch_log(channel_T *ch, const char *fmt, ...)
+ {
+ if (log_fd == NULL)
+ return;
+
+ va_list ap;
+
+ ch_log_lead("", ch, PART_COUNT);
+ va_start(ap, fmt);
+ vfprintf(log_fd, fmt, ap);
+ va_end(ap);
+ fputc('\n', log_fd);
+ fflush(log_fd);
+ did_repeated_msg = 0;
+ }
+
+ void
+ ch_error(channel_T *ch, const char *fmt, ...)
+ {
+ if (log_fd == NULL)
+ return;
+
+ va_list ap;
+
+ ch_log_lead("ERR ", ch, PART_COUNT);
+ va_start(ap, fmt);
+ vfprintf(log_fd, fmt, ap);
+ va_end(ap);
+ fputc('\n', log_fd);
+ fflush(log_fd);
+ did_repeated_msg = 0;
+ }
+ #endif
+
+ #if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
+ /*
+ * Log a message "buf[len]" for channel "ch" part "part".
+ * Only to be called when ch_log_active() returns TRUE.
+ */
+ void
+ ch_log_literal(
+ char *lead,
+ channel_T *ch,
+ ch_part_T part,
+ char_u *buf,
+ int len)
+ {
+ ch_log_lead(lead, ch, part);
+ fprintf(log_fd, "'");
+ vim_ignored = (int)fwrite(buf, len, 1, log_fd);
+ fprintf(log_fd, "'\n");
+ fflush(log_fd);
+ }
+ #endif
+
+ /*
+ * "ch_log()" function
+ */
+ void
+ f_ch_log(typval_T *argvars, typval_T *rettv UNUSED)
+ {
+ char_u *msg;
+ channel_T *channel = NULL;
+
+ if (in_vim9script()
+ && (check_for_string_arg(argvars, 0) == FAIL
+ || check_for_opt_chan_or_job_arg(argvars, 1) == FAIL))
+ return;
+
+ msg = tv_get_string(&argvars[0]);
+ #if defined(FEAT_JOB_CHANNEL)
+ if (argvars[1].v_type != VAR_UNKNOWN)
+ channel = get_channel_arg(&argvars[1], FALSE, FALSE, 0);
+ #endif
+
+ ch_log(channel, "%s", msg);
+ }
+
+ /*
+ * "ch_logfile()" function
+ */
+ void
+ f_ch_logfile(typval_T *argvars, typval_T *rettv UNUSED)
+ {
+ char_u *fname;
+ char_u *opt = (char_u *)"";
+ char_u buf[NUMBUFLEN];
+
+ // Don't open a file in restricted mode.
+ if (check_restricted() || check_secure())
+ return;
+
+ if (in_vim9script()
+ && (check_for_string_arg(argvars, 0) == FAIL
+ || check_for_opt_string_arg(argvars, 1) == FAIL))
+ return;
+
+ fname = tv_get_string(&argvars[0]);
+ if (argvars[1].v_type == VAR_STRING)
+ opt = tv_get_string_buf(&argvars[1], buf);
+ ch_logfile(fname, opt);
+ }
+
+ #endif // FEAT_EVAL
*** ../vim-9.0.0976/src/proto/
logfile.pro 2022-11-30 18:08:31.934958523 +0000
--- src/proto/
logfile.pro 2022-11-30 16:37:41.539264137 +0000
***************
*** 0 ****
--- 1,7 ----
+ /* logfile.c */
+ void ch_logfile(char_u *fname, char_u *opt);
+ int ch_log_active(void);
+ void ch_log_literal(char *lead, channel_T *ch, ch_part_T part, char_u *buf, int len);
+ void f_ch_log(typval_T *argvars, typval_T *rettv);
+ void f_ch_logfile(typval_T *argvars, typval_T *rettv);
+ /* vim: set ft=c : */
*** ../vim-9.0.0976/src/proto.h 2022-10-08 13:49:41.893378443 +0100
--- src/proto.h 2022-11-30 16:14:52.293650768 +0000
***************
*** 104,109 ****
--- 104,110 ----
# include "
json.pro"
# include "
list.pro"
# include "
locale.pro"
+ # include "
logfile.pro"
# include "
blob.pro"
# include "
main.pro"
# include "
map.pro"
***************
*** 263,270 ****
# include "
job.pro"
# include "
channel.pro"
! // Not generated automatically, to add extra attribute.
void ch_log(channel_T *ch, const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(2, 3);
# endif
--- 264,272 ----
# include "
job.pro"
# include "
channel.pro"
! // Not generated automatically so that we can add an extra attribute.
void ch_log(channel_T *ch, const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(2, 3);
+ void ch_error(channel_T *ch, const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(2, 3);
# endif
*** ../vim-9.0.0976/src/channel.c 2022-11-28 18:51:38.959571588 +0000
--- src/channel.c 2022-11-30 16:37:31.963274907 +0000
***************
*** 81,88 ****
// is safe to invoke callbacks.
static int safe_to_invoke_callback = 0;
- static char *part_names[] = {"sock", "out", "err", "in"};
-
#ifdef MSWIN
static int
fd_read(sock_T fd, char *buf, size_t len)
--- 81,86 ----
***************
*** 142,269 ****
}
#endif
- // Log file opened with ch_logfile().
- static FILE *log_fd = NULL;
- static char_u *log_name = NULL;
- #ifdef FEAT_RELTIME
- static proftime_T log_start;
- #endif
-
- void
- ch_logfile(char_u *fname, char_u *opt)
- {
- FILE *file = NULL;
- char *mode = "a";
-
- if (log_fd != NULL)
- {
- if (*fname != NUL)
- ch_log(NULL, "closing this logfile, opening %s", fname);
- else
- ch_log(NULL, "closing logfile %s", log_name);
- fclose(log_fd);
- }
-
- // The "a" flag overrules the "w" flag.
- if (vim_strchr(opt, 'a') == NULL && vim_strchr(opt, 'w') != NULL)
- mode = "w";
- ch_log_output = vim_strchr(opt, 'o') != NULL ? LOG_ALWAYS : FALSE;
-
- if (*fname != NUL)
- {
- file = fopen((char *)fname, mode);
- if (file == NULL)
- {
- semsg(_(e_cant_open_file_str), fname);
- return;
- }
- vim_free(log_name);
- log_name = vim_strsave(fname);
- }
- log_fd = file;
-
- if (log_fd != NULL)
- {
- fprintf(log_fd, "==== start log session %s ====\n",
- get_ctime(time(NULL), FALSE));
- // flush now, if fork/exec follows it could be written twice
- fflush(log_fd);
- #ifdef FEAT_RELTIME
- profile_start(&log_start);
- #endif
- }
- }
-
- int
- ch_log_active(void)
- {
- return log_fd != NULL;
- }
-
- static void
- ch_log_lead(const char *what, channel_T *ch, ch_part_T part)
- {
- if (log_fd == NULL)
- return;
-
- #ifdef FEAT_RELTIME
- proftime_T log_now;
-
- profile_start(&log_now);
- profile_sub(&log_now, &log_start);
- fprintf(log_fd, "%s ", profile_msg(&log_now));
- #endif
- if (ch != NULL)
- {
- if (part < PART_COUNT)
- fprintf(log_fd, "%son %d(%s): ",
- what, ch->ch_id, part_names[part]);
- else
- fprintf(log_fd, "%son %d: ", what, ch->ch_id);
- }
- else
- fprintf(log_fd, "%s: ", what);
- }
-
- #ifndef PROTO // prototype is in proto.h
- void
- ch_log(channel_T *ch, const char *fmt, ...)
- {
- if (log_fd == NULL)
- return;
-
- va_list ap;
-
- ch_log_lead("", ch, PART_COUNT);
- va_start(ap, fmt);
- vfprintf(log_fd, fmt, ap);
- va_end(ap);
- fputc('\n', log_fd);
- fflush(log_fd);
- did_repeated_msg = 0;
- }
- #endif
-
- static void
- ch_error(channel_T *ch, const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(2, 3);
-
- static void
- ch_error(channel_T *ch, const char *fmt, ...)
- {
- if (log_fd == NULL)
- return;
-
- va_list ap;
-
- ch_log_lead("ERR ", ch, PART_COUNT);
- va_start(ap, fmt);
- vfprintf(log_fd, fmt, ap);
- va_end(ap);
- fputc('\n', log_fd);
- fflush(log_fd);
- did_repeated_msg = 0;
- }
-
#ifdef MSWIN
# undef PERROR
# define PERROR(msg) (void)semsg("%s: %s", msg, strerror_win32(errno))
--- 140,145 ----
***************
*** 620,626 ****
if (channel->ch_part[part].ch_inputHandler == (XtInputId)NULL)
{
ch_log(channel, "Registering part %s with fd %d",
! part_names[part], channel->ch_part[part].ch_fd);
channel->ch_part[part].ch_inputHandler = XtAppAddInput(
(XtAppContext)app_context,
--- 496,502 ----
if (channel->ch_part[part].ch_inputHandler == (XtInputId)NULL)
{
ch_log(channel, "Registering part %s with fd %d",
! ch_part_names[part], channel->ch_part[part].ch_fd);
channel->ch_part[part].ch_inputHandler = XtAppAddInput(
(XtAppContext)app_context,
***************
*** 636,642 ****
if (channel->ch_part[part].ch_inputHandler == 0)
{
ch_log(channel, "Registering part %s with fd %d",
! part_names[part], channel->ch_part[part].ch_fd);
# if GTK_CHECK_VERSION(3,0,0)
GIOChannel *chnnl = g_io_channel_unix_new(
(gint)channel->ch_part[part].ch_fd);
--- 512,518 ----
if (channel->ch_part[part].ch_inputHandler == 0)
{
ch_log(channel, "Registering part %s with fd %d",
! ch_part_names[part], channel->ch_part[part].ch_fd);
# if GTK_CHECK_VERSION(3,0,0)
GIOChannel *chnnl = g_io_channel_unix_new(
(gint)channel->ch_part[part].ch_fd);
***************
*** 694,700 ****
# ifdef FEAT_GUI_X11
if (channel->ch_part[part].ch_inputHandler != (XtInputId)NULL)
{
! ch_log(channel, "Unregistering part %s", part_names[part]);
XtRemoveInput(channel->ch_part[part].ch_inputHandler);
channel->ch_part[part].ch_inputHandler = (XtInputId)NULL;
}
--- 570,576 ----
# ifdef FEAT_GUI_X11
if (channel->ch_part[part].ch_inputHandler != (XtInputId)NULL)
{
! ch_log(channel, "Unregistering part %s", ch_part_names[part]);
XtRemoveInput(channel->ch_part[part].ch_inputHandler);
channel->ch_part[part].ch_inputHandler = (XtInputId)NULL;
}
***************
*** 702,708 ****
# ifdef FEAT_GUI_GTK
if (channel->ch_part[part].ch_inputHandler != 0)
{
! ch_log(channel, "Unregistering part %s", part_names[part]);
# if GTK_CHECK_VERSION(3,0,0)
g_source_remove(channel->ch_part[part].ch_inputHandler);
# else
--- 578,584 ----
# ifdef FEAT_GUI_GTK
if (channel->ch_part[part].ch_inputHandler != 0)
{
! ch_log(channel, "Unregistering part %s", ch_part_names[part]);
# if GTK_CHECK_VERSION(3,0,0)
g_source_remove(channel->ch_part[part].ch_inputHandler);
# else
***************
*** 1786,1792 ****
if (ch_part->ch_bufref.br_buf == buf)
{
ch_log(channel, "%s buffer has been wiped out",
! part_names[part]);
ch_part->ch_bufref.br_buf = NULL;
}
}
--- 1662,1668 ----
if (ch_part->ch_bufref.br_buf == buf)
{
ch_log(channel, "%s buffer has been wiped out",
! ch_part_names[part]);
ch_part->ch_bufref.br_buf = NULL;
}
}
***************
*** 2165,2176 ****
}
if (ch_log_active() && lead != NULL)
! {
! ch_log_lead(lead, channel, part);
! fprintf(log_fd, "'");
! vim_ignored = (int)fwrite(buf, len, 1, log_fd);
! fprintf(log_fd, "'\n");
! }
return OK;
}
--- 2041,2048 ----
}
if (ch_log_active() && lead != NULL)
! ch_log_literal(lead, channel, part, buf, len);
!
return OK;
}
***************
*** 3018,3024 ****
|| buffer->b_ml.ml_mfp == NULL))
{
// buffer was wiped out or unloaded
! ch_log(channel, "%s buffer has been wiped out", part_names[part]);
ch_part->ch_bufref.br_buf = NULL;
buffer = NULL;
}
--- 2890,2896 ----
|| buffer->b_ml.ml_mfp == NULL))
{
// buffer was wiped out or unloaded
! ch_log(channel, "%s buffer has been wiped out", ch_part_names[part]);
ch_part->ch_bufref.br_buf = NULL;
buffer = NULL;
}
***************
*** 3458,3464 ****
++channel->ch_refcount;
if (channel->ch_close_cb.cb_name == NULL)
ch_log(channel, "flushing %s buffers before closing",
! part_names[part]);
while (may_invoke_callback(channel, part))
;
--channel->ch_refcount;
--- 3330,3336 ----
++channel->ch_refcount;
if (channel->ch_close_cb.cb_name == NULL)
ch_log(channel, "flushing %s buffers before closing",
! ch_part_names[part]);
while (may_invoke_callback(channel, part))
;
--channel->ch_refcount;
***************
*** 3860,3866 ****
if (fd == INVALID_FD)
{
ch_error(channel, "channel_read() called while %s part is closed",
! part_names[part]);
return;
}
use_socket = fd == channel->CH_SOCK_FD;
--- 3732,3738 ----
if (fd == INVALID_FD)
{
ch_error(channel, "channel_read() called while %s part is closed",
! ch_part_names[part]);
return;
}
use_socket = fd == channel->CH_SOCK_FD;
***************
*** 4129,4135 ****
* When "reading" is TRUE "check_open" considers typeahead useful.
* "part" is used to check typeahead, when PART_COUNT use the default part.
*/
! static channel_T *
get_channel_arg(typval_T *tv, int check_open, int reading, ch_part_T part)
{
channel_T *channel = NULL;
--- 4001,4007 ----
* When "reading" is TRUE "check_open" considers typeahead useful.
* "part" is used to check typeahead, when PART_COUNT use the default part.
*/
! channel_T *
get_channel_arg(typval_T *tv, int check_open, int reading, ch_part_T part)
{
channel_T *channel = NULL;
***************
*** 4375,4385 ****
if (ch_log_active())
{
! ch_log_lead("SEND ", channel, part);
! fprintf(log_fd, "'");
! vim_ignored = (int)fwrite(buf_arg, len_arg, 1, log_fd);
! fprintf(log_fd, "'\n");
! fflush(log_fd);
did_repeated_msg = 0;
}
--- 4247,4253 ----
if (ch_log_active())
{
! ch_log_literal("SEND ", channel, part, buf_arg, len_arg);
did_repeated_msg = 0;
}
***************
*** 5293,5344 ****
}
/*
- * "ch_log()" function
- */
- void
- f_ch_log(typval_T *argvars, typval_T *rettv UNUSED)
- {
- char_u *msg;
- channel_T *channel = NULL;
-
- if (in_vim9script()
- && (check_for_string_arg(argvars, 0) == FAIL
- || check_for_opt_chan_or_job_arg(argvars, 1) == FAIL))
- return;
-
- msg = tv_get_string(&argvars[0]);
- if (argvars[1].v_type != VAR_UNKNOWN)
- channel = get_channel_arg(&argvars[1], FALSE, FALSE, 0);
-
- ch_log(channel, "%s", msg);
- }
-
- /*
- * "ch_logfile()" function
- */
- void
- f_ch_logfile(typval_T *argvars, typval_T *rettv UNUSED)
- {
- char_u *fname;
- char_u *opt = (char_u *)"";
- char_u buf[NUMBUFLEN];
-
- // Don't open a file in restricted mode.
- if (check_restricted() || check_secure())
- return;
-
- if (in_vim9script()
- && (check_for_string_arg(argvars, 0) == FAIL
- || check_for_opt_string_arg(argvars, 1) == FAIL))
- return;
-
- fname = tv_get_string(&argvars[0]);
- if (argvars[1].v_type == VAR_STRING)
- opt = tv_get_string_buf(&argvars[1], buf);
- ch_logfile(fname, opt);
- }
-
- /*
* "ch_open()" function
*/
void
--- 5161,5166 ----
*** ../vim-9.0.0976/src/proto/
channel.pro 2022-06-27 23:14:57.000000000 +0100
--- src/proto/
channel.pro 2022-11-30 16:26:56.836314739 +0000
***************
*** 1,6 ****
/* channel.c */
- void ch_logfile(char_u *fname, char_u *opt);
- int ch_log_active(void);
channel_T *add_channel(void);
int has_any_channel(void);
int channel_still_useful(channel_T *channel);
--- 1,4 ----
***************
*** 28,33 ****
--- 26,32 ----
void channel_clear(channel_T *channel);
void channel_free_all(void);
int channel_in_blocking_wait(void);
+ channel_T *get_channel_arg(typval_T *tv, int check_open, int reading, ch_part_T part);
void channel_handle_events(int only_keep_open);
int channel_any_keep_open(void);
void channel_set_nonblock(channel_T *channel, ch_part_T part);
***************
*** 45,52 ****
void f_ch_getbufnr(typval_T *argvars, typval_T *rettv);
void f_ch_getjob(typval_T *argvars, typval_T *rettv);
void f_ch_info(typval_T *argvars, typval_T *rettv);
- void f_ch_log(typval_T *argvars, typval_T *rettv);
- void f_ch_logfile(typval_T *argvars, typval_T *rettv);
void f_ch_open(typval_T *argvars, typval_T *rettv);
void f_ch_read(typval_T *argvars, typval_T *rettv);
void f_ch_readblob(typval_T *argvars, typval_T *rettv);
--- 44,49 ----
*** ../vim-9.0.0976/src/evalfunc.c 2022-11-24 11:31:26.029276217 +0000
--- src/evalfunc.c 2022-11-30 16:10:19.289616941 +0000
***************
*** 1750,1758 ****
{"ch_info", 1, 1, FEARG_1, arg1_chan_or_job,
ret_dict_any, JOB_FUNC(f_ch_info)},
{"ch_log", 1, 2, FEARG_1, arg2_string_chan_or_job,
! ret_void, JOB_FUNC(f_ch_log)},
{"ch_logfile", 1, 2, FEARG_1, arg2_string,
! ret_void, JOB_FUNC(f_ch_logfile)},
{"ch_open", 1, 2, FEARG_1, arg2_string_dict,
ret_channel, JOB_FUNC(f_ch_open)},
{"ch_read", 1, 2, FEARG_1, arg2_chan_or_job_dict,
--- 1750,1758 ----
{"ch_info", 1, 1, FEARG_1, arg1_chan_or_job,
ret_dict_any, JOB_FUNC(f_ch_info)},
{"ch_log", 1, 2, FEARG_1, arg2_string_chan_or_job,
! ret_void, f_ch_log},
{"ch_logfile", 1, 2, FEARG_1, arg2_string,
! ret_void, f_ch_logfile},
{"ch_open", 1, 2, FEARG_1, arg2_string_dict,
ret_channel, JOB_FUNC(f_ch_open)},
{"ch_read", 1, 2, FEARG_1, arg2_chan_or_job_dict,
*** ../vim-9.0.0976/src/gui_gtk_x11.c 2022-11-02 13:30:37.534314540 +0000
--- src/gui_gtk_x11.c 2022-11-30 17:14:17.835415111 +0000
***************
*** 407,413 ****
* See
https://github.com/vim/vim/issues/10123
*/
# if 0 // Change to 1 to enable ch_log() calls for debugging.
! # ifdef FEAT_JOB_CHANNEL
# define ENABLE_RESIZE_HISTORY_LOG
# endif
# endif
--- 407,413 ----
* See
https://github.com/vim/vim/issues/10123
*/
# if 0 // Change to 1 to enable ch_log() calls for debugging.
! # ifdef FEAT_EVAL
# define ENABLE_RESIZE_HISTORY_LOG
# endif
# endif
*** ../vim-9.0.0976/src/main.c 2022-11-28 18:51:38.951571546 +0000
--- src/main.c 2022-11-30 17:16:44.427410755 +0000
***************
*** 152,158 ****
TIME_MSG("--- VIM STARTING ---");
}
# endif
! # ifdef FEAT_JOB_CHANNEL
if (STRICMP(argv[i], "--log") == 0)
ch_logfile((char_u *)(argv[i + 1]), (char_u *)"ao");
# endif
--- 152,158 ----
TIME_MSG("--- VIM STARTING ---");
}
# endif
! # ifdef FEAT_EVAL
if (STRICMP(argv[i], "--log") == 0)
ch_logfile((char_u *)(argv[i + 1]), (char_u *)"ao");
# endif
***************
*** 1084,1090 ****
{
int is_safe = safe && is_safe_now();
! #ifdef FEAT_JOB_CHANNEL
if (was_safe != is_safe)
// Only log when the state changes, otherwise it happens at nearly
// every key stroke.
--- 1084,1090 ----
{
int is_safe = safe && is_safe_now();
! #ifdef FEAT_EVAL
if (was_safe != is_safe)
// Only log when the state changes, otherwise it happens at nearly
// every key stroke.
***************
*** 1104,1110 ****
void
state_no_longer_safe(char *reason UNUSED)
{
! #ifdef FEAT_JOB_CHANNEL
if (was_safe)
ch_log(NULL, "SafeState: reset: %s", reason);
#endif
--- 1104,1110 ----
void
state_no_longer_safe(char *reason UNUSED)
{
! #ifdef FEAT_EVAL
if (was_safe)
ch_log(NULL, "SafeState: reset: %s", reason);
#endif
***************
*** 1133,1146 ****
// of calling feedkeys(), we check if it's now safe again (all keys
// were consumed).
was_safe = is_safe_now();
! #ifdef FEAT_JOB_CHANNEL
if (was_safe)
ch_log(NULL, "SafeState: undo reset");
#endif
}
if (was_safe)
{
! #ifdef FEAT_JOB_CHANNEL
// Only do this message when another message was given, otherwise we
// get lots of them.
if ((did_repeated_msg & REPEATED_MSG_SAFESTATE) == 0)
--- 1133,1146 ----
// of calling feedkeys(), we check if it's now safe again (all keys
// were consumed).
was_safe = is_safe_now();
! #ifdef FEAT_EVAL
if (was_safe)
ch_log(NULL, "SafeState: undo reset");
#endif
}
if (was_safe)
{
! #ifdef FEAT_EVAL
// Only do this message when another message was given, otherwise we
// get lots of them.
if ((did_repeated_msg & REPEATED_MSG_SAFESTATE) == 0)
***************
*** 1154,1160 ****
#endif
apply_autocmds(EVENT_SAFESTATEAGAIN, NULL, NULL, FALSE, curbuf);
}
! #ifdef FEAT_JOB_CHANNEL
else
ch_log(NULL,
"SafeState: back to waiting, not triggering SafeStateAgain");
--- 1154,1160 ----
#endif
apply_autocmds(EVENT_SAFESTATEAGAIN, NULL, NULL, FALSE, curbuf);
}
! #ifdef FEAT_EVAL
else
ch_log(NULL,
"SafeState: back to waiting, not triggering SafeStateAgain");
***************
*** 1563,1569 ****
getout(int exitval)
{
exiting = TRUE;
! #if defined(FEAT_JOB_CHANNEL)
ch_log(NULL, "Exiting...");
#endif
--- 1563,1569 ----
getout(int exitval)
{
exiting = TRUE;
! #if defined(FEAT_EVAL)
ch_log(NULL, "Exiting...");
#endif
*** ../vim-9.0.0976/src/message.c 2022-11-29 16:09:14.408617365 +0000
--- src/message.c 2022-11-30 17:17:05.523409381 +0000
***************
*** 161,167 ****
&& STRCMP(s, last_msg_hist->msg)))
add_msg_hist((char_u *)s, -1, attr);
! #ifdef FEAT_JOB_CHANNEL
if (emsg_to_channel_log)
// Write message in the channel log.
ch_log(NULL, "ERROR: %s", s);
--- 161,167 ----
&& STRCMP(s, last_msg_hist->msg)))
add_msg_hist((char_u *)s, -1, attr);
! #ifdef FEAT_EVAL
if (emsg_to_channel_log)
// Write message in the channel log.
ch_log(NULL, "ERROR: %s", s);
***************
*** 725,731 ****
if (emsg_silent == emsg_silent_def)
++did_emsg_def;
#endif
! #ifdef FEAT_JOB_CHANNEL
ch_log(NULL, "ERROR silent: %s", (char *)s);
#endif
return TRUE;
--- 725,731 ----
if (emsg_silent == emsg_silent_def)
++did_emsg_def;
#endif
! #ifdef FEAT_EVAL
ch_log(NULL, "ERROR silent: %s", (char *)s);
#endif
return TRUE;
*** ../vim-9.0.0976/src/os_unix.c 2022-11-28 18:51:38.963571609 +0000
--- src/os_unix.c 2022-11-30 18:03:59.915039171 +0000
***************
*** 4747,4753 ****
reset_signals(); // handle signals normally
UNBLOCK_SIGNALS(&curset);
! # ifdef FEAT_JOB_CHANNEL
if (ch_log_active())
{
ch_log(NULL, "closing channel log in the child process");
--- 4747,4753 ----
reset_signals(); // handle signals normally
UNBLOCK_SIGNALS(&curset);
! # ifdef FEAT_EVAL
if (ch_log_active())
{
ch_log(NULL, "closing channel log in the child process");
***************
*** 5465,5471 ****
char_u *cmd,
int options) // SHELL_*, see vim.h
{
! #ifdef FEAT_JOB_CHANNEL
ch_log(NULL, "executing shell command: %s", cmd);
#endif
#if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
--- 5465,5471 ----
char_u *cmd,
int options) // SHELL_*, see vim.h
{
! #ifdef FEAT_EVAL
ch_log(NULL, "executing shell command: %s", cmd);
#endif
#if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
***************
*** 5597,5603 ****
reset_signals(); // handle signals normally
UNBLOCK_SIGNALS(&curset);
! # ifdef FEAT_JOB_CHANNEL
if (ch_log_active())
// close the log file in the child
ch_logfile((char_u *)"", (char_u *)"");
--- 5597,5603 ----
reset_signals(); // handle signals normally
UNBLOCK_SIGNALS(&curset);
! # ifdef FEAT_EVAL
if (ch_log_active())
// close the log file in the child
ch_logfile((char_u *)"", (char_u *)"");
***************
*** 8324,8330 ****
timer_created = TRUE;
}
! # ifdef FEAT_JOB_CHANNEL
ch_log(NULL, "setting timeout timer to %d sec %ld nsec",
(int)interval.it_value.tv_sec, (long)interval.it_value.tv_nsec);
# endif
--- 8324,8330 ----
timer_created = TRUE;
}
! # ifdef FEAT_EVAL
ch_log(NULL, "setting timeout timer to %d sec %ld nsec",
(int)interval.it_value.tv_sec, (long)interval.it_value.tv_nsec);
# endif
*** ../vim-9.0.0976/src/os_win32.c 2022-11-28 18:51:38.963571609 +0000
--- src/os_win32.c 2022-11-30 18:04:24.159031543 +0000
***************
*** 2222,2228 ****
buf[len++] = typeahead[0];
mch_memmove(typeahead, typeahead + 1, --typeaheadlen);
}
! # ifdef FEAT_JOB_CHANNEL
if (len > 0)
{
buf[len] = NUL;
--- 2222,2228 ----
buf[len++] = typeahead[0];
mch_memmove(typeahead, typeahead + 1, --typeaheadlen);
}
! # ifdef FEAT_EVAL
if (len > 0)
{
buf[len] = NUL;
***************
*** 4923,4929 ****
int tmode = cur_tmode;
WCHAR szShellTitle[512];
! #ifdef FEAT_JOB_CHANNEL
ch_log(NULL, "executing shell command: %s", cmd);
#endif
// Change the title to reflect that we are in a subshell.
--- 4923,4929 ----
int tmode = cur_tmode;
WCHAR szShellTitle[512];
! #ifdef FEAT_EVAL
ch_log(NULL, "executing shell command: %s", cmd);
#endif
// Change the title to reflect that we are in a subshell.
*** ../vim-9.0.0976/src/regexp_bt.c 2022-11-26 11:47:07.175323334 +0000
--- src/regexp_bt.c 2022-11-30 18:04:44.815025130 +0000
***************
*** 3163,3169 ****
{
if (timed_out != NULL)
{
! # ifdef FEAT_JOB_CHANNEL
if (!*timed_out)
ch_log(NULL, "BT regexp timed out");
# endif
--- 3163,3169 ----
{
if (timed_out != NULL)
{
! # ifdef FEAT_EVAL
if (!*timed_out)
ch_log(NULL, "BT regexp timed out");
# endif
*** ../vim-9.0.0976/src/regexp_nfa.c 2022-11-26 11:47:07.175323334 +0000
--- src/regexp_nfa.c 2022-11-30 18:05:01.039020134 +0000
***************
*** 4250,4256 ****
{
if (nfa_timed_out != NULL)
{
! # ifdef FEAT_JOB_CHANNEL
if (!*nfa_timed_out)
ch_log(NULL, "NFA regexp timed out");
# endif
--- 4250,4256 ----
{
if (nfa_timed_out != NULL)
{
! # ifdef FEAT_EVAL
if (!*nfa_timed_out)
ch_log(NULL, "NFA regexp timed out");
# endif
*** ../vim-9.0.0976/src/term.c 2022-11-30 10:23:11.691069019 +0000
--- src/term.c 2022-11-30 18:05:32.451010578 +0000
***************
*** 2641,2647 ****
len = out_pos;
out_pos = 0;
ui_write(out_buf, len, FALSE);
! #ifdef FEAT_JOB_CHANNEL
if (ch_log_output != FALSE)
{
out_buf[len] = NUL;
--- 2641,2647 ----
len = out_pos;
out_pos = 0;
ui_write(out_buf, len, FALSE);
! #ifdef FEAT_EVAL
if (ch_log_output != FALSE)
{
out_buf[len] = NUL;
*** ../vim-9.0.0976/src/time.c 2022-10-15 16:28:59.622401541 +0100
--- src/time.c 2022-11-30 18:06:10.566999179 +0000
***************
*** 491,497 ****
typval_T rettv;
typval_T argv[2];
! #ifdef FEAT_JOB_CHANNEL
if (ch_log_active())
{
callback_T *cb = &timer->tr_callback;
--- 491,497 ----
typval_T rettv;
typval_T argv[2];
! #ifdef FEAT_EVAL
if (ch_log_active())
{
callback_T *cb = &timer->tr_callback;
***************
*** 509,515 ****
call_callback(&timer->tr_callback, -1, &rettv, 1, argv);
clear_tv(&rettv);
! #ifdef FEAT_JOB_CHANNEL
ch_log(NULL, "timer callback finished");
#endif
}
--- 509,515 ----
call_callback(&timer->tr_callback, -1, &rettv, 1, argv);
clear_tv(&rettv);
! #ifdef FEAT_EVAL
ch_log(NULL, "timer callback finished");
#endif
}
*** ../vim-9.0.0976/src/ui.c 2022-11-15 17:43:28.442135533 +0000
--- src/ui.c 2022-11-30 18:06:45.530988898 +0000
***************
*** 538,545 ****
#ifdef FEAT_EVAL
if (ui_delay_for_testing > 0)
msec = ui_delay_for_testing;
- #endif
- #ifdef FEAT_JOB_CHANNEL
ch_log(NULL, "ui_delay(%ld)", msec);
#endif
#ifdef FEAT_GUI
--- 538,543 ----
***************
*** 968,974 ****
# else
len = read(read_cmd_fd, (char *)inbuf + inbufcount, readlen);
# endif
! # ifdef FEAT_JOB_CHANNEL
if (len > 0)
{
inbuf[inbufcount + len] = NUL;
--- 966,972 ----
# else
len = read(read_cmd_fd, (char *)inbuf + inbufcount, readlen);
# endif
! # ifdef FEAT_EVAL
if (len > 0)
{
inbuf[inbufcount + len] = NUL;
*** ../vim-9.0.0976/src/globals.h 2022-11-28 20:34:47.704140309 +0000
--- src/globals.h 2022-11-30 16:38:18.815223080 +0000
***************
*** 20,31 ****
EXTERN long Rows // nr of rows in the screen
#ifdef DO_INIT
# if defined(MSWIN)
! = 25L
# else
! = 24L
# endif
#endif
! ;
EXTERN long Columns INIT(= 80); // nr of columns in the screen
/*
--- 20,31 ----
EXTERN long Rows // nr of rows in the screen
#ifdef DO_INIT
# if defined(MSWIN)
! = 25L
# else
! = 24L
# endif
#endif
! ;
EXTERN long Columns INIT(= 80); // nr of columns in the screen
/*
***************
*** 1218,1226 ****
EXTERN pos_T saved_cursor // w_cursor before formatting text.
#ifdef DO_INIT
! = {0, 0, 0}
#endif
! ;
/*
* Stuff for insert mode.
--- 1218,1226 ----
EXTERN pos_T saved_cursor // w_cursor before formatting text.
#ifdef DO_INIT
! = {0, 0, 0}
#endif
! ;
/*
* Stuff for insert mode.
***************
*** 1589,1597 ****
EXTERN int did_cursorhold INIT(= FALSE); // set when CursorHold t'gerd
EXTERN pos_T last_cursormoved // for CursorMoved event
# ifdef DO_INIT
! = {0, 0, 0}
# endif
! ;
EXTERN int postponed_split INIT(= 0); // for CTRL-W CTRL-] command
EXTERN int postponed_split_flags INIT(= 0); // args for win_split()
--- 1589,1597 ----
EXTERN int did_cursorhold INIT(= FALSE); // set when CursorHold t'gerd
EXTERN pos_T last_cursormoved // for CursorMoved event
# ifdef DO_INIT
! = {0, 0, 0}
# endif
! ;
EXTERN int postponed_split INIT(= 0); // for CTRL-W CTRL-] command
EXTERN int postponed_split_flags INIT(= 0); // args for win_split()
***************
*** 1751,1775 ****
EXTERN option_table_T printer_opts[OPT_PRINT_NUM_OPTIONS]
# ifdef DO_INIT
! =
! {
! {"top", TRUE, 0, NULL, 0, FALSE},
! {"bottom", TRUE, 0, NULL, 0, FALSE},
! {"left", TRUE, 0, NULL, 0, FALSE},
! {"right", TRUE, 0, NULL, 0, FALSE},
! {"header", TRUE, 0, NULL, 0, FALSE},
! {"syntax", FALSE, 0, NULL, 0, FALSE},
! {"number", FALSE, 0, NULL, 0, FALSE},
! {"wrap", FALSE, 0, NULL, 0, FALSE},
! {"duplex", FALSE, 0, NULL, 0, FALSE},
! {"portrait", FALSE, 0, NULL, 0, FALSE},
! {"paper", FALSE, 0, NULL, 0, FALSE},
! {"collate", FALSE, 0, NULL, 0, FALSE},
! {"jobsplit", FALSE, 0, NULL, 0, FALSE},
! {"formfeed", FALSE, 0, NULL, 0, FALSE},
! }
# endif
! ;
// For prt_get_unit().
# define PRT_UNIT_NONE -1
--- 1751,1774 ----
EXTERN option_table_T printer_opts[OPT_PRINT_NUM_OPTIONS]
# ifdef DO_INIT
! = {
! {"top", TRUE, 0, NULL, 0, FALSE},
! {"bottom", TRUE, 0, NULL, 0, FALSE},
! {"left", TRUE, 0, NULL, 0, FALSE},
! {"right", TRUE, 0, NULL, 0, FALSE},
! {"header", TRUE, 0, NULL, 0, FALSE},
! {"syntax", FALSE, 0, NULL, 0, FALSE},
! {"number", FALSE, 0, NULL, 0, FALSE},
! {"wrap", FALSE, 0, NULL, 0, FALSE},
! {"duplex", FALSE, 0, NULL, 0, FALSE},
! {"portrait", FALSE, 0, NULL, 0, FALSE},
! {"paper", FALSE, 0, NULL, 0, FALSE},
! {"collate", FALSE, 0, NULL, 0, FALSE},
! {"jobsplit", FALSE, 0, NULL, 0, FALSE},
! {"formfeed", FALSE, 0, NULL, 0, FALSE},
! }
# endif
! ;
// For prt_get_unit().
# define PRT_UNIT_NONE -1
***************
*** 1871,1879 ****
// Grow array to collect error messages in until they can be displayed.
EXTERN garray_T error_ga
# ifdef DO_INIT
! = {0, 0, 0, 0, NULL}
# endif
! ;
#endif
#ifdef FEAT_NETBEANS_INTG
--- 1870,1878 ----
// Grow array to collect error messages in until they can be displayed.
EXTERN garray_T error_ga
# ifdef DO_INIT
! = {0, 0, 0, 0, NULL}
# endif
! ;
#endif
#ifdef FEAT_NETBEANS_INTG
***************
*** 1991,1997 ****
--- 1990,2003 ----
EXTERN HINSTANCE g_hinst INIT(= NULL);
#endif
+
#if defined(FEAT_JOB_CHANNEL)
+ EXTERN char *ch_part_names[]
+ # ifdef DO_INIT
+ = {"sock", "out", "err", "in"}
+ # endif
+ ;
+
EXTERN int did_repeated_msg INIT(= 0);
# define REPEATED_MSG_LOOKING 1
# define REPEATED_MSG_SAFESTATE 2
*** ../vim-9.0.0976/src/Makefile 2022-11-18 22:14:04.798988157 +0000
--- src/Makefile 2022-11-30 16:13:22.541639488 +0000
***************
*** 1531,1536 ****
--- 1532,1538 ----
json.c \
list.c \
locale.c \
+ logfile.c \
main.c \
map.c \
mark.c \
***************
*** 1690,1695 ****
--- 1692,1698 ----
objects/insexpand.o \
objects/list.o \
objects/locale.o \
+ objects/logfile.o \
objects/map.o \
objects/mark.o \
objects/match.o \
***************
*** 1874,1879 ****
--- 1877,1883 ----
json.pro \
list.pro \
locale.pro \
+
logfile.pro \
main.pro \
map.pro \
mark.pro \
***************
*** 3306,3311 ****
--- 3310,3318 ----
objects/locale.o: locale.c
$(CCC) -o $@ locale.c
+ objects/logfile.o: logfile.c
+ $(CCC) -o $@ logfile.c
+
objects/main.o: main.c
$(CCC) -o $@ main.c
***************
*** 3896,3901 ****
--- 3903,3913 ----
auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
proto/
gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \
libvterm/include/vterm_keycodes.h alloc.h ex_cmds.h spell.h proto.h \
+ globals.h errors.h
+ objects/logfile.o: logfile.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
+ proto/
gui_beval.pro structs.h regexp.h gui.h libvterm/include/vterm.h \
+ libvterm/include/vterm_keycodes.h alloc.h ex_cmds.h spell.h proto.h \
globals.h errors.h
objects/main.o: main.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
*** ../vim-9.0.0976/src/Make_ami.mak 2022-10-08 19:26:35.694195418 +0100
--- src/Make_ami.mak 2022-11-30 16:40:15.867102172 +0000
***************
*** 124,129 ****
--- 124,130 ----
json.c \
list.c \
locale.c \
+ logfile.c \
main.c \
mark.c \
map.c \
*** ../vim-9.0.0976/src/Make_mvc.mak 2022-11-10 23:17:15.863670823 +0000
--- src/Make_mvc.mak 2022-11-30 16:43:01.074948224 +0000
***************
*** 685,690 ****
--- 685,691 ----
$(OUTDIR)\json.obj \
$(OUTDIR)\list.obj \
$(OUTDIR)\locale.obj \
+ $(OUTDIR)\logfile.obj \
$(OUTDIR)\main.obj \
$(OUTDIR)\map.obj \
$(OUTDIR)\mark.obj \
***************
*** 1586,1591 ****
--- 1587,1594 ----
$(OUTDIR)/locale.obj: $(OUTDIR) locale.c $(INCL)
+ $(OUTDIR)/logfile.obj: $(OUTDIR) logfile.c $(INCL)
+
$(OUTDIR)/main.obj: $(OUTDIR) main.c $(INCL) $(CUI_INCL)
$(OUTDIR)/map.obj: $(OUTDIR) map.c $(INCL)
***************
*** 1862,1867 ****
--- 1865,1871 ----
proto/
json.pro \
proto/
list.pro \
proto/
locale.pro \
+ proto/
logfile.pro \
proto/
main.pro \
proto/
map.pro \
proto/
mark.pro \
*** ../vim-9.0.0976/src/Make_vms.mms 2022-10-08 19:26:35.698195391 +0100
--- src/Make_vms.mms 2022-11-30 16:43:19.654931909 +0000
***************
*** 357,362 ****
--- 357,363 ----
json.c \
list.c \
locale.c \
+ logfile.c \
main.c \
map.c \
mark.c \
***************
*** 481,486 ****
--- 482,488 ----
json.obj \
list.obj \
locale.obj \
+ logfile.obj \
main.obj \
map.obj \
mark.obj \
***************
*** 928,933 ****
--- 930,939 ----
ascii.h keymap.h termdefs.h macros.h option.h structs.h regexp.h gui.h \
beval.h [.proto]
gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
errors.h globals.h
+ logfile.obj : logfile.c vim.h [.auto]config.h feature.h os_unix.h \
+ ascii.h keymap.h termdefs.h macros.h option.h structs.h regexp.h gui.h \
+ beval.h [.proto]
gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
+ errors.h globals.h
main.obj : main.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h gui.h beval.h \
[.proto]
gui_beval.pro option.h ex_cmds.h proto.h errors.h globals.h \
*** ../vim-9.0.0976/src/Make_cyg_ming.mak 2022-11-14 14:50:11.924510877 +0000
--- src/Make_cyg_ming.mak 2022-11-30 16:42:28.146977596 +0000
***************
*** 800,805 ****
--- 800,806 ----
$(OUTDIR)/json.o \
$(OUTDIR)/list.o \
$(OUTDIR)/locale.o \
+ $(OUTDIR)/logfile.o \
$(OUTDIR)/main.o \
$(OUTDIR)/map.o \
$(OUTDIR)/mark.o \
*** ../vim-9.0.0976/src/version.c 2022-11-30 10:23:11.691069019 +0000
--- src/version.c 2022-11-30 15:35:06.173296172 +0000
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 977,
/**/
--
hundred-and-one symptoms of being an internet addict:
188. You purchase a laptop so you can surf while sitting on the can.
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///