X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/7115232b8eff7687aed3a5f0cdf824bfad22abc4..d7142f3e55be2073129bef3bbe633da2bc46a156:/leim/quail/uni-input.el diff --git a/leim/quail/uni-input.el b/leim/quail/uni-input.el index d802fcf7e0..88f5ec6a9b 100644 --- a/leim/quail/uni-input.el +++ b/leim/quail/uni-input.el @@ -1,13 +1,19 @@ ;;; uni-input.el --- Hex Unicode input method -;; Copyright (C) 2001 Free Software Foundation, Inc. +;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. +;; Copyright (C) 2004, 2005, 2006, 2007 +;; National Institute of Advanced Industrial Science and Technology (AIST) +;; Registration Number H14PRO021 ;; Author: Dave Love ;; Keywords: i18n +;; This file is part of GNU Emacs. + ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) +;; the Free Software Foundation; either version 3, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, @@ -17,8 +23,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. +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -48,7 +54,7 @@ (write ((r0 & ?\x3F) | ?\x80))) (if (r0 < #x200000) ((write ((r0 >> 18) | ?\xF0)) - (write (((r0 >> 12) & ?\3F) | ?\x80)) + (write (((r0 >> 12) & ?\x3F) | ?\x80)) (write (((r0 >> 6) & ?\x3F) | ?\x80)) (write ((r0 & ?\x3F) | ?\x80))) (if (r0 < #x4000000) @@ -56,22 +62,24 @@ (write (((r0 >> 18) & ?\x3F) | ?\x80)) (write (((r0 >> 12) & ?\x3F) | ?\x80)) (write (((r0 >> 6) & ?\x3F) | ?\x80)) - (write ((r0 & ?\x3f) | ?\x80))) + (write ((r0 & ?\x3F) | ?\x80))) ((write ((r0 >> 30) | ?\xFC)) (write (((r0 >> 24) & ?\x3F) | ?\x80)) (write (((r0 >> 18) & ?\x3F) | ?\x80)) (write (((r0 >> 12) & ?\x3F) | ?\x80)) (write (((r0 >> 6) & ?\x3F) | ?\x80)) - (write ((r0 & ?\x3f) | ?\x80)))))))))) + (write ((r0 & ?\x3F) | ?\x80)))))))))) + +(defun ucs-input-insert-char (char) + (insert char) + (move-overlay quail-overlay (overlay-start quail-overlay) (point))) (defun ucs-input-method (key) (if (or buffer-read-only (and (/= key ?U) (/= key ?u))) (list key) (quail-setup-overlays nil) - (let ((current-prefix-arg) - (last-command-char key)) - (call-interactively 'self-insert-command)) + (ucs-input-insert-char key) (let ((modified-p (buffer-modified-p)) (buffer-undo-list t) (input-method-function nil) @@ -92,13 +100,7 @@ ?b ?c ?d ?e ?f ?A ?B ?C ?D ?E ?F))) (progn (push key events) - (let ((last-command-char key) - (current-prefix-arg)) - (call-interactively 'self-insert-command))) - (let ((last-command-char key) - (current-prefix-arg)) - (condition-case nil - (call-interactively (key-binding seq)))) + (ucs-input-insert-char key)) (quail-delete-region) (throw 'non-digit (append (reverse events) (listify-key-sequence seq)))))) @@ -106,13 +108,17 @@ (let* ((n (string-to-number (apply 'string (cdr (nreverse events))) 16)) - (c (decode-char 'ucs n)) - (status (make-vector 9 nil))) + (c (decode-char 'ucs n))) (if c (list c) - (aset status 0 n) - (string-to-list (ccl-execute-on-string - 'utf-8-ccl-encode status "")))))) + ;; The intention of the following code is to insert + ;; a correct UTF-8 sequence by raw bytes, but + ;; currently it doesn't work. + ;; (let ((status (make-vector 9 nil))) + ;; (aset status 0 n) + ;; (string-to-list (ccl-execute-on-string + ;; 'utf-8-ccl-encode status ""))) + (error "Character U+%04X is not yet supported" n))))) (quail-delete-overlays) (set-buffer-modified-p modified-p) (run-hooks 'input-method-after-insert-chunk-hook))))) @@ -127,7 +133,7 @@ While this input method is active, the variable (< (prefix-numeric-value arg) 0)) (unwind-protect (progn - (quail-hide-guidance-buf) + (quail-hide-guidance) (quail-delete-overlays) (setq describe-current-input-method-function nil)) (kill-local-variable 'input-method-function)) @@ -136,7 +142,6 @@ While this input method is active, the variable (quail-delete-overlays) (if (eq (selected-window) (minibuffer-window)) (add-hook 'minibuffer-exit-hook 'quail-exit-from-minibuffer)) - (add-hook 'kill-buffer-hook 'quail-kill-guidance-buf nil t) (set (make-local-variable 'input-method-function) 'ucs-input-method))) @@ -149,13 +154,15 @@ While this input method is active, the variable (interactive) (with-output-to-temp-buffer "*Help*" (princ "\ -Input method: ucs (mode line indicator:U) +Input method: ucs (mode line indicator:U+) Input as Unicode: U or u, where is a four-digit hex number."))) -(register-input-method "ucs" "UTF-8" 'ucs-input-activate "U+" - "Unicode input as hex in the form Uxxxx.") +;; The file ../leim-ext.el contains the following call. +;; (register-input-method "ucs" "UTF-8" 'ucs-input-activate "U+" +;; "Unicode input as hex in the form Uxxxx.") (provide 'uni-input) +;;; arch-tag: e0d91c7c-19a1-43d3-8f2b-28c0e031efaa ;;; uni-input.el ends here