yuuji@46: ;;; -*- Emacs-Lisp -*- yuuji@46: ;;; YaTeX facilities for Emacs 19 yuuji@70: ;;; (c )1994-1999 by HIROSE Yuuji.[yuuji@yatex.org] yuuji@70: ;;; Last modified Fri Nov 26 09:56:09 1999 on firestorm yuuji@46: ;;; $Id$ yuuji@46: yuuji@49: ;;; とりあえず hilit19 を使っている時に色が付くようにして yuuji@49: ;;; メニューバーでごにょごにょできるようにしただけ。 yuuji@49: ;;; いったい誰がメニューバー使ってLaTeXソース書くんだろうか? yuuji@49: ;;; まあいいや練習練習。後ろの方にちょっとコメントあり。 yuuji@53: ;;; 真中辺にあるけど、hilit19.el 対応の方は結構本気。 yuuji@64: ;;; とかいってるうちに hilit19 って obsolete になってしまった… yuuji@46: yuuji@64: ;(require 'yatex) yuuji@47: yuuji@70: (defvar YaTeX-use-hilit19 (and (featurep 'hilit19) (fboundp 'x-color-values) yuuji@70: (fboundp 'hilit-translate)) yuuji@70: "*Use hilit19 to fontify buffer or not.") yuuji@70: yuuji@64: (defvar YaTeX-mode-menu-map (make-sparse-keymap "YaTeX")) yuuji@64: (defvar YaTeX-mode-menu-map-process (make-sparse-keymap "Process")) yuuji@64: (define-key YaTeX-mode-map [menu-bar yatex] yuuji@64: (cons "YaTeX" YaTeX-mode-menu-map)) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-process yuuji@64: (nreverse yuuji@64: '((buffer "LaTeX" . (lambda () (interactive) (YaTeX-typeset-menu nil ?j))) yuuji@64: (kill "Kill LaTeX" . (lambda () (interactive) (YaTeX-typeset-menu nil ?k))) yuuji@64: (bibtex "BibTeX" . (lambda () (interactive) (YaTeX-typeset-menu nil ?b))) yuuji@64: (mindex "makeindex" . (lambda () (interactive) (YaTeX-typeset-menu nil ?i))) yuuji@64: (preview "Preview" . (lambda () (interactive) (YaTeX-typeset-menu nil ?p))) yuuji@64: (lpr "lpr" . (lambda () (interactive) (YaTeX-typeset-menu nil ?l))) yuuji@64: (lpq "lpq" . (lambda () (interactive) (YaTeX-typeset-menu nil ?q)))))) yuuji@64: (defvar YaTeX-mode-menu-map-modes (make-sparse-keymap "Modes")) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-modes yuuji@64: (delq nil yuuji@64: (nreverse yuuji@64: (list yuuji@64: (if YaTeX-auto-math-mode nil yuuji@64: (cons 'math (cons "Toggle math-mode" yuuji@64: '(lambda () (interactive) yuuji@64: (YaTeX-switch-mode-menu nil ?t))))) yuuji@64: (cons 'mod (cons "Toggle Modify Mode" yuuji@64: '(lambda () (interactive) yuuji@64: (YaTeX-switch-mode-menu nil ?m)))))))) yuuji@64: (defvar YaTeX-mode-menu-map-percent (make-sparse-keymap "percent")) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-percent yuuji@64: (nreverse yuuji@64: '((! "Change LaTeX typesetter(%#!)" yuuji@64: . (lambda () (interactive) (YaTeX-%-menu nil nil ?!))) yuuji@64: (begend "Set %#BEGIN-%#END on region" yuuji@64: . (lambda () (interactive) (YaTeX-%-menu nil nil ?b))) yuuji@64: (lpr "Change LPR format" yuuji@64: . (lambda () (interactive) (YaTeX-%-menu nil nil ?l)))))) yuuji@46: yuuji@64: (defvar YaTeX-mode-menu-map-jump (make-sparse-keymap "jump")) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-jump yuuji@64: (nreverse yuuji@64: '((corres "Goto corersponding position" . YaTeX-goto-corresponding-*) yuuji@64: (main "Visit main source" yuuji@64: . (lambda () (interactive) (YaTeX-visit-main))) yuuji@64: (main-other "Visit main source other window" yuuji@64: . YaTeX-visit-main-other-window)))) yuuji@46: yuuji@64: (defvar YaTeX-mode-menu-map-comment (make-sparse-keymap "comment")) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-comment yuuji@64: (nreverse yuuji@64: '((comment "Comment region or environment" . YaTeX-comment-region) yuuji@64: (uncomment "Unomment region or environment" . YaTeX-uncomment-region) yuuji@64: (commentp "Comment paragraph" . YaTeX-comment-paragraph) yuuji@64: (uncommentp "Uncomment paragraph" . YaTeX-uncomment-paragraph)))) yuuji@46: yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map yuuji@64: (nreverse yuuji@64: (list yuuji@64: ;; Change/Kill/Fill ------------------------------------------------------- yuuji@64: (cons (list 'chg "Change") (cons "Change macros" 'YaTeX-change-*)) yuuji@64: (cons (list 'kill "Kill") (cons "Kill macros" 'YaTeX-kill-*)) yuuji@64: (cons (list 'fill "Fill") (cons "Fill \\item" 'YaTeX-fill-item)) yuuji@64: (cons (list 'nl "Newline") (cons "Newline" 'YaTeX-intelligent-newline)) yuuji@64: ;; ======================================================================== yuuji@64: (cons (list 'sep1 "---") (cons "---" nil)) yuuji@64: ;; Comment/Uncomment ------------------------------------------------------ yuuji@64: (cons (list 'comment "comment") (cons "Comment region or environment" yuuji@64: 'YaTeX-comment-region)) yuuji@64: (cons (list 'uncomment "uncomment") (cons "Uncomment region or environment" yuuji@64: 'YaTeX-uncomment-region)) yuuji@64: (cons (list 'commentp "commentp") (cons "Comment paragraph" yuuji@64: 'YaTeX-comment-paragraph)) yuuji@64: (cons (list 'uncommentp "uncommentp") (cons "Uncomment paragraph" yuuji@64: 'YaTeX-uncomment-paragraph)) yuuji@64: ;; ======================================================================== yuuji@64: (cons (list 'sep2 "---") (cons "---" nil)) yuuji@64: ;; Jump cursor ------------------------------------------------------------ yuuji@64: (cons (list 'jump "jump") (cons "Jump Cursor" YaTeX-mode-menu-map-jump)) yuuji@64: ;; Document hierarchy --------------------------------------------------- yuuji@64: (cons (list 'hier "hier") (cons "Display Document hierarchy" yuuji@64: 'YaTeX-display-hierarchy)) yuuji@64: ;; What position ---------------------------------------------------------- yuuji@64: (cons (list 'col "column") (cons "What column in tabular" yuuji@64: 'YaTeX-what-column)) yuuji@64: ;; % menu ----------------------------------------------------------------- yuuji@64: (cons (list 'percent "percent") (cons "Edit %# notation" yuuji@64: YaTeX-mode-menu-map-percent)) yuuji@64: ;; Switch modes ----------------------------------------------------------- yuuji@64: (cons (list 'mode "mode") (cons "Switching YaTeX's modes" yuuji@64: YaTeX-mode-menu-map-modes)) yuuji@64: ;; ======================================================================== yuuji@64: (cons (list 'sep "---") (cons "---" nil)) yuuji@64: ;; Help for LaTeX --------------------------------------------------------- yuuji@64: (cons (list 'ap "apr") (cons "Apropos on LaTeX commands" 'YaTeX-apropos)) yuuji@64: (cons (list 'help "help") (cons "Help on LaTeX commands" 'YaTeX-help)) yuuji@64: ;; Menu for Typeset relating processes ------------------------------------ yuuji@64: (cons (list 'process "Process menu") yuuji@64: (cons "Process" YaTeX-mode-menu-map-process))) yuuji@64: )) yuuji@46: yuuji@64: ;; Make section-type commands menu ------------------------------------------- yuuji@64: (defvar YaTeX-mode-menu-map-sectionr yuuji@64: (make-sparse-keymap "Enclose region with section-type macro")) yuuji@64: (defvar YaTeX-mode-menu-map-section (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@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-section yuuji@64: (mapcar yuuji@64: (function (lambda (secname) yuuji@64: (cons (intern secname) yuuji@64: (cons secname yuuji@64: (list 'lambda () yuuji@64: (list 'interactive) yuuji@64: (list 'YaTeX-make-section yuuji@64: nil nil nil yuuji@64: secname)))))) yuuji@64: sorted-section)) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-sectionr yuuji@64: (mapcar yuuji@64: (function (lambda (secname) yuuji@64: (cons (intern secname) yuuji@64: (cons secname yuuji@64: (list 'lambda () yuuji@64: (list 'interactive) yuuji@64: (list 'YaTeX-make-section yuuji@64: nil yuuji@64: (list 'region-beginning) yuuji@64: (list 'region-end) yuuji@64: secname)))))) yuuji@64: sorted-section))) yuuji@46: yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map yuuji@64: (nreverse yuuji@64: (list yuuji@64: (cons '(sectionr "Section-type (long name)") yuuji@64: (cons "Section type" YaTeX-mode-menu-map-section)) yuuji@64: (cons '(section "Section-type region (long name)") yuuji@64: (cons "Section type region (long name)" yuuji@64: YaTeX-mode-menu-map-sectionr))))) yuuji@64: yuuji@64: ;; Make large-type commands menu --------------------------------------------- yuuji@64: (defvar YaTeX-mode-menu-map-envr (make-sparse-keymap "Environment region")) yuuji@64: (defvar YaTeX-mode-menu-map-env (make-sparse-keymap "Environment")) yuuji@64: yuuji@64: (let ((sorted-env yuuji@64: (sort yuuji@64: (mapcar (function (lambda (s) (car s))) yuuji@64: (append env-table user-env-table)) yuuji@64: 'string<))) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-env yuuji@64: (mapcar yuuji@64: (function (lambda (envname) yuuji@64: (cons (intern envname) yuuji@64: (cons envname yuuji@64: (list 'lambda () yuuji@64: (list 'interactive) yuuji@64: (list 'YaTeX-insert-begin-end yuuji@64: envname nil)))))) yuuji@64: sorted-env)) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map-envr yuuji@64: (mapcar yuuji@64: (function (lambda (envname) yuuji@64: (cons (intern envname) yuuji@64: (cons envname yuuji@64: (list 'lambda () yuuji@64: (list 'interactive) yuuji@64: (list 'YaTeX-insert-begin-end yuuji@64: envname t)))))) yuuji@64: sorted-env))) yuuji@64: (YaTeX-define-menu yuuji@64: 'YaTeX-mode-menu-map yuuji@64: (nreverse yuuji@64: (list yuuji@64: (cons '(envr "Environment") yuuji@64: (cons "Environment" YaTeX-mode-menu-map-env)) yuuji@64: (cons '(env "Environment region") yuuji@64: (cons "Environment region" yuuji@64: YaTeX-mode-menu-map-envr))))) yuuji@64: yuuji@64: (and (featurep 'xemacs) yuuji@64: (add-hook 'yatex-mode-hook yuuji@64: '(lambda () yuuji@64: (or (assoc "YaTeX" current-menubar) yuuji@64: (progn yuuji@64: (set-buffer-menubar (copy-sequence current-menubar)) yuuji@64: (add-submenu nil YaTeX-mode-menu-map)))))) yuuji@46: yuuji@53: ;; Other key bindings for window-system yuuji@53: ;(YaTeX-define-key [?\C- ] 'YaTeX-do-completion) yuuji@53: (define-key YaTeX-mode-map [?\M-\C- ] 'YaTeX-mark-environment) yuuji@53: yuuji@46: ;; Highlightening yuuji@53: ;; メニューに比べてこっちは結構本気でやってます。 yuuji@53: ;; だって文書構造がとっても分かり易いんだもん。 yuuji@53: ;; みんなも hilit19.el を使おう! yuuji@53: ;; yuuji@53: ;; さて、まずは対応する {} をピカピカ範囲とするような関数を作る。 yuuji@53: ;; これは hilit-LaTeX.el を参考にした。でも、ちゃんと section 型コマンドの yuuji@53: ;; 引数を数えて正しい位置までピカピカさせるよ〜ん! yuuji@53: yuuji@53: (defun YaTeX-19-region-section-type (pattern) yuuji@53: "Return list of starting and end point of section-type commands of PATTERN." yuuji@53: (if (re-search-forward pattern nil t) yuuji@69: (let ((m0 (match-beginning 0)) (e0 (match-end 0)) cmd (argc 1)) yuuji@64: (setq cmd (substring (YaTeX-match-string 0) 1) yuuji@53: argc (or (car (cdr (YaTeX-lookup-table cmd 'section))) argc)) yuuji@69: (if (= argc 0) (cons m0 (point)) ;引数個数0ならマッチした領域 yuuji@69: (skip-chars-forward " \n\t*") yuuji@69: (while (looking-at "\\[") (forward-list 1)) ;optionならスキップ yuuji@69: (skip-chars-forward " \n\t") yuuji@69: (if (looking-at "{") ;{}が始まるならちゃんとしたsection型 yuuji@69: (cons m0 yuuji@69: (progn ;(skip-chars-backward "^{") (forward-char -2) yuuji@69: (while (> argc 0) yuuji@69: (skip-chars-forward "^{") yuuji@69: (forward-list 1) yuuji@69: (setq argc (1- argc))) yuuji@69: (point))) yuuji@69: ;{}でないならたぶん \verb 環境などにあるダミー yuuji@69: (cons m0 e0)))))) yuuji@53: yuuji@53: (defun YaTeX-19-region-large-type (pattern) yuuji@53: "Return list of large-type contents. yuuji@53: Assumes PATTERN begins with `{'." yuuji@53: (if (re-search-forward pattern nil t) yuuji@53: (let ((m0 (match-beginning 0))) yuuji@53: (goto-char m0) yuuji@53: (skip-chars-forward "^ \t\n") yuuji@53: (skip-chars-forward " \t\n") yuuji@53: (cons (point) yuuji@53: (progn (goto-char m0) (forward-list 1) yuuji@53: (1- (point))))))) yuuji@53: yuuji@53: ;; 些細なことだが % の前の文字もピカリとさせてしまうようで… >hilit19 yuuji@53: ;; ↓この関数は下の hilit-set-mode-patterns の "[^\\]\\(%\\).*$" に yuuji@53: ;; 依存している yuuji@53: (defun YaTeX-19-region-comment (pattern) yuuji@53: "Return list of comment start and end point." yuuji@53: (if (re-search-forward pattern nil t) yuuji@56: (cons (match-beginning 2) (match-end 0)))) yuuji@56: yuuji@56: ;;(make-face 'tt) yuuji@56: ;;(set-face-font 'tt "-schumacher-clean-medium-r-normal--*-*-*-*-*-*-*-*") yuuji@56: ;;(hilit-translate 'tt "white") yuuji@53: yuuji@53: (defvar YaTeX-hilit-patterns-alist yuuji@53: '( yuuji@53: ;; comments yuuji@56: (YaTeX-19-region-comment "\\([^\\]\\|^\\)\\(%\\).*$" comment) yuuji@58: yuuji@64: (YaTeX-19-region-section-type "\\\\footnote\\(mark\\|text\\)?\\>" keyword) yuuji@53: ("\\\\[a-z]+box" 0 keyword) yuuji@64: (YaTeX-19-region-section-type "\\\\\\(v\\|h\\)space\\>" keyword) yuuji@58: yuuji@53: ;; (re-)define new commands/environments/counters yuuji@53: (YaTeX-19-region-section-type yuuji@64: "\\\\\\(re\\)?new\\(environment\\|command\\|theorem\\|length\\|counter\\)\\>" yuuji@60: defun) yuuji@53: (YaTeX-19-region-section-type yuuji@64: "\\\\textbf\\>" bold) yuuji@53: yuuji@53: ;; various declarations/definitions yuuji@53: (YaTeX-19-region-section-type yuuji@64: "\\\\\\(set\\|setto\\|addto\\)\\(length\\|width\\|counter\\)\\>" yuuji@53: define) yuuji@53: (YaTeX-19-region-section-type yuuji@64: "\\\\\\(title\\|author\\|date\\|thanks\\)\\>" define) yuuji@53: yuuji@59: ("\\\\document\\(style\\|class\\)\\(\\[.*\\]\\)?{" "}" decl) yuuji@53: ("\\\\\\(begin\\|end\\|nofiles\\|includeonly\\){" "}" decl) yuuji@53: ("\\\\\\(raggedright\\|makeindex\\|makeglossary\\|maketitle\\)\\b" 0 decl) yuuji@53: ("\\\\\\(pagestyle\\|thispagestyle\\|pagenumbering\\){" "}" decl) yuuji@53: ("\\\\\\(normalsize\\|small\\|footnotesize\\|scriptsize\\|tiny\\|large\\|Large\\|LARGE\\|huge\\|Huge\\)\\b" 0 decl) yuuji@53: ("\\\\\\(appendix\\|tableofcontents\\|listoffigures\\|listoftables\\)\\b" yuuji@53: 0 decl) yuuji@53: ("\\\\\\(bf\\|em\\|it\\|rm\\|sf\\|sl\\|ss\\|tt\\)\\b" 0 decl) yuuji@53: yuuji@53: ;; label-like things yuuji@53: ;;this should be customized by YaTeX-item-regexp yuuji@53: ("\\\\\\(sub\\)*item\\b\\(\\[[^]]*\\]\\)?" 0 label) yuuji@53: (YaTeX-19-region-section-type yuuji@64: "\\\\caption\\(\\[[^]]*\\]\\)?\\>" label) yuuji@53: yuuji@61: ;; things that do some sort of cross-reference yuuji@61: (YaTeX-19-region-section-type yuuji@64: "\\\\\\(\\(no\\)?cite\\|\\(page\\)?ref\\|label\\|index\\|glossary\\)\\>" yuuji@61: crossref) yuuji@61: yuuji@61: ;; things that bring in external files yuuji@61: ("\\\\\\(include\\|input\\|bibliography\\){" "}" include) yuuji@61: yuuji@53: ;; formulas yuuji@53: ("[^\\]\\\\(" "\\\\)" formula) ; \( \) yuuji@53: ("[^\\]\\\\\\[" "\\\\\\]" formula) ; \[ \] yuuji@68: ("\\\\begin{\\(eqn\\|equation\\|x?x?align\\|split\\|multline\\|gather\\)" yuuji@68: "\\\\end{\\(eqn\\|equation\\|x?x?align\\|split\\|multline\\|gather\\).*}" yuuji@58: formula) yuuji@58: ("[^\\$]\\($\\($[^$]*\\$\\|[^$]*\\)\\$\\)" 1 formula); '$...$' or '$$...$$' yuuji@53: yuuji@61: ;; "wysiwyg" emphasis -- these don't work on nested expressions yuuji@56: (YaTeX-19-region-large-type "{\\\\\\(em\\|it\\|sl\\)" italic) yuuji@53: (YaTeX-19-region-large-type "{\\\\bf" bold) yuuji@56: ;;;(YaTeX-19-region-large-type "{\\\\tt" tt) yuuji@56: ;;;("\\\\begin{verbatim" "\\\\end{verbatim" tt) yuuji@53: yuuji@61: ("``" "''" string)) yuuji@58: "*Hiliting pattern alist for LaTeX text.") yuuji@53: yuuji@53: ;;(defvar YaTeX-hilit-pattern-adjustment-default nil) yuuji@53: ;; ↑いらなくなった。 yuuji@51: (defvar YaTeX-hilit-pattern-adjustment-private nil yuuji@53: "*Adjustment hilit-pattern-alist for default yatex-mode's pattern.") yuuji@46: (defvar YaTeX-hilit-sectioning-face yuuji@57: '(yellow/dodgerblue yellow/slateblue) yuuji@51: "*Hilightening face for sectioning unit. '(FaceForLight FaceForDark)") yuuji@57: (defvar YaTeX-hilit-sectioning-attenuation-rate yuuji@57: '(15 40) yuuji@57: "*Maximum attenuation rate of sectioning face. '(ForeRate BackRate) yuuji@57: Each rate specifies how much portion of RGB value should be attenuated yuuji@57: towards to lowest sectioning unit. Numbers should be written in percentage.") yuuji@52: (defvar YaTeX-sectioning-patterns-alist nil yuuji@52: "Hilightening patterns for sectioning units.") yuuji@47: (defvar YaTeX-hilit-singlecmd-face yuuji@51: '(slateblue2 aquamarine) yuuji@51: "*Hilightening face for maketitle type. '(FaceForLight FaceForDark)") yuuji@52: yuuji@52: ;;; セクションコマンドを、構造レベルの高さに応じて色の濃度を変える yuuji@52: ;;; 背景が黒でないと何が嬉しいのか分からないに違いない. yuuji@53: ;;; もしかして白地の時は構造レベルに応じて色を明るくしたほうが良いのか? yuuji@60: ;(if (fboundp 'win32-color-values) yuuji@60: ; (fset 'x-color-values 'win32-color-values)) yuuji@60: yuuji@53: (cond yuuji@70: (YaTeX-use-hilit19 yuuji@53: (let*((sectface yuuji@53: (car (if (eq hilit-background-mode 'dark) yuuji@53: (cdr YaTeX-hilit-sectioning-face) yuuji@53: YaTeX-hilit-sectioning-face))) yuuji@53: (sectcol (symbol-name sectface)) yuuji@53: sect-pat-alist) yuuji@53: (if (string-match "/" sectcol) yuuji@57: (let ((fmin (nth 0 YaTeX-hilit-sectioning-attenuation-rate)) yuuji@57: (bmin (nth 1 YaTeX-hilit-sectioning-attenuation-rate)) yuuji@57: colorvalue fR fG fB bR bG bB pat fg bg level from face list lm) yuuji@53: (require 'yatexsec) yuuji@53: (setq fg (substring sectcol 0 (string-match "/" sectcol)) yuuji@53: bg (substring sectcol (1+ (string-match "/" sectcol))) yuuji@53: colorvalue (x-color-values fg) yuuji@53: fR (/ (nth 0 colorvalue) 256) yuuji@53: fG (/ (nth 1 colorvalue) 256) yuuji@53: fB (/ (nth 2 colorvalue) 256) yuuji@53: colorvalue (x-color-values bg) yuuji@53: bR (/ (nth 0 colorvalue) 256) yuuji@53: bG (/ (nth 1 colorvalue) 256) yuuji@53: bB (/ (nth 2 colorvalue) 256) yuuji@57: lm YaTeX-sectioning-max-level yuuji@53: list YaTeX-sectioning-level) yuuji@53: (while list yuuji@59: (setq pat (concat YaTeX-ec-regexp (car (car list)) yuuji@69: ;"\\*?\\(\\[[^]]*\\]\\)?\\>" ;改行はさむと駄目 yuuji@64: "\\>" yuuji@64: ) yuuji@53: level (cdr (car list)) yuuji@53: fg (format "hex-%02x%02x%02x" yuuji@57: (- fR (/ (* level fR fmin) lm 100)) yuuji@57: (- fG (/ (* level fG fmin) lm 100)) yuuji@57: (- fB (/ (* level fB fmin) lm 100))) yuuji@53: bg (format "hex-%02x%02x%02x" yuuji@57: (- bR (/ (* level bR bmin) lm 100)) yuuji@57: (- bG (/ (* level bG bmin) lm 100)) yuuji@57: (- bB (/ (* level bB bmin) lm 100))) yuuji@53: from (intern (format "sectioning-%d" level)) yuuji@53: face (intern (concat fg "/" bg))) yuuji@53: (hilit-translate from face) yuuji@53: (setq sect-pat-alist yuuji@53: (cons;;(list pat "}" face) yuuji@53: (list 'YaTeX-19-region-section-type pat face) yuuji@53: sect-pat-alist)) yuuji@53: (setq list (cdr list))) yuuji@53: (setq YaTeX-sectioning-patterns-alist sect-pat-alist)))))) yuuji@52: yuuji@53: ;; ローカルなマクロを読み込んだ後 redraw すると yuuji@53: ;; ローカルマクロを keyword として光らせる(keywordじゃまずいかな…)。 yuuji@53: (defun YaTeX-19-collect-macros () yuuji@46: (cond yuuji@70: (YaTeX-use-hilit19 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@57: (t nil))))) yuuji@57: sect single) yuuji@47: (hilit-translate yuuji@52: ;;sectioning (funcall get-face YaTeX-hilit-sectioning-face) yuuji@57: macro (funcall get-face YaTeX-hilit-singlecmd-face)) yuuji@57: (if (setq sect (append user-section-table tmp-section-table)) yuuji@57: (setq sect (concat "\\\\\\(" yuuji@57: (mapconcat yuuji@57: (function yuuji@57: (lambda (s) (regexp-quote (car s)))) yuuji@57: sect yuuji@57: "\\|") yuuji@64: "\\)\\>"))) yuuji@57: (if (setq single (append user-singlecmd-table tmp-singlecmd-table)) yuuji@57: (setq single (concat "\\\\\\(" yuuji@57: (mapconcat yuuji@57: (function (lambda (s) (regexp-quote (car s)))) yuuji@57: single yuuji@57: "\\|") yuuji@57: "\\)\\b"))) yuuji@57: (setq hilit-patterns-alist ;Remove at first. yuuji@57: (delq (assq 'yatex-mode hilit-patterns-alist) hilit-patterns-alist) yuuji@57: hilit-patterns-alist yuuji@57: (cons yuuji@57: (cons 'yatex-mode yuuji@57: (append yuuji@57: (list nil) yuuji@57: YaTeX-sectioning-patterns-alist yuuji@57: YaTeX-hilit-pattern-adjustment-private yuuji@57: ;;YaTeX-hilit-pattern-adjustment-default yuuji@57: YaTeX-hilit-patterns-alist yuuji@57: (delq nil yuuji@57: (list yuuji@57: (if sect (list yuuji@57: 'YaTeX-19-region-section-type yuuji@57: sect yuuji@57: 'keyword)) yuuji@57: (if single (list single 0 'macro)))))) yuuji@57: hilit-patterns-alist)))))) yuuji@53: ;;(YaTeX-19-collect-macros) ;causes an error yuuji@46: (defun YaTeX-hilit-recenter (arg) yuuji@46: "Collect current local macro and hilit-recenter." yuuji@46: (interactive "P") yuuji@53: (YaTeX-19-collect-macros) 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@53: (defun YaTeX-switch-to-new-window () yuuji@53: (let ((c 0) (i 1) (free (make-string win:max-configs ? ))) yuuji@53: (while (< i win:max-configs) yuuji@53: (or (aref win:configs i) (aset free i (+ i win:base-key))) yuuji@53: (setq i (1+ i))) yuuji@53: (while (not (string-match (char-to-string c) free)) yuuji@53: (message "Which window to create? [%s]: " free) yuuji@53: (setq c (read-char))) yuuji@53: (message "Creating window [%c]" c) yuuji@53: (set-buffer (get-buffer-create "*scratch*")) yuuji@53: (win:switch-window (- c win:base-key)))) yuuji@53: yuuji@53: (defun YaTeX-visit-main-other-frame () yuuji@53: "Visit main file in other frame. yuuji@53: WARNING, This code is not perfect." yuuji@53: (interactive) yuuji@53: (if (YaTeX-main-file-p) (message "I think this is main LaTeX source.") yuuji@53: (let (parent) yuuji@53: (save-excursion (YaTeX-visit-main t) (setq parent (current-buffer))) yuuji@53: (cond yuuji@53: ((get-buffer-window parent t) yuuji@53: (goto-buffer-window parent)) yuuji@53: ((and (featurep 'windows) win:use-frame) yuuji@53: (YaTeX-switch-to-new-window) yuuji@53: (switch-to-buffer parent)) yuuji@53: (t (switch-to-buffer-other-frame (buffer-name parent))))))) yuuji@53: yuuji@53: (defun YaTeX-goto-corresponding-*-other-frame (arg) yuuji@53: "Go to corresponding object in other frame." yuuji@53: (interactive "P") yuuji@53: (let (b p) yuuji@53: (save-window-excursion yuuji@53: (save-excursion yuuji@53: (YaTeX-goto-corresponding-* arg) yuuji@53: (setq b (current-buffer) p (point)))) yuuji@53: (cond yuuji@53: ((get-buffer-window b t) yuuji@53: (goto-buffer-window b) yuuji@53: (goto-char p)) yuuji@53: ((and (featurep 'windows) win:use-frame) yuuji@53: (YaTeX-switch-to-new-window) yuuji@53: (switch-to-buffer b) yuuji@53: (goto-char p)) yuuji@53: (t (switch-to-buffer-other-frame (buffer-name b)) yuuji@53: (goto-char p)))) yuuji@53: ) yuuji@53: yuuji@49: ;;; reverseVideo にして hilit-background-mode を 'dark yuuji@49: ;;; にしている人は数式などが暗くなりすぎて見づらいかもしれない。 yuuji@49: ;;; 次のコードを hilit19 をロードしている場所の直後に置くとちょっ yuuji@49: ;;; とはまし。 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@57: (and YaTeX-emacs-19 yuuji@64: (not (featurep 'xemacs)) yuuji@58: (boundp 'byte-compile-current-file) yuuji@58: (if (and (boundp 'window-system) window-system) yuuji@58: (require 'hilit19) yuuji@58: (error "Byte compile this file on window system! Not `-nw'!"))) yuuji@46: yuuji@46: (provide 'yatex19)