yuuji@46: ;;; -*- Emacs-Lisp -*- yuuji@46: ;;; YaTeX facilities for Emacs 19 yuuji@46: ;;; (c )1994 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp] yuuji@47: ;;; Last modified Fri Sep 23 04:30:27 1994 on figaro yuuji@46: ;;; $Id$ yuuji@46: yuuji@46: ;;; とりあえず hilit19 を使っている時に色が付くようにして yuuji@46: ;;; メニューバーでごにょごにょできるようにしただけ。 yuuji@46: ;;; いったい誰がメニューバー使ってLaTeXソース書くんだろうか? yuuji@46: ;;; まあいいや練習練習。後ろの方にちょっとコメントあり。 yuuji@46: yuuji@47: (require 'yatex) yuuji@47: yuuji@46: (defun YaTeX-19-define-sub-menu (map vec &rest bindings) yuuji@46: "Define sub-menu-item in MAP at vector VEC as BINDINGS. yuuji@46: BINDINGS is a form with optional length: (symbol title binding). yuuji@46: When you defined menu-bar keymap such like: yuuji@46: (define-key foo-map [menu-bar foo] (make-sparse-keymap \"foo menu\")) yuuji@46: and you want to define sub menu for `foo menu' as followings. yuuji@46: foo -> menu1 (calling function `func1') yuuji@46: menu2 (doing interactive call `(func2 ...)' yuuji@46: Call this function like this: yuuji@46: (YaTeX-19-define-sub-menu foo-map [menu-bar foo] yuuji@46: '(m1 \"Function 1\" func1) yuuji@46: '(m2 \"Function 2\" (lambda () (interactive) (func2 ...)))) yuuji@46: where yuuji@46: `m1' and `m2' are the keymap symbol for sub-menu of `[menu-bar foo]. yuuji@46: `Funtion 1' and `Function 2' are the title strings for sub-menu. yuuji@46: " yuuji@46: (let ((i 0) (vec2 (make-vector (1+ (length vec)) nil))) yuuji@46: (while (< i (length vec)) yuuji@46: (aset vec2 i (aref vec i)) yuuji@46: (setq i (1+ i))) yuuji@46: (setq bindings (reverse bindings)) yuuji@46: (mapcar yuuji@46: (function yuuji@46: (lambda (bind) yuuji@46: (aset vec2 (1- (length vec2)) (car bind)) ;set menu-symbol yuuji@46: (define-key map vec2 yuuji@46: (cons (car (cdr bind)) yuuji@46: (car (cdr (cdr bind))))))) yuuji@46: bindings))) yuuji@46: yuuji@46: ;; Menu for Typeset relating processes ---------------------------------------- yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex] yuuji@46: (cons "YaTeX" (make-sparse-keymap "YaTeX"))) yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex process] yuuji@46: (cons "Process" (make-sparse-keymap "Process"))) yuuji@46: (YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex process] yuuji@46: '(buffer "LaTeX" (lambda () (interactive) (YaTeX-typeset-menu nil ?j))) yuuji@46: '(kill "Kill LaTeX" (lambda () (interactive) (YaTeX-typeset-menu nil ?k))) yuuji@46: '(bibtex "BibTeX" (lambda () (interactive) (YaTeX-typeset-menu nil ?b))) yuuji@46: '(makeindex "makeindex" (lambda () (interactive) (YaTeX-typeset-menu nil ?i))) yuuji@46: '(preview "Preview" (lambda () (interactive) (YaTeX-typeset-menu nil ?p))) yuuji@46: '(lpr "lpr" (lambda () (interactive) (YaTeX-typeset-menu nil ?l))) yuuji@46: '(lpq "lpq" (lambda () (interactive) (YaTeX-typeset-menu nil ?q))) yuuji@46: ) yuuji@46: yuuji@46: ;; Help for LaTeX ------------------------------------------------------------ yuuji@46: (YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex] yuuji@46: '(sephelp "--") yuuji@46: '(help "Help on LaTeX commands" YaTeX-help) yuuji@46: '(apropos "Apropos on LaTeX commands" YaTeX-apropos)) yuuji@46: yuuji@46: ;; Switch modes -------------------------------------------------------------- yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex switch] yuuji@46: (cons "Switching YaTeX's modes" (make-sparse-keymap "modes"))) yuuji@46: (or YaTeX-auto-math-mode yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex switch math] yuuji@46: '("Toggle math mode" . (lambda () (interactive) yuuji@46: (YaTeX-switch-mode-menu nil ?t))))) yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex switch mod] yuuji@46: '("Toggle modify mode" . (lambda () (interactive) yuuji@46: (YaTeX-switch-mode-menu nil ?m)))) yuuji@46: yuuji@46: ;; % menu -------------------------------------------------------------------- yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex percent] yuuji@46: (cons "Edit %# notation" (make-sparse-keymap "Edit %# notation"))) yuuji@46: (YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex percent] yuuji@46: '(! "Change LaTeX typesetter(%#!)" yuuji@46: (lambda () (interactive) (YaTeX-%-menu nil nil ?!))) yuuji@46: '(begend "Set %#BEGIN-%#END on region" yuuji@46: (lambda () (interactive) (YaTeX-%-menu nil nil ?b))) yuuji@46: '(lpr "Change LPR format" yuuji@46: (lambda () (interactive) (YaTeX-%-menu nil nil ?l)))) yuuji@46: yuuji@46: ;; What position ------------------------------------------------------------- yuuji@46: (YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex] yuuji@46: '(what "What column in tabular" YaTeX-what-column)) yuuji@46: yuuji@46: ;; Jump cursor --------------------------------------------------------------- yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex jump] yuuji@46: (cons "Jump cursor" yuuji@46: (make-sparse-keymap "Jump cursor"))) yuuji@46: (YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex jump] yuuji@46: '(corres "Goto corersponding position" YaTeX-goto-corresponding-*) yuuji@46: '(main "Visit main source" (lambda () (interactive) (YaTeX-visit-main))) yuuji@46: '(main-other "Visit main source other window" YaTeX-visit-main-other-window) yuuji@46: ) yuuji@46: yuuji@46: ;; =========================================================================== yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex sepcom] yuuji@46: '("---" . nil)) yuuji@46: yuuji@46: ;; Comment/Uncomment --------------------------------------------------------- yuuji@46: (YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex] yuuji@46: '(comment "Comment region or environment" YaTeX-comment-region) yuuji@46: '(uncomment "Unomment region or environment" YaTeX-uncomment-region) yuuji@46: '(commentp "Comment paragraph" YaTeX-comment-paragraph) yuuji@47: '(uncommentp "Uncomment paragraph" YaTeX-uncomment-paragraph) yuuji@46: '(sepcom "--" nil) yuuji@46: ) yuuji@46: yuuji@46: yuuji@46: ;; =========================================================================== yuuji@46: ;; Change/Kill/Fill yuuji@46: (YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex] yuuji@46: '(change "Change macros" YaTeX-change-*) yuuji@46: '(kill "Kill macros" YaTeX-kill-*) yuuji@46: '(fillitem "Fill \\item" YaTeX-fill-item) yuuji@46: '(newline "Newline" YaTeX-intelligent-newline) yuuji@46: '(sepchg "--" nil) yuuji@46: ) yuuji@46: yuuji@46: ;; Menu for completions ------------------------------------------------------ yuuji@46: yuuji@46: yuuji@46: ;;;(YaTeX-19-define-sub-menu yuuji@46: ;;; YaTeX-mode-map [menu-bar yatex] yuuji@46: ;;; '(secr "Section-type command on region" YaTeX-make-section-region) yuuji@46: ;;; '(sec "Section-type command" YaTeX-make-section)) yuuji@46: yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex sectionr] yuuji@46: (cons "Section-type region(long name)" yuuji@46: (make-sparse-keymap "Enclose region with section-type macro"))) yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex section] yuuji@47: (cons "Section-type(long name)" yuuji@46: (make-sparse-keymap "Section-type macro"))) yuuji@46: (let ((sorted-section yuuji@46: (sort yuuji@46: (delq nil yuuji@46: (mapcar (function (lambda (s) yuuji@46: (if (> (length (car s)) 5) yuuji@46: (car s)))) yuuji@46: (append section-table user-section-table))) yuuji@46: 'string<))) yuuji@46: (apply 'YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex section] yuuji@46: (mapcar (function (lambda (secname) yuuji@46: (list (intern secname) secname yuuji@46: (list 'lambda () yuuji@46: (list 'interactive) yuuji@46: (list 'YaTeX-make-section yuuji@46: nil nil nil secname))))) yuuji@46: sorted-section)) yuuji@46: (apply 'YaTeX-19-define-sub-menu yuuji@46: YaTeX-mode-map [menu-bar yatex sectionr] yuuji@46: (mapcar (function (lambda (secname) yuuji@46: (list (intern secname) secname yuuji@46: (list 'lambda () yuuji@46: (list 'interactive) yuuji@46: (list 'YaTeX-make-section yuuji@46: nil yuuji@46: (list 'region-beginning) yuuji@46: (list 'region-end) yuuji@46: secname))))) yuuji@46: sorted-section))) yuuji@46: yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex envr] yuuji@46: (cons "Environment region" (make-sparse-keymap "Environment region"))) yuuji@46: (define-key YaTeX-mode-map [menu-bar yatex env] yuuji@46: (cons "Environment" (make-sparse-keymap "Environment"))) yuuji@46: (let (prev envname) yuuji@46: (mapcar yuuji@46: (function yuuji@46: (lambda (envalist) yuuji@46: (setq envname (car envalist)) yuuji@46: (define-key-after yuuji@46: (lookup-key YaTeX-mode-map [menu-bar yatex env]) yuuji@46: (vector (intern envname)) yuuji@46: (cons envname yuuji@46: (list 'lambda () (list 'interactive) yuuji@46: (list 'YaTeX-insert-begin-end yuuji@46: envname nil))) yuuji@46: prev) yuuji@46: (define-key-after yuuji@46: (lookup-key YaTeX-mode-map [menu-bar yatex envr]) yuuji@46: (vector (intern envname)) yuuji@46: (cons envname yuuji@46: (list 'lambda () (list 'interactive) yuuji@46: (list 'YaTeX-insert-begin-end yuuji@46: envname t))) yuuji@46: prev) yuuji@46: (setq prev (intern envname)))) yuuji@46: (sort (append env-table user-env-table) yuuji@46: '(lambda (x y) (string< (car x) (car y)))))) yuuji@46: yuuji@46: ;; Highlightening yuuji@46: ;; ローカルなマクロを読み込んだ後 redraw すると yuuji@46: ;; ローカルマクロを keyword として光らせる(keywordじゃまずいかな…)。 yuuji@46: (defvar YaTeX-hilit-pattern-adjustment yuuji@46: (list yuuji@46: ;;\def が define なんだから new* も define でしょう。 yuuji@46: '("\\\\\\(re\\)?new\\(environment\\|command\\){" "}" define) yuuji@46: '("\\\\new\\(length\\|theorem\\|counter\\){" "}" define) yuuji@46: ;;セクションコマンドが単なるキーワードってことはないでしょう。 yuuji@46: (list yuuji@46: (concat "\\\\\\(" YaTeX-sectioning-regexp "\\){") "}" yuuji@46: 'sectioning)) yuuji@46: "Adjustment for hilit19's LaTeX hilit pattern.") yuuji@46: (defvar YaTeX-hilit-sectioning-face yuuji@47: '(yellow/dodgerblue yellow/cornflowerblue)) yuuji@47: (defvar YaTeX-hilit-singlecmd-face yuuji@47: '(slateblue2 aquamarine)) yuuji@46: (defun YaTeX-19-collect-macro () yuuji@46: (cond yuuji@46: ((and (featurep 'hilit19) (fboundp 'hilit-translate)) yuuji@47: (let ((get-face yuuji@47: (function yuuji@47: (lambda (table) yuuji@47: (cond yuuji@47: ((eq hilit-background-mode 'light) (car table)) yuuji@47: ((eq hilit-background-mode 'dark) (car (cdr table))) yuuji@47: (t nil)))))) yuuji@47: (hilit-translate yuuji@47: sectioning (funcall get-face YaTeX-hilit-sectioning-face) yuuji@47: macro (funcall get-face YaTeX-hilit-singlecmd-face))) yuuji@47: (setq hilit-patterns-alist ;Remove at first. yuuji@46: (delq 'yatex-mode hilit-patterns-alist) yuuji@46: hilit-patterns-alist yuuji@46: (cons yuuji@46: (cons 'yatex-mode yuuji@46: (append yuuji@46: YaTeX-hilit-pattern-adjustment yuuji@46: (cdr (assq 'latex-mode hilit-patterns-alist)) yuuji@46: (list yuuji@46: (list yuuji@46: (concat "\\\\\\(" yuuji@46: (mapconcat yuuji@46: (function (lambda (s) (regexp-quote (car s)))) yuuji@46: (append user-section-table tmp-section-table) yuuji@46: "\\|") yuuji@46: "\\){") yuuji@47: "}" 'keyword) yuuji@47: (list yuuji@47: (concat "\\\\\\(" yuuji@47: (mapconcat yuuji@47: (function (lambda (s) (regexp-quote (car s)))) yuuji@47: (append user-singlecmd-table tmp-singlecmd-table) yuuji@47: "\\|") yuuji@47: "\\)") yuuji@47: 0 'macro)))) yuuji@46: hilit-patterns-alist))))) yuuji@46: (YaTeX-19-collect-macro) yuuji@46: (defun YaTeX-hilit-recenter (arg) yuuji@46: "Collect current local macro and hilit-recenter." yuuji@46: (interactive "P") yuuji@46: (YaTeX-19-collect-macro) yuuji@46: (hilit-recenter arg)) yuuji@46: (if (fboundp 'hilit-recenter) ;Replace hilit-recenter with yuuji@46: (mapcar (function (lambda (key) ;YaTeX-hilit-recenter in yatex-mode yuuji@46: (define-key YaTeX-mode-map key 'YaTeX-hilit-recenter))) yuuji@46: (where-is-internal 'hilit-recenter))) yuuji@46: yuuji@46: ;;; reverseVideo にして hilit-background-mode を 'dark yuuji@46: ;;; にしている人は数式などが暗くなりすぎて見づらいかもしれない。 yuuji@46: ;;; 次のコードを hilit19 をロードしている場所の直後に置くとちょっ yuuji@46: ;;; とはまし。 yuuji@46: ;;; (if (eq hilit-background-mode 'dark) yuuji@46: ;;; (hilit-translate yuuji@46: ;;; string 'mediumspringgreen yuuji@46: ;;; formula 'khaki yuuji@46: ;;; label 'yellow-underlined)) yuuji@46: yuuji@46: (provide 'yatex19)