changeset 12:a7f397790cdc

Revise YaTeX-typeset faster. Optimize window selection of error-jump.
author yuuji
date Mon, 25 Oct 1993 14:35:00 +0000
parents 390df0e505da
children eafae54794a0
files docs/yatexadd.doc docs/yatexgen.doc yatex.el yatex.new yatexadd.el yatexprc.el
diffstat 6 files changed, 147 insertions(+), 70 deletions(-) [+]
line wrap: on
line diff
--- a/docs/yatexadd.doc	Mon Sep 20 08:56:09 1993 +0000
+++ b/docs/yatexadd.doc	Mon Oct 25 14:35:00 1993 +0000
@@ -34,15 +34,84 @@
 	を定義するファイル名を yatexadd.el(またはバイトコンパイルした形式
 	のyatexadd.elc)にし、そのファイルを load-path 中に置いておけば、 
 	野鳥が自動的にロードします。それ以外のファイル名にする場合は、
-	yatex-mode-hook に、付加関数を定義する Emacs-Lisp ファイルをロード
-	するような仕掛けを書いておくのがよいでしょう。
+	yatex-mode-hook に付加関数を定義する Emacs-Lisp ファイルをロードす
+	るような仕掛けを書いておくのがよいでしょう。
+
+
+【関数定義】
+
+	  付加関数には、各LaTeXコマンドのオプション引数を返す形式のもの、
+	section型補完の引数を返すもの、の二種類があります。
+
+	  前者は、以下の例のように、begin型補完では\begin{環境名}の直後に
+	付加する文字列、section型補完では LaTeX コマンド名と第一引数の間に
+	位置する文字列、maketitle型補完では LaTeX コマンド名の直後に位置す
+	る文字列を返すような関数です。便宜上この形の付加関数を、追加型付加
+	関数と呼ぶことにします。
+
+	(例)	\begin{table}[ht]	(付加関数名 YaTeX:table)
+		             ~~~~
+		\put(100,200){}		(付加関数名 YaTeX:put)
+		    ~~~~~~~~~
+		\sum_{i=0}^{n}		(付加関数名 YaTeX:sum)
+		    ~~~~~~~~~~
+
+	追加型付加関数は『LaTeXコマンド名の前に YaTeX: をつけた名前』で定
+	義します。
+
+	  後者は、以下のようにsection型コマンドの引数となる文字列を返す
+	関数です。この形の付加関数を引数型付加関数と呼ぶことにします。
+
+	(例)	\newcommand{\foo}{bar}	(付加関数名 YaTeX::newcommand)
+			    ~~~~  ~~~
+
+	引数型付加関数は『LaTeXコマンド名の前に YaTeX:: をつけた名前』で定
+	義します。また引数型付加関数が呼ばれる時には何番目の引数を入力して
+	いるのかが引数として渡されます。したがって、引数型付加関数は整数の
+	引数を一つ取るものとして定義し、その引数の値により処理を決定するこ
+	とになります。
 
 
-【関数名】
+【定義例】
+
+	  例えば、tabular環境のフォーマットとして、いつでも {|c|c|c|} を入
+	れるだけで良いのなら、
+
+		(defun YaTeX:tabular ()
+		  "{|c|c|c|}")
+
+	とだけ書けばよく、前述の、複雑な定型 tabular フォーマットを挿入す
+	るための関数を定義する場合は次のようにします。
+
+		(defun YaTeX:tabular ()
+		  "{@{\\vrule width 1pt\\ }|||@{\\ \\vrule width 1pt}}")
+
+	この時、Emacs-Lisp 中の文字列では、\ 自身は \\ と表記することなど
+	に注意して下さい。
+
+	  また、{} の中を、補完時に直接キーボードから読み込ませたい時は、
 
-	  作成する付加関数名は、補完入力した名前の先頭に YaTeX: を付け足し
-	たものにします。例えば(begin型補完の) tabular 環境に対して付加関数
-	を作成したい場合は YaTeX:tabular という関数名で定義します。
+		(defun YaTeX:tabular ()
+		  (concat "{" (read-string "Rule: ") "}"))
+
+	などとすれば良いでしょう。
+
+	  次に、引数型付加関数として \newcommand の引数を読み込む関数を定
+	義する場合を例示します。\newcommand の第一引数は新たに定義するコマ
+	ンド名なので、必ず先頭に \ が来ます。第二引数はたいていの場合ミニ
+	バッファでは編集しづらいような複雑な定義を書くので、何も補完しない
+	方が良いでしょう。これを考慮して付加関数を定義すると以下のようなも
+	のになるでしょう。
+
+		(defun YaTeX::newcommand (n)	;nは引数の位置
+		  (cond
+		   ((= n 1)			;第一引数ならコマンド名
+		    (concat "\\" (read-string "Command: ")))
+		   ((= n 2) "")			;第二引数なら何も入れない
+		   (t nil)))
+
+	なお、引数型付加関数が nil を返した場合は、通常の引数入力関数が呼
+	ばれます。
 
 
 【呼ばれ方】
@@ -51,42 +120,8 @@
 	入力時に付加関数の存在を調べてから呼び出します。begin型補完の場合 
 	\begin{環境名} が自動入力された直後に呼び出されます。section型補完
 	では第一引数の補完の直前、maketitle型補完の場合は、コマンド名の直
-	後(一つのスペースを挿入する直前)に呼び出されます。
-
-
-【関数定義】
-
-	  begin型補完では、\begin{環境名}の直後に付加する文字列、section型
-	補完では、LaTeXコマンド名と第一引数の間に位置する文字列、maketitle
-	型補完では、LaTeXコマンド名の直後に位置する文字列を返すような関数
-	を定義して下さい。
-	(例)
-		\begin{table}[ht]
-		             ~~~~
-		\put(100,200){}
-		    ~~~~~~~~~
-		\sum_{i=0}^{n} 
-		    ~~~~~~~~~~
-	たんに、いつでも {|c|c|c|} を入れるだけで良いのなら、
-
-		(defun YaTeX:tabular ()
-		  "{|c|c|c|}")
-
-	とだけ、書けばよく、前述の、複雑な定型 tabular フォーマットを挿入
-	するための関数を定義する場合は、次のようにします。
-
-		(defun YaTeX:tabular ()
-		  "{@{\\vrule width 1pt\\ }|||@{\\ \\vrule width 1pt}}")
-
-	この時、Emacs-Lisp 中の文字列では、\ 自身は、\\ と表記することなどに
-	注意して下さい。
-
-	  また、{} の中を、補完時に直接キーボードから読み込ませたい時は、
-
-		(defun YaTeX:tabular ()
-		  (concat "{" (read-string "Rule: ") "}"))
-
-	などとすれば良いでしょう。
+	後(一つのスペースを挿入する直前)に呼び出されます。引数型付加関数は、
+	section型コマンドの引数の入力時にその都度呼ばれます。
 
 
 【参考】
--- a/docs/yatexgen.doc	Mon Sep 20 08:56:09 1993 +0000
+++ b/docs/yatexgen.doc	Mon Oct 25 14:35:00 1993 +0000
@@ -9,7 +9,7 @@
 
 【はじめに】
 
-	  まず、yatexadd.doc には目を通して下さい。これを読んで、なにか独
+	  まず、yatexadd.doc には目を通して下さい。それを読んで、なにか独
 	自の関数をすぐに作りたくなったあなたには、このドキュメントも、
 	yatexgen.el も必要有りません。しかし、Emacs-Lisp をよく知らないた
 	め、どのように作ってよいのかピンと来ない方のために、野鳥自身に付加
Binary file yatex.el has changed
--- a/yatex.new	Mon Sep 20 08:56:09 1993 +0000
+++ b/yatex.new	Mon Oct 25 14:35:00 1993 +0000
@@ -2,6 +2,11 @@
 	Yet Another tex-mode for Emacs
 	yatex.el 各バージョンの変更点について。
 
+1.44:	タイプセットプログラムの起動処理を高速化。
+	エラージャンプのウィンドウ利用の最適化。
+	数式モード/修正モードのモードライン表示修正。
+	数式環境補完時には自動的に数式モードに入る。
+
 1.43:	環境のネストに応じたインデント(変数YaTeX-environment-indentで指定)。
 	数式環境記号補完モード(yatexmth)添付。
 	modify-mode の値で開き括弧の動作を決定する。
--- a/yatexadd.el	Mon Sep 20 08:56:09 1993 +0000
+++ b/yatexadd.el	Mon Oct 25 14:35:00 1993 +0000
@@ -2,7 +2,7 @@
 ;;; YaTeX add-in functions.
 ;;; yatexadd.el rev.5
 ;;; (c)1991-1993 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp]
-;;; Last modified Sat Sep 18 04:13:41 1993 on 98fa
+;;; Last modified Wed Oct  6 03:40:30 1993 on 98fa
 ;;; $Id$
 
 (provide 'yatexadd)
@@ -73,6 +73,13 @@
 	  (YaTeX:read-coordinates "Initial position"))
 )
 
+(defun YaTeX:equation ()
+  (if (fboundp 'YaTeX-toggle-math-mode)
+      (YaTeX-toggle-math-mode t))		;force math-mode ON.
+)
+(fset 'YaTeX:eqnarray 'YaTeX:equation)
+(fset 'YaTeX:displaymath 'YaTeX:equation)
+
 ;;;
 ;;Sample functions for section-type command.
 ;;;
@@ -224,6 +231,8 @@
 	(goto-char (point-min))
 	(message "Collecting labels...")
 	(save-window-excursion
+	  (YaTeX-showup-buffer
+	   YaTeX-label-buffer (function (lambda (x) (window-width x))))
 	  (with-output-to-temp-buffer YaTeX-label-buffer
 	    (while (re-search-forward "\\label{\\([^}]+\\)}" nil t)
 	      (setq e0 (match-end 0) m1 (match-beginning 1) e1 (match-end 1))
@@ -272,6 +281,8 @@
 (defun YaTeX-label-other ()
   (let ((lbuf "*YaTeX mode buffers*") (blist (buffer-list)) (lnum -1) buf rv
 	(ff "**find-file**"))
+    (YaTeX-showup-buffer
+     lbuf (function (lambda (x) 1)))	;;Select next window surely.
     (with-output-to-temp-buffer lbuf
       (while blist
 	(if (and (buffer-file-name (setq buf (car blist)))
--- a/yatexprc.el	Mon Sep 20 08:56:09 1993 +0000
+++ b/yatexprc.el	Mon Oct 25 14:35:00 1993 +0000
@@ -1,8 +1,8 @@
 ;;; -*- Emacs-Lisp -*-
 ;;; YaTeX process handler.
-;;; yatexprc.el rev.1.43
+;;; yatexprc.el rev.1.44
 ;;; (c)1993 by HIROSE Yuuji.[yuuji@ae.keio.ac.jp]
-;;; Last modified Sat Sep 18 04:12:18 1993 on 98fa
+;;; Last modified Mon Oct 25 17:48:39 1993 on figaro
 ;;; $Id$
 
 (require 'yatex)
@@ -28,31 +28,34 @@
 (defun YaTeX-typeset (command buffer)
   "Execute jlatex (or other) to LaTeX typeset."
   (interactive)
-  (if (and YaTeX-typeset-process
-	   (eq (process-status YaTeX-typeset-process) 'run))
-      ;; if tex command is halting.
-      (YaTeX-kill-typeset-process YaTeX-typeset-process))
-  (YaTeX-visit-main t)  ;;execution directory
-  (with-output-to-temp-buffer buffer
-    (if (eq system-type 'ms-dos)			;if MS-DOS
-	(progn
-	  (message (concat "Typesetting " (buffer-name) "..."))
-	  (YaTeX-put-nonstopmode)
-	  (call-process shell-file-name
-			nil buffer nil "/c" command)
-	  (YaTeX-remove-nonstopmode))
-      (setq YaTeX-typeset-process			;if UNIX
+  (let ((window (selected-window)))
+    (if (and YaTeX-typeset-process
+	     (eq (process-status YaTeX-typeset-process) 'run))
+	;; if tex command is halting.
+	(YaTeX-kill-typeset-process YaTeX-typeset-process))
+    (YaTeX-visit-main t);;execution directory
+    ;;Select under-most window if there are more than 2 windows and
+    ;;typeset buffer isn't seen.
+    (YaTeX-showup-buffer
+     buffer (function (lambda (x) (nth 3 (window-edges x)))))
+    (with-output-to-temp-buffer buffer
+      (if (eq system-type 'ms-dos)	;if MS-DOS
+	  (progn
+	    (message (concat "Typesetting " (buffer-name) "..."))
+	    (YaTeX-put-nonstopmode)
+	    (call-process shell-file-name
+			  nil buffer nil "/c" command)
+	    (YaTeX-remove-nonstopmode))
+	(setq YaTeX-typeset-process	;if UNIX
 	      (start-process "LaTeX" buffer shell-file-name "-c"
 			     command))
-      (set-process-sentinel YaTeX-typeset-process 'YaTeX-typeset-sentinel)))
-  (setq current-TeX-buffer (buffer-name))
-  (let ((window (selected-window)))
+	(set-process-sentinel YaTeX-typeset-process 'YaTeX-typeset-sentinel)))
+    (setq current-TeX-buffer (buffer-name))
     (select-window (get-buffer-window buffer))
-    ;;(other-window 1)
     (use-local-map YaTeX-typesetting-mode-map)
     (set-syntax-table YaTeX-typeset-buffer-syntax)
     (setq mode-name "typeset")
-    (if YaTeX-typeset-process ; if process is running (maybe on UNIX)
+    (if YaTeX-typeset-process		; if process is running (maybe on UNIX)
 	(cond ((boundp 'MULE)
 	       (set-current-process-coding-system
 		YaTeX-latex-message-code YaTeX-coding-system))
@@ -61,13 +64,11 @@
     (message "Type SPC to continue.")
     (goto-char (point-max))
     (if (eq system-type 'ms-dos) (message "Done.")
-      (while (bobp) (message "Invoking process. wait...") (sleep-for 1))
-      (insert (message " ")))
+      (insert (message " "))
+      (set-marker (process-mark YaTeX-typeset-process) (1- (point))))
     (if (bolp) (forward-line -1))
     (recenter -1)
-    (select-window window)
-  ;;(other-window -1)
-    )
+    (select-window window))
 )
 
 (defun YaTeX-typeset-sentinel (proc mes)
@@ -325,6 +326,7 @@
 	  nil
 	;; if warning or error found
 	(if error-win (select-window error-win)
+	  (select-window (get-lru-window))
 	  (YaTeX-switch-to-buffer error-buffer)
 	  (setq error-win (selected-window)))
 	(goto-line YaTeX-error-line)
@@ -614,4 +616,28 @@
     (pop-to-buffer buffer))
 )
 
+(defun YaTeX-showup-buffer (buffer &optional func)
+  "Make BUFFER show up in certain window (but current window)
+that gives the maximum value by the FUNC.  FUNC should take an argument
+of its window object"
+  (or (get-buffer-window buffer)
+      (< (length (YaTeX-window-list)) 3)
+      (let ((window (selected-window)) (list (YaTeX-window-list)) win w (x 0))
+	(while list
+	  (setq w (car list))
+	    (if (and (not (eq window w))
+		     (> (funcall func w) x))
+		(setq win w x (funcall func w)))
+	    (setq list (cdr list)))
+	(select-window win)
+	(switch-to-buffer buffer)
+	(select-window window)))
+)
+
+(defun YaTeX-window-list ()
+  (let*((curw (selected-window)) (win curw) (wlist (list curw)))
+    (while (not (eq curw (setq win (next-window win))))
+      (setq wlist (cons win wlist)))
+    wlist)
+)
 (provide 'yatexprc)

yatex.org