In article , Kenichi Handa writes: > > Emacs 23.0.0 では,漢字変換が出来ず,mini buffer に 「1つも候補を作れませ > > んでした」というエラーが表示されます. > tamago はコード変換 (coding-system fixed-euc-jp) の部分で > emacs の内部文字コードに依存した部分があるため、上手くいかな > いのだと思います。今ちょっと忙しいので来週にでも見てみます。 tamago に以下のパッチをあてたものを Emacs 23 で試してもらえま せんか。 --- 半田@AIST diff -c /project/mule/tamago/egg-com.el /project/mule/tmp/tamago/egg-com.el *** /project/mule/tamago/egg-com.el Sun Jan 28 03:53:13 2001 --- /project/mule/tmp/tamago/egg-com.el Mon Mar 26 10:10:26 2007 *************** *** 44,105 **** ;; Japanese ! (eval-and-compile ! (define-ccl-program ccl-decode-fixed-euc-jp ! `(2 ! ((r2 = ,(charset-id 'japanese-jisx0208)) ! (r3 = ,(charset-id 'japanese-jisx0212)) ! (r4 = ,(charset-id 'katakana-jisx0201)) ! (read r0) ! (loop ! (read r1) ! (if (r0 < ?\x80) ! ((r0 = r1) ! (if (r1 < ?\x80) ! (write-read-repeat r0)) ! (write r4) ! (write-read-repeat r0)) ! ((if (r1 > ?\x80) ! ((write r2 r0) ! (r0 = r1) ! (write-read-repeat r0)) ! ((write r3 r0) ! (r0 = (r1 | ?\x80)) ! (write-read-repeat r0))))))))) ! ! (define-ccl-program ccl-encode-fixed-euc-jp ! `(2 ! ((read r0) ! (loop ! (if (r0 == ,(charset-id 'latin-jisx0201)) ; Unify ! ((read r0) ! (r0 &= ?\x7f))) ! (if (r0 < ?\x80) ;G0 ! ((write 0) ! (write-read-repeat r0))) ! (r6 = (r0 == ,(charset-id 'japanese-jisx0208))) ! (r6 |= (r0 == ,(charset-id 'japanese-jisx0208-1978))) ! (if r6 ;G1 ! ((read r0) ! (write r0) ! (read r0) ! (write-read-repeat r0))) ! (if (r0 == ,(charset-id 'katakana-jisx0201)) ;G2 ! ((read r0) ! (write 0) ! (write-read-repeat r0))) ! (if (r0 == ,(charset-id 'japanese-jisx0212)) ;G3 ! ((read r0) ! (write r0) ! (read r0) ! (r0 &= ?\x7f) ! (write-read-repeat r0))) ! (read r0) ! (repeat))))) ! ) ! ! (make-coding-system 'fixed-euc-jp 4 ?W "Coding System for fixed EUC Japanese" ! (cons ccl-decode-fixed-euc-jp ccl-encode-fixed-euc-jp)) ;; Korean --- 44,110 ---- ;; Japanese ! (defun fixed-euc-jp-pre-write-conversion (from to) ! (let ((work-buf (generate-new-buffer " *temp*")) ! ch) ! (if (stringp from) ! (encode-coding-string from 'euc-japan nil work-buf) ! (encode-coding-region from to 'euc-japan work-buf)) ! (set-buffer work-buf) ! (set-buffer-multibyte nil) ! (goto-char (point-min)) ! (while (not (eobp)) ! (setq ch (following-char)) ! (cond ((= ch #x8E) ; SS2 for JISX0201-kana ! (delete-char 1) ; SS2 BYTE -> 0 BYTE&0x7F ! (insert 0) ! (forward-char 1)) ! ((= ch #x8F) ; SS3 for JISX0212 ! (delete-char 1) ; SS3 BYTE1 BYTE2 -> BYTE1 BYTE2&0x7F ! (forward-char 1) ! (setq ch (following-char)) ! (delete-char 1) ! (insert (logand ch #x7F))) ! ((>= ch #xA0) ; JISX0208 ! (forward-char 2)) ! (t ; ASCII ! (insert 0) ; BYTE -> 0 BYTE ! (forward-char 1)))))) ! ! (defun fixed-euc-jp-post-read-conversion (len) ! (let ((str (string-as-unibyte (buffer-substring (point) (+ (point) len)))) ! (pos (point)) ! i ch1 ch2) ! (delete-region (point) (+ (point) len)) ! (setq i 0) ! (while (< i len) ! (setq ch1 (aref str i)) ! (setq ch2 (aref str (1+ i))) ! (cond ((>= ch1 #x80) ! (if (>= ch2 #x80) ! (setq ch1 ; JISX0208 ! (decode-char 'japanese-jisx0208 ! (logior (lsh (logand ch1 #x7F) 8) ! (logand ch2 #x7F)))) ! (setq ch1 ; JISX0212 ! (decode-char 'japanese-jisx0212 ! (logior (lsh (logand ch1 #x7F) 8) ch2))))) ! (t ! (if (>= ch2 #x80) ! (setq ch1 ; JISX0201-kana ! (decode-char 'katakana-jisx0201 (logand ch2 #x7F))) ! (setq ch1 ch2)))) ! (insert ch1) ! (setq i (+ i 2))) ! (prog1 (- (point) pos) ! (goto-char pos)))) ! ! (define-coding-system 'fixed-euc-jp "Coding System for fixed EUC Japanese" ! :mnemonic ?W ! :coding-type 'raw-text ! :charset-list '(ascii japanese-jisx0208 katakana-jisx0201 japanese-jisx0212) ! :pre-write-conversion 'fixed-euc-jp-pre-write-conversion ! :post-read-conversion 'fixed-euc-jp-post-read-conversion) ;; Korean