Start logging channel activity to {fname}.
When {fname} is an empty string: stop logging.
- When {mode} is omitted or "a" append to the file.
- When {mode} is "w" start with an empty file.
+ When {mode} is omitted or contains "a" or is "o" then append
+ to the file.
+ When {mode} contains "w" and not "a" start with an empty file.
+ When {mode} contains "o" then log all terminal output.
+ Otherwise only some interesting terminal output is logged.
Use |ch_log()| to write log messages. The file is flushed
after every message, on Unix you can use "tail -f" to see what
is going on in real time.
To enable the log very early, to see what is received from a
- terminal during startup, use |--log|: >
+ terminal during startup, use |--log| (this uses mode "ao"): >
vim --log logfile
<
This function is not available in the |sandbox|.
out_pos = 0;
ui_write(out_buf, len, FALSE);
#ifdef FEAT_JOB_CHANNEL
- if (ch_log_output)
+ if (ch_log_output != FALSE)
{
out_buf[len] = NUL;
ch_log(NULL, "raw %s output: \"%s\"",
# endif
"terminal",
out_buf);
- ch_log_output = FALSE;
+ if (ch_log_output == TRUE)
+ ch_log_output = FALSE; // only log once
}
#endif
}
void
term_settitle(char_u *title)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
+
// t_ts takes one argument: column in status line
OUT_STR(tgoto((char *)T_TS, 0, 0)); // set title start
out_str_nf(title);
if (termcap_active && tmode != TMODE_SLEEP
&& cur_tmode != TMODE_SLEEP)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
+
if (tmode != TMODE_RAW)
{
out_str(T_BD); // disable bracketed paste mode
{
if (full_screen && !termcap_active)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
+
out_str(T_TI); // start termcap mode
out_str(T_CTI); // start "raw" mode
out_str(T_KS); // start "keypad transmit" mode
check_for_codes_from_term();
}
#endif
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
#if defined(UNIX) || defined(VMS)
// Disable xterm's focus reporting mode if 'esckeys' is set.
&& starting == 0
&& *T_CRV != NUL)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Sending CRV request"));
out_str(T_CRV);
termrequest_sent(&crv_status);
// width, that will be (1, 2). This function has the side effect that
// changes cursor position, so it must be called immediately after
// entering termcap mode.
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Sending request for ambiwidth check"));
// Do this in the second row. In the first row the returned sequence
// may be CSI 1;2R, which is the same as <S-F3>.
// sequence is ignored and the cursor does not move. If the terminal
// handles test sequence incorrectly, a garbage string is displayed and
// the cursor does move.
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Sending xterm compatibility test sequence."));
// Do this in the third row. Second row is used by ambiguous
// character width check.
// Only request foreground if t_RF is set.
if (rfg_status.tr_progress == STATUS_GET && *T_RFG != NUL)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Sending FG request"));
out_str(T_RFG);
termrequest_sent(&rfg_status);
// Only request background if t_RB is set.
if (rbg_status.tr_progress == STATUS_GET && *T_RBG != NUL)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Sending BG request"));
out_str(T_RBG);
termrequest_sent(&rbg_status);
{
if (*T_VS != NUL && *T_CVS != NUL)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
out_str(T_VS);
out_str(T_CVS);
screen_start(); // don't know where cursor is now
&& *T_CSH != NUL
&& *T_CRS != NUL)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Sending cursor style request"));
out_str(T_CRS);
termrequest_sent(&rcs_status);
&& term_props[TPR_CURSOR_BLINK].tpr_status == TPR_YES
&& *T_CRC != NUL)
{
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Sending cursor blink mode request"));
out_str(T_CRC);
termrequest_sent(&rbm_status);
{
char *key_name = key_names[xt_index_out];
-#ifdef FEAT_JOB_CHANNEL
- ch_log_output = TRUE;
-#endif
+ MAY_WANT_TO_LOG_THIS;
LOG_TR(("Requesting XT %d: %s", xt_index_out, key_name));
sprintf(buf, "\033P+q%02x%02x\033\\", key_name[0], key_name[1]);
out_str_nf((char_u *)buf);