;;; -*- Emacs-Lisp -*- ;;; $Id: irex-judge.el,v 3.3 1999/01/31 06:50:33 tsuchiya Exp $ ;; This file is part of IREX tools. ;; Please refer "Copyright file" at the root directory. ;; (C) IREX committee IREX実行委員会. All rights reserved. ;;; 依存関係の宣言 (provide 'irex-judge) (require 'irex-common) (require 'irex-tougou) (require 'irex-list) (require 'irex-article) ;;; 変数の宣言 (defvar irex-judge-default-pid nil "\ *irex-judge を実行する判定者の PID この変数を設定しておくと、irex-judge 起動時に PID を確認せず、この変数の値を PID として利用します。従って、起動時に PID を毎回入力したくない場合に設定し て下さい。ただし、irex-judge を E-MODE で起動した場合は、この変数の設定は無 視されます。") (defvar irex-judge-current-pid nil "irex-judge を実行中の判定者の PID") (defvar irex-judge-coding-system (and (featurep 'mule) (if (>= emacs-major-version 20) 'euc-japan-unix *euc-japan*unix)) "*IR 結果統合ファイルの漢字コード") (defvar irex-judge-current-topic_id nil "判定中のトピックの TOPIC-ID") (defvar irex-judge-window-configuration nil "irex-judge を実行する直前の Window 分割の状態を保持している変数") (defvar irex-judge-buffer nil "irex-judge による判定の対象となっているバッファ") (defvar irex-judge-default-sid nil "*irex-browse による閲覧のデフォルトの対象とする検索システム") (defvar irex-judge-current-sid nil "irex-browse による閲覧の対象となっている検索システム") ;;;---------------------------------------------------------------------- ;;; IREX-JUDGE 本体 ;;;---------------------------------------------------------------------- (defun irex-judge (judge-id &optional e-mode) "\ カレントバッファの IREX 結果統合ファイルを対象として判定を行なうコマンド IREX 結果統合ファイルを開いてから、 M-x irex-judge と実行して下さい。このように普通に実行すると、S-MODE (他の判定者の判断 結果を参照しない)で実行されます。 E-MODE (他の判定者の判断結果を参照する) で実行するためには、 C-u M-x irex-judge などのように何らかの引数を前置して実行して下さい。 " (interactive (let ((pid (or (if (not current-prefix-arg) (cond ((stringp irex-judge-default-pid) irex-judge-default-pid) ((integerp irex-judge-default-pid) (number-to-string irex-judge-default-pid)))) (read-from-minibuffer "4桁の識別番号( PID )を入力して下さい: ")))) (while (not (string-match "^[0-9][0-9][0-9][0-9]$" pid)) (message "入力が不適切です。再入力して下さい。") (sleep-for 1) (setq pid (read-from-minibuffer "4桁の識別番号( PID )を入力して下さい: "))) (list pid current-prefix-arg))) (if (and irex-judge-current-pid (not (yes-or-no-p "irex-judge は既に実行中の可能性がありますが、構わず実行しますか? "))) (or (and (get-buffer irex-list-buffer-name) (get-buffer irex-article-buffer-name) (yes-or-no-p "実行中の irex-judge を再開することを試みますか? ") (irex-judge-split-window) (irex-list-redisplay)) (error "中断しました。")) ;; 起動時の Window 分割を記憶しておく (setq irex-judge-window-configuration (current-window-configuration) irex-judge-buffer (current-buffer) irex-judge-current-pid judge-id) ;; 対象となるバッファの漢字コードを設定する (if (coding-system-p irex-judge-coding-system) (cond ((boundp 'MULE) (set-file-coding-system irex-judge-coding-system)) ((fboundp 'coding-system-equal) (let ((mp (buffer-modified-p)) (ud (memq buffer-file-coding-system '(undecided undecided-unix undecided-dos undecided-mac)))) (if (coding-system-equal irex-judge-coding-system buffer-file-coding-system) nil ; if coding-system is the same, do nothing (set-buffer-file-coding-system irex-judge-coding-system) (if ud (set-buffer-modified-p mp))))) ((featurep 'mule) (set-file-coding-system irex-judge-coding-system))) (message "漢字コードの設定が間違っています。")) ;; 対象となるバッファの構文解析を行う -> 失敗した場合は何もしないで終了 (if (setq irex-judge-current-topic_id (irex-tougou-parse-buffer irex-judge-buffer)) (progn (setq buffer-read-only t) (irex-article-make-buffer) (irex-list-make-buffer e-mode) (irex-judge-split-window) (irex-list-redisplay)) (setq irex-judge-current-pid nil)))) (defun irex-judge-exit () "\ irex-judge を終了する関数 バッファを閉じるなどの後始末を行なう。判定行為によってバッファが変更された 場合は、保存するか確認する。 " (interactive) (set-buffer irex-judge-buffer) (if (buffer-modified-p) (if (y-or-n-p "irex-judge の実行結果をファイルに保存しますか? ") (basic-save-buffer) (ding) (message "バッファの内容は既に変更されています。") (sleep-for 2) (message "本当に実行結果を棄却する場合は、バッファを消去してください。"))) (setq buffer-read-only nil) (irex-article-exit) (irex-list-exit) (irex-tougou-exit) (set-window-configuration irex-judge-window-configuration) (setq irex-judge-current-pid nil irex-judge-current-topic_id nil irex-judge-buffer nil irex-judge-window-configuration nil)) ;;;---------------------------------------------------------------------- ;;; ウインドウ操作関数 ;;;---------------------------------------------------------------------- (defun irex-judge-split-window () "\ irex-judge ツール用にウインドウを分割する関数 記事内容バッファが表示されているウインドウを返す" (delete-other-windows) (split-window-vertically irex-list-window-height) (let ((w1 (selected-window)) (w2 (next-window))) (set-window-buffer w1 (get-buffer irex-list-buffer-name)) (set-window-buffer w2 (get-buffer irex-article-buffer-name)) w2)) (defun irex-judge-split-window-2 () "\ irex-judge ツール用にウインドウを分割する関数 記事内容バッファが表示されているウインドウさらに2分割して下のウインドウを返す" (split-window (irex-judge-split-window)))