emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Weird behaviour with org-yank and org-startup-indented
@ 2010-10-15 14:56 Julien Danjou
  2010-10-17  6:08 ` Carsten Dominik
  0 siblings, 1 reply; 13+ messages in thread
From: Julien Danjou @ 2010-10-15 14:56 UTC (permalink / raw)
  To: emacs-orgmode

Hi,

I'm using org 7.01h with Emacs 24 trunk. When I set org-startup-indented
to t, I observe the following:

** TODO Some stuff

I select "stuff" and press M-w. Then I go the the line under and press
C-y (org-yank).

Now I got:

** TODO Some stuff
** TODO Some

instead of:

** TODO Some stuff
stuff

Note that after M-w, `kill-ring' has a correct first entry of "stuff":

  (#("stuff" 0 5
     (fontified t face org-level-2))
   ...)

But on C-y (org-yank) something happens, and it paste the wrong text. I
think it's trying to be smart but it's not.

I've found that setting org-startup-indented to nil fix that behaviour.

What's wrong?
-- 
Julien Danjou
// ᐰ <julien@danjou.info>   http://julien.danjou.info

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

* Re: Weird behaviour with org-yank and org-startup-indented
  2010-10-15 14:56 Weird behaviour with org-yank and org-startup-indented Julien Danjou
@ 2010-10-17  6:08 ` Carsten Dominik
  2010-10-18 14:37   ` Julien Danjou
  0 siblings, 1 reply; 13+ messages in thread
From: Carsten Dominik @ 2010-10-17  6:08 UTC (permalink / raw)
  To: Julien Danjou; +Cc: emacs-orgmode


On Oct 15, 2010, at 4:56 PM, Julien Danjou wrote:

> Hi,
>
> I'm using org 7.01h with Emacs 24 trunk. When I set org-startup- 
> indented
> to t, I observe the following:
>
> ** TODO Some stuff
>
> I select "stuff" and press M-w. Then I go the the line under and press
> C-y (org-yank).
>
> Now I got:
>
> ** TODO Some stuff
> ** TODO Some

This is bad.  As this problem does not exist in Emacs 23 and I have  
not changed anything in this part of the code, maybe a bug report to  
EMacs is in order.  Will you file one, with the remark that this works  
fine in Emacs 23?

Thanks.!

- Carsten

>
> instead of:
>
> ** TODO Some stuff
> stuff
>
> Note that after M-w, `kill-ring' has a correct first entry of "stuff":
>
>  (#("stuff" 0 5
>     (fontified t face org-level-2))
>   ...)
>
> But on C-y (org-yank) something happens, and it paste the wrong  
> text. I
> think it's trying to be smart but it's not.
>
> I've found that setting org-startup-indented to nil fix that  
> behaviour.
>
> What's wrong?
> -- 
> Julien Danjou
> // ᐰ <julien@danjou.info>   http://julien.danjou.info
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

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

* Re: Weird behaviour with org-yank and org-startup-indented
  2010-10-17  6:08 ` Carsten Dominik
@ 2010-10-18 14:37   ` Julien Danjou
  2010-10-20 12:31     ` [Orgmode] " Julien Danjou
  0 siblings, 1 reply; 13+ messages in thread
From: Julien Danjou @ 2010-10-18 14:37 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: emacs-orgmode, emacs-devel

On Sun, Oct 17 2010, Carsten Dominik wrote:

> This is bad.  As this problem does not exist in Emacs 23 and I have not
> changed anything in this part of the code, maybe a bug report to  EMacs is
> in order.  Will you file one, with the remark that this works  fine in Emacs
> 23?

I'm not sure that will work fine. Well, I've started to debug this, any
help appreciated.

I'm adding emacs-devel in Cc since this is clearly a bug in Emacs 24.
For people not reading orgmode list, the problem is that when
org-startup-indented is set to t, the yanking does not yank the correct
text.

To test, this is what I've got:

* TODO Blalaundo

I copy "undo" with C-space on `u', C-e, M-w.

Then I press C-y (org-yank). Everything is fine, except that as that
moment:

Debugger entered--returning value: "* TODO Blala"
  x-get-selection(PRIMARY UTF8_STRING)
* byte-code("\303\b	@\"\x12\303\207" [type request-type text x-get-selection] 3)
* x-selection-value-internal(PRIMARY)
* x-selection-value()
* current-kill(0)
* (and kill-ring (current-kill 0))
* (or txt (and kill-ring (current-kill 0)) "")
* (let* ((kill (or txt (and kill-ring (current-kill 0)) "")) (start-level (and kill (string-match (concat "\\`\\([ 	\n\r]*?\n\\)?\\(" org-outline-regexp "\\)") kill) (- (match-end 2) (match-beginning 2) 1))) (re (concat "^" org-outline-regexp)) (start (1+ (or (match-beginning 2) -1)))) (if (not start-level) (progn nil) (catch (quote exit) (while (setq start (string-match re kill (1+ start))) (when (< (- (match-end 0) (match-beginning 0) 1) start-level) (throw (quote exit) nil))) t)))
* org-kill-is-subtree-p()
* (and (org-kill-is-subtree-p) (or (bolp) (and (looking-at "[ 	]*$") (string-match "\\`\\*+\\'" (buffer-substring (point-at-bol) (point))))))
* (let ((subtreep (and (org-kill-is-subtree-p) (or (bolp) (and (looking-at "[ 	]*$") (string-match "\\`\\*+\\'" (buffer-substring ... ...)))))) swallowp) (cond ((and subtreep org-yank-folded-subtrees) (let ((beg (point)) end) (if (and subtreep org-yank-adjusted-subtrees) (org-paste-subtree nil nil (quote for-yank)) (call-interactively command)) (setq end (point)) (goto-char beg) (when (and (bolp) subtreep (not (setq swallowp ...))) (or (looking-at outline-regexp) (re-search-forward (concat "^" outline-regexp) end t)) (while (and (< ... end) (looking-at outline-regexp)) (hide-subtree) (org-cycle-show-empty-lines (quote folded)) (condition-case nil (outline-forward-same-level 1) (error ...)))) (when swallowp (message "Inserted text not folded because that would swallow text")) (goto-char end) (skip-chars-forward " 	\n\r") (beginning-of-line 1) (push-mark beg (quote nomsg)))) ((and subtreep org-yank-adjusted-subtrees) (let ((beg (point-at-bol))) (org-paste-subtree nil nil (quote for-yank)) (push-mark beg (quote nomsg)))) (t (call-interactively command))))
* (if arg (call-interactively command) (let ((subtreep (and (org-kill-is-subtree-p) (or (bolp) (and (looking-at "[ 	]*$") (string-match "\\`\\*+\\'" ...))))) swallowp) (cond ((and subtreep org-yank-folded-subtrees) (let ((beg (point)) end) (if (and subtreep org-yank-adjusted-subtrees) (org-paste-subtree nil nil (quote for-yank)) (call-interactively command)) (setq end (point)) (goto-char beg) (when (and (bolp) subtreep (not ...)) (or (looking-at outline-regexp) (re-search-forward ... end t)) (while (and ... ...) (hide-subtree) (org-cycle-show-empty-lines ...) (condition-case nil ... ...))) (when swallowp (message "Inserted text not folded because that would swallow text")) (goto-char end) (skip-chars-forward " 	\n\r") (beginning-of-line 1) (push-mark beg (quote nomsg)))) ((and subtreep org-yank-adjusted-subtrees) (let ((beg (point-at-bol))) (org-paste-subtree nil nil (quote for-yank)) (push-mark beg (quote nomsg)))) (t (call-interactively command)))))
* org-yank-generic(yank nil)
* org-yank(nil)
  call-interactively(org-yank nil nil)

No clue why, but the PRIMARY selection seems to return the start of the
line.

I've done this then:

* TODO Blalaundo

I go on `u', press C-space, then C-e. The M-; and execute
(x-selection-value), which returns: "undo".

So far so good. But if I go on `u', press C-space, then C-e, then M-w,
then M-; to execute (x-selection-value), it returns "* TODO Blala".

So it seems that when the org-startup-indented is set to t, M-w goes
crazy and set the primary selection wrongly.

Hint?
-- 
Julien Danjou
// ᐰ <julien@danjou.info>   http://julien.danjou.info

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-18 14:37   ` Julien Danjou
@ 2010-10-20 12:31     ` Julien Danjou
  2010-10-20 15:09       ` Chong Yidong
  2010-10-20 15:33       ` Chong Yidong
  0 siblings, 2 replies; 13+ messages in thread
From: Julien Danjou @ 2010-10-20 12:31 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: emacs-orgmode, emacs-devel

On Mon, Oct 18 2010, Julien Danjou wrote:

> I've done this then:
>
> * TODO Blalaundo
>
> I go on `u', press C-space, then C-e. The M-; and execute
> (x-selection-value), which returns: "undo".
>
> So far so good. But if I go on `u', press C-space, then C-e, then M-w,
> then M-; to execute (x-selection-value), it returns "* TODO Blala".
>
> So it seems that when the org-startup-indented is set to t, M-w goes
> crazy and set the primary selection wrongly.

So it seems that the problem I raise does not interest anybody, but I
will continue to debug.

This is how to reproduce.
In a Org buffer with org-startup-indented set to t, type:

** TODO abcdefgh

Then:
M-x debug-on-entry x-set-selection

Go on `c', activate mark press C-e, press M-w (kill-ring-save). You'll
hit several breakpoint until you'll get:

Debugger entered--entering a function:
* x-set-selection(PRIMARY "** TODO")
  deactivate-mark()

And I've been further:
saved-region-selection is nil
Then as soon as I select the `c' of the above string,
saved-region-selection is set to "** TODO".

Which seems *bad*. :)

-- 
Julien Danjou
// ᐰ <julien@danjou.info>   http://julien.danjou.info

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-20 12:31     ` [Orgmode] " Julien Danjou
@ 2010-10-20 15:09       ` Chong Yidong
  2010-10-20 15:24         ` Julien Danjou
  2010-10-20 15:33       ` Chong Yidong
  1 sibling, 1 reply; 13+ messages in thread
From: Chong Yidong @ 2010-10-20 15:09 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: emacs-orgmode, emacs-devel

Julien Danjou <julien@danjou.info> writes:

> So it seems that the problem I raise does not interest anybody, but I
> will continue to debug.
>
> This is how to reproduce.

It's rather strange to complain about nobody else working on the bug,
when you (i) did not give a recipe and (ii) stated that you were already
working on it.

Now that you have provided a recipe, I will take a look.

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-20 15:09       ` Chong Yidong
@ 2010-10-20 15:24         ` Julien Danjou
  2010-10-20 15:38           ` Andreas Röhler
  2010-10-20 15:58           ` [Orgmode] " Chong Yidong
  0 siblings, 2 replies; 13+ messages in thread
From: Julien Danjou @ 2010-10-20 15:24 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, emacs-orgmode, Carsten Dominik

On Wed, Oct 20 2010, Chong Yidong wrote:

> It's rather strange to complain about nobody else working on the bug,
> when you (i) did not give a recipe and (ii) stated that you were already
> working on it.

My bad, I think I forgot to add a smiley at the end of the sentence, so
 here it is: :-)

I did not mean to be rude. :)

-- 
Julien Danjou
// ᐰ <julien@danjou.info>   http://julien.danjou.info

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-20 12:31     ` [Orgmode] " Julien Danjou
  2010-10-20 15:09       ` Chong Yidong
@ 2010-10-20 15:33       ` Chong Yidong
  2010-10-20 15:37         ` Lennart Borgman
                           ` (2 more replies)
  1 sibling, 3 replies; 13+ messages in thread
From: Chong Yidong @ 2010-10-20 15:33 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: emacs-orgmode, emacs-devel

Julien Danjou <julien@danjou.info> writes:

> In a Org buffer with org-startup-indented set to t, type:
>
> ** TODO abcdefgh
>
> Go on `c', activate mark press C-e, press M-w (kill-ring-save).
> [Wrong primary selection appears]

The problem is in org-indent-refresh-section, which is run from a timer.
This function first moves point and then calls remove-text-properties,
which is considered a buffer change.  Since the mark is active, the
selection code saves the region to saved-region-selection, from which it
is later saved to the primary selection.

There are a few possible fixes, but I am yet not sure which is best.
One is to avoid setting saved-region-selection inside a timer.  Another
is for save-excursion to inhibit writing to saved-region-selection; a
third is not to treat remove-text-properties as a trigger for saving the
primary selection.

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-20 15:33       ` Chong Yidong
@ 2010-10-20 15:37         ` Lennart Borgman
  2010-10-20 17:38         ` Stefan Monnier
  2010-10-21 17:38         ` Carsten Dominik
  2 siblings, 0 replies; 13+ messages in thread
From: Lennart Borgman @ 2010-10-20 15:37 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, emacs-orgmode, Carsten Dominik

On Wed, Oct 20, 2010 at 5:33 PM, Chong Yidong <cyd@stupidchicken.com> wrote:
> Julien Danjou <julien@danjou.info> writes:
>
>> In a Org buffer with org-startup-indented set to t, type:
>>
>> ** TODO abcdefgh
>>
>> Go on `c', activate mark press C-e, press M-w (kill-ring-save).
>> [Wrong primary selection appears]
>
> The problem is in org-indent-refresh-section, which is run from a timer.
> This function first moves point and then calls remove-text-properties,
> which is considered a buffer change.  Since the mark is active, the
> selection code saves the region to saved-region-selection, from which it
> is later saved to the primary selection.
>
> There are a few possible fixes, but I am yet not sure which is best.
> One is to avoid setting saved-region-selection inside a timer.  Another
> is for save-excursion to inhibit writing to saved-region-selection; a
> third is not to treat remove-text-properties as a trigger for saving the
> primary selection.

Another possibility is to protect remove-text-properties from marking
the buffer as changed (just as font-lock does).

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

* Re: Weird behaviour with org-yank and org-startup-indented
  2010-10-20 15:24         ` Julien Danjou
@ 2010-10-20 15:38           ` Andreas Röhler
  2010-10-20 15:58           ` [Orgmode] " Chong Yidong
  1 sibling, 0 replies; 13+ messages in thread
From: Andreas Röhler @ 2010-10-20 15:38 UTC (permalink / raw)
  To: emacs-orgmode

Am 20.10.2010 17:24, schrieb Julien Danjou:
> On Wed, Oct 20 2010, Chong Yidong wrote:
>
>> It's rather strange to complain about nobody else working on the bug,
>> when you (i) did not give a recipe and (ii) stated that you were already
>> working on it.
>
> My bad, I think I forgot to add a smiley at the end of the sentence, so
>   here it is: :-)
>
> I did not mean to be rude. :)
>

Hi Julien,

the 24' branch is simply not usable IMHO. I'm afraid for many reasons.
Have a look at

http://debbugs.gnu.org/


Andreas

--
https://code.launchpad.net/~a-roehler/python-mode/python-mode-components
https://code.launchpad.net/s-x-emacs-werkstatt/

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-20 15:24         ` Julien Danjou
  2010-10-20 15:38           ` Andreas Röhler
@ 2010-10-20 15:58           ` Chong Yidong
  1 sibling, 0 replies; 13+ messages in thread
From: Chong Yidong @ 2010-10-20 15:58 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: emacs-orgmode, emacs-devel

Julien Danjou <julien@danjou.info> writes:

> On Wed, Oct 20 2010, Chong Yidong wrote:
>
>> It's rather strange to complain about nobody else working on the bug,
>> when you (i) did not give a recipe and (ii) stated that you were already
>> working on it.
>
> My bad, I think I forgot to add a smiley at the end of the sentence, so
>  here it is: :-)
>
> I did not mean to be rude. :)

No worries.  Thank you for working on the bug.

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-20 15:33       ` Chong Yidong
  2010-10-20 15:37         ` Lennart Borgman
@ 2010-10-20 17:38         ` Stefan Monnier
  2010-10-21 17:40           ` Chong Yidong
  2010-10-21 17:38         ` Carsten Dominik
  2 siblings, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2010-10-20 17:38 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel, emacs-orgmode, Carsten Dominik

> The problem is in org-indent-refresh-section, which is run from a timer.
> This function first moves point and then calls remove-text-properties,
> which is considered a buffer change.  Since the mark is active, the
> selection code saves the region to saved-region-selection, from which it
> is later saved to the primary selection.

Shouldn't org-indent-refresh-section use with-silent-modifications
around the remove-text-properties call?


        Stefan

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

* Re: Weird behaviour with org-yank and org-startup-indented
  2010-10-20 15:33       ` Chong Yidong
  2010-10-20 15:37         ` Lennart Borgman
  2010-10-20 17:38         ` Stefan Monnier
@ 2010-10-21 17:38         ` Carsten Dominik
  2 siblings, 0 replies; 13+ messages in thread
From: Carsten Dominik @ 2010-10-21 17:38 UTC (permalink / raw)
  To: Chong Yidong; +Cc: Julien Danjou, Org Mode, Stefan Monnier, Emacs developers


On Oct 20, 2010, at 5:33 PM, Chong Yidong wrote:

> Julien Danjou <julien@danjou.info> writes:
>
>> In a Org buffer with org-startup-indented set to t, type:
>>
>> ** TODO abcdefgh
>>
>> Go on `c', activate mark press C-e, press M-w (kill-ring-save).
>> [Wrong primary selection appears]
>
> The problem is in org-indent-refresh-section, which is run from a  
> timer.
> This function first moves point and then calls remove-text-properties,
> which is considered a buffer change.  Since the mark is active, the
> selection code saves the region to saved-region-selection, from  
> which it
> is later saved to the primary selection.

Ah, this is interesting, thank you very much!

>
> There are a few possible fixes, but I am yet not sure which is best.
> One is to avoid setting saved-region-selection inside a timer.   
> Another
> is for save-excursion to inhibit writing to saved-region-selection; a
> third is not to treat remove-text-properties as a trigger for saving  
> the
> primary selection.

I'll go with Stefan's solution, using with-silent-modifications.  I  
had already
code that would restore buffer-modified-flag, but apparently this was  
not enough.

Thanks!

- Carsten

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

* Re: [Orgmode] Weird behaviour with org-yank and org-startup-indented
  2010-10-20 17:38         ` Stefan Monnier
@ 2010-10-21 17:40           ` Chong Yidong
  0 siblings, 0 replies; 13+ messages in thread
From: Chong Yidong @ 2010-10-21 17:40 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, emacs-orgmode, Carsten Dominik

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> The problem is in org-indent-refresh-section, which is run from a timer.
>> This function first moves point and then calls remove-text-properties,
>> which is considered a buffer change.  Since the mark is active, the
>> selection code saves the region to saved-region-selection, from which it
>> is later saved to the primary selection.
>
> Shouldn't org-indent-refresh-section use with-silent-modifications
> around the remove-text-properties call?

If we were starting from scratch, I think it's more sensible to make
text property changes "silent" by default, while providing an explicit
call to "unsilence" them when desired (which seem to be a minority of
cases).  I guess it's too late to change now, though.

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

end of thread, other threads:[~2010-10-21 17:40 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-15 14:56 Weird behaviour with org-yank and org-startup-indented Julien Danjou
2010-10-17  6:08 ` Carsten Dominik
2010-10-18 14:37   ` Julien Danjou
2010-10-20 12:31     ` [Orgmode] " Julien Danjou
2010-10-20 15:09       ` Chong Yidong
2010-10-20 15:24         ` Julien Danjou
2010-10-20 15:38           ` Andreas Röhler
2010-10-20 15:58           ` [Orgmode] " Chong Yidong
2010-10-20 15:33       ` Chong Yidong
2010-10-20 15:37         ` Lennart Borgman
2010-10-20 17:38         ` Stefan Monnier
2010-10-21 17:40           ` Chong Yidong
2010-10-21 17:38         ` Carsten Dominik

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.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).