Loading ...
Sorry, an error occurred while loading the content.

Patch 7.0.155

Expand Messages
  • Bram Moolenaar
    Patch 7.0.155 Problem: When getchar() returns a mouse button click there is no way to get the mouse coordinates. Solution: Add v:mouse_win, v:mouse_lnum
    Message 1 of 1 , Nov 1, 2006
    • 0 Attachment
      Patch 7.0.155
      Problem: When getchar() returns a mouse button click there is no way to get
      the mouse coordinates.
      Solution: Add v:mouse_win, v:mouse_lnum and v:mouse_col.
      Files: runtime/doc/eval.txt, src/eval.c, src/vim.h


      *** ../vim-7.0.154/runtime/doc/eval.txt Tue Oct 3 14:43:31 2006
      --- runtime/doc/eval.txt Wed Nov 1 15:20:42 2006
      ***************
      *** 1,4 ****
      ! *eval.txt* For Vim version 7.0. Last change: 2006 Sep 22


      VIM REFERENCE MANUAL by Bram Moolenaar
      --- 1,4 ----
      ! *eval.txt* For Vim version 7.0. Last change: 2006 Nov 01


      VIM REFERENCE MANUAL by Bram Moolenaar
      ***************
      *** 1374,1379 ****
      --- 1380,1400 ----
      'guitabtooltip'. Only valid while one of these expressions is
      being evaluated. Read-only when in the |sandbox|.

      + *v:mouse_win* *mouse_win-variable*
      + v:mouse_win Window number for a mouse click obtained with |getchar()|.
      + First window has number 1, like with |winnr()|. The value is
      + zero when there was no mouse button click.
      +
      + *v:mouse_lnum* *mouse_lnum-variable*
      + v:mouse_lnum Line number for a mouse click obtained with |getchar()|.
      + This is the text line number, not the screen line number. The
      + value is zero when there was no mouse button click.
      +
      + *v:mouse_col* *mouse_col-variable*
      + v:mouse_col Column number for a mouse click obtained with |getchar()|.
      + This is the screen column number, like with |virtcol()|. The
      + value is zero when there was no mouse button click.
      +
      *v:prevcount* *prevcount-variable*
      v:prevcount The count given for the last but one Normal mode command.
      This is the v:count value of the previous command. Useful if
      ***************
      *** 2702,2707 ****
      --- 2728,2744 ----
      one-byte character it is the character itself as a number.
      Use nr2char() to convert it to a String.

      + When the user clicks a mouse button, the mouse event will be
      + returned. The position can then be found in |v:mouse_col|,
      + |v:mouse_lnum| and |v:mouse_win|. This example positions the
      + mouse as it would normally happen: >
      + let c = getchar()
      + if c == "\<LeftMouse>" && v:mouse_win > 0
      + exe v:mouse_win . "wincmd w"
      + exe v:mouse_lnum
      + exe "normal " . v:mouse_col . "|"
      + endif
      + <
      There is no prompt, you will somehow have to make clear to the
      user that a character has to be typed.
      There is no mapping for the character.
      *** ../vim-7.0.154/src/eval.c Tue Oct 24 13:51:47 2006
      --- src/eval.c Wed Nov 1 13:39:52 2006
      ***************
      *** 343,348 ****
      --- 342,350 ----
      {VV_NAME("swapchoice", VAR_STRING), 0},
      {VV_NAME("swapcommand", VAR_STRING), VV_RO},
      {VV_NAME("char", VAR_STRING), VV_RO},
      + {VV_NAME("mouse_win", VAR_NUMBER), 0},
      + {VV_NAME("mouse_lnum", VAR_NUMBER), 0},
      + {VV_NAME("mouse_col", VAR_NUMBER), 0},
      };

      /* shorthand */
      ***************
      *** 9855,9860 ****
      --- 9857,9866 ----
      --no_mapping;
      --allow_keys;

      + vimvars[VV_MOUSE_WIN].vv_nr = 0;
      + vimvars[VV_MOUSE_LNUM].vv_nr = 0;
      + vimvars[VV_MOUSE_COL].vv_nr = 0;
      +
      rettv->vval.v_number = n;
      if (IS_SPECIAL(n) || mod_mask != 0)
      {
      ***************
      *** 9883,9888 ****
      --- 9889,9941 ----
      temp[i++] = NUL;
      rettv->v_type = VAR_STRING;
      rettv->vval.v_string = vim_strsave(temp);
      +
      + #ifdef FEAT_MOUSE
      + if (n == K_LEFTMOUSE
      + || n == K_LEFTMOUSE_NM
      + || n == K_LEFTDRAG
      + || n == K_LEFTRELEASE
      + || n == K_LEFTRELEASE_NM
      + || n == K_MIDDLEMOUSE
      + || n == K_MIDDLEDRAG
      + || n == K_MIDDLERELEASE
      + || n == K_RIGHTMOUSE
      + || n == K_RIGHTDRAG
      + || n == K_RIGHTRELEASE
      + || n == K_X1MOUSE
      + || n == K_X1DRAG
      + || n == K_X1RELEASE
      + || n == K_X2MOUSE
      + || n == K_X2DRAG
      + || n == K_X2RELEASE
      + || n == K_MOUSEDOWN
      + || n == K_MOUSEUP)
      + {
      + int row = mouse_row;
      + int col = mouse_col;
      + win_T *win;
      + linenr_T lnum;
      + # ifdef FEAT_WINDOWS
      + win_T *wp;
      + # endif
      + int n = 1;
      +
      + if (row >= 0 && col >= 0)
      + {
      + /* Find the window at the mouse coordinates and compute the
      + * text position. */
      + win = mouse_find_win(&row, &col);
      + (void)mouse_comp_pos(win, &row, &col, &lnum);
      + # ifdef FEAT_WINDOWS
      + for (wp = firstwin; wp != win; wp = wp->w_next)
      + ++n;
      + # endif
      + vimvars[VV_MOUSE_WIN].vv_nr = n;
      + vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
      + vimvars[VV_MOUSE_COL].vv_nr = col + 1;
      + }
      + }
      + #endif
      }
      }

      *** ../vim-7.0.154/src/vim.h Tue Aug 29 18:16:37 2006
      --- src/vim.h Wed Nov 1 13:11:16 2006
      ***************
      *** 1669,1675 ****
      #define VV_SWAPCHOICE 46
      #define VV_SWAPCOMMAND 47
      #define VV_CHAR 48
      ! #define VV_LEN 49 /* number of v: vars */

      #ifdef FEAT_CLIPBOARD

      --- 1669,1678 ----
      #define VV_SWAPCHOICE 46
      #define VV_SWAPCOMMAND 47
      #define VV_CHAR 48
      ! #define VV_MOUSE_WIN 49
      ! #define VV_MOUSE_LNUM 50
      ! #define VV_MOUSE_COL 51
      ! #define VV_LEN 52 /* number of v: vars */

      #ifdef FEAT_CLIPBOARD

      *** ../vim-7.0.154/src/version.c Wed Nov 1 12:43:07 2006
      --- src/version.c Wed Nov 1 15:22:33 2006
      ***************
      *** 668,669 ****
      --- 668,671 ----
      { /* Add new patch number below this line */
      + /**/
      + 155,
      /**/

      --
      hundred-and-one symptoms of being an internet addict:
      138. You develop a liking for cold coffee.

      /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
      /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
      \\\ download, build and distribute -- http://www.A-A-P.org ///
      \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
    Your message has been successfully submitted and would be delivered to recipients shortly.