]> code.delx.au - gnu-emacs/blobdiff - lisp/international/encoded-kb.el
Merged from emacs@sv.gnu.org.
[gnu-emacs] / lisp / international / encoded-kb.el
index b604b34a238c2a89f2794b911a9513af151626e7..a39daff888a42b67b22ccc27bd51ae56faf99b17 100644 (file)
@@ -1,7 +1,9 @@
 ;;; encoded-kb.el --- handler to input multibyte characters encoded somehow
 
-;; Copyright (C) 1997  Free Software Foundation, Inc.
-;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2004, 2005
+;; Copyright (C) 1997, 2001, 2002, 2003, 2004, 2005, 2006
+;;   Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
 
@@ -19,8 +21,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -251,10 +253,6 @@ The following key sequence may cause multilingual text insertion."
    (t
     nil)))
 
-;; Input mode at the time Encoded-kbd mode is turned on is saved here.
-;; XXX This should be made display-local somehow.
-(defvar saved-input-mode nil)
-
 ;;;###autoload
 (defun encoded-kbd-setup-display (display)
   "Set up a `key-translation-map' for `keyboard-coding-system' on DISPLAY.
@@ -264,9 +262,9 @@ DISPLAY may be a display id, a frame, or nil for the selected frame's display."
     (when frame
       (with-selected-frame frame
        ;; Remove any previous encoded-kb keymap from key-translation-map.
-       (let ((m (terminal-local-value 'key-translation-map frame)))
+       (let ((m local-key-translation-map))
          (if (equal (keymap-prompt m) "encoded-kb")
-             (set-terminal-local-value 'key-translation-map frame (keymap-parent m))
+             (setq local-key-translation-map (keymap-parent m))
            (while (keymap-parent m)
              (if (equal (keymap-prompt (keymap-parent m)) "encoded-kb")
                  (set-keymap-parent m (keymap-parent (keymap-parent m))))
@@ -276,26 +274,26 @@ DISPLAY may be a display id, a frame, or nil for the selected frame's display."
            ;; We are turning on Encoded-kbd mode.
            (let ((coding (keyboard-coding-system))
                  (keymap (make-sparse-keymap "encoded-kb"))
+                 (cim (current-input-mode))
                  result)
-             (set-keymap-parent keymap (terminal-local-value 'key-translation-map frame))
-             (set-terminal-local-value 'key-translation-map frame keymap)
-             (or saved-input-mode
-                 (setq saved-input-mode (current-input-mode)))
+             (set-keymap-parent keymap local-key-translation-map)
+             (setq local-key-translation-map keymap)
+             (unless (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)
+               (set-terminal-parameter nil 'encoded-kbd-saved-input-mode (nth 2 cim)))
              (setq result (and coding (encoded-kbd-setup-keymap keymap coding)))
              (if result
-                 (if (eq result 8)
-                     (set-input-mode
-                      (nth 0 saved-input-mode)
-                      (nth 1 saved-input-mode)
-                      'use-8th-bit
-                      (nth 3 saved-input-mode)))
-               (setq saved-input-mode nil)
+                 (when (and (eq result 8)
+                            (memq (nth 2 cim) '(t nil)))
+                   (set-input-meta-mode 'use-8th-bit))
+               (set-terminal-parameter nil 'encoded-kbd-saved-input-meta-mode nil)
                (error "Unsupported coding system in Encoded-kbd mode: %S"
                       coding)))
          ;; We are turning off Encoded-kbd mode.
-         (and saved-input-mode
-              (apply 'set-input-mode saved-input-mode))
-         (setq saved-input-mode nil))))))
+         (when (and (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)
+                    (not (equal (nth 2 (current-input-mode))
+                                (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode))))
+           (set-input-meta-mode (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)))
+         (set-terminal-parameter nil 'saved-input-meta-mode nil))))))
 
 (provide 'encoded-kb)