--- egg-remix.0205.el Wed Jul 31 06:24:49 2002 +++ egg-remix.0206.el Sat May 31 22:54:12 2003 @@ -56,6 +56,12 @@ ;; "remix" Egg ReMix モード ;; Change Log: +;; May 31 2003: version 0.206 +;; ・複数の Emacs からユーザ辞書に変更を加えてもいちいち確認 +;; されないように修正 +;; ・フェンスの中に正規表現の演算子(*など)が入っていると、 +;; 変換モードをキャンセルしたときに正しい文字列を復元できない +;; bug を fix ;; Jul 30 2002: version 0.205 ;; ・Wnn 以外の backend に対応するために、初期化動作時の ;; input-method を "japanese-egg-wnn" の決め打ちから @@ -87,6 +93,12 @@ ;; Code: (require 'egg) + +(defconst remix-version "0.206" + "Egg ReMix のバージョン") +(defconst remix-version-date "May 31 2003" + "Egg ReMix の最終更新日") + (activate-input-method default-input-method) (activate-input-method nil) @@ -246,10 +258,6 @@ ;;;;==== ;;;; Egg-ReMix code ;;;;==== -(defconst remix-version "0.205" - "Egg ReMix のバージョン") -(defconst remix-version-date "Jul 30 2002" - "Egg ReMix の最終更新日") ;;;###autoload (defun remix-version () "Egg ReMix のバージョンを返す" @@ -342,25 +350,25 @@ (defvar remix-its-mode-map (let ((map (make-sparse-keymap)) (i 33)) - (define-key map "\C-a" 'remix-beginning-of-input-buffer) - (define-key map "\C-b" 'remix-backward) - (define-key map "\C-c" 'remix-cancel-input) - (define-key map "\C-d" 'remix-delete) - (define-key map "\C-e" 'remix-end-of-input-buffer) - (define-key map "\C-f" 'remix-forward) - (define-key map "\C-g" 'remix-abort) - (define-key map "\C-]" 'remix-cancel-input) - (define-key map "\C-h" 'remix-mode-help-command) - (define-key map "\C-k" 'remix-kill-line) - (define-key map "\C-m" 'remix-exit-mode) - (define-key map [return] 'remix-exit-mode) - (define-key map "\C-r" 'remix-select-nokana) - (define-key map "\C-t" 'remix-transpose-chars) - (define-key map "\C-w" 'remix-select-kana) - (define-key map [backspace] 'remix-delete-backward) - (define-key map [delete] 'remix-delete-backward) - (define-key map [right] 'remix-forward) - (define-key map [left] 'remix-backward) + (define-key map "\C-a" 'remix-beginning-of-input-buffer) + (define-key map "\C-b" 'remix-backward) + (define-key map "\C-c" 'remix-cancel-input) + (define-key map "\C-d" 'remix-delete) + (define-key map "\C-e" 'remix-end-of-input-buffer) + (define-key map "\C-f" 'remix-forward) + (define-key map "\C-g" 'remix-abort) + (define-key map "\C-]" 'remix-cancel-input) + (define-key map "\C-h" 'remix-mode-help-command) + (define-key map "\C-k" 'remix-kill-line) + (define-key map "\C-m" 'remix-exit-mode) + (define-key map [return] 'remix-exit-mode) + (define-key map "\C-r" 'remix-select-nokana) + (define-key map "\C-t" 'remix-transpose-chars) + (define-key map "\C-w" 'remix-select-kana) + (define-key map [backspace] 'remix-delete-backward) + (define-key map [delete] 'remix-delete-backward) + (define-key map [right] 'remix-forward) + (define-key map [left] 'remix-backward) (while (< i 127) (define-key map (vector i) 'remix-its-self-insert-char) (setq i (1+ i))) @@ -566,13 +574,13 @@ (seq-after (get-text-property p 'remix-keyseq-after)) new-before new-after) (cond - ((null seq-before) ; フェンスの先頭のとき + ((null seq-before) ; フェンスの先頭のとき (message "ReMix: beginning of fence") (or remix-quiet (ding))) ((= (length (concat seq-before seq-after)) 1) ; フェンスに1文字しかないとき (message "ReMix: there is no char to transpose") (or remix-quiet (ding))) - ((null seq-after) ; フェンスの末尾のとき + ((null seq-after) ; フェンスの末尾のとき (setq new-before (concat (substring seq-before 0 -2) (substring seq-before -1) (substring seq-before -2 -1))) @@ -600,18 +608,7 @@ dict) (when (and seq (setq dict (remix-seq-indict-p seq))) - (save-excursion - (set-buffer remix-usrdictbuf) - (if (zerop dict) - (progn - (goto-char (point-min)) - (insert (format "%s 1\n" seq))) - (goto-char dict) - (end-of-line) - (delete-region dict (point)) - (insert "1")) - (set-buffer-modified-p nil) - (setq remix-usrdict-modified t)) + (remix-set-usrdict seq "1" dict) (remix-input)))) (defun remix-select-nokana () @@ -632,19 +629,7 @@ (delete-region (remix-search-beginning-seq) (remix-search-end-seq)) (insert seq) (remix-put-cursor) - (save-excursion - (set-buffer remix-usrdictbuf) - (setq dict (remix-seq-indict-p seq)) - (if (null dict) - (progn - (goto-char (point-min)) - (insert (format "%s 0\n" seq))) - (goto-char dict) - (end-of-line) - (delete-region dict (point)) - (insert "0")) - (set-buffer-modified-p nil) - (setq remix-usrdict-modified t)))) + (remix-set-usrdict seq "0" (remix-seq-indict-p seq)))) (remix-exit-mode-internal))) (defun remix-hiragana () @@ -706,11 +691,12 @@ (defun remix-restart (str set-prop begnning context) (let* ((remix-context context) - p cursor - (prop (text-properties-at (point))) - (seq (plist-get prop 'remix-keyseq-before)) - (kana (remix-translate-keyseq seq t))) - (setq seq (remix-chop-head-keyseq seq (string-match (concat str "\\'") kana))) + p cursor + (prop (text-properties-at (point))) + (seq (plist-get prop 'remix-keyseq-before)) + (kana (remix-translate-keyseq seq t))) + (setq seq (remix-chop-head-keyseq seq (string-match (concat (regexp-quote str) "\\'") + kana))) (if (zerop (length seq)) (setq seq nil)) (setq prop (plist-put prop 'remix-keyseq-before seq)) @@ -752,23 +738,23 @@ status dict) (if key - (when (numberp key) - (setq seq-before (concat seq-before (vector key))) - (add-text-properties p (1+ p) (list 'remix-keyseq-before seq-before)))) + (when (numberp key) + (setq seq-before (concat seq-before (vector key))) + (add-text-properties p (1+ p) (list 'remix-keyseq-before seq-before)))) (when seq-before (setq dict (remix-seq-indict-p seq-before)) ; 辞書にある綴りか調べる (cond - ((null dict) ; 辞書にはない綴り + ((null dict) ; 辞書にはない綴り (setq status 'remix-uncertain)) - ((zerop dict) ; システム辞書にある単語(ユーザ辞書に登録せず) + ((zerop dict) ; システム辞書にある単語(ユーザ辞書に登録せず) (setq status 'remix-indictnokana)) (t (let ((flag (save-excursion (set-buffer remix-usrdictbuf) (char-after dict)))) (if (= flag ?0) - (setq status 'remix-indictnokana) ; 辞書内にある非ローマ字綴り - (setq status 'remix-indictkana)))))) ; 辞書内にあるローマ字綴り + (setq status 'remix-indictnokana) ; 辞書内にある非ローマ字綴り + (setq status 'remix-indictkana)))))) ; 辞書内にあるローマ字綴り (remix-update-fence status (and key (symbolp key))))) (defun remix-update-fence (status &optional last) @@ -782,8 +768,8 @@ (seq-after (get-text-property p 'remix-keyseq-after)) (tr (if (or (eq previous-status 'remix-nokanaseq) (eq status 'remix-indictnokana)) - seq-before - (remix-translate-keyseq seq-before last))) + seq-before + (remix-translate-keyseq seq-before last))) (cursor (buffer-substring p (1+ p))) (overlay (get-text-property 0 'remix-overlay cursor))) @@ -971,8 +957,8 @@ "SEQ が辞書にあるかどうかを調べる。 ユーザ辞書にあった場合は、SEQ の綴りフラグの point を返す。 システム辞書にあった場合は remix-auto-add-entry に従ってユーザ辞書に SEQ を登録し、 -綴りフラグの point を返す。登録しなかった場合は 0 を返す。 -見つからなければ nil を返す" +綴りフラグの point を返す。また、登録しなかった場合は 0 を、見つからなければ +nil を返す" (save-excursion (let ((entry (format "^%s " (regexp-quote seq)))) (or (if remix-usrdict @@ -990,16 +976,31 @@ (setq entry (format "^%s$" (regexp-quote seq))) (if (re-search-forward entry nil t) ; システム辞書から検索 (if remix-auto-add-entry ; エントリ(seq)を自動で追加するか? - (progn - (set-buffer remix-usrdictbuf) - (insert (format "%s 0\n" seq)) - (forward-word -1) - (set-buffer-modified-p nil) ;エントリの追加発生 - (point)) + (remix-set-usrdict seq "0" 0) 0) nil)) nil)))))) +(defun remix-set-usrdict (seq flag dict) + "SEQ の綴りフラグを FLAG に変更する。 +FLAG を挿入した point を返す" + (save-excursion + (set-buffer remix-usrdictbuf) + (if (or (null dict) + (zerop dict)) + (progn + (goto-char (point-min)) + (insert (format "%s %s\n" seq flag))) + (goto-char dict) + (end-of-line) + (delete-region dict (point)) + (insert flag)) + (set-buffer-modified-p nil) + (clear-visited-file-modtime) + (setq remix-usrdict-modified t) + (forward-word -1) + (point))) + (defun remix-kick-convert-region-or-self-insert () "状況に応じて文字を入力するか漢字変換を呼び出す。 フェンスが仮名の並びならば漢字変換を呼び出す。 @@ -1052,11 +1053,11 @@ (setq cutoff len)) (while (< i cutoff) (let ((key (aref seq i)) - (its-disable-special-action t)) ; ASCII 入力モードを抑制する + (its-disable-special-action t)) ; ASCII 入力モードを抑制する (if (null (its-keyseq-acceptable-p (vector key) syl)) ; state-machine にない綴りか? (setq its-translation-result nil its-latest-SYL nil - i cutoff) ; 変換を中止する + i cutoff) ; 変換を中止する (setq cursor (its-state-machine syl key 'remix-pool-conversion)) (setq i (1+ i)) (if cursor