unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* bookmark.el bug report
@ 2009-12-28  6:19 Sun Yijiang
  2009-12-28  6:48 ` Karl Fogel
  2010-01-02  5:05 ` Karl Fogel
  0 siblings, 2 replies; 21+ messages in thread
From: Sun Yijiang @ 2009-12-28  6:19 UTC (permalink / raw)
  To: emacs-devel

`bookmark-bmenu-execute-deletions' is broken for quite some time.  I
think I've found the problem.  When it calls
`bookmark-bmenu-bookmark', the callee gets text property at
`(line-begging-position)', which is incorrect in this context.  Below
is the patched code of  `bookmark-bmenu-bookmark' that works for me:

(defun bookmark-bmenu-bookmark ()
  "Return the bookmark for this line in an interactive bookmark list buffer."
  (when (bookmark-bmenu-check-position)
    (let ((pos (line-beginning-position)))
      (when (looking-back "^[^ ]")
        (setq pos (+ 1 pos)))
      (get-text-property pos 'bookmark-name-prop))))


Sincerely,
Steve




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

* Re: bookmark.el bug report
  2009-12-28  6:19 bookmark.el bug report Sun Yijiang
@ 2009-12-28  6:48 ` Karl Fogel
  2009-12-28  7:41   ` Thierry Volpiatto
  2010-01-02  5:05 ` Karl Fogel
  1 sibling, 1 reply; 21+ messages in thread
From: Karl Fogel @ 2009-12-28  6:48 UTC (permalink / raw)
  To: Sun Yijiang; +Cc: emacs-devel

Sun Yijiang <sunyijiang@gmail.com> writes:
> `bookmark-bmenu-execute-deletions' is broken for quite some time.  I
> think I've found the problem.  When it calls
> `bookmark-bmenu-bookmark', the callee gets text property at
> `(line-begging-position)', which is incorrect in this context.  Below
> is the patched code of  `bookmark-bmenu-bookmark' that works for me:
>
> (defun bookmark-bmenu-bookmark ()
>   "Return the bookmark for this line in an interactive bookmark list buffer."
>   (when (bookmark-bmenu-check-position)
>     (let ((pos (line-beginning-position)))
>       (when (looking-back "^[^ ]")
>         (setq pos (+ 1 pos)))
>       (get-text-property pos 'bookmark-name-prop))))

Thank you -- I will take a look!

-Karl




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

* Re: bookmark.el bug report
  2009-12-28  6:48 ` Karl Fogel
@ 2009-12-28  7:41   ` Thierry Volpiatto
  2009-12-28 15:58     ` Drew Adams
  0 siblings, 1 reply; 21+ messages in thread
From: Thierry Volpiatto @ 2009-12-28  7:41 UTC (permalink / raw)
  To: emacs-devel

Karl Fogel <kfogel@red-bean.com> writes:

> Sun Yijiang <sunyijiang@gmail.com> writes:
>> `bookmark-bmenu-execute-deletions' is broken for quite some time.  I
>> think I've found the problem.  When it calls
>> `bookmark-bmenu-bookmark', the callee gets text property at
>> `(line-begging-position)', which is incorrect in this context.  Below
>> is the patched code of  `bookmark-bmenu-bookmark' that works for me:
>>
>> (defun bookmark-bmenu-bookmark ()
>>   "Return the bookmark for this line in an interactive bookmark list buffer."
>>   (when (bookmark-bmenu-check-position)
>>     (let ((pos (line-beginning-position)))
>>       (when (looking-back "^[^ ]")
>>         (setq pos (+ 1 pos)))
>>       (get-text-property pos 'bookmark-name-prop))))
>
> Thank you -- I will take a look!

Consider using the definition of bookmark-extensions.el:
(That's what i sent in original patch for bookmark.el)

(defun bookmark-bmenu-bookmark ()
  "Return the name of the bookmark on this line."
  (when (bookmark-bmenu-check-position)
    (save-excursion
      (forward-line 0) (forward-char 3)
      (get-text-property (point) 'bmkext-bookmark-name))))



-- 
A + Thierry Volpiatto
Location: Saint-Cyr-Sur-Mer - France





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

* RE: bookmark.el bug report
  2009-12-28  7:41   ` Thierry Volpiatto
@ 2009-12-28 15:58     ` Drew Adams
  2009-12-28 21:12       ` Karl Fogel
  0 siblings, 1 reply; 21+ messages in thread
From: Drew Adams @ 2009-12-28 15:58 UTC (permalink / raw)
  To: emacs-devel

> (defun bookmark-bmenu-bookmark ()
>   "Return the name of the bookmark on this line."
>   (when (bookmark-bmenu-check-position)
>     (save-excursion
>       (forward-line 0) (forward-char 3)
>       (get-text-property (point) 'bmkext-bookmark-name))))

1. There is no need for the `bookmark-bmenu-check-position' test. All such
pseudotests can be removed - that function always returns non-nil (unless the
`bookmark-alist' is nil).

2. Wrap the `save-excursion' in `ignore-errors' or a `condition-case', for the
`forward-char' at eob. E.g., this is the definition in bookmark+.el:

(defun bookmark-bmenu-bookmark ()
  "Return the name of the bookmark on this line."
  (condition-case nil
      (save-excursion
       (forward-line 0) (forward-char 3)
       (get-text-property (point) 'bookmarkp-bookmark-name))
    (error nil)))





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

* Re: bookmark.el bug report
  2009-12-28 15:58     ` Drew Adams
@ 2009-12-28 21:12       ` Karl Fogel
  2009-12-29 18:22         ` Stefan Monnier
  0 siblings, 1 reply; 21+ messages in thread
From: Karl Fogel @ 2009-12-28 21:12 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

"Drew Adams" <drew.adams@oracle.com> writes:
>> (defun bookmark-bmenu-bookmark ()
>>   "Return the name of the bookmark on this line."
>>   (when (bookmark-bmenu-check-position)
>>     (save-excursion
>>       (forward-line 0) (forward-char 3)
>>       (get-text-property (point) 'bmkext-bookmark-name))))
>
> 1. There is no need for the `bookmark-bmenu-check-position' test. All such
> pseudotests can be removed - that function always returns non-nil (unless the
> `bookmark-alist' is nil).

I have a pending change for that (in my CVS working copy -- need to port
it over to Bzr).  I want to make absolutely sure there wasn't some edge
case about when bookmark-alist is nil, but I strongly suspect you're
right, Drew.

> 2. Wrap the `save-excursion' in `ignore-errors' or a `condition-case',
> for the `forward-char' at eob. E.g., this is the definition in
> bookmark+.el:
>
> (defun bookmark-bmenu-bookmark ()
>   "Return the name of the bookmark on this line."
>   (condition-case nil
>       (save-excursion
>        (forward-line 0) (forward-char 3)
>        (get-text-property (point) 'bookmarkp-bookmark-name))
>     (error nil)))

Will take into account.

Thanks,
-K




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

* Re: bookmark.el bug report
  2009-12-28 21:12       ` Karl Fogel
@ 2009-12-29 18:22         ` Stefan Monnier
  2009-12-30 13:37           ` Thierry Volpiatto
  0 siblings, 1 reply; 21+ messages in thread
From: Stefan Monnier @ 2009-12-29 18:22 UTC (permalink / raw)
  To: Karl Fogel; +Cc: Drew Adams, emacs-devel

>> (condition-case nil
>> (save-excursion
>> (forward-line 0) (forward-char 3)

Hardcoding 3 is ugly (I know it's done elsewhere, but it's still ugly,
elsewhere a well).

>> (get-text-property (point) 'bookmarkp-bookmark-name))
>> (error nil)))

> Will take into account.

Better would be to place the text property at BOL so there's no need for
any forward-char business.


        Stefan




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

* Re: bookmark.el bug report
  2009-12-29 18:22         ` Stefan Monnier
@ 2009-12-30 13:37           ` Thierry Volpiatto
  2009-12-30 15:28             ` Stefan Monnier
  0 siblings, 1 reply; 21+ messages in thread
From: Thierry Volpiatto @ 2009-12-30 13:37 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

>>> (condition-case nil
>>> (save-excursion
>>> (forward-line 0) (forward-char 3)
>
> Hardcoding 3 is ugly (I know it's done elsewhere, but it's still ugly,
> elsewhere a well).

That can be used instead:

(skip-chars-forward " \\|\*\\|>\\|D")

>>> (get-text-property (point) 'bookmarkp-bookmark-name))
>>> (error nil)))
>
>> Will take into account.
>
> Better would be to place the text property at BOL so there's no need for
> any forward-char business.
Yes, but remember you have to set properties on the bookmark name
without "*"(annotation), ">"(mark), "D"(mark for deletion).
That occur on third char and not before.

-- 
A + Thierry Volpiatto
Location: Saint-Cyr-Sur-Mer - France





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

* Re: bookmark.el bug report
  2009-12-30 13:37           ` Thierry Volpiatto
@ 2009-12-30 15:28             ` Stefan Monnier
  2009-12-30 15:57               ` Drew Adams
  2009-12-30 17:43               ` Thierry Volpiatto
  0 siblings, 2 replies; 21+ messages in thread
From: Stefan Monnier @ 2009-12-30 15:28 UTC (permalink / raw)
  To: Thierry Volpiatto; +Cc: emacs-devel

>> Better would be to place the text property at BOL so there's no need for
>> any forward-char business.
> Yes, but remember you have to set properties on the bookmark name
> without "*"(annotation), ">"(mark), "D"(mark for deletion).
> That occur on third char and not before.

Ah, that makes sense.
So maybe hardcoding 2 is not such a bad idea, but the important thing
is then that the same "hardcoding" be used both where the property is used
and where it's set.


        Stefan




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

* RE: bookmark.el bug report
  2009-12-30 15:28             ` Stefan Monnier
@ 2009-12-30 15:57               ` Drew Adams
  2009-12-30 16:26                 ` Drew Adams
  2009-12-30 17:43               ` Thierry Volpiatto
  1 sibling, 1 reply; 21+ messages in thread
From: Drew Adams @ 2009-12-30 15:57 UTC (permalink / raw)
  To: emacs-devel

> > >>> (forward-char 3)
> > >
> > > Hardcoding 3 is ugly (I know it's done elsewhere, but it's 
> > > still ugly, elsewhere a well).
> > 
> > That can be used instead:(skip-chars-forward " \\|\*\\|>\\|D")

We are essentially moving to a different "field" here (even if not an Emacs
field per se). The field at bol is a marks field; the field starting at char 3
is the bookmark-name field.

IMO, it is worse to base the movement on syntax, skipping over the marks (and
lack of marks) that are currently used in the design. That complicates changing
the set of marks in the future, and it precludes bookmarks with names that start
with any such marks (including SPC).

Even if we never want either of those possibilities, such a search is more
fragile, and it couples the two fields closely wrt code. The marks field should
not be defined by its syntax (vs a bookmark-name syntax) but by its columns. It
is a field of a fixed number of mark columns, regardless of which marks are
used.

It is better to skip over the width of the field.

Either (1) comment the hard-coded field width (everywhere it is hard-coded, as
Stefan suggested) or, better, (2) add a variable for that width.

> >> Better would be to place the text property at BOL so 
> >> there's no need for any forward-char business.
> >
> > Yes, but remember you have to set properties on the bookmark name
> > without "*"(annotation), ">"(mark), "D"(mark for deletion).
> > That occur on third char and not before.
> 
> Ah, that makes sense.
> So maybe hardcoding 2 is not such a bad idea, but the important thing
> is then that the same "hardcoding" be used both where the 
> property is used and where it's set.

Yes. And to enforce that, either add comments to that effect or, preferably, use
a variable.





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

* RE: bookmark.el bug report
  2009-12-30 15:57               ` Drew Adams
@ 2009-12-30 16:26                 ` Drew Adams
  0 siblings, 0 replies; 21+ messages in thread
From: Drew Adams @ 2009-12-30 16:26 UTC (permalink / raw)
  To: emacs-devel

> It is better to skip over the width of the field.
> Either (1) comment the hard-coded field width (everywhere it 
> is hard-coded, as Stefan suggested) or, better, (2) add a
> variable for that width.

Another candidate for this is the number of header lines (also 2). Something
like this:

(defconst bookmark-bmenu-header-lines 2
  "Number of lines used for the *Bookmark List* header.")

(defconst bookmark-bmenu-marks-width 2
  "Number of columns (chars) used for the *Bookmark List* marks column.")





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

* Re: bookmark.el bug report
  2009-12-30 15:28             ` Stefan Monnier
  2009-12-30 15:57               ` Drew Adams
@ 2009-12-30 17:43               ` Thierry Volpiatto
  2009-12-30 18:32                 ` Stefan Monnier
  1 sibling, 1 reply; 21+ messages in thread
From: Thierry Volpiatto @ 2009-12-30 17:43 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

>>> Better would be to place the text property at BOL so there's no need for
>>> any forward-char business.
>> Yes, but remember you have to set properties on the bookmark name
>> without "*"(annotation), ">"(mark), "D"(mark for deletion).
>> That occur on third char and not before.
>
> Ah, that makes sense.
> So maybe hardcoding 2 is not such a bad idea, but the important thing
> is then that the same "hardcoding" be used both where the property is used
> and where it's set.
Yes, it's why start was set to (point + 2) in *-bmenu-list in my original
patch.(It is like that in bookmark-extensions.el).

-- 
A + Thierry Volpiatto
Location: Saint-Cyr-Sur-Mer - France





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

* Re: bookmark.el bug report
  2009-12-30 17:43               ` Thierry Volpiatto
@ 2009-12-30 18:32                 ` Stefan Monnier
  0 siblings, 0 replies; 21+ messages in thread
From: Stefan Monnier @ 2009-12-30 18:32 UTC (permalink / raw)
  To: Thierry Volpiatto; +Cc: emacs-devel

>>>> Better would be to place the text property at BOL so there's no need for
>>>> any forward-char business.
>>> Yes, but remember you have to set properties on the bookmark name
>>> without "*"(annotation), ">"(mark), "D"(mark for deletion).
>>> That occur on third char and not before.
>> Ah, that makes sense.
>> So maybe hardcoding 2 is not such a bad idea, but the important thing
>> is then that the same "hardcoding" be used both where the property is used
>> and where it's set.
> Yes, it's why start was set to (point + 2) in *-bmenu-list in my original
> patch.(It is like that in bookmark-extensions.el).

Yes, that's what I figured in the mean time.
So we should probably revert to the "+2" (tho it also has its
downside).  But please use a defconst to hold the "2".


        Stefan




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

* Re: bookmark.el bug report
  2009-12-28  6:19 bookmark.el bug report Sun Yijiang
  2009-12-28  6:48 ` Karl Fogel
@ 2010-01-02  5:05 ` Karl Fogel
  2010-01-02  5:15   ` Karl Fogel
  2010-01-02  7:51   ` Drew Adams
  1 sibling, 2 replies; 21+ messages in thread
From: Karl Fogel @ 2010-01-02  5:05 UTC (permalink / raw)
  To: Sun Yijiang; +Cc: emacs-devel

Sun Yijiang <sunyijiang@gmail.com> writes:
>`bookmark-bmenu-execute-deletions' is broken for quite some time.  I
>think I've found the problem.  When it calls
>`bookmark-bmenu-bookmark', the callee gets text property at
>`(line-begging-position)', which is incorrect in this context.  Below
>is the patched code of  `bookmark-bmenu-bookmark' that works for me:
>
>(defun bookmark-bmenu-bookmark ()
>  "Return the bookmark for this line in an interactive bookmark list buffer."
>  (when (bookmark-bmenu-check-position)
>    (let ((pos (line-beginning-position)))
>      (when (looking-back "^[^ ]")
>        (setq pos (+ 1 pos)))
>      (get-text-property pos 'bookmark-name-prop))))

Okay, this is fixed in the two revisions named below.  Thank you for the
bug report, Yijiang.

Note to Drew Adams: I took your suggestions about new constants.
However, I did not wrap the new `save-excursion' in `ignore-errors' or
`condition-case', because we should never be at eob right after calling
`bookmark-bmenu-ensure-position' (and if we are, I want to know).

-Karl

------------------------------------------------------------
revno: 99230
revision-id: kfogel@red-bean.com-20100102050055-3fnwh3oam9gwoc1i
parent: kfogel@red-bean.com-20100102043617-3bbh6lg62a8ycsa2
committer: Karl Fogel <kfogel@red-bean.com>
branch nick: trunk
timestamp: Sat 2010-01-02 00:00:55 -0500
message:
  * lisp/bookmark.el (bookmark-bmenu-marks-width): Define to 1, not 2.
    (bookmark-bmenu-list, bookmark-bmenu-bookmark): Calculate property
    positions by using `bookmark-bmenu-marks-width', instead of hardcoding.
    This fixes the `bookmark-bmenu-execute-deletions' bug reported here:
  
    http://lists.gnu.org/archive/html/emacs-devel/2009-12/msg00819.html
    From: Sun Yijiang <sunyijiang {_AT_} gmail.com>
    To: emacs-devel {_AT_} gnu.org
    Subject: bookmark.el bug report
    Date: Mon, 28 Dec 2009 14:19:16 +0800
    Message-ID: 5065e2900912272219y3734fc9fsdaee41167ef99ad7@mail.gmail.com
------------------------------------------------------------
revno: 99229
revision-id: kfogel@red-bean.com-20100102043617-3bbh6lg62a8ycsa2
parent: lekktu@gmail.com-20100102010911-q2hnd1wl2vqgfgb0
committer: Karl Fogel <kfogel@red-bean.com>
branch nick: trunk
timestamp: Fri 2010-01-01 23:36:17 -0500
message:
  * lisp/bookmark.el: Improvements suggested by Drew Adams:
    (bookmark-bmenu-ensure-position): New name for
    `bookmark-bmenu-check-position'.  Just ensure the position;
    don't return any meaningful value.
    (bookmark-bmenu-header-height, bookmark-bmenu-marks-width): New constants.




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

* Re: bookmark.el bug report
  2010-01-02  5:05 ` Karl Fogel
@ 2010-01-02  5:15   ` Karl Fogel
  2010-01-02  7:03     ` Thierry Volpiatto
  2010-01-02  7:51   ` Drew Adams
  1 sibling, 1 reply; 21+ messages in thread
From: Karl Fogel @ 2010-01-02  5:15 UTC (permalink / raw)
  To: Sun Yijiang; +Cc: emacs-devel

Karl Fogel <kfogel@red-bean.com> writes:
>------------------------------------------------------------
>revno: 99229
>revision-id: kfogel@red-bean.com-20100102043617-3bbh6lg62a8ycsa2
>parent: lekktu@gmail.com-20100102010911-q2hnd1wl2vqgfgb0
>committer: Karl Fogel <kfogel@red-bean.com>
>branch nick: trunk
>timestamp: Fri 2010-01-01 23:36:17 -0500
>message:
>  * lisp/bookmark.el: Improvements suggested by Drew Adams:
>    (bookmark-bmenu-ensure-position): New name for
>    `bookmark-bmenu-check-position'.  Just ensure the position;
>    don't return any meaningful value.
>    (bookmark-bmenu-header-height, bookmark-bmenu-marks-width): New constants.

And if I could edit the commit message for this one, I'd add:

  (everywhere): Adjust former callers of `bookmark-bmenu-check-position'
  to call `bookmark-bmenu-ensure-position' instead, and to not use the
  return value.

Sigh.  I don't miss CVS, but being able to fix log messages is nice.

-K




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

* Re: bookmark.el bug report
  2010-01-02  5:15   ` Karl Fogel
@ 2010-01-02  7:03     ` Thierry Volpiatto
  2010-01-02  7:26       ` Karl Fogel
  0 siblings, 1 reply; 21+ messages in thread
From: Thierry Volpiatto @ 2010-01-02  7:03 UTC (permalink / raw)
  To: emacs-devel

Karl Fogel <kfogel@red-bean.com> writes:

> Karl Fogel <kfogel@red-bean.com> writes:
>>------------------------------------------------------------
>>revno: 99229
>>revision-id: kfogel@red-bean.com-20100102043617-3bbh6lg62a8ycsa2
>>parent: lekktu@gmail.com-20100102010911-q2hnd1wl2vqgfgb0
>>committer: Karl Fogel <kfogel@red-bean.com>
>>branch nick: trunk
>>timestamp: Fri 2010-01-01 23:36:17 -0500
>>message:
>>  * lisp/bookmark.el: Improvements suggested by Drew Adams:
>>    (bookmark-bmenu-ensure-position): New name for
>>    `bookmark-bmenu-check-position'.  Just ensure the position;
>>    don't return any meaningful value.
>>    (bookmark-bmenu-header-height, bookmark-bmenu-marks-width): New constants.
>
> And if I could edit the commit message for this one, I'd add:
>
>   (everywhere): Adjust former callers of `bookmark-bmenu-check-position'
>   to call `bookmark-bmenu-ensure-position' instead, and to not use the
>   return value.

There is one bug also in bookmark-bmenu-hide-filenames where you forget
to put properties on bookmark when rebuilding.
So after one use of hide-/show-filenames, bookmark-bmenu-bookmark
doesn't work anymore because bookmark have no properties.

I sent a patch to Stefan.

-- 
A + Thierry Volpiatto
Location: Saint-Cyr-Sur-Mer - France





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

* Re: bookmark.el bug report
  2010-01-02  7:03     ` Thierry Volpiatto
@ 2010-01-02  7:26       ` Karl Fogel
  2010-01-02  8:15         ` Thierry Volpiatto
  0 siblings, 1 reply; 21+ messages in thread
From: Karl Fogel @ 2010-01-02  7:26 UTC (permalink / raw)
  To: Thierry Volpiatto; +Cc: emacs-devel

Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:
>There is one bug also in bookmark-bmenu-hide-filenames where you forget
>to put properties on bookmark when rebuilding.
>So after one use of hide-/show-filenames, bookmark-bmenu-bookmark
>doesn't work anymore because bookmark have no properties.
>
>I sent a patch to Stefan.

I can't reproduce this.  Can you please try with the latest bookmark.el
and let me know an exact reproduction recipe, if you can reproduce?

Thanks,
-Karl




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

* RE: bookmark.el bug report
  2010-01-02  5:05 ` Karl Fogel
  2010-01-02  5:15   ` Karl Fogel
@ 2010-01-02  7:51   ` Drew Adams
  2010-01-02  8:16     ` Karl Fogel
  1 sibling, 1 reply; 21+ messages in thread
From: Drew Adams @ 2010-01-02  7:51 UTC (permalink / raw)
  To: 'Karl Fogel', 'Sun Yijiang'; +Cc: emacs-devel

> Note to Drew Adams: I took your suggestions about new constants.
> However, I did not wrap the new `save-excursion' in `ignore-errors'
> or `condition-case', because we should never be at eob right 
> after calling `bookmark-bmenu-ensure-position' (and if we are,
> I want to know).

Hi Karl,

Do as you like, but part of my message was that there is no need to call
`bookmark-bmenu-check-position' here (which you renamed `...ensure...').

Since the "check" part of that function doesn't really do anything, all it
really does is move point to the nearest bookmark line. If point is already on a
bookmark line, then it is a no-op.

And the way to tell if point is on a bookmark line is (now) to call
`bookmark-bmenu-bookmark'. So I use this simplified code (FWIW):

(defun bookmark-bmenu-check-position ()
  "Move to the beginning of the nearest bookmark line."
  (beginning-of-line)
  (unless (bookmark-bmenu-bookmark)
    (if (and (bolp) (eobp))
        (beginning-of-line 0)
      (goto-char (point-min))
      (forward-line bookmarkp-bmenu-header-lines)))
  t) ; Vanilla bookmark code depends on non-nil value.

(defun bookmark-bmenu-bookmark ()
  "Return the name of the bookmark on this line."
  (condition-case nil
      (save-excursion
       (forward-line 0)
       (forward-char (1+ bookmarkp-bmenu-marks-width))
       (get-text-property (point) 'bookmarkp-bookmark-name))
    (error nil)))

Instead of calling `*-bmenu-bookmark' at the beginning of `ensure' to check for
a no-op, the original code has it backward: it calls `ensure' at the start of
each call to `*-bmenu-bookmark', to ensure that point is on a bookmark line. But
for many calls to `*-bmenu-bookmark', we already know that point is on a
bookmark line.

If it is not called also within `*-bmenu-bookmark', then `ensure' is called much
less often than `*-bmenu-bookmark'. And the original code has extra calls to
`ensure', besides the one in `*-bmenu-mark'. In fact, it often calls it both at
the beginning and at the end of a function (e.g. `*-bmenu-delete').

`ensure' only needs to be called before some (not all) of the calls to
`*-bmenu-bookmark' - it has no use otherwise.

That's why I said you can get rid of some of the calls to `ensure'. But if
`ensure' is not called from within `*-bmenu-bookmark' then you need to protect
the eob case (just to inhibit a msg) - hence the `condition-case'.

HTH.

--

I don't know what changes you actually made, since I cannot see them here:
http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/
The last revision of bookmark.el shown there dates from Nov 24.

Has the URL for the Emacs development source code changed, now that the
repository is on BZR? If so, what is it - how does one get to the source code
via HTTP? And if that URL is no longer valid, then its Web page should redirect
to the proper URL, no?

Personally, I do not intend to access the repository using BZR (just as I did
not use CVS to access it before). I'm looking for a way to download a revision
by just clicking an ordinary web-page link in my browser, as before.





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

* Re: bookmark.el bug report
  2010-01-02  7:26       ` Karl Fogel
@ 2010-01-02  8:15         ` Thierry Volpiatto
  2010-01-02 19:17           ` Karl Fogel
  0 siblings, 1 reply; 21+ messages in thread
From: Thierry Volpiatto @ 2010-01-02  8:15 UTC (permalink / raw)
  To: emacs-devel

Karl Fogel <kfogel@red-bean.com> writes:

> Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:
>>There is one bug also in bookmark-bmenu-hide-filenames where you forget
>>to put properties on bookmark when rebuilding.
>>So after one use of hide-/show-filenames, bookmark-bmenu-bookmark
>>doesn't work anymore because bookmark have no properties.
>>
>>I sent a patch to Stefan.
>
> I can't reproduce this.  Can you please try with the latest bookmark.el
> and let me know an exact reproduction recipe, if you can reproduce?

It is working, but still fragile if you don't put properties on bookmark
when rebuilding in *-hide-filenames.

,----[ bookmark-bmenu-hide-filenames ]
| (while bookmark-bmenu-hidden-bookmarks
|   (move-to-column column t)
|   (bookmark-kill-line)
|   (let ((name  (pop bookmark-bmenu-hidden-bookmarks))
| 	(start (point)))
|     (insert name)
|     (put-text-property start (point) 'bookmark-name-prop name)
|     (if (and (display-color-p) (display-mouse-p))
| 	(add-text-properties
| 	 start (point)
`----

Also, in the same function,now you have a new variable, there is no need
to set column around bookmark title, just set it to this new variable.

,----[ bookmark-bmenu-hide-filenames ]
| (let ((inhibit-read-only t)
|       (column bookmark-bmenu-marks-width))
`----

Why `bookmark-bmenu-marks-width' is set to 1 and not 2?

-- 
A + Thierry Volpiatto
Location: Saint-Cyr-Sur-Mer - France





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

* Re: bookmark.el bug report
  2010-01-02  7:51   ` Drew Adams
@ 2010-01-02  8:16     ` Karl Fogel
  2010-01-02  8:42       ` Drew Adams
  0 siblings, 1 reply; 21+ messages in thread
From: Karl Fogel @ 2010-01-02  8:16 UTC (permalink / raw)
  To: Drew Adams; +Cc: 'Sun Yijiang', emacs-devel

"Drew Adams" <drew.adams@oracle.com> writes:
>Do as you like, but part of my message was that there is no need to call
>`bookmark-bmenu-check-position' here (which you renamed `...ensure...').
>
>Since the "check" part of that function doesn't really do anything, all
>it really does is move point to the nearest bookmark line. If point is
>already on a bookmark line, then it is a no-op.

Sure.  But when point is *not* on a bookmark line (for example, if it is
at the beginning or end of the buffer), then it should be moved to a
bookmark line.  IMHO, the mode works much more intuitively if it behaves
that way.

>And the way to tell if point is on a bookmark line is (now) to call
>`bookmark-bmenu-bookmark'. So I use this simplified code (FWIW):
>
>(defun bookmark-bmenu-check-position ()
>  "Move to the beginning of the nearest bookmark line."
>  (beginning-of-line)
>  (unless (bookmark-bmenu-bookmark)
>    (if (and (bolp) (eobp))
>        (beginning-of-line 0)
>      (goto-char (point-min))
>      (forward-line bookmarkp-bmenu-header-lines)))
>  t) ; Vanilla bookmark code depends on non-nil value.
>
>(defun bookmark-bmenu-bookmark ()
>  "Return the name of the bookmark on this line."
>  (condition-case nil
>      (save-excursion
>       (forward-line 0)
>       (forward-char (1+ bookmarkp-bmenu-marks-width))
>       (get-text-property (point) 'bookmarkp-bookmark-name))
>    (error nil)))
>
>Instead of calling `*-bmenu-bookmark' at the beginning of `ensure' to check for
>a no-op, the original code has it backward: it calls `ensure' at the start of
>each call to `*-bmenu-bookmark', to ensure that point is on a bookmark
>line. But for many calls to `*-bmenu-bookmark', we already know that
>point is on a bookmark line.
>
>If it is not called also within `*-bmenu-bookmark', then `ensure' is
>called much less often than `*-bmenu-bookmark'. And the original code
>has extra calls to `ensure', besides the one in `*-bmenu-mark'. In
>fact, it often calls it both at the beginning and at the end of a
>function (e.g. `*-bmenu-delete').
>
>`ensure' only needs to be called before some (not all) of the calls to
>`*-bmenu-bookmark' - it has no use otherwise.
>
>That's why I said you can get rid of some of the calls to `ensure'. But
>if `ensure' is not called from within `*-bmenu-bookmark' then you need
>to protect the eob case (just to inhibit a msg) - hence the
>`condition-case'.

I believe that most of the calls to `-ensure-' can now be gotten rid of
(though probably not all, e.g., in `bookmark-bmenu-mark').  However, I
like to move one step at a time -- and the first step was to get rid of
the tests, not the calls themselves.  I just need to take a separate
look regarding the calls.

>I don't know what changes you actually made, since I cannot see them here:
>http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/
>The last revision of bookmark.el shown there dates from Nov 24.

Yeah, CVS has been read-only since we switched to Bazaar some days ago,
and will not be receiving any more changes.

>Has the URL for the Emacs development source code changed, now that the
>repository is on BZR? If so, what is it - how does one get to the
>source code via HTTP? And if that URL is no longer valid, then its Web
>page should redirect to the proper URL, no?

Yes, it has changed.  http://www.emacswiki.org/emacs-en/BzrForEmacsDevs
has the details.

>Personally, I do not intend to access the repository using BZR (just as
>I did not use CVS to access it before). I'm looking for a way to
>download a revision by just clicking an ordinary web-page link in my
>browser, as before.

The URL to start at is http://bzr.savannah.gnu.org/lh/emacs/, but
unfortunately it's broken right now.  There is a ticket filed about
fixing it: https://savannah.gnu.org/support/index.php?107142

Fortunately, the version at Launchpad is working just fine:

  https://code.launchpad.net/~vcs-imports/emacs/trunk

And bookmark.el is here:

http://bazaar.launchpad.net/~vcs-imports/emacs/trunk/annotate/head%3A/lisp/bookmark.el

That should always be up-to-date, give or take a few hours.

-Karl




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

* RE: bookmark.el bug report
  2010-01-02  8:16     ` Karl Fogel
@ 2010-01-02  8:42       ` Drew Adams
  0 siblings, 0 replies; 21+ messages in thread
From: Drew Adams @ 2010-01-02  8:42 UTC (permalink / raw)
  To: 'Karl Fogel'; +Cc: 'Sun Yijiang', emacs-devel

> Fortunately, the version at Launchpad is working just fine:
> https://code.launchpad.net/~vcs-imports/emacs/trunk

Shouldn't the obsolete CVS page be automatically redirected here?
http://bazaar.launchpad.net/%7Evcs-imports/emacs/trunk/files/head%3A/lisp/

That seems to be more or less the equivalent of the old page:
http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/

Redirection means bookmarks will continue to work etc.





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

* Re: bookmark.el bug report
  2010-01-02  8:15         ` Thierry Volpiatto
@ 2010-01-02 19:17           ` Karl Fogel
  0 siblings, 0 replies; 21+ messages in thread
From: Karl Fogel @ 2010-01-02 19:17 UTC (permalink / raw)
  To: Thierry Volpiatto; +Cc: emacs-devel

Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:
>> I can't reproduce this.  Can you please try with the latest bookmark.el
>> and let me know an exact reproduction recipe, if you can reproduce?
>
>It is working, but still fragile if you don't put properties on bookmark
>when rebuilding in *-hide-filenames.

I've fixed it to work the way you recommend, which is more robust than
what I was doing before.  Thanks (there was a boundary error in my head
that led me to believe the old way was robust too, but then I remembered
about annotation marks appearing in the second column).

>,----[ bookmark-bmenu-hide-filenames ]
>| (while bookmark-bmenu-hidden-bookmarks
>|   (move-to-column column t)
>|   (bookmark-kill-line)
>|   (let ((name  (pop bookmark-bmenu-hidden-bookmarks))
>| 	(start (point)))
>|     (insert name)
>|     (put-text-property start (point) 'bookmark-name-prop name)
>|     (if (and (display-color-p) (display-mouse-p))
>| 	(add-text-properties
>| 	 start (point)
>`----
>
>Also, in the same function,now you have a new variable, there is no need
>to set column around bookmark title, just set it to this new variable.

I've gotten rid of the column variable -- you're right, it's no longer
necessary -- and am adding the text property now.

I think you might have an older version of bookmark.el; are you working
with the latest one from the Bazaar master branch?  If not, please do.
If you can't get it the usual way, then see [1] for another way.  Also,
it would be great if you can send suggested changes in 'patch' form
(i.e., using 'diff -u').  But I can read it the above way too.

>,----[ bookmark-bmenu-hide-filenames ]
>| (let ((inhibit-read-only t)
>|       (column bookmark-bmenu-marks-width))
>`----
>
>Why `bookmark-bmenu-marks-width' is set to 1 and not 2?

See above about boundary error.  Fixed now :-).

Thanks!

-Karl

[1] http://bazaar.launchpad.net/~vcs-imports/emacs/trunk/annotate/head%3A/lisp/bookmark.el




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

end of thread, other threads:[~2010-01-02 19:17 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-28  6:19 bookmark.el bug report Sun Yijiang
2009-12-28  6:48 ` Karl Fogel
2009-12-28  7:41   ` Thierry Volpiatto
2009-12-28 15:58     ` Drew Adams
2009-12-28 21:12       ` Karl Fogel
2009-12-29 18:22         ` Stefan Monnier
2009-12-30 13:37           ` Thierry Volpiatto
2009-12-30 15:28             ` Stefan Monnier
2009-12-30 15:57               ` Drew Adams
2009-12-30 16:26                 ` Drew Adams
2009-12-30 17:43               ` Thierry Volpiatto
2009-12-30 18:32                 ` Stefan Monnier
2010-01-02  5:05 ` Karl Fogel
2010-01-02  5:15   ` Karl Fogel
2010-01-02  7:03     ` Thierry Volpiatto
2010-01-02  7:26       ` Karl Fogel
2010-01-02  8:15         ` Thierry Volpiatto
2010-01-02 19:17           ` Karl Fogel
2010-01-02  7:51   ` Drew Adams
2010-01-02  8:16     ` Karl Fogel
2010-01-02  8:42       ` Drew Adams

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