emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: slow bibtex menu access


From: Tak Ota
Subject: Re: slow bibtex menu access
Date: Mon, 14 Mar 2005 09:15:05 -0800 (PST)

If there is no objection to this patch could someone check it in
please.  Thank you.

-Tak

Tue, 8 Mar 2005 14:56:51 -0800: "Ota, Takaaki" <address@hidden> wrote:

> Stefan kindly informed me that table.el was slowing down menu
> operation considerably depending on buffer contents.  The attached
> patch corrects this problem.  Thanks Stefan.
> 
> -Tak
> 
> 2005-03-08  Takaaki Ota  <address@hidden>
> 
>       * textmodes/table.el (table--line-column-position): New idiom.
>       (table--row-column-insertion-point-p): New function to test
>       validity of row and column insertion operation at a location.
>       (table-global-menu, table-cell-menu): Use above functions for
>       deterministic test operation.
>       (table--editable-cell-p): Behave in deterministic fashion.
> 
> 
> Sat, 5 Mar 2005 13:27:00 -0800: "Stefan Monnier"
> <address@hidden> wrote:
> 
> > The following message is a courtesy copy of an article
> > that has been posted to gnu.emacs.help as well.
> > 
> > > Thank you, I'd forgotten that (haven't done it in a long time). So I
> > found
> > > the problem, and it was table.el. I had (require 'table) and
> (require
> > > 'emacs-wiki-table) (the latter requires table.el) in a few places. I
> > have
> > > no idea where and how table.el is causing the problem, but would it
> be
> > > possible to turn it off (I guess a hook might do it) while in
> bibtex?
> > > Tables are not needed in bibtex anyway.
> > 
> > Setting debug-on-quit and hitting C-g while the menu is being built
> > indicates that the time is actually spent in table--find-row-column.
> > 
> > Looking some more at the table.el code, it seems there is a minor
> > logic-thinko bug in it.  Can you try the patch below (it's against the
> > Emacs-CVS version of table.el, so you may have to apply the patch by
> > hand).
> > 
> > Tak, is my reasoning correct that `table--probe-cell' should return
> > non-nil
> > iff we're inside a table?
> > 
> > 
> >         Stefan
> > 
> > 
> > --- orig/lisp/textmodes/table.el
> > +++ mod/lisp/textmodes/table.el
> > @@ -1025,13 +1025,13 @@
> >        :help "Insert a text based table at point"]
> >       ["Row" table-insert-row
> >        :active (and (not buffer-read-only)
> > -              (or (table--probe-cell)
> > +              (and (table--probe-cell)
> >                    (save-excursion
> >                      (table--find-row-column nil t))))
> >        :help "Insert row(s) of cells in table"]
> >       ["Column" table-insert-column
> >        :active (and (not buffer-read-only)
> > -              (or (table--probe-cell)
> > +              (and (table--probe-cell)
> >                    (save-excursion
> >                      (table--find-row-column 'column t))))
> >        :help "Insert column(s) of cells in table"])
> > @@ -1077,13 +1077,13 @@
> >      ("Insert"
> >       ["Row" table-insert-row
> >        :active (and (not buffer-read-only)
> > -              (or (table--probe-cell)
> > +              (and (table--probe-cell)
> >                    (save-excursion
> >                      (table--find-row-column nil t))))
> >        :help "Insert row(s) of cells in table"]
> >       ["Column" table-insert-column
> >        :active (and (not buffer-read-only)
> > -              (or (table--probe-cell)
> > +              (and (table--probe-cell)
> >                    (save-excursion
> >                      (table--find-row-column 'column t))))
> >        :help "Insert column(s) of cells in table"])
*** ../../../../d/pub/emacs/pure/emacs-21.3.50/lisp/textmodes/table.el  Wed Feb 
 9 07:50:36 2005
--- table.el    Tue Mar  8 11:15:27 2005
***************
*** 5,11 ****
  ;; Keywords: wp, convenience
  ;; Author: Takaaki Ota <address@hidden>
  ;; Created: Sat Jul 08 2000 13:28:45 (PST)
! ;; Revised: Tue Jun 01 2004 11:36:39 (PDT)
  
  ;; This file is part of GNU Emacs.
  
--- 5,11 ----
  ;; Keywords: wp, convenience
  ;; Author: Takaaki Ota <address@hidden>
  ;; Created: Sat Jul 08 2000 13:28:45 (PST)
! ;; Revised: Tue Mar 08 2005 11:15:27 (PST)
  
  ;; This file is part of GNU Emacs.
  
***************
*** 1024,1039 ****
        :active (and (not buffer-read-only) (not (table--probe-cell)))
        :help "Insert a text based table at point"]
       ["Row" table-insert-row
!       :active (and (not buffer-read-only)
!                  (or (table--probe-cell)
!                      (save-excursion
!                        (table--find-row-column nil t))))
        :help "Insert row(s) of cells in table"]
       ["Column" table-insert-column
!       :active (and (not buffer-read-only)
!                  (or (table--probe-cell)
!                      (save-excursion
!                        (table--find-row-column 'column t))))
        :help "Insert column(s) of cells in table"])
      "----"
      ("Recognize"
--- 1024,1033 ----
        :active (and (not buffer-read-only) (not (table--probe-cell)))
        :help "Insert a text based table at point"]
       ["Row" table-insert-row
!       :active (table--row-column-insertion-point-p)
        :help "Insert row(s) of cells in table"]
       ["Column" table-insert-column
!       :active (table--row-column-insertion-point-p 'column)
        :help "Insert column(s) of cells in table"])
      "----"
      ("Recognize"
***************
*** 1076,1091 ****
    '("Table"
      ("Insert"
       ["Row" table-insert-row
!       :active (and (not buffer-read-only)
!                  (or (table--probe-cell)
!                      (save-excursion
!                        (table--find-row-column nil t))))
        :help "Insert row(s) of cells in table"]
       ["Column" table-insert-column
!       :active (and (not buffer-read-only)
!                  (or (table--probe-cell)
!                      (save-excursion
!                        (table--find-row-column 'column t))))
        :help "Insert column(s) of cells in table"])
      ("Delete"
       ["Row" table-delete-row
--- 1070,1079 ----
    '("Table"
      ("Insert"
       ["Row" table-insert-row
!       :active (table--row-column-insertion-point-p)
        :help "Insert row(s) of cells in table"]
       ["Column" table-insert-column
!       :active (table--row-column-insertion-point-p 'column)
        :help "Insert column(s) of cells in table"])
      ("Delete"
       ["Row" table-delete-row
***************
*** 4698,4703 ****
--- 4686,4715 ----
        (setq multiplier (1- multiplier)))
      ret-str))
  
+ (defun table--line-column-position (line column)
+   "Return the location of LINE forward at COLUMN."
+   (save-excursion
+     (forward-line line)
+     (move-to-column column)
+     (point)))
+ 
+ (defun table--row-column-insertion-point-p (&optional columnp)
+   "Return non nil if it makes sense to insert a row or a column at point."
+   (and (not buffer-read-only)
+        (or (get-text-property (point) 'table-cell)
+          (let ((column (current-column)))
+            (if columnp
+                (or (text-property-any (line-beginning-position 0)
+                                       (table--line-column-position -1 column)
+                                       'table-cell t)
+                    (text-property-any (line-beginning-position) (point) 
'table-cell t)
+                    (text-property-any (line-beginning-position 2)
+                                       (table--line-column-position 1 column)
+                                       'table-cell t))
+              (text-property-any (table--line-column-position -2 column)
+                                 (table--line-column-position -2 (+ 2 column))
+                                 'table-cell t))))))
+ 
  (defun table--find-row-column (&optional columnp no-error)
    "Search table and return a cell coordinate list of row or column."
    (let ((current-coordinate (table--get-coordinate)))
***************
*** 5136,5142 ****
  
  (defun table--editable-cell-p (&optional abort-on-error)
    (and (not buffer-read-only)
!        (table--probe-cell abort-on-error)))
  
  (defun table--probe-cell (&optional abort-on-error)
    "Probes a table cell around the point.
--- 5148,5154 ----
  
  (defun table--editable-cell-p (&optional abort-on-error)
    (and (not buffer-read-only)
!        (get-text-property (point) 'table-cell)))
  
  (defun table--probe-cell (&optional abort-on-error)
    "Probes a table cell around the point.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]