X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=canna.el;h=c2a47fe8a98653dae039df2da2bc5a9bff9e4795;hb=ae7901a35d395dfc0b1a2e319c9e7584540f60ed;hp=715e5cf56baca5c0e4d2cf28d4a53aab197c1c82;hpb=09a9c22c59b9e55ba9d34b07523e8adbf4b34052;p=elisp%2Femacs-canna.git diff --git a/canna.el b/canna.el index 715e5cf..c2a47fe 100644 --- a/canna.el +++ b/canna.el @@ -1,14 +1,16 @@ ;;; canna.el --- Interface to the Canna input method. ;; Copyright (C) 1994 Akira Kon, NEC Corporation. -;; Copyright (C) 1996,1997 MORIOKA Tomohiko +;; Copyright (C) 1996,1997,1998 MORIOKA Tomohiko +;; Copyright (C) 1997 Stephen Turnbull ;; Author: Akira Kon ;; MORIOKA Tomohiko -;; Version: $Revision: 1.6 $ +;; Stephen Turnbull +;; Version: $Revision: 1.16 $ ;; Keywords: Canna, Japanese, input method, mule, multilingual -;; This file is not a part of Emacs yet. +;; This file is part of Emacs-Canna. ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as @@ -36,20 +38,31 @@ ;;; Code: -;; -*-mode: emacs-lisp-*- +(require 'poem) + +(eval-and-compile + (defvar canna-dl-module + (expand-file-name "canna.so" exec-directory)) + + (defvar canna-dl-handle + (and (not (boundp 'CANNA)) + (fboundp 'dynamic-link) + (dynamic-link canna-dl-module))) + + (and canna-dl-handle + (dynamic-call "emacs_canna_init" canna-dl-handle)) + ) -;; by 守岡 知彦 1996/11/11 (or (boundp 'CANNA) - (let ((handle (dynamic-link (expand-file-name "canna.so" exec-directory)))) - (dynamic-call "emacs_canna_init" handle)) - ) + (featurep 'CANNA) + (error "Canna is not built into this Emacs")) (defvar self-insert-after-hook nil) ;; (defalias 'self-insert-internal 'self-insert-command) ;; end (defconst canna-rcs-version - "$Id: canna.el,v 1.6 1997-04-03 20:18:20 morioka Exp $") + "$Id: canna.el,v 1.16 1998-10-21 06:36:55 morioka Exp $") (defun canna-version () "Display version of canna.el in mini-buffer." @@ -62,40 +75,20 @@ )) " ..."))) -;; added by MORIOKA Tomohiko , 1996/6/7 -(or (fboundp 'minibuffer-prompt-width) - (defun minibuffer-prompt-width () - "Return the display width of the minibuffer prompt." - (save-excursion - (set-buffer (window-buffer (minibuffer-window))) - (current-column) - )) - ) - -;; added by MORIOKA Tomohiko , 1997/4/3 -(or (fboundp 'char-or-char-int-p) - (defalias 'char-or-char-int-p 'integerp) - ) +(if (featurep 'xemacs) + (defun canna-self-insert-string (string) + (let ((len (length string)) + (i 0) + ;; 挿入の途中で blink が起きるとうっとおしいので、 + ;; 一時的に blink を抑止する。 + (blink-matching-paren nil)) + (while (< i len) + (self-insert-internal (aref canna-kakutei-string i)) + (setq i (1+ i)) + ))) + (defalias 'canna-self-insert-string 'insert) + ) -;; added by MORIOKA Tomohiko , 1996/6/18 -(defvar running-xemacs (string-match "XEmacs" emacs-version)) - -(cond (running-xemacs - (require 'overlay) - (defun self-insert-string (string) - (let ((len (length string)) - (i 0) - ;; 挿入の途中で blink が起きるとうっとおしいので、 - ;; 一時的に blink を抑止する。 - (blink-matching-paren nil)) - (while (< i len) - (self-insert-internal (aref canna-kakutei-string i)) - (setq i (1+ i)) - ))) - ) - (t - (defalias 'self-insert-string 'insert) - )) ;;; かんなの変数 @@ -187,19 +180,42 @@ (canna:memq-recursive a (cdr l)) ))) (defun canna:create-mode-line () - (if (not (canna:memq-recursive 'mode-line-canna-mode mode-line-format)) - (setq-default - mode-line-format - (append (list (list 'minibuffer-window-selected - (list 'display-minibuffer-mode-in-minibuffer - "-" "m") "-") - (list 'minibuffer-window-selected - (list 'display-minibuffer-mode-in-minibuffer - 'mode-line-canna-mode - 'mode-line-canna-mode-in-minibuffer) - 'mode-line-canna-mode)) - mode-line-format))) - (mode-line-canna-mode-update mode-line-canna-mode) ) + "Add string of Canna status into mode-line." + (cond ((featurep 'xemacs) + (or (canna:memq-recursive 'mode-line-canna-mode + default-modeline-format) + (setq-default default-modeline-format + (nconc '("" mode-line-canna-mode) + default-modeline-format)) + ) + (mapcar (function + (lambda (buffer) + (save-excursion + (set-buffer buffer) + (or (canna:memq-recursive 'mode-line-canna-mode + modeline-format) + (setq modeline-format + (nconc '("" mode-line-canna-mode) + modeline-format)) + ) + ))) + (buffer-list)) + ) + (t + (or (canna:memq-recursive 'mode-line-canna-mode mode-line-format) + (setq-default + mode-line-format + (append (list (list 'minibuffer-window-selected + (list 'display-minibuffer-mode-in-minibuffer + "-" "m") "-") + (list 'minibuffer-window-selected + (list 'display-minibuffer-mode-in-minibuffer + 'mode-line-canna-mode + 'mode-line-canna-mode-in-minibuffer) + 'mode-line-canna-mode)) + mode-line-format)) + ))) + (mode-line-canna-mode-update mode-line-canna-mode)) (defun canna:mode-line-display () (mode-line-canna-mode-update mode-line-canna-mode)) @@ -282,7 +298,7 @@ t の時はデフォルトの色を使用する。 (define-key canna-mode-map (make-string 1 ch) 'canna-functional-insert-command) (setq ch (1+ ch)))) -(cond (running-xemacs +(cond ((featurep 'xemacs) (define-key canna-mode-map [up] "\C-p") (define-key canna-mode-map [(shift up)] "\C-p") (define-key canna-mode-map [(control up)] "\C-p") @@ -323,7 +339,7 @@ t の時はデフォルトの色を使用する。 (define-key canna-minibuffer-mode-map (make-string 1 ch) 'canna-minibuffer-insert-command) (setq ch (1+ ch)))) -(cond (running-xemacs +(cond ((featurep 'xemacs) (define-key canna-minibuffer-mode-map [up] "\C-p") (define-key canna-minibuffer-mode-map [(shift up)] "\C-p") (define-key canna-minibuffer-mode-map [(control up)] "\C-p") @@ -468,7 +484,7 @@ kana-to-kanji translation." (set-marker canna:*spos-undo-text* (point)) ;; ;; update kbnes - (self-insert-string canna-kakutei-string) + (canna-self-insert-string canna-kakutei-string) ;; 未確定の文字がなく、確定文字列の最後が閉じ括弧の ;; 類だったときは blink させる。 (if (and canna-empty-info @@ -496,7 +512,7 @@ kana-to-kanji translation." (t ;; ;; update kbnes - (self-insert-string canna-kakutei-string) + (canna-self-insert-string canna-kakutei-string) ;; 未確定の文字がなく、確定文字列の最後が閉じ括弧の ;; 類だったときは blink させる。 (if (and canna-empty-info @@ -632,7 +648,7 @@ kana-to-kanji translation." ; (set-window-buffer (minibuffer-window) ; (get-buffer-create canna:*menu-buffer*)) ;; modified by 守岡 知彦 , 1996/6/7 - (unless running-xemacs + (unless (featurep 'xemacs) ;; とりあえず XEmacs では動かさないことにしておこう (^_^; (setq canna:*saved-redirection* (frame-focus (selected-frame))) (redirect-frame-focus (selected-frame) @@ -678,7 +694,7 @@ kana-to-kanji translation." (set-window-buffer (minibuffer-window) canna:*saved-minibuffer*) ; (setq canna:*saved-minibuffer* nil) ;; modified by 守岡 知彦 , 1996/6/7 - (unless running-xemacs + (unless (featurep 'xemacs) ;; とりあえず XEmacs では動かさないようにしておこう (^_^; (redirect-frame-focus (window-frame canna:*previous-window*) canna:*saved-redirection*) @@ -755,6 +771,9 @@ kana-to-kanji translation, even if you are in the minibuffer." (- (point) arg) (point))) (if (= last-command-char ? ) (canna:do-auto-fill)))))) +;; wire us into pending-delete +(put 'canna-self-insert-command 'pending-delete t) + (defun canna-toggle-japanese-mode () "Toggle canna japanese mode." (interactive) @@ -991,7 +1010,7 @@ dictionary." (eq hilit-background-mode 'dark)) (string-match "on\\|t" - (or (if running-xemacs + (or (if (featurep 'xemacs) (x-get-resource "ReverseVideo" "reverseVideo" 'string) (x-get-resource "ReverseVideo" "reverseVideo")) @@ -1048,7 +1067,14 @@ dictionary." (define-key global-map (make-string 1 ch) 'canna-self-insert-command) (setq ch (1+ ch)) )) - (cond ((let ((keys (car init-val)) (ok nil)) + (cond + ;; #### I'm just guessing that this should come before the + ;; init-val setting + ;; if registered with LEIM, no-op + ((featurep 'canna-leim) t) + ;; check to see if an X resource or the like is available in + ;; init-val + ((let ((keys (car init-val)) (ok nil)) (while keys (cond ((< (car keys) 128) (global-set-key @@ -1057,9 +1083,13 @@ dictionary." (setq ok t) )) (setq keys (cdr keys)) ) ok)) - (t ; デフォルトの設定 - (global-set-key "\C-o" 'canna-toggle-japanese-mode) )) + ;; デフォルトの設定 + ;; Since XEmacs provides canna-leim.el, we should leave this + ;; as is. + (t (global-set-key "\C-o" 'canna-toggle-japanese-mode) )) + ;; #### should these global bindings be conditional on LEIM? + ;; LEIM doesn't use kanji key yet AFAIK, so leave them. (if (not (keymapp (global-key-binding "\e["))) (global-unset-key "\e[") ) (global-set-key "\e[210z" 'canna-toggle-japanese-mode) ; XFER