unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: [elpa] externals/hyperbole c501027 2/2: Fix set-buffer byte-compiler warnings; remove outdated references
       [not found] ` <20210510035709.E742920DFD@vcs0.savannah.gnu.org>
@ 2021-05-10 13:59   ` Stefan Monnier
  2021-05-11  0:18     ` Robert Weiner
  2021-05-11 15:15     ` Jean Louis
  0 siblings, 2 replies; 4+ messages in thread
From: Stefan Monnier @ 2021-05-10 13:59 UTC (permalink / raw)
  To: emacs-devel; +Cc: Bob Weiner

>  	(save-excursion
> -	  (set-buffer (if (bufferp loc) loc (find-file-noselect loc)))
> -	  (when (ibut:to (ibut:key but-sym))
> -	    (let (buffer-read-only)
> -	      (if (< (point) start)
> -		  ;; Find beginning of button named label delimiter and delete
> -		  ;; from there.
> -		  (progn (goto-char (- (point) (length ibut:label-start)))
> -			 (delete-region (point) end))
> -		;; No label, just delete delimited ibutton text.
> -		(delete-region start end))
> -	      (when (looking-at "[ \t]*\r?\n")
> -		(delete-region (point) (match-end 0)))
> -	      (run-hooks 'ibut-delete-hook))))
> +	  (with-current-buffer (if (bufferp loc) loc (find-file-noselect loc))
> +	    (when (ibut:to (ibut:key but-sym))
> +	      (let (buffer-read-only)
> +		(if (< (point) start)
> +		    ;; Find beginning of button named label delimiter and delete
> +		    ;; from there.
> +		    (progn (goto-char (- (point) (length ibut:label-start)))
> +			   (delete-region (point) end))
> +		  ;; No label, just delete delimited ibutton text.
> +		  (delete-region start end))
> +		(when (looking-at "[ \t]*\r?\n")
> +		  (delete-region (point) (match-end 0)))
> +		(run-hooks 'ibut-delete-hook)))))
>  	but-sym))))
>  
>  (defun    ibut:get (&optional lbl-key buffer key-src)
> diff --git a/hui-window.el b/hui-window.el
> index 654c035..796770e 100644
> --- a/hui-window.el
> +++ b/hui-window.el
> @@ -311,12 +311,12 @@ part of InfoDock and not a part of Hyperbole)."
>    "Return t iff there is a non-empty active region in buffer of the last Smart Mouse Key release."
>    (when (setq hkey-value (if assist-flag assist-key-depress-prev-point action-key-depress-prev-point))
>      (save-excursion
> -      (set-buffer (marker-buffer hkey-value))
> -      ;; Store and goto any prior value of point from the region
> -      ;; prior to the Smart Key depress, so we can return to it later.
> -      (and (goto-char hkey-value)
> -	   (hmouse-save-region)
> -	   t))))
> +      (with-current-buffer (marker-buffer hkey-value)
> +	;; Store and goto any prior value of point from the region
> +	;; prior to the Smart Key depress, so we can return to it later.
> +	(and (goto-char hkey-value)
> +	     (hmouse-save-region)
> +	     t)))))

These two don't make much sense: `save-excursion` only saves the
position of point in the current buffer, so

    (save-excursion (with-current-buffer FOO ...))

is useless in one of two ways:
- FOO is already the current buffer, so `with-current-buffer`
  (previously `set-buffer`) does nothing.
- FOO is a different buffer, so the buffer-position saved&restored by
  `save-excursion` is in a buffer that's not affected by `...`.

If you want to combine the two, then you should use

    (with-current-buffer FOO (save-excursion ...))

Tho if we presume that the `set-buffer` in the previous code did do
something useful (i.e. selected a different buffer), then there's a good
chance that the `save-excursion` has never done its intended job and can
be removed.


        Stefan




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [elpa] externals/hyperbole c501027 2/2: Fix set-buffer byte-compiler warnings; remove outdated references
  2021-05-10 13:59   ` [elpa] externals/hyperbole c501027 2/2: Fix set-buffer byte-compiler warnings; remove outdated references Stefan Monnier
@ 2021-05-11  0:18     ` Robert Weiner
  2021-05-11  1:25       ` Stefan Monnier
  2021-05-11 15:15     ` Jean Louis
  1 sibling, 1 reply; 4+ messages in thread
From: Robert Weiner @ 2021-05-11  0:18 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 3888 bytes --]

Eli and I exchanged messages about this on the emacs-devel list and settled
on the outer save-excursion as you first wrote below since it is indeed the
original buffer whose point we want to save which may be manipulated by
some subroutine deep within the with-current-buffer that changes the buffer
back to the original.  Thanks as always for the pointers though.  -- Bob

On Mon, May 10, 2021 at 10:00 AM Stefan Monnier <monnier@iro.umontreal.ca>
wrote:

> >       (save-excursion
> > -       (set-buffer (if (bufferp loc) loc (find-file-noselect loc)))
> > -       (when (ibut:to (ibut:key but-sym))
> > -         (let (buffer-read-only)
> > -           (if (< (point) start)
> > -               ;; Find beginning of button named label delimiter and
> delete
> > -               ;; from there.
> > -               (progn (goto-char (- (point) (length ibut:label-start)))
> > -                      (delete-region (point) end))
> > -             ;; No label, just delete delimited ibutton text.
> > -             (delete-region start end))
> > -           (when (looking-at "[ \t]*\r?\n")
> > -             (delete-region (point) (match-end 0)))
> > -           (run-hooks 'ibut-delete-hook))))
> > +       (with-current-buffer (if (bufferp loc) loc (find-file-noselect
> loc))
> > +         (when (ibut:to (ibut:key but-sym))
> > +           (let (buffer-read-only)
> > +             (if (< (point) start)
> > +                 ;; Find beginning of button named label delimiter and
> delete
> > +                 ;; from there.
> > +                 (progn (goto-char (- (point) (length
> ibut:label-start)))
> > +                        (delete-region (point) end))
> > +               ;; No label, just delete delimited ibutton text.
> > +               (delete-region start end))
> > +             (when (looking-at "[ \t]*\r?\n")
> > +               (delete-region (point) (match-end 0)))
> > +             (run-hooks 'ibut-delete-hook)))))
> >       but-sym))))
> >
> >  (defun    ibut:get (&optional lbl-key buffer key-src)
> > diff --git a/hui-window.el b/hui-window.el
> > index 654c035..796770e 100644
> > --- a/hui-window.el
> > +++ b/hui-window.el
> > @@ -311,12 +311,12 @@ part of InfoDock and not a part of Hyperbole)."
> >    "Return t iff there is a non-empty active region in buffer of the
> last Smart Mouse Key release."
> >    (when (setq hkey-value (if assist-flag assist-key-depress-prev-point
> action-key-depress-prev-point))
> >      (save-excursion
> > -      (set-buffer (marker-buffer hkey-value))
> > -      ;; Store and goto any prior value of point from the region
> > -      ;; prior to the Smart Key depress, so we can return to it later.
> > -      (and (goto-char hkey-value)
> > -        (hmouse-save-region)
> > -        t))))
> > +      (with-current-buffer (marker-buffer hkey-value)
> > +     ;; Store and goto any prior value of point from the region
> > +     ;; prior to the Smart Key depress, so we can return to it later.
> > +     (and (goto-char hkey-value)
> > +          (hmouse-save-region)
> > +          t)))))
>
> These two don't make much sense: `save-excursion` only saves the
> position of point in the current buffer, so
>
>     (save-excursion (with-current-buffer FOO ...))
>
> is useless in one of two ways:
> - FOO is already the current buffer, so `with-current-buffer`
>   (previously `set-buffer`) does nothing.
> - FOO is a different buffer, so the buffer-position saved&restored by
>   `save-excursion` is in a buffer that's not affected by `...`.
>
> If you want to combine the two, then you should use
>
>     (with-current-buffer FOO (save-excursion ...))
>
> Tho if we presume that the `set-buffer` in the previous code did do
> something useful (i.e. selected a different buffer), then there's a good
> chance that the `save-excursion` has never done its intended job and can
> be removed.
>
>
>         Stefan
>
>

[-- Attachment #2: Type: text/html, Size: 4963 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [elpa] externals/hyperbole c501027 2/2: Fix set-buffer byte-compiler warnings; remove outdated references
  2021-05-11  0:18     ` Robert Weiner
@ 2021-05-11  1:25       ` Stefan Monnier
  0 siblings, 0 replies; 4+ messages in thread
From: Stefan Monnier @ 2021-05-11  1:25 UTC (permalink / raw)
  To: Robert Weiner; +Cc: rswgnu, emacs-devel

> Eli and I exchanged messages about this on the emacs-devel list and settled
> on the outer save-excursion as you first wrote below since it is indeed the
> original buffer whose point we want to save which may be manipulated by
> some subroutine deep within the with-current-buffer that changes the buffer
> back to the original.  Thanks as always for the pointers though.  -- Bob

That seems to point at a very unusual arrangement which you might want
(in the longer term) to reconsider, e.g. by moving the `save-excursion`
to the "deep within" place that actually moves the point in the "outer
buffer".

In the mean time, adding a comment explaining what's going on
(e.g. giving an example scenario where point would be moved unexpectedly
in the outer buffer)would go a long way.

Similarly for the

  (save-excursion
    (with-current-buffer (find-file-noselect (expand-file-name hbmap:filename hbmap:dir-user))
      (save-excursion

in `gbut:ebut-program` because without an explanatory comment, this looks
like the kind of code you get when the author just "added
`save-excursion`s a bit at random until point stopped moving" ;-)


        Stefan




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [elpa] externals/hyperbole c501027 2/2: Fix set-buffer byte-compiler warnings; remove outdated references
  2021-05-10 13:59   ` [elpa] externals/hyperbole c501027 2/2: Fix set-buffer byte-compiler warnings; remove outdated references Stefan Monnier
  2021-05-11  0:18     ` Robert Weiner
@ 2021-05-11 15:15     ` Jean Louis
  1 sibling, 0 replies; 4+ messages in thread
From: Jean Louis @ 2021-05-11 15:15 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Bob Weiner, emacs-devel

* Stefan Monnier <monnier@iro.umontreal.ca> [2021-05-10 17:01]:
> These two don't make much sense: `save-excursion` only saves the
> position of point in the current buffer, so
> 
>     (save-excursion (with-current-buffer FOO ...))
> 
> is useless in one of two ways:
> - FOO is already the current buffer, so `with-current-buffer`
>   (previously `set-buffer`) does nothing.
> - FOO is a different buffer, so the buffer-position saved&restored by
>   `save-excursion` is in a buffer that's not affected by `...`.

Thank you, I totally understood this one, though I am unrelated...


-- 
Jean

Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns

Sign an open letter in support of Richard M. Stallman
https://stallmansupport.org/
https://rms-support-letter.github.io/




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-05-11 15:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20210510035708.29543.25002@vcs0.savannah.gnu.org>
     [not found] ` <20210510035709.E742920DFD@vcs0.savannah.gnu.org>
2021-05-10 13:59   ` [elpa] externals/hyperbole c501027 2/2: Fix set-buffer byte-compiler warnings; remove outdated references Stefan Monnier
2021-05-11  0:18     ` Robert Weiner
2021-05-11  1:25       ` Stefan Monnier
2021-05-11 15:15     ` Jean Louis

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).