emacs-devel
[Top][All Lists]
Advanced

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

Re: org-mode and mode hooks.


From: Juri Linkov
Subject: Re: org-mode and mode hooks.
Date: Fri, 27 May 2005 11:07:07 +0300
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux)

> 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/





reply via email to

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