emacs-devel
[Top][All Lists]
Advanced

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

Re: beginning-of-defun (again)


From: Andreas Röhler
Subject: Re: beginning-of-defun (again)
Date: Thu, 29 Oct 2015 18:39:56 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4

 On 29.10.2015 14:47, David Kastrup wrote:
Oleh Krehel<address@hidden>  writes:

David Kastrup<address@hidden>  writes:

Oleh Krehel<address@hidden>  writes:

Hi Andreas,

Andreas Röhler<address@hidden>  writes:

maybe it's time to have a reasonable default-behavior of
beginning-of-defun in Emacs Lisp.
I think it works pretty well as is.

open-paren-in-column-0-is-defun-start
It's a strange variable that doesn't seem to do anything.
Huh?
Please give an example then. I'm not able to see a difference when it's
unset.
<URL:http://git.savannah.gnu.org/cgit/lilypond.git/commit/scm/define-grob-properties.scm?id=51172615f31aa2af30c0343b92f1cc372ef0ce91>

This is a Scheme file containing a large structure with multiline
strings.  Occasionally when working with this file, I have to reformat
strings which happened to have "(" after a newline after other people
worked on the file, in order to keep Emacs from misinterpreting the
context.  Such misinterpretation looks ugly in fontification and is a
real nuisance if you want to add several lines of new material and have
Emacs indent it since Emacs will not indent within "strings" (and when
it lost count of "..." pairs, that means everywhere where you'd want
it).


Below some benchmarks - don't know how to read the results BTW, it took several seconds each.
No idea WRT diff between two test rows.

In any case didn't feel a significant diff between pps-based un-compiled approach considered reliable and the built-in. GNU Emacs 24.4.1 (i586-pc-linux-gnu, GTK+ Version 3.14.5) of 2015-03-07 on binet, modified by Debian

ar-beginning-of-defun is available here:
http://bazaar.launchpad.net/~a-roehler/s-x-emacs-werkstatt/trunk/view/head:/gnu-emacs-fixes.el

;;;;;;;;;;

(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.001541s"
(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.001197s"
(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.001845s"
(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.001326s"

(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.002036s"
(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.001215s"
(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.001478s"
(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.001699s"

;;;; tests some times later

(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.003947s"
(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.008513s"
(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.004473s"
(bod-test 'ar-beginning-of-defun 99999)"Elapsed time: 0.004457s"

(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.004883s"
(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.004741s"
(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.004179s"
(bod-test 'beginning-of-defun 99999)"Elapsed time: 0.004660s"

;;;;;;;;;;

(defun bod-test (func repeat)
  (interactive)
  (let ((undo-outer-limit 999999999))
(set-buffer (get-buffer-create (concat (prin1-to-string func) "-bm-test")))
    (erase-buffer)
    (dotimes (i repeat) (insert "(defun foo1 (&optional beg end)
  \" \"
  (interactive \"\*\")
  (let ((beg (cond (beg)
                   ((use-region-p)
                    (region-beginning))
                   (t (point-min))))
        (end (cond (end (copy-marker end))
                   ((use-region-p)
                    (copy-marker (region-end)))
                   (t (copy-marker (point-max))))))
    (save-excursion
      (goto-char beg))
    (when (interactive-p) (message \"%s %s\" beg end))))
"))
    (benchmark repeat
           (progn
         (beginning-of-line)
         (funcall func)
         ;; (message "%s" (point))
     ))))

;;;



reply via email to

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