From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: org-mode and mode hooks. Date: Fri, 27 May 2005 11:07:07 +0300 Organization: JURTA Message-ID: <87sm092ivl.fsf@jurta.org> References: <87y8a3mnz8.fsf@xs4all.nl> <87ll63weye.fsf-monnier+emacs@gnu.org> <200505251624.j4PGOBF24551@raven.dms.auburn.edu> <87hdgql1nd.fsf@xs4all.nl> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1117184890 14345 80.91.229.2 (27 May 2005 09:08:10 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 27 May 2005 09:08:10 +0000 (UTC) Cc: emacs-devel@gnu.org, teirllm@dms.auburn.edu, monnier@iro.umontreal.ca, lute.kamstra.lists@xs4all.nl, dominik@science.uva.nl Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri May 27 11:08:05 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1Dbans-00088V-1C for ged-emacs-devel@m.gmane.org; Fri, 27 May 2005 11:06:52 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Dbas6-00033D-T1 for ged-emacs-devel@m.gmane.org; Fri, 27 May 2005 05:11:14 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1DbZxX-0000Wl-05 for emacs-devel@gnu.org; Fri, 27 May 2005 04:12:47 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1DbZxO-0000QL-PG for emacs-devel@gnu.org; Fri, 27 May 2005 04:12:41 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1DbZx2-00008C-VK for emacs-devel@gnu.org; Fri, 27 May 2005 04:12:18 -0400 Original-Received: from [194.126.101.111] (helo=mail.neti.ee) by monty-python.gnu.org with esmtp (Exim 4.34) id 1DbZvc-0007Qc-0y; Fri, 27 May 2005 04:10:48 -0400 Original-Received: from mail.neti.ee (80-235-33-24-dsl.mus.estpak.ee [80.235.33.24]) by Relayhost1.neti.ee (Postfix) with ESMTP id A29AC4097; Fri, 27 May 2005 11:10:39 +0300 (EEST) Original-To: rms@gnu.org In-Reply-To: (Richard Stallman's message of "Thu, 26 May 2005 23:39:48 -0400") User-Agent: Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux) X-Virus-Scanned: by amavisd-new-2.2.1 (20041222) (Debian) at neti.ee X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:37760 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:37760 > We also need to find other modes that are effectively "derived" and > ought to use delay-mode-hooks. I think one could write a Lisp program > that would search for a match for "([-a-z]+-mode " within a defun that > starts with "(defun [-a-z]+-mode ". For searching in Lisp structures I use the following piece of code (not a separate package yet): (defun emacs-lisp-grep (dir expr) (if (file-directory-p dir) (mapcan (lambda (filename) (let ((fullname (concat dir filename))) (cond ((member filename '("." "..")) nil) ((file-directory-p fullname) (emacs-lisp-grep fullname expr)) ((and (file-exists-p fullname) (string-match "\.el$" fullname)) (with-temp-buffer (insert-file-contents fullname) (let (s res) (condition-case nil (while t (setq s (read (current-buffer))) (let ((ret (funcall expr s))) (if ret (setq res (cons (list filename s ret) res))))) (error res)) res)))))) (directory-files (setq dir (file-name-as-directory dir)) nil nil t)))) Using it for searching for "[-a-z]+-mode " with the code: (mapc (lambda (elt) (insert (format "%s:%s %S\n" (nth 0 elt) (cadr (nth 1 elt)) (nth 2 elt)))) (emacs-lisp-grep "./emacs/lisp" (lambda (expr) (and (eq 'defun (car expr)) (string-match "[-a-z]+-mode\\'" (format "%s" (cadr expr))) (delq nil (mapcar (lambda (elt) (if (and (not (eq elt (cadr expr))) (not (memq elt '(major-mode))) (symbolp elt) (string-match "[-a-z]+-mode\\'" (format "%s" elt))) elt)) (flatten-list (cddr expr)))))))) (defun flatten-list (list) "Return a flat list." (cond ((consp list) (apply 'append (mapcar 'flatten-list list))) (list (list list)))) produces the output (I guess the search condition needs more tweaking to produce more desirable output): wdired.el:wdired-change-to-dired-mode (dired-mode) wdired.el:wdired-change-to-wdired-mode (wdired-mode) iimage.el:turn-off-iimage-mode (iimage-mode) iimage.el:turn-on-iimage-mode (iimage-mode) url-handlers.el:url-handlers-set-buffer-mode (auto-save-mode) org.el:org-agenda-mode (org-agenda-follow-mode) org.el:org-mode (outline-mode) conf-mode.el:conf-xdefaults-mode (conf-colon-mode) conf-mode.el:conf-ppd-mode (conf-colon-mode) conf-mode.el:conf-colon-mode (conf-mode conf-unix-mode) conf-mode.el:conf-space-mode (conf-unix-mode) conf-mode.el:conf-javaprop-mode (conf-mode) conf-mode.el:conf-windows-mode (conf-mode) conf-mode.el:conf-unix-mode (conf-mode) conf-mode.el:conf-mode (conf-javaprop-mode conf-colon-mode conf-space-mode conf-windows-mode conf-unix-mode) tex-mode.el:tex-mode (tex-guess-mode) tex-mode.el:tex-guess-mode (tex-default-mode slitex-mode latex-mode plain-tex-mode) table.el:*table--cell-describe-mode (describe-mode) reftex-toc.el:reftex-toc-mode (transient-mark-mode) reftex-global.el:reftex-isearch-minor-mode (old-reftex-isearch-minor-mode old-reftex-isearch-minor-mode reftex-mode reftex-mode) picture.el:picture-mode (picture-mode-old-major-mode) nroff-mode.el:electric-nroff-mode (nroff-mode nroff-electric-mode nroff-electric-mode nroff-electric-mode nroff-electric-mode) flyspell.el:flyspell-mode (old-flyspell-mode old-flyspell-mode) flyspell.el:flyspell-prog-mode (flyspell-mode) enriched.el:enriched-after-change-major-mode (enriched-mode enriched-mode) enriched.el:enriched-before-change-major-mode (enriched-mode) xterm.el:xterm-rxvt-set-background-mode (frame-background-mode frame-background-mode frame-set-background-mode) rxvt.el:rxvt-set-background-mode (frame-background-mode frame-background-mode frame-set-background-mode) gdb-ui.el:gdb-locals-mode (gud-minor-mode) gdb-ui.el:gdb-frames-mode (font-lock-mode gud-minor-mode) gdb-ui.el:gdb-breakpoints-mode (gud-minor-mode) xscheme.el:xscheme-enter-debugger-mode (scheme-debugger-mode scheme-interaction-mode scheme-interaction-mode) xscheme.el:xscheme-enter-interaction-mode (scheme-interaction-mode scheme-debugger-mode scheme-interaction-mode) xscheme.el:exit-scheme-interaction-mode (scheme-interaction-mode xscheme-previous-mode) xscheme.el:scheme-interaction-mode (previous-mode xscheme-previous-mode xscheme-previous-mode previous-mode) tcl.el:tcl-auto-fill-mode (auto-fill-mode) sql.el:sql-interactive-mode (comint-mode) octave-inf.el:inferior-octave-mode (comint-mode) inf-lisp.el:inferior-lisp-mode (comint-mode) cwarn.el:turn-on-cwarn-mode (cwarn-mode) cpp.el:cpp-edit-mode (auto-save-mode) cperl-mode.el:cperl-mode (cperl-use-major-mode abbrev-mode cperl-old-auto-fill-mode cperl-old-auto-fill-mode auto-fill-mode auto-fill-mode cperl-old-auto-fill-mode perl-mode font-lock-mode) compile.el:compilation-mode (name-of-mode name-of-mode) cc-mode.el:pike-mode (c-initialize-cc-mode abbrev-mode) cc-mode.el:idl-mode (c-initialize-cc-mode) cc-mode.el:java-mode (c-initialize-cc-mode abbrev-mode) cc-mode.el:objc-mode (c-initialize-cc-mode abbrev-mode) cc-mode.el:c-mode (c-initialize-cc-mode abbrev-mode) cc-mode.el:c-initialize-cc-mode (c-buffer-is-cc-mode c-leave-cc-mode-mode c-mode) cc-mode.el:c-leave-cc-mode-mode (c-buffer-is-cc-mode) antlr-mode.el:antlr-mode (c-initialize-cc-mode c-buffer-is-cc-mode) dunnet.el:dun-mode (text-mode) doctor.el:doctor-mode (text-mode) decipher.el:decipher-stats-mode (indent-tabs-mode) decipher.el:decipher-mode (indent-tabs-mode) lazy-lock.el:lazy-lock-mode (font-lock-mode font-lock-support-mode font-lock-mode) fast-lock.el:fast-lock-mode (font-lock-mode font-lock-support-mode font-lock-mode) ange-ftp.el:internal-ange-ftp-mode (comint-mode) ange-ftp.el:ange-ftp-set-buffer-mode (auto-save-mode) mh-e.el:mh-set-scan-mode (mh-showing-mode) rmailedit.el:rmail-edit-mode (text-mode) viper.el:set-viper-state-in-major-mode (viper-mode) viper.el:viper-mode (fundamental-mode) viper.el:toggle-viper-mode (viper-mode viper-mode viper-mode) viper-cmd.el:viper-start-R-mode (overwrite-mode) vip.el:vip-change-mode (new-mode new-mode vip-current-mode new-mode vi-mode vip-current-mode insert-mode new-mode insert-mode vip-current-mode emacs-mode vip-help-in-insert-mode new-mode emacs-mode vip-current-mode new-mode) vi.el:vi-mode (vi-mode-old-major-mode vi-mode-old-major-mode) vi.el:vi-back-to-old-mode (vi-mode-old-major-mode vi-mode-old-major-mode) vi.el:vi-switch-mode (help-mode) tpu-edt.el:tpu-toggle-overwrite-mode (overwrite-mode overwrite-mode overwrite-mode) crisp.el:crisp-mode (transient-mark-mode transient-mark-mode scroll-all-mode) re-builder.el:reb-quit-subexp-mode (reb-subexp-mode) re-builder.el:reb-enter-subexp-mode (reb-subexp-mode) helper.el:Helper-describe-mode (help-mode) eldoc.el:turn-on-eldoc-mode (eldoc-mode) edebug.el:edebug-eval-mode (lisp-interaction-mode) edebug.el:edebug-Continue-fast-mode (edebug-set-mode) edebug.el:edebug-continue-mode (edebug-set-mode) edebug.el:edebug-Trace-fast-mode (edebug-set-mode) edebug.el:edebug-trace-mode (edebug-set-mode) edebug.el:edebug-Go-nonstop-mode (edebug-set-mode) edebug.el:edebug-go-mode (edebug-set-mode) edebug.el:edebug-next-mode (edebug-set-mode) edebug.el:edebug-step-mode (edebug-set-mode) edebug.el:edebug-set-mode (edebug-execution-mode edebug-next-execution-mode) calendar.el:calendar-mode (indent-tabs-mode) calendar.el:describe-calendar-mode (help-mode) woman.el:woman-mode (Man-mode Man-mode) whitespace.el:whitespace-check-whitespace-mode (whitespace-mode whitespace-mode) vc.el:vc-dired-toggle-terse-mode (vc-dired-mode vc-dired-terse-mode vc-dired-terse-mode vc-dired-terse-mode) type-break.el:type-break-mode (type-break-mode-line-message-mode) term.el:term-line-mode (term-in-char-mode) term.el:term-char-mode (term-in-line-mode) term.el:term-mode (indent-tabs-mode term-insert-mode) tar-mode.el:tar-subfile-mode (auto-save-mode) speedbar.el:speedbar-mode (speedbar-frame-mode auto-show-mode) speedbar.el:speedbar-frame-mode (speedbar-mode speedbar-mode) simple.el:binary-overwrite-mode (overwrite-mode overwrite-mode) ses.el:ses-mode (transient-mark-mode) scroll-bar.el:scroll-bar-mode (set-scroll-bar-mode) scroll-bar.el:set-scroll-bar-mode (scroll-bar-mode scroll-bar-mode scroll-bar-mode scroll-bar-mode) man.el:Man-mode (auto-fill-mode) ledit.el:ledit-from-lisp-mode (ledit-mode) ledit.el:ledit-mode (lisp-mode ledit-from-lisp-mode) isearch.el:isearch-mode (isearch-slow-terminal-mode isearch-slow-terminal-mode) info-look.el:info-lookup-change-mode (info-lookup-mode) info-look.el:info-lookup-select-mode (info-lookup-mode info-lookup-mode info-lookup-mode info-lookup-mode info-lookup-mode) ibuffer.el:ibuffer-mode (show-paren-mode show-paren-mode ibuffer-sorting-mode ibuffer-default-sorting-mode) ibuf-ext.el:ibuffer-toggle-sorting-mode (ibuffer-sorting-mode ibuffer-sorting-mode) ibuf-ext.el:ibuffer-set-filter-groups-by-mode (ibuffer-mode) ibuf-ext.el:ibuffer-mouse-filter-by-mode (ibuffer-interactive-filter-by-mode) ibuf-ext.el:ibuffer-auto-mode (ibuffer-mode) hilit-chg.el:highlight-changes-mode (new-highlight-changes-mode new-highlight-changes-mode new-highlight-changes-mode) hi-lock.el:hi-lock-mode (font-lock-mode font-lock-mode font-lock-mode) hexl.el:hexl-mode (hexl-mode-old-major-mode hexl-mode-old-major-mode hexl-mode-old-ruler-mode hexl-mode-old-ruler-mode ruler-mode ruler-mode hexl-mode-old-hl-line-mode hexl-mode-old-hl-line-mode hl-line-mode hl-line-mode) help.el:describe-minor-mode (minor-mode minor-mode minor-mode minor-mode minor-mode minor-mode minor-mode minor-mode minor-mode) help.el:describe-mode (pretty-minor-mode pretty-minor-mode pretty-minor-mode pretty-minor-mode pretty-minor-mode pretty-minor-mode pretty-minor-mode) help-mode.el:help-mode (view-mode) fringe.el:fringe-mode (set-fringe-mode) fringe.el:set-fringe-mode (fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode fringe-mode) font-core.el:font-lock-change-mode (font-lock-mode) follow.el:turn-off-follow-mode (follow-mode) follow.el:turn-on-follow-mode (follow-mode) files.el:normal-mode (default-major-mode fundamental-mode set-auto-mode) faces.el:frame-set-background-mode (bg-mode frame-background-mode old-bg-mode background-mode bg-mode old-bg-mode background-mode bg-mode) emerge.el:emerge-set-merge-mode (emerge-fast-mode emerge-fast-mode emerge-edit-mode) emerge.el:emerge-edit-mode (emerge-mode emerge-fast-mode) emerge.el:emerge-fast-mode (emerge-mode emerge-edit-mode) ehelp.el:electric-describe-mode (describe-mode) ehelp.el:electric-help-mode (view-mode) ediff-merg.el:ediff-set-merge-mode (normal-mode) cus-edit.el:customize-mode (custom-group-of-mode custom-group-of-mode custom-group-of-mode) completion.el:dynamic-completion-mode (completion-setup-fortran-mode) calculator.el:calculator-radix-mode (calculator-radix-input-mode calculator-radix-output-mode) bindings.el:mode-line-auto-fill-mode (auto-fill-mode) bindings.el:mode-line-abbrev-mode (abbrev-mode) autorevert.el:turn-on-auto-revert-tail-mode (auto-revert-tail-mode) autorevert.el:turn-on-auto-revert-mode (auto-revert-mode) array.el:array-mode (overwrite-mode) arc-mode.el:archive-mode (default-major-mode auto-save-mode archive-subfile-mode archive-subfile-mode) gnus-dired.el:turn-on-gnus-dired-mode (gnus-dired-mode) gnus-dired.el:gnus-dired-mode (dired-mode gnus-add-minor-mode) mml.el:mml-mode (gnus-add-minor-mode) gnus-undo.el:gnus-undo-mode (gnus-add-minor-mode) gnus-topic.el:gnus-topic-mode (gnus-group-mode gnus-add-minor-mode) gnus-sum.el:gnus-dead-summary-mode (gnus-summary-mode gnus-add-minor-mode) gnus-sum.el:gnus-summary-mode (turn-on-gnus-mailing-list-mode summary-mode) gnus-start.el:gnus-slave-mode (gnus-add-minor-mode) gnus-salt.el:gnus-tree-mode (tree-mode) gnus-salt.el:gnus-binary-mode (gnus-summary-mode gnus-add-minor-mode) gnus-salt.el:gnus-pick-mode (gnus-summary-mode gnus-add-minor-mode) gnus-ml.el:gnus-mailing-list-mode (gnus-summary-mode gnus-add-minor-mode) gnus-ml.el:turn-on-gnus-mailing-list-mode (gnus-mailing-list-mode) gnus-group.el:gnus-group-mode (group-mode gnus-undo-mode gnus-slave-mode) gnus-gl.el:gnus-grouplens-mode (gnus-summary-mode menu-bar-mode gnus-add-minor-mode) gnus-draft.el:gnus-draft-mode (gnus-summary-mode gnus-add-minor-mode mml-mode) gnus-art.el:gnus-article-mode (article-mode) gnus-agent.el:gnus-agent-mode (gnus-group-mode) calc.el:calc-trail-mode (fundamental-mode) calc.el:calc-mode (calc-algebraic-mode) calc-mode.el:calc-units-simplify-mode (calc-set-simplify-mode) calc-mode.el:calc-ext-simplify-mode (calc-set-simplify-mode) calc-mode.el:calc-alg-simplify-mode (calc-set-simplify-mode) calc-mode.el:calc-bin-simplify-mode (calc-set-simplify-mode) calc-mode.el:calc-default-simplify-mode (calc-set-simplify-mode calc-num-simplify-mode calc-no-simplify-mode calc-bin-simplify-mode calc-alg-simplify-mode calc-ext-simplify-mode calc-units-simplify-mode) calc-mode.el:calc-num-simplify-mode (calc-set-simplify-mode) calc-mode.el:calc-no-simplify-mode (calc-set-simplify-mode) calc-mode.el:calc-set-simplify-mode (calc-change-mode calc-simplify-mode calc-simplify-mode calc-simplify-mode) calc-mode.el:calc-matrix-mode (calc-change-mode) calc-mode.el:calc-infinite-mode (calc-change-mode calc-change-mode) calc-mode.el:calc-symbolic-mode (calc-change-mode) calc-mode.el:calc-algebraic-mode (calc-change-mode calc-incomplete-algebraic-mode calc-incomplete-algebraic-mode calc-change-mode calc-incomplete-algebraic-mode calc-incomplete-algebraic-mode) calc-mode.el:calc-total-algebraic-mode (calc-algebraic-mode calc-algebraic-mode calc-change-mode calc-algebraic-mode calc-incomplete-algebraic-mode) calc-mode.el:calc-mode-record-mode (calc-change-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode calc-mode-save-mode) calc-math.el:calc-radians-mode (calc-change-mode calc-angle-mode) calc-math.el:calc-degrees-mode (calc-change-mode calc-angle-mode calc-radians-mode calc-hms-mode) calc-frac.el:calc-frac-mode (calc-change-mode) calc-forms.el:calc-hms-mode (calc-change-mode calc-angle-mode) calc-ext.el:calc-change-mode (calc-mode-save-mode calc-mode-save-mode) calc-cplx.el:calc-polar-mode (calc-complex-mode calc-change-mode calc-complex-mode calc-change-mode calc-complex-mode) calc-alg.el:calc-modify-simplify-mode (calc-simplify-mode calc-simplify-mode calc-simplify-mode calc-simplify-mode) -- Juri Linkov http://www.jurta.org/emacs/