Patch 9.0.0756
Problem:    No autocmd event for changing text in a terminal window.
Solution:   Add TextChangedT. (Shougo Matsushita, closes #11366)
Files:      runtime/doc/autocmd.txt, src/autocmd.c, src/terminal.c, src/vim.h,
            src/testdir/test_terminal.vim


*** ../vim-9.0.0755/runtime/doc/autocmd.txt     2022-06-28 11:21:05.000000000 
+0100
--- runtime/doc/autocmd.txt     2022-10-15 11:41:05.006166346 +0100
***************
*** 409,414 ****
--- 409,415 ----
                        when popup menu is not visible
  |TextChangedP|                after a change was made to the text in Insert 
mode
                        when popup menu visible
+ |TextChangedT|                after a change was made to the text in Terminal 
mode
  |TextYankPost|                after text has been yanked or deleted
  
  |SafeState|           nothing pending, going to wait for the user to type a
***************
*** 1235,1240 ****
--- 1238,1247 ----
                                current buffer in Insert mode, only when the
                                popup menu is visible.  Otherwise the same as
                                TextChanged.
+                                                       *TextChangedT*
+ TextChangedT                  After a change was made to the text in the
+                               current buffer in Terminal mode.
+                               Otherwise the same as TextChanged.
                                                        *TextYankPost*
  TextYankPost                  After text has been yanked or deleted in the
                                current buffer.  The following values of
*** ../vim-9.0.0755/src/autocmd.c       2022-10-10 13:46:09.977158083 +0100
--- src/autocmd.c       2022-10-15 11:41:05.006166346 +0100
***************
*** 182,187 ****
--- 182,188 ----
      {"TextChanged",   EVENT_TEXTCHANGED},
      {"TextChangedI",  EVENT_TEXTCHANGEDI},
      {"TextChangedP",  EVENT_TEXTCHANGEDP},
+     {"TextChangedT",  EVENT_TEXTCHANGEDT},
      {"User",          EVENT_USER},
      {"VimEnter",      EVENT_VIMENTER},
      {"VimLeave",      EVENT_VIMLEAVE},
*** ../vim-9.0.0755/src/terminal.c      2022-10-13 22:12:07.172673790 +0100
--- src/terminal.c      2022-10-15 11:41:05.006166346 +0100
***************
*** 1222,1227 ****
--- 1222,1229 ----
        setcursor();
      if (redraw)
      {
+       aco_save_T      aco;
+ 
        if (term->tl_buffer == curbuf && term->tl_cursor_visible)
            cursor_on();
        out_flush();
***************
*** 1232,1237 ****
--- 1234,1249 ----
            gui_mch_flush();
        }
  #endif
+         // Make sure an invoked autocmd doesn't delete the buffer (and the
+         // terminal) under our fingers.
+       ++term->tl_buffer->b_locked;
+ 
+       // save and restore curwin and curbuf, in case the autocmd changes them
+       aucmd_prepbuf(&aco, curbuf);
+       apply_autocmds(EVENT_TEXTCHANGEDT, NULL, NULL, FALSE, term->tl_buffer);
+       aucmd_restbuf(&aco);
+ 
+       --term->tl_buffer->b_locked;
      }
  }
  
*** ../vim-9.0.0755/src/vim.h   2022-10-08 13:49:41.893378443 +0100
--- src/vim.h   2022-10-15 11:41:05.006166346 +0100
***************
*** 1394,1399 ****
--- 1394,1400 ----
      EVENT_TEXTCHANGED,                // text was modified not in Insert mode
      EVENT_TEXTCHANGEDI,               // text was modified in Insert mode
      EVENT_TEXTCHANGEDP,               // TextChangedI with popup menu visible
+     EVENT_TEXTCHANGEDT,               // text was modified in Terminal mode
      EVENT_TEXTYANKPOST,               // after some text was yanked
      EVENT_USER,                       // user defined autocommand
      EVENT_VIMENTER,           // after starting Vim
*** ../vim-9.0.0755/src/testdir/test_terminal.vim       2022-10-10 
11:46:12.206333720 +0100
--- src/testdir/test_terminal.vim       2022-10-15 11:41:05.006166346 +0100
***************
*** 2321,2325 ****
--- 2321,2374 ----
    bwipe!
  endfunc
  
+ func Test_term_TextChangedT()
+   augroup TermTest
+     autocmd TextChangedT * ++once
+           \ execute expand('<abuf>') . 'buffer' |
+           \ let b:called = 1 |
+           \ split |
+           \ enew
+   augroup END
+ 
+   terminal
+ 
+   let term_buf = bufnr()
+ 
+   let b:called = 0
+ 
+   call term_sendkeys(term_buf, "aaabbc\r")
+   call TermWait(term_buf)
+ 
+   call assert_equal(1, getbufvar(term_buf, 'called'))
+ 
+   " Current buffer will be restored
+   call assert_equal(bufnr(), term_buf)
+ 
+   bwipe!
+   augroup TermTest
+     au!
+   augroup END
+ endfunc
+ 
+ func Test_term_TextChangedT_close()
+   augroup TermTest
+     autocmd TextChangedT * ++once split | enew | 1close!
+   augroup END
+ 
+   terminal
+ 
+   let term_buf = bufnr()
+ 
+   call term_sendkeys(term_buf, "aaabbc\r")
+   call TermWait(term_buf)
+ 
+   " Current buffer will be restored
+   call assert_equal(bufnr(), term_buf)
+ 
+   bwipe!
+   augroup TermTest
+     au!
+   augroup END
+ endfunc
  
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-9.0.0755/src/version.c       2022-10-15 10:54:22.986157723 +0100
--- src/version.c       2022-10-15 11:47:15.009740028 +0100
***************
*** 697,698 ****
--- 697,700 ----
  {   /* Add new patch number below this line */
+ /**/
+     756,
  /**/

-- 
BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
ANOTHER MONK:    And St.  Attila raised his hand grenade up on high saying "O
                 Lord bless this thy hand grenade that with it thou mayest
                 blow thine enemies to tiny bits, in thy mercy. "and the Lord
                 did grin and people did feast upon the lambs and sloths and
                 carp and anchovies and orang-utans and breakfast cereals and
                 fruit bats and...
BROTHER MAYNARD: Skip a bit brother ...
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20221015104833.4DE9D1C1EC0%40moolenaar.net.

Raspunde prin e-mail lui