;;; 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
;; 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:
(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.
(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))))
;; 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)