* bug#17768: 24.3; problem with two ruler-mode windows @ 2014-06-12 23:57 Andrea Rossetti 2014-06-13 7:29 ` martin rudalics 2014-06-16 8:45 ` bug#17768: Andrea Rossetti 0 siblings, 2 replies; 13+ messages in thread From: Andrea Rossetti @ 2014-06-12 23:57 UTC (permalink / raw) To: 17768 Hello, I think I found a bug in ruler-mode; a recipe to reproduce it follows here below; may I please ask if it's reproducible for you as well. Start emacs -Q and type: M-x ruler-mode RET C-x 3 you will see two side-by-side windows that show the same scratch buffer. That's normal and expected. Now use mouse to adjust the *left* margin of the *rightside* window (Shift + mouse-1 on the ruler): it does not work, i.e. clicking has no visible effect. Other facts I found: - problem doesn't happen in the leftside window, only in the rightside one - problem doesn't happen if the frame is splitted vertically (C-x 2) instead of horizontally - problem seems to happen in the rightside window for *all* the ruler mouse functions (adjust right margin, drag goal column etc.). Proposed diagnosys: there could be some error in the ruler's horizontal offset management (frame-based column vs. window-relative column). The left margin mouse adjustment seems to work properly if I change the elisp code of file ruler-mode.el, function ruler-mode-mouse-set-left-margin: from (setq col (- (car (posn-col-row start)) (car (window-edges)) (scroll-bar-columns 'left)) ... into (setq col (- (car (posn-col-row start)) (scroll-bar-columns 'left)) ... That's not a solution, just an attempt to isolate the problematic code point. Thanks for your attention, kindest regards. Andrea In GNU Emacs 24.3.1 (i386-mingw-nt6.1.7600) of 2013-03-17 on MARVIN Windowing system distributor `Microsoft Corp.', version 6.1.7600 Configured using: `configure --with-gcc (4.7) --cflags -ID:/devel/emacs/libs/libXpm-3.5.8/include -ID:/devel/emacs/libs/libXpm-3.5.8/src -ID:/devel/emacs/libs/libpng-dev_1.4.3-1/include -ID:/devel/emacs/libs/zlib-dev_1.2.5-2/include -ID:/devel/emacs/libs/giflib-4.1.4-1/include -ID:/devel/emacs/libs/jpeg-6b-4/include -ID:/devel/emacs/libs/tiff-3.8.2-1/include -ID:/devel/emacs/libs/gnutls-3.0.9/include -ID:/devel/emacs/libs/libiconv-1.13.1-1-dev/include -ID:/devel/emacs/libs/libxml2-2.7.8/include/libxml2' Important settings: value of $LANG: ITA locale-coding-system: cp1252 default enable-multibyte-characters: t Major mode: Text Minor modes in effect: show-paren-mode: t server-mode: t recentf-mode: t cua-mode: t tooltip-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Recent input: M-x e m a c <tab> b u <tab> <backspace> <backspace> r e <tab> <backspace> <S-kp-home> r e p o <tab> r t - e m a <tab> <return> Recent messages: Loading cua-base...done Loading gnus...done Loading recentf...done Loading server (compiled; note, source file is newer)...done Loading paren...done Loading c:/Users/andrea/AppData/Roaming/.recentf...done For information about GNU Emacs and the GNU system, type C-h C-a. Making completion list... Load-path shadows: c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-w3m hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-w3m c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-version hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-version c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-timer hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-timer c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-table hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-table c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-src hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-src c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-rmail hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-rmail c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-protocol hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-protocol c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-plot hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-plot c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-pcomplete hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-pcomplete c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-mouse hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-mouse c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-mobile hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-mobile c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-mhe hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-mhe c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-macs hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-macs c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-loaddefs hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-loaddefs c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-list hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-list c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-irc hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-irc c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-install hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-install c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-inlinetask hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-inlinetask c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-info hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-info c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-indent hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-indent c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-id hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-id c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-habit hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-habit c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-gnus hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-gnus c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-footnote hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-footnote c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-feed hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-feed c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-faces hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-faces c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-eshell hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-eshell c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-entities hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-entities c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-element hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-element ~/.emacs.d/contrib/org-drill hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-drill c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-docview hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-docview c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-datetree hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-datetree c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-ctags hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-ctags c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-crypt hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-crypt c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-compat hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-compat c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-colview hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-colview c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-clock hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-clock c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-capture hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-capture c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-bibtex hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-bibtex c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-bbdb hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-bbdb c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-attach hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-attach c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-archive hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-archive c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/org-agenda hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/org-agenda c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-tangle hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-tangle c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-table hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-table c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-sqlite hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-sqlite c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-sql hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-sql c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-shen hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-shen c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-sh hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-sh c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-screen hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-screen c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-scheme hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-scheme c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-scala hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-scala c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-sass hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-sass c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-ruby hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-ruby c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-ref hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-ref c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-R hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-R c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-python hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-python c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-plantuml hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-plantuml c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-picolisp hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-picolisp c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-perl hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-perl c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-org hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-org c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-octave hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-octave c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-ocaml hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-ocaml c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-mscgen hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-mscgen c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-maxima hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-maxima c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-matlab hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-matlab c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-lob hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-lob c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-lisp hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-lisp c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-lilypond hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-lilypond c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-ledger hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-ledger c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-latex hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-latex c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-keys hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-keys c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-js hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-js c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-java hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-java c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-io hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-io c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-haskell hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-haskell c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-gnuplot hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-gnuplot c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-fortran hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-fortran c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-exp hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-exp c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-eval hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-eval c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-emacs-lisp hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-emacs-lisp c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-dot hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-dot c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-ditaa hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-ditaa c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-css hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-css c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-comint hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-comint c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-clojure hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-clojure c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-calc hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-calc c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-C hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-C c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-awk hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-awk c:/Users/andrea/AppData/Roaming/.emacs.d/elpa/org-20140602/ob-asymptote hides c:/Users/andrea/Documents/Programmi/emacs/lisp/org/ob-asymptote Features: (shadow sort mail-extr emacsbug message format-spec rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums help-mode bbdb-autoloads csv-mode-autoloads gnuplot-autoloads google-translate-autoloads graphviz-dot-mode-autoloads jabber-autoloads org-autoloads info paredit-autoloads pretty-lambdada-autoloads web-server-autoloads finder-inf package edmacro kmacro paren server recentf tree-widget easymenu gnus gnus-ems nnheader gnus-util mail-utils mm-util mail-prsvr wid-edit cua-base cus-start cus-load time-date tooltip ediff-hook vc-hooks lisp-float-type mwheel dos-w32 ls-lisp w32-common-fns disp-table w32-win w32-vars tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process w32 multi-tty emacs) ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-12 23:57 bug#17768: 24.3; problem with two ruler-mode windows Andrea Rossetti @ 2014-06-13 7:29 ` martin rudalics 2014-06-14 16:45 ` Eli Zaretskii 2014-06-14 17:22 ` Andrea Rossetti 2014-06-16 8:45 ` bug#17768: Andrea Rossetti 1 sibling, 2 replies; 13+ messages in thread From: martin rudalics @ 2014-06-13 7:29 UTC (permalink / raw) To: Andrea Rossetti, 17768 > The left margin mouse adjustment seems to work properly if > I change the elisp code of file ruler-mode.el, function > ruler-mode-mouse-set-left-margin: > > from > > (setq col (- (car (posn-col-row start)) (car (window-edges)) > (scroll-bar-columns 'left)) The value returned by `posn-col-row' is relative to the edges of the window where the event occurred. It is called from `posn-x-y' whose info entry states that "These coordinates are relative to the window given by `posn-window'". However any such information is left out from doc-string and info on `posn-col-row'. This might have confused the author of ruler-mode and certainly confuses me now. Could someone look into the doc-string and info entry of `posn-col-row' and maybe improve them to avoid such confusion. For example: This function returns a cons cell `(COL . ROW)', containing the estimated column and row corresponding to buffer position ... what does "buffer position" mean here ... POSITION. The return value is given in units of the frame's default character width and height, as computed from the X and Y values corresponding to POSITION. (So, if the actual characters have non-default sizes, the actual row and column may differ from these computed values.) Note that ROW is counted from the top of the text area. If the window ... which window is meant here ... possesses a header line (*note Header Lines::), it is _not_ counted as the first line. ... this sounds obvious but what ´does "not counting" stand for? But maybe there's nothing confusing here and it's only me to misinterpret things. > into > > (setq col (- (car (posn-col-row start)) > (scroll-bar-columns 'left)) > ... This sounds like the correct solution to me. Could you try testing it with three and more side-by-side windows and all sorts of clicks ruler mode can handle and possibly post a corresponding patch? Many thanks for the report, martin ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-13 7:29 ` martin rudalics @ 2014-06-14 16:45 ` Eli Zaretskii 2014-06-15 15:09 ` martin rudalics 2014-06-14 17:22 ` Andrea Rossetti 1 sibling, 1 reply; 13+ messages in thread From: Eli Zaretskii @ 2014-06-14 16:45 UTC (permalink / raw) To: martin rudalics; +Cc: andrea.rossetti, 17768 > Date: Fri, 13 Jun 2014 09:29:23 +0200 > From: martin rudalics <rudalics@gmx.at> > > > The left margin mouse adjustment seems to work properly if > > I change the elisp code of file ruler-mode.el, function > > ruler-mode-mouse-set-left-margin: > > > > from > > > > (setq col (- (car (posn-col-row start)) (car (window-edges)) > > (scroll-bar-columns 'left)) > > The value returned by `posn-col-row' is relative to the edges of the > window where the event occurred. It is called from `posn-x-y' whose > info entry states that "These coordinates are relative to the window > given by `posn-window'". However any such information is left out from > doc-string and info on `posn-col-row'. This might have confused the > author of ruler-mode and certainly confuses me now. How else can column and row be measured, except from the window edge? > Could someone look into the doc-string and info entry of `posn-col-row' > and maybe improve them to avoid such confusion. I don't understand the confusion, but I went out and made it more clear anyway (r117242 on the emacs-24 branch). > For example: > > This function returns a cons cell `(COL . ROW)', containing the > estimated column and row corresponding to buffer position > > ... what does "buffer position" mean here ... The meaning of the word "position" is overloaded here: the POSITION argument of the function includes a reference to a buffer position. A better way to say that is "... corresponding to the buffer position given by POSITION." > Note that ROW is counted from the top of the text area. If the > window > > ... which window is meant here ... The window given by POSITION, of course. Perhaps you misremember that the POSITION argument is a complex data structure, not just a number. It includes a reference to the window where the event took place. > possesses a header line (*note Header Lines::), it is _not_ > counted as the first line. > > ... this sounds obvious but what ´does "not counting" stand for? It stands for "not counting". IOW, the header line is not included in the row count, and the first text line is still row number zero, not number 1. > > into > > > > (setq col (- (car (posn-col-row start)) > > (scroll-bar-columns 'left)) > > ... > > This sounds like the correct solution to me. In general, one should stay away of columns when dealing with coordinates, since columns are measured in logical order, i.e. in a R2L line they are measured from the right edge of the window. But since in this case columns are just x coordinates measured in other units (and therefore calling them "columns" is a misnomer), I think it's OK in this case. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-14 16:45 ` Eli Zaretskii @ 2014-06-15 15:09 ` martin rudalics 2014-06-15 16:17 ` Eli Zaretskii 0 siblings, 1 reply; 13+ messages in thread From: martin rudalics @ 2014-06-15 15:09 UTC (permalink / raw) To: Eli Zaretskii; +Cc: andrea.rossetti, 17768 > How else can column and row be measured, except from the window edge? From the left upper edge of the frame, just as the x-y-coordinates. At least that's apparently what the author of ruler mode thought. And if you compare it with the description of `posn-actual-col-row', such interpretation sounds quite reasonable to me. What is the difference between `posn-col-row' and `posn-actual-col-row' for a position within the text area of a window? If there's none, then why does the latter explicitly talk about windows and the former not? If there's one, what is it? >> Could someone look into the doc-string and info entry of `posn-col-row' >> and maybe improve them to avoid such confusion. > > I don't understand the confusion, but I went out and made it more > clear anyway (r117242 on the emacs-24 branch). Thank you. But IIUC the reference to "window edge" is still missing from the manual entry. Someone who reads "given in units of the frame's default character width and default line height" might still conclude that we count from the frame edge. The only implict reference to "window" comes from the term "text area" and I'm not sure how familiar people are with that and whether they connect it to windows at all. >> For example: >> >> This function returns a cons cell `(COL . ROW)', containing the >> estimated column and row corresponding to buffer position >> >> ... what does "buffer position" mean here ... > > The meaning of the word "position" is overloaded here: the POSITION > argument of the function includes a reference to a buffer position. A > better way to say that is "... corresponding to the buffer position > given by POSITION." > >> Note that ROW is counted from the top of the text area. If the >> window >> >> ... which window is meant here ... > > The window given by POSITION, of course. Perhaps you misremember that > the POSITION argument is a complex data structure, not just a number. > It includes a reference to the window where the event took place. I know. But the phrase "corresponding to buffer position POSITION" was surely misleading. And do we even care about "buffer positions" here? I doubt that. All we do is returning coordinates in terms of frame lines and columns (as opposed to coordinates in terms of pixels as returned by `posn-x-y'). >> possesses a header line (*note Header Lines::), it is _not_ >> counted as the first line. >> >> ... this sounds obvious but what ´does "not counting" stand for? > > It stands for "not counting". IOW, the header line is not included in > the row count, and the first text line is still row number zero, not > number 1. Earlier we say "Row 0 is taken to be the header line if the window has one, or the topmost row of the text area otherwise." which I would interpret as "The header line, if present, is counted as line 0. If no header line is present the first text line is counted as line 0.", that is, the header line _is_ counted. I'm too silly to grok that. >> > into >> > >> > (setq col (- (car (posn-col-row start)) >> > (scroll-bar-columns 'left)) >> > ... >> >> This sounds like the correct solution to me. > > In general, one should stay away of columns when dealing with > coordinates, since columns are measured in logical order, i.e. in a > R2L line they are measured from the right edge of the window. But > since in this case columns are just x coordinates measured in other > units (and therefore calling them "columns" is a misnomer), I think > it's OK in this case. This means that we shouldn't provide `posn-col-row' in the first place which I'd consider the best solution. In any case, ruler mode deals with columns, so it has to either access them somehow or provide an abstraction based on pixel values. martin ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-15 15:09 ` martin rudalics @ 2014-06-15 16:17 ` Eli Zaretskii 2014-06-16 21:05 ` Stefan Monnier 0 siblings, 1 reply; 13+ messages in thread From: Eli Zaretskii @ 2014-06-15 16:17 UTC (permalink / raw) To: martin rudalics; +Cc: andrea.rossetti, 17768 > Date: Sun, 15 Jun 2014 17:09:26 +0200 > From: martin rudalics <rudalics@gmx.at> > CC: andrea.rossetti@gmail.com, 17768@debbugs.gnu.org > > > How else can column and row be measured, except from the window edge? > > From the left upper edge of the frame, just as the x-y-coordinates. A column is fundamentally window-related. It's not a coordinate, it's a place in the text, and frames don't display text. > At least that's apparently what the author of ruler mode thought. I'd prefer not to second-guess someone's misconceptions. > > I don't understand the confusion, but I went out and made it more > > clear anyway (r117242 on the emacs-24 branch). > > Thank you. But IIUC the reference to "window edge" is still missing > from the manual entry. The manual text explicitly talks about a column and row of text in a window, so I think it's clear enough. > > In general, one should stay away of columns when dealing with > > coordinates, since columns are measured in logical order, i.e. in a > > R2L line they are measured from the right edge of the window. But > > since in this case columns are just x coordinates measured in other > > units (and therefore calling them "columns" is a misnomer), I think > > it's OK in this case. > > This means that we shouldn't provide `posn-col-row' in the first place > which I'd consider the best solution. I see no reason to delete well established APIs, just because Emacs overgrew the time when they were named. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-15 16:17 ` Eli Zaretskii @ 2014-06-16 21:05 ` Stefan Monnier 0 siblings, 0 replies; 13+ messages in thread From: Stefan Monnier @ 2014-06-16 21:05 UTC (permalink / raw) To: Eli Zaretskii; +Cc: andrea.rossetti, 17768 >> This means that we shouldn't provide `posn-col-row' in the first place >> which I'd consider the best solution. > I see no reason to delete well established APIs, just because Emacs > overgrew the time when they were named. We could consider obsoleting the function if we thing that its use is either less convenient than alternatives, or tends to lead to bugs which don't affect the alternative. I don't know enough posn-col-row's uses to judge. Stefan ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-13 7:29 ` martin rudalics 2014-06-14 16:45 ` Eli Zaretskii @ 2014-06-14 17:22 ` Andrea Rossetti 2014-06-15 15:09 ` martin rudalics 2014-06-16 7:10 ` martin rudalics 1 sibling, 2 replies; 13+ messages in thread From: Andrea Rossetti @ 2014-06-14 17:22 UTC (permalink / raw) To: martin rudalics; +Cc: 17768 [-- Attachment #1: Type: text/plain, Size: 479 bytes --] martin rudalics <rudalics@gmx.at> writes: > Could you try testing it > with three and more side-by-side windows and all sorts of clicks ruler > mode can handle and possibly post a corresponding patch? > Hi, here's my tentative patches. I checked out from http://git.savannah.gnu.org/cgit/emacs.git, last commit was 6449128a5ab4a47a281de6117b86661dcc05b599, and made two patches. First patch applies the changes that we supposed could solve the problem of the wrong offset. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-lisp-ruler-mode.el-correct-offset-of-set-margin-and-.patch --] [-- Type: text/x-patch, Size: 1723 bytes --] From 88a4f9fb9d2eace74a737205a26b26f35cb21cf6 Mon Sep 17 00:00:00 2001 From: Andrea Rossetti <andrear1979@hotmail.com> Date: Sat, 14 Jun 2014 17:26:49 +0200 Subject: [PATCH 1/2] lisp/ruler-mode.el: correct offset of "set margin" and "drag column" mouse operations --- lisp/ruler-mode.el | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el index 9e32a2f..238754e 100644 --- a/lisp/ruler-mode.el +++ b/lisp/ruler-mode.el @@ -306,7 +306,6 @@ or remove a tab stop. \\[ruler-mode-toggle-show-tab-stops] or "Return a column number relative to the selected window. N is a column number relative to selected frame." (- n - (car (window-edges)) (or (car (window-margins)) 0) (fringe-columns 'left) (scroll-bar-columns 'left))) @@ -321,7 +320,7 @@ START-EVENT is the mouse click event." (when (eq start end) ;; mouse click (save-selected-window (select-window (posn-window start)) - (setq col (- (car (posn-col-row start)) (car (window-edges)) + (setq col (- (car (posn-col-row start)) (scroll-bar-columns 'left)) w (- (ruler-mode-full-window-width) (scroll-bar-columns 'left) @@ -343,7 +342,7 @@ START-EVENT is the mouse click event." (when (eq start end) ;; mouse click (save-selected-window (select-window (posn-window start)) - (setq col (- (car (posn-col-row start)) (car (window-edges)) + (setq col (- (car (posn-col-row start)) (scroll-bar-columns 'left)) w (- (ruler-mode-full-window-width) (scroll-bar-columns 'left) -- 1.8.1.msysgit.1 [-- Attachment #3: Type: text/plain, Size: 1124 bytes --] I tested patch1 somewhat randomly, opening 4/5 windows horizontally, 1/2 windows vertically, and did also some attempt splitting windows in two frames. Played also a bit on the text-only Emacs (using MSYS shell). Everything worked fine with patch1, except for an unexpected small and non-blocking issue (let's call it "diagonal-drag" issue) that can be reproduced as follows: - C-x 3 M-x ruler-mode (you should see two windows with ruler) - click S-<mouse-1> on the ruler of the rightmost window, this will set a left margin, choose a width of around 10~20 chars - drag "diagonally" a column, for example moving down-left the fill-column, until the cursor goes a few pixels below the ruler area - you will see that the dragged column will "jump" innaturally to the left of around 10~20 chars Tentative diagnosys: function `ruler-mode-window-col' returns a different column value depending if you are inside or outside the ruler area. The actual problem is probably inherited from `posn-col-row', but I could not clarify any better. I wrote patch 2, that worked for me to solve the "diagonal-drag" issue. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0002-lisp-ruler-mode.el-fix-offset-for-mouse-dragging-bey.patch --] [-- Type: text/x-patch, Size: 3069 bytes --] From e521c93c296377d1733e8801832f3066e4cc4ede Mon Sep 17 00:00:00 2001 From: Andrea Rossetti <andrear1979@hotmail.com> Date: Sat, 14 Jun 2014 17:32:03 +0200 Subject: [PATCH 2/2] lisp/ruler-mode.el: fix offset for mouse dragging beyond header line --- lisp/ruler-mode.el | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el index 238754e..097a13e 100644 --- a/lisp/ruler-mode.el +++ b/lisp/ruler-mode.el @@ -302,12 +302,17 @@ or remove a tab stop. \\[ruler-mode-toggle-show-tab-stops] or (let ((edges (window-edges))) (- (nth 2 edges) (nth 0 edges)))) -(defsubst ruler-mode-window-col (n) +(defsubst ruler-mode-window-col (start-or-end-event) "Return a column number relative to the selected window. -N is a column number relative to selected frame." - (- n - (or (car (window-margins)) 0) - (fringe-columns 'left) +START-OR-END-EVENT is the start point or end point +of a mouse click or mouse drag event. + +See also: `event-start', `event-end', `posn-col-row', `posn-area'. +" + (- (car (posn-col-row start-or-end-event)) + (if (eq (posn-area start) 'header-line) + (+ (or (car (window-margins)) 0) (fringe-columns 'left)) + 0) (scroll-bar-columns 'left))) \f (defun ruler-mode-mouse-set-left-margin (start-event) @@ -371,7 +376,7 @@ dragging. See also the variable `ruler-mode-dragged-symbol'." col newc oldc) (save-selected-window (select-window (posn-window start)) - (setq col (ruler-mode-window-col (car (posn-col-row start))) + (setq col (ruler-mode-window-col start) newc (+ col (window-hscroll))) (and (>= col 0) (< col (window-width)) @@ -454,7 +459,7 @@ Called on each mouse motion event START-EVENT." col newc) (save-selected-window (select-window (posn-window start)) - (setq col (ruler-mode-window-col (car (posn-col-row end))) + (setq col (ruler-mode-window-col end) newc (+ col (window-hscroll))) (when (and (>= col 0) (< col (window-width))) (set ruler-mode-dragged-symbol newc))))) @@ -470,7 +475,7 @@ START-EVENT is the mouse click event." (when (eq start end) ;; mouse click (save-selected-window (select-window (posn-window start)) - (setq col (ruler-mode-window-col (car (posn-col-row start))) + (setq col (ruler-mode-window-col start) ts (+ col (window-hscroll))) (and (>= col 0) (< col (window-width)) (not (member ts tab-stop-list)) @@ -490,7 +495,7 @@ START-EVENT is the mouse click event." (when (eq start end) ;; mouse click (save-selected-window (select-window (posn-window start)) - (setq col (ruler-mode-window-col (car (posn-col-row start))) + (setq col (ruler-mode-window-col start) ts (+ col (window-hscroll))) (and (>= col 0) (< col (window-width)) (member ts tab-stop-list) -- 1.8.1.msysgit.1 [-- Attachment #5: Type: text/plain, Size: 802 bytes --] And finally: I noticed another independent bug ("text-scale issue"), i.e. most ruler's mouse operation have wrong offset if you adjust text scale (C-x C-+). If anyone reading is interested to help, here's a proposed action plan: - may you please try to play with patch1, and give advice if it could be acceptable for a commit - I guess that patch2 is unacceptable (BTW it changes the definition of ruler-mode-window-col, I assumed that ruler-mode.el is the only program calling it) but it's the best I could squeeze out of my head... any help or constructive criticism is welcome :) - be aware of the "text-scale" issue but don't test for it; it seems a totally independent issue so I'd rather send another bug report for it Thanks for your attention, kindest regards. Andrea ^ permalink raw reply related [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-14 17:22 ` Andrea Rossetti @ 2014-06-15 15:09 ` martin rudalics 2014-06-15 18:06 ` Andrea Rossetti 2014-06-16 7:10 ` martin rudalics 1 sibling, 1 reply; 13+ messages in thread From: martin rudalics @ 2014-06-15 15:09 UTC (permalink / raw) To: Andrea Rossetti; +Cc: 17768 > First patch applies the changes that we supposed could > solve the problem of the wrong offset. Thanks. I'll apply it as soon as I can build again here. > I tested patch1 somewhat randomly, opening 4/5 windows horizontally, > 1/2 windows vertically, and did also some attempt splitting windows > in two frames. Played also a bit on the text-only Emacs (using MSYS shell). > > Everything worked fine with patch1, except for an unexpected small > and non-blocking issue (let's call it "diagonal-drag" issue) that > can be reproduced as follows: > > - C-x 3 M-x ruler-mode (you should see two windows with ruler) > - click S-<mouse-1> on the ruler of the rightmost window, this will set > a left margin, choose a width of around 10~20 chars > - drag "diagonally" a column, for example moving down-left the > fill-column, until the cursor goes a few pixels below the ruler area How do I drag a column? What is "moving down-left"? Can you explain in terms of keystrokes or mouse clicks? > - you will see that the dragged column will "jump" innaturally to the > left of around 10~20 chars > > Tentative diagnosys: function `ruler-mode-window-col' returns a > different column value depending if you are inside or outside the > ruler area. The actual problem is probably inherited from `posn-col-row', > but I could not clarify any better. It seems so (from reading the doc-string of `ruler-mode-window-col'). But I would like to reproduce the problem first. Please advice. > And finally: I noticed another independent bug ("text-scale issue"), > i.e. most ruler's mouse operation have wrong offset if you adjust > text scale (C-x C-+). This should be definitively corrected (as well as other text scale related issues happening, for example, when splitting windows). > If anyone reading is interested to help, here's a proposed action plan: > > - may you please try to play with patch1, and give advice if it could be > acceptable for a commit I only need advice from Stefan whether to install it in the branch or on trunk. > - I guess that patch2 is unacceptable (BTW it changes the definition of > ruler-mode-window-col, I assumed that ruler-mode.el is the only > program calling it) but it's the best I could squeeze out of my head... > any help or constructive criticism is welcome :) The premise of `ruler-mode-window-col' seems wrong so we have to do something about it. > - be aware of the "text-scale" issue but don't test for it; it seems > a totally independent issue so I'd rather send another bug report for it Please do that. Thanks, martin ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-15 15:09 ` martin rudalics @ 2014-06-15 18:06 ` Andrea Rossetti 2014-06-15 23:22 ` Andrea Rossetti 0 siblings, 1 reply; 13+ messages in thread From: Andrea Rossetti @ 2014-06-15 18:06 UTC (permalink / raw) To: martin rudalics; +Cc: 17768 martin rudalics <rudalics@gmx.at> writes: >> - drag "diagonally" a column, for example moving down-left the >> fill-column, until the cursor goes a few pixels below the ruler area > > How do I drag a column? What is "moving down-left"? Can you explain in > terms of keystrokes or mouse clicks? > Sincere apologies for having overloaded a bit too much this bug report; I'm now getting a clearer picture: 1) patch1 is intended to solve the problem described at top of this bug report 2) while testing patch1, I noticed the "diagonal drag" issue; I thought it was due to patch1 but now I realize it's an independent and pre-existing problem 3) while testing patch1+patch2, I noticed the "text scale" issue but did not try to solve it I think it's cleaner if you only consider patch1 and forget the rest for now. I will open a ticket for 2) with a better explanation and an independent patch, and a ticket for 3). Kindest regards, Andrea ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-15 18:06 ` Andrea Rossetti @ 2014-06-15 23:22 ` Andrea Rossetti 2014-06-16 7:10 ` martin rudalics 0 siblings, 1 reply; 13+ messages in thread From: Andrea Rossetti @ 2014-06-15 23:22 UTC (permalink / raw) To: martin rudalics; +Cc: 17768 Andrea Rossetti <andrea.rossetti@gmail.com> writes: > I will open a ticket for 2) with a better explanation and > an independent patch... I submitted bug report #17788: "24.3; ruler-mode: column indicators 'hop' left if you drag them diagonally", the explanation should be somewhat less messy now :) Cheers, Andrea ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-15 23:22 ` Andrea Rossetti @ 2014-06-16 7:10 ` martin rudalics 0 siblings, 0 replies; 13+ messages in thread From: martin rudalics @ 2014-06-16 7:10 UTC (permalink / raw) To: Andrea Rossetti; +Cc: 17768 >> I will open a ticket for 2) with a better explanation and >> an independent patch... > > I submitted bug report #17788: "24.3; ruler-mode: column > indicators 'hop' left if you drag them diagonally", the > explanation should be somewhat less messy now :) Cheers, Thanks. I think you can close bug#17768 now. martin ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 24.3; problem with two ruler-mode windows 2014-06-14 17:22 ` Andrea Rossetti 2014-06-15 15:09 ` martin rudalics @ 2014-06-16 7:10 ` martin rudalics 1 sibling, 0 replies; 13+ messages in thread From: martin rudalics @ 2014-06-16 7:10 UTC (permalink / raw) To: Andrea Rossetti; +Cc: 17768 > - may you please try to play with patch1, and give advice if it could be > acceptable for a commit This patch has been now applied to trunk. Thanks, martin ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#17768: 2014-06-12 23:57 bug#17768: 24.3; problem with two ruler-mode windows Andrea Rossetti 2014-06-13 7:29 ` martin rudalics @ 2014-06-16 8:45 ` Andrea Rossetti 1 sibling, 0 replies; 13+ messages in thread From: Andrea Rossetti @ 2014-06-16 8:45 UTC (permalink / raw) To: 17768-done ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-06-16 21:05 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-06-12 23:57 bug#17768: 24.3; problem with two ruler-mode windows Andrea Rossetti 2014-06-13 7:29 ` martin rudalics 2014-06-14 16:45 ` Eli Zaretskii 2014-06-15 15:09 ` martin rudalics 2014-06-15 16:17 ` Eli Zaretskii 2014-06-16 21:05 ` Stefan Monnier 2014-06-14 17:22 ` Andrea Rossetti 2014-06-15 15:09 ` martin rudalics 2014-06-15 18:06 ` Andrea Rossetti 2014-06-15 23:22 ` Andrea Rossetti 2014-06-16 7:10 ` martin rudalics 2014-06-16 7:10 ` martin rudalics 2014-06-16 8:45 ` bug#17768: Andrea Rossetti
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).