unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Confusion about first-change-hook
@ 2012-12-18 19:59 David Engster
  2012-12-18 20:43 ` Stefan Monnier
  2012-12-18 21:01 ` Jambunathan K
  0 siblings, 2 replies; 6+ messages in thread
From: David Engster @ 2012-12-18 19:59 UTC (permalink / raw)
  To: emacs-devel

I wanted to do something very simple: Activate whitespace-mode only when
I start editing a buffer. So I looked into the manual and found
`first-change-hook', which seemed exactly what I wanted.

However, I soon saw that whitespace-mode got immediately activated in my
C++ buffers. The reason is that changing a text property apparently
already counts as "changing the buffer". Is this really the desired
behavior? If so, what else is there to achieve the above? Should I file
a wishlist-bug for something like 'buffer-modified-hook'?

-David



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

* Re: Confusion about first-change-hook
  2012-12-18 19:59 Confusion about first-change-hook David Engster
@ 2012-12-18 20:43 ` Stefan Monnier
  2012-12-18 21:00   ` David Engster
  2012-12-18 21:01 ` Jambunathan K
  1 sibling, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2012-12-18 20:43 UTC (permalink / raw)
  To: emacs-devel

> However, I soon saw that whitespace-mode got immediately activated in my
> C++ buffers. The reason is that changing a text property apparently
> already counts as "changing the buffer". Is this really the desired
> behavior? If so, what else is there to achieve the above? Should I file
> a wishlist-bug for something like 'buffer-modified-hook'?

I think the bug is in the major mode that sets the text-property without
proper protection (e.g. with-silent-modifications).


        Stefan



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

* Re: Confusion about first-change-hook
  2012-12-18 20:43 ` Stefan Monnier
@ 2012-12-18 21:00   ` David Engster
  2012-12-19  1:01     ` Stefan Monnier
  0 siblings, 1 reply; 6+ messages in thread
From: David Engster @ 2012-12-18 21:00 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier writes:
>> However, I soon saw that whitespace-mode got immediately activated in my
>> C++ buffers. The reason is that changing a text property apparently
>> already counts as "changing the buffer". Is this really the desired
>> behavior? If so, what else is there to achieve the above? Should I file
>> a wishlist-bug for something like 'buffer-modified-hook'?
>
> I think the bug is in the major mode that sets the text-property without
> proper protection (e.g. with-silent-modifications).

Oh. I didn't know that putting text properties on an unmodified buffer
should be protected like that. I guess I will have to look at some of my
own packages...

Anyway, thanks for the pointer. I'll see to it that I file a bug for
cc-mode.

-David



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

* Re: Confusion about first-change-hook
  2012-12-18 19:59 Confusion about first-change-hook David Engster
  2012-12-18 20:43 ` Stefan Monnier
@ 2012-12-18 21:01 ` Jambunathan K
  2012-12-18 21:09   ` David Engster
  1 sibling, 1 reply; 6+ messages in thread
From: Jambunathan K @ 2012-12-18 21:01 UTC (permalink / raw)
  To: emacs-devel

David Engster <deng@randomsample.de> writes:

> I wanted to do something very simple: Activate whitespace-mode only when
> I start editing a buffer. So I looked into the manual and found
> `first-change-hook', which seemed exactly what I wanted.

This seems to work:

    (add-hook 'c++-mode-hook
              (lambda nil
                (add-hook 'before-change-functions 'activate-whitespace-mode
                          nil 'local)))

    (defun activate-whitespace-mode (beg end) 
      (whitespace-mode 1)
      (remove-hook 'before-change-functions
                   'activate-whitespace-mode 'local))

>
> However, I soon saw that whitespace-mode got immediately activated in my
> C++ buffers. The reason is that changing a text property apparently
> already counts as "changing the buffer". Is this really the desired
> behavior? If so, what else is there to achieve the above? Should I file
> a wishlist-bug for something like 'buffer-modified-hook'?
>
> -David
>
>

-- 



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

* Re: Confusion about first-change-hook
  2012-12-18 21:01 ` Jambunathan K
@ 2012-12-18 21:09   ` David Engster
  0 siblings, 0 replies; 6+ messages in thread
From: David Engster @ 2012-12-18 21:09 UTC (permalink / raw)
  To: Jambunathan K; +Cc: emacs-devel

Jambunathan K. writes:
> David Engster <deng@randomsample.de> writes:
>
>> I wanted to do something very simple: Activate whitespace-mode only when
>> I start editing a buffer. So I looked into the manual and found
>> `first-change-hook', which seemed exactly what I wanted.
>
> This seems to work:
>
>     (add-hook 'c++-mode-hook
>               (lambda nil
>                 (add-hook 'before-change-functions 'activate-whitespace-mode
>                           nil 'local)))
>
>     (defun activate-whitespace-mode (beg end) 
>       (whitespace-mode 1)
>       (remove-hook 'before-change-functions
>                    'activate-whitespace-mode 'local))

Thank you. This works nicely.

-David



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

* Re: Confusion about first-change-hook
  2012-12-18 21:00   ` David Engster
@ 2012-12-19  1:01     ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2012-12-19  1:01 UTC (permalink / raw)
  To: emacs-devel

> Oh. I didn't know that putting text properties on an unmodified buffer
> should be protected like that. I guess I will have to look at some of my
> own packages...

Many packages do part of what with-silent-modifications does, such as
save buffer-modified-p and restore it afterwards, but that is only
sufficient in some cases (as seen in your particular case).
`with-silent-modifications' takes care of several more potential
problems.


        Stefan



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

end of thread, other threads:[~2012-12-19  1:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-18 19:59 Confusion about first-change-hook David Engster
2012-12-18 20:43 ` Stefan Monnier
2012-12-18 21:00   ` David Engster
2012-12-19  1:01     ` Stefan Monnier
2012-12-18 21:01 ` Jambunathan K
2012-12-18 21:09   ` David Engster

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