Patch 8.1.0020
Problem:    Cannot tell whether a register is being used for executing or
            recording.
Solution:   Add reg_executing() and reg_recording(). (Hirohito Higashi,
            closes #2745)  Rename the global variables for consistency.  Store
            the register name in reg_executing.
Files:      runtime/doc/eval.txt, runtime/doc/usr_41.txt, src/evalfunc.c,
            src/testdir/test_functions.vim, src/getchar.c, src/normal.c,
            src/ops.c, src/globals.h, src/edit.c, src/fileio.c, src/message.c,
            src/screen.c


*** ../vim-8.1.0019/runtime/doc/eval.txt        2018-05-17 15:06:48.000000000 
+0200
--- runtime/doc/eval.txt        2018-05-22 20:25:41.869831935 +0200
***************
*** 2302,2307 ****
--- 2302,2309 ----
                                List    items from {expr} to {max}
  readfile({fname} [, {binary} [, {max}]])
                                List    get list of lines from file {fname}
+ reg_executing()                       Number  get the executing register name
+ reg_recording()                       String  get the recording register name
  reltime([{start} [, {end}]])  List    get time value
  reltimefloat({time})          Float   turn the time value into a Float
  reltimestr({time})            String  turn time value into a String
***************
*** 6558,6563 ****
--- 6562,6576 ----
                the result is an empty list.
                Also see |writefile()|.
  
+ reg_executing()                                               
*reg_executing()*
+               Returns the single letter name of the register being executed.
+               Returns an empty string when no register is being executed.
+               See |@|.
+ 
+ reg_recording()                                               
*reg_recording()*
+               Returns the single letter name of the register being recorded.
+               Returns an empty string string when not recording.  See |q|.
+ 
  reltime([{start} [, {end}]])                          *reltime()*
                Return an item that represents a time value.  The format of
                the item depends on the system.  It can be passed to
*** ../vim-8.1.0019/runtime/doc/usr_41.txt      2018-05-17 13:42:03.000000000 
+0200
--- runtime/doc/usr_41.txt      2018-05-22 20:26:30.025880034 +0200
***************
*** 1018,1023 ****
--- 1018,1025 ----
        getreg()                get contents of a register
        getregtype()            get type of a register
        setreg()                set contents and type of a register
+       reg_executing()         return the name of the register being executed
+       reg_recording()         return the name of the register being recorded
  
        shiftwidth()            effective value of 'shiftwidth'
  
*** ../vim-8.1.0019/src/evalfunc.c      2018-05-21 13:28:40.320041589 +0200
--- src/evalfunc.c      2018-05-22 20:32:33.566027870 +0200
***************
*** 306,311 ****
--- 306,313 ----
  #endif
  static void f_range(typval_T *argvars, typval_T *rettv);
  static void f_readfile(typval_T *argvars, typval_T *rettv);
+ static void f_reg_executing(typval_T *argvars, typval_T *rettv);
+ static void f_reg_recording(typval_T *argvars, typval_T *rettv);
  static void f_reltime(typval_T *argvars, typval_T *rettv);
  #ifdef FEAT_FLOAT
  static void f_reltimefloat(typval_T *argvars, typval_T *rettv);
***************
*** 754,759 ****
--- 756,763 ----
  #endif
      {"range",         1, 3, f_range},
      {"readfile",      1, 3, f_readfile},
+     {"reg_executing", 0, 0, f_reg_executing},
+     {"reg_recording", 0, 0, f_reg_recording},
      {"reltime",               0, 2, f_reltime},
  #ifdef FEAT_FLOAT
      {"reltimefloat",  1, 1, f_reltimefloat},
***************
*** 8697,8702 ****
--- 8701,8734 ----
      fclose(fd);
  }
  
+     static void
+ return_register(int regname, typval_T *rettv)
+ {
+     char_u buf[2] = {0, 0};
+ 
+     buf[0] = (char_u)regname;
+     rettv->v_type = VAR_STRING;
+     rettv->vval.v_string = vim_strsave(buf);
+ }
+ 
+ /*
+  * "reg_executing()" function
+  */
+     static void
+ f_reg_executing(typval_T *argvars UNUSED, typval_T *rettv)
+ {
+     return_register(reg_executing, rettv);
+ }
+ 
+ /*
+  * "reg_recording()" function
+  */
+     static void
+ f_reg_recording(typval_T *argvars UNUSED, typval_T *rettv)
+ {
+     return_register(reg_recording, rettv);
+ }
+ 
  #if defined(FEAT_RELTIME)
  static int list2proftime(typval_T *arg, proftime_T *tm);
  
*** ../vim-8.1.0019/src/testdir/test_functions.vim      2018-05-20 
14:11:07.125342749 +0200
--- src/testdir/test_functions.vim      2018-05-22 20:27:42.625937524 +0200
***************
*** 923,925 ****
--- 923,950 ----
    let chars = join(map(range(1, 0x20) + [0xa0], {n -> nr2char(n)}), '')
    call assert_equal("x", trim(chars . "x" . chars))
  endfunc
+ 
+ " Test for reg_recording() and reg_executing()
+ func Test_reg_executing_and_recording()
+   let s:reg_stat = ''
+   func s:save_reg_stat()
+     let s:reg_stat = reg_recording() . ':' . reg_executing()
+     return ''
+   endfunc
+ 
+   new
+   call s:save_reg_stat()
+   call assert_equal(':', s:reg_stat)
+   call feedkeys("qa\"=s:save_reg_stat()\<CR>pq", 'xt')
+   call assert_equal('a:', s:reg_stat)
+   call feedkeys("@a", 'xt')
+   call assert_equal(':a', s:reg_stat)
+   call feedkeys("qb@aq", 'xt')
+   call assert_equal('b:a', s:reg_stat)
+   call feedkeys("q\"\"=s:save_reg_stat()\<CR>pq", 'xt')
+   call assert_equal('":', s:reg_stat)
+ 
+   bwipe!
+   delfunc s:save_reg_stat
+   unlet s:reg_stat
+ endfunc
*** ../vim-8.1.0019/src/getchar.c       2018-05-13 18:25:53.000000000 +0200
--- src/getchar.c       2018-05-22 20:21:55.241805765 +0200
***************
*** 1244,1250 ****
      int               todo = len;
  
      /* remember how many chars were last recorded */
!     if (Recording)
        last_recorded_len += len;
  
      buf[1] = NUL;
--- 1244,1250 ----
      int               todo = len;
  
      /* remember how many chars were last recorded */
!     if (reg_recording != 0)
        last_recorded_len += len;
  
      buf[1] = NUL;
***************
*** 1254,1260 ****
        c = *s++;
        updatescript(c);
  
!       if (Recording)
        {
            buf[0] = c;
            add_buff(&recordbuff, buf, 1L);
--- 1254,1260 ----
        c = *s++;
        updatescript(c);
  
!       if (reg_recording != 0)
        {
            buf[0] = c;
            add_buff(&recordbuff, buf, 1L);
***************
*** 2007,2013 ****
      init_typebuf();
      start_stuff();
      if (advance && typebuf.tb_maplen == 0)
!       Exec_reg = FALSE;
      do
      {
  /*
--- 2007,2013 ----
      init_typebuf();
      start_stuff();
      if (advance && typebuf.tb_maplen == 0)
!       reg_executing = 0;
      do
      {
  /*
*** ../vim-8.1.0019/src/normal.c        2018-05-10 15:04:13.000000000 +0200
--- src/normal.c        2018-05-22 20:22:01.537798525 +0200
***************
*** 871,878 ****
                || (nv_cmds[idx].cmd_flags & NV_NCH_ALW) == NV_NCH_ALW
                || (ca.cmdchar == 'q'
                    && oap->op_type == OP_NOP
!                   && !Recording
!                   && !Exec_reg)
                || ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
                    && (oap->op_type != OP_NOP || VIsual_active))))
      {
--- 871,878 ----
                || (nv_cmds[idx].cmd_flags & NV_NCH_ALW) == NV_NCH_ALW
                || (ca.cmdchar == 'q'
                    && oap->op_type == OP_NOP
!                   && reg_recording == 0
!                   && reg_executing == 0)
                || ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
                    && (oap->op_type != OP_NOP || VIsual_active))))
      {
***************
*** 9324,9330 ****
  #endif
            /* (stop) recording into a named register, unless executing a
             * register */
!           if (!Exec_reg && do_record(cap->nchar) == FAIL)
                clearopbeep(cap->oap);
      }
  }
--- 9324,9330 ----
  #endif
            /* (stop) recording into a named register, unless executing a
             * register */
!           if (reg_executing == 0 && do_record(cap->nchar) == FAIL)
                clearopbeep(cap->oap);
      }
  }
*** ../vim-8.1.0019/src/ops.c   2018-05-01 19:10:26.000000000 +0200
--- src/ops.c   2018-05-22 20:22:13.973784219 +0200
***************
*** 1091,1104 ****
      yankreg_T     *old_y_previous, *old_y_current;
      int                   retval;
  
!     if (Recording == FALSE)       /* start recording */
      {
        /* registers 0-9, a-z and " are allowed */
        if (c < 0 || (!ASCII_ISALNUM(c) && c != '"'))
            retval = FAIL;
        else
        {
!           Recording = c;
            showmode();
            regname = c;
            retval = OK;
--- 1091,1104 ----
      yankreg_T     *old_y_previous, *old_y_current;
      int                   retval;
  
!     if (reg_recording == 0)       /* start recording */
      {
        /* registers 0-9, a-z and " are allowed */
        if (c < 0 || (!ASCII_ISALNUM(c) && c != '"'))
            retval = FAIL;
        else
        {
!           reg_recording = c;
            showmode();
            regname = c;
            retval = OK;
***************
*** 1111,1117 ****
         * needs to be removed again to put it in a register.  exec_reg then
         * adds the escaping back later.
         */
!       Recording = FALSE;
        MSG("");
        p = get_recorded();
        if (p == NULL)
--- 1111,1117 ----
         * needs to be removed again to put it in a register.  exec_reg then
         * adds the escaping back later.
         */
!       reg_recording = 0;
        MSG("");
        p = get_recorded();
        if (p == NULL)
***************
*** 1318,1324 ****
                                                                      == FAIL)
                return FAIL;
        }
!       Exec_reg = TRUE;        /* disable the 'q' command */
      }
      return retval;
  }
--- 1318,1324 ----
                                                                      == FAIL)
                return FAIL;
        }
!       reg_executing = regname == 0 ? '"' : regname; // disable "q" command
      }
      return retval;
  }
*** ../vim-8.1.0019/src/globals.h       2018-05-01 15:29:24.000000000 +0200
--- src/globals.h       2018-05-22 20:22:30.453765251 +0200
***************
*** 933,940 ****
  EXTERN int exmode_active INIT(= 0);   /* zero, EXMODE_NORMAL or EXMODE_VIM */
  EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */
  
! EXTERN int Recording INIT(= FALSE);   /* TRUE when recording into a reg. */
! EXTERN int Exec_reg INIT(= FALSE);    /* TRUE when executing a register */
  
  EXTERN int no_mapping INIT(= FALSE);  /* currently no mapping allowed */
  EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */
--- 933,940 ----
  EXTERN int exmode_active INIT(= 0);   /* zero, EXMODE_NORMAL or EXMODE_VIM */
  EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */
  
! EXTERN int reg_recording INIT(= 0);   /* register for recording  or zero */
! EXTERN int reg_executing INIT(= 0);   /* register being executed or zero */
  
  EXTERN int no_mapping INIT(= FALSE);  /* currently no mapping allowed */
  EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */
*** ../vim-8.1.0019/src/edit.c  2018-05-10 15:03:58.000000000 +0200
--- src/edit.c  2018-05-22 20:19:41.393959222 +0200
***************
*** 8698,8704 ****
       * When recording or for CTRL-O, need to display the new mode.
       * Otherwise remove the mode message.
       */
!     if (Recording || restart_edit != NUL)
        showmode();
      else if (p_smd)
        MSG("");
--- 8698,8704 ----
       * When recording or for CTRL-O, need to display the new mode.
       * Otherwise remove the mode message.
       */
!     if (reg_recording != 0 || restart_edit != NUL)
        showmode();
      else if (p_smd)
        MSG("");
*** ../vim-8.1.0019/src/fileio.c        2018-05-21 13:39:36.047906786 +0200
--- src/fileio.c        2018-05-22 20:19:50.201949153 +0200
***************
*** 9274,9280 ****
  
      if (!did_cursorhold
            && has_cursorhold()
!           && !Recording
            && typebuf.tb_len == 0
  #ifdef FEAT_INS_EXPAND
            && !ins_compl_active()
--- 9274,9280 ----
  
      if (!did_cursorhold
            && has_cursorhold()
!           && reg_recording == 0
            && typebuf.tb_len == 0
  #ifdef FEAT_INS_EXPAND
            && !ins_compl_active()
*** ../vim-8.1.0019/src/message.c       2018-04-29 12:18:04.000000000 +0200
--- src/message.c       2018-05-22 20:20:24.417909998 +0200
***************
*** 1025,1031 ****
      int               oldState;
      int               tmpState;
      int               had_got_int;
!     int               save_Recording;
      FILE      *save_scriptout;
  
      if (redraw == TRUE)
--- 1025,1031 ----
      int               oldState;
      int               tmpState;
      int               had_got_int;
!     int               save_reg_recording;
      FILE      *save_scriptout;
  
      if (redraw == TRUE)
***************
*** 1103,1118 ****
            /* Temporarily disable Recording. If Recording is active, the
             * character will be recorded later, since it will be added to the
             * typebuf after the loop */
!           save_Recording = Recording;
            save_scriptout = scriptout;
!           Recording = FALSE;
            scriptout = NULL;
            c = safe_vgetc();
            if (had_got_int && !global_busy)
                got_int = FALSE;
            --no_mapping;
            --allow_keys;
!           Recording = save_Recording;
            scriptout = save_scriptout;
  
  #ifdef FEAT_CLIPBOARD
--- 1103,1118 ----
            /* Temporarily disable Recording. If Recording is active, the
             * character will be recorded later, since it will be added to the
             * typebuf after the loop */
!           save_reg_recording = reg_recording;
            save_scriptout = scriptout;
!           reg_recording = 0;
            scriptout = NULL;
            c = safe_vgetc();
            if (had_got_int && !global_busy)
                got_int = FALSE;
            --no_mapping;
            --allow_keys;
!           reg_recording = save_reg_recording;
            scriptout = save_scriptout;
  
  #ifdef FEAT_CLIPBOARD
*** ../vim-8.1.0019/src/screen.c        2018-05-19 14:43:26.775509740 +0200
--- src/screen.c        2018-05-22 20:20:50.233880413 +0200
***************
*** 10255,10261 ****
            && ((State & INSERT)
                || restart_edit
                || VIsual_active));
!     if (do_mode || Recording)
      {
        /*
         * Don't show mode right now, when not redrawing or inside a mapping.
--- 10255,10261 ----
            && ((State & INSERT)
                || restart_edit
                || VIsual_active));
!     if (do_mode || reg_recording != 0)
      {
        /*
         * Don't show mode right now, when not redrawing or inside a mapping.
***************
*** 10414,10420 ****
  
            need_clear = TRUE;
        }
!       if (Recording
  #ifdef FEAT_INS_EXPAND
                && edit_submode == NULL     /* otherwise it gets too long */
  #endif
--- 10414,10420 ----
  
            need_clear = TRUE;
        }
!       if (reg_recording != 0
  #ifdef FEAT_INS_EXPAND
                && edit_submode == NULL     /* otherwise it gets too long */
  #endif
***************
*** 10489,10495 ****
      int save_msg_col = msg_col;
  
      msg_pos_mode();
!     if (Recording)
        recording_mode(HL_ATTR(HLF_CM));
      msg_clr_eos();
  
--- 10489,10495 ----
      int save_msg_col = msg_col;
  
      msg_pos_mode();
!     if (reg_recording != 0)
        recording_mode(HL_ATTR(HLF_CM));
      msg_clr_eos();
  
***************
*** 10504,10510 ****
      if (!shortmess(SHM_RECORDING))
      {
        char_u s[4];
!       sprintf((char *)s, " @%c", Recording);
        MSG_PUTS_ATTR(s, attr);
      }
  }
--- 10504,10510 ----
      if (!shortmess(SHM_RECORDING))
      {
        char_u s[4];
!       sprintf((char *)s, " @%c", reg_recording);
        MSG_PUTS_ATTR(s, attr);
      }
  }
*** ../vim-8.1.0019/src/version.c       2018-05-22 18:31:30.001365739 +0200
--- src/version.c       2018-05-22 20:33:34.882025227 +0200
***************
*** 763,764 ****
--- 763,766 ----
  {   /* Add new patch number below this line */
+ /**/
+     20,
  /**/

-- 
            |

Ceci n'est pas une pipe.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            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].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui