emacs/lisp/leim/quail/uni-input.el

139 lines
4.2 KiB
EmacsLisp
Raw Normal View History

2001-11-04 17:08:08 +00:00
;;; uni-input.el --- Hex Unicode input method
2013-01-01 09:11:05 +00:00
;; Copyright (C) 2001-2013 Free Software Foundation, Inc.
2011-01-02 15:50:46 -08:00
;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
2005-12-19 06:02:52 +00:00
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021
2001-11-04 17:08:08 +00:00
;; Author: Dave Love <fx@gnu.org>
;; Keywords: i18n
2001-12-25 11:10:03 +00:00
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
2001-11-04 17:08:08 +00:00
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
2001-11-04 17:08:08 +00:00
;; GNU Emacs is distributed in the hope that it will be useful,
2001-11-04 17:08:08 +00:00
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
2001-11-04 17:08:08 +00:00
;;; Commentary:
;; Provides an input method for entering characters by hex unicode in
;; the form `uxxxx', similarly to the Yudit editor.
;; This is not really a Quail method, but uses some Quail functions.
;; There is probably A Better Way.
;; You can get a similar effect by using C-q with
;; `read-quoted-char-radix' set to 16.
2001-11-04 17:08:08 +00:00
2003-02-04 19:25:06 +00:00
;; Note that this only allows you to enter BMP values unless someone
;; extends it to use variable numbers of digits.
2001-11-04 17:08:08 +00:00
;;; Code:
(require 'quail)
(defun ucs-input-insert-char (char)
(insert char)
(move-overlay quail-overlay (overlay-start quail-overlay) (point)))
2001-11-04 17:08:08 +00:00
(defun ucs-input-method (key)
(if (or buffer-read-only
(and (/= key ?U) (/= key ?u)))
(list key)
(quail-setup-overlays nil)
(ucs-input-insert-char key)
2001-11-04 17:08:08 +00:00
(let ((modified-p (buffer-modified-p))
(buffer-undo-list t)
(input-method-function nil)
(echo-keystrokes 0)
(help-char nil)
(events (list key))
(str " "))
(unwind-protect
(catch 'non-digit
(progn
(dotimes (i 4)
(let ((seq (read-key-sequence nil))
key)
(if (and (stringp seq)
(= 1 (length seq))
(setq key (aref seq 0))
(memq key '(?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?a
?b ?c ?d ?e ?f ?A ?B ?C ?D ?E ?F)))
2001-11-04 17:08:08 +00:00
(progn
(push key events)
(ucs-input-insert-char key))
2001-11-04 17:08:08 +00:00
(quail-delete-region)
(throw 'non-digit (append (reverse events)
(listify-key-sequence seq))))))
(quail-delete-region)
(let ((n (string-to-number (apply 'string
(cdr (nreverse events)))
16)))
(if (characterp n)
(list n)))))
2001-11-04 17:08:08 +00:00
(quail-delete-overlays)
(set-buffer-modified-p modified-p)
(run-hooks 'input-method-after-insert-chunk-hook)))))
Move runtime leim lisp files to lisp/leim directory This allows us to reuse much of the lisp build and installation machinery, rather than duplicating it. * Makefile.in (abs_builddir, leimdir): Remove. (buildlisppath, SUBDIR, COPYDIR, COPYDESTS): No more leim directory. (epaths-force-w32): No longer set BLD. (leim): Remove. (install-arch-indep): No longer run or install leim. (mostlyclean, clean): No longer run leim rule. (bootstrap-clean): Change leim target. (maintainer-clean): Add leim. (check-declare): Remove leim. * README: Update for leim changes. * configure.ac (leimdir): Remove. (standardlisppath): No more leimdir. * make-dist: Update for files from leim/ now being in lisp/leim/. * doc/lispref/loading.texi (Library Search): * doc/lispref/os.texi (Startup Summary): No more leim directory. * leim/Makefile.in (leimdir): New variable. (TIT_GB, TIT_BIG5, MISC, changed.tit, changed.misc) (${leimdir}/leim-list.el, ${leimdir}/ja-dic/ja-dic.el): Generate in $leimdir. (all): Remove compilation, add ja-dic. (leim-list.el): Now PHONY. (setwins, compile-targets, compile-main, clean, mostlyclean) (extraclean): Remove. (bootstrap-clean): Delete all generated files. * leim/README: Update for moved leim/ directory. * leim/leim-ext.el (ucs-input-activate, hangul-input-method-activate): Remove manual autoloads; now in loaddefs.el. Disable byte-compile, version-control, autoloads in the output. * lisp/Makefile.in (setwins_for_subdirs): Skip leim/ directory. (compile-main): Depend on lisp/leim rule. (leim): New rule. * lisp/loadup.el: Move leim-list.el to leim/ subdirectory. * lisp/startup.el (normal-top-level): No more leim directory. * lisp/international/ja-dic-cnv.el (skkdic-convert): Disable version-control and autoloads in output files. * lisp/international/titdic-cnv.el (titdic-convert, miscdic-convert): Disable version-control and autoloads in output files. * lisp/leim/quail: Move here from ../leim. * lisp/leim/quail/hangul.el (hangul-input-method-activate): Add autoload cookie. (generated-autoload-load-name): Set file-local value. * lisp/leim/quail/uni-input.el (ucs-input-activate): Add autoload cookie. (generated-autoload-load-name): Set file-local value. * nt/README.W32: * nt/addpm.c (env_vars): * nt/epaths.nt (PATH_LOADSEARCH, PATH_DUMPLOADSEARCH): * nt/paths.h (PATH_LOADSEARCH): No more leim directory. * src/Makefile.in (leimdir): Now in lisp source directory. ($(leimdir)/leim-list.el): Just use ../leim . * src/epaths.in (PATH_DUMPLOADSEARCH): * src/lread.c (load_path_default): * src/nsterm.m (ns_load_path): No more leim directory. * .bzrignore: Update for relocated leim files.
2013-11-26 22:15:06 -08:00
;;;###autoload
2001-11-04 17:08:08 +00:00
(defun ucs-input-activate (&optional arg)
"Activate UCS input method.
With ARG, activate UCS input method if and only if ARG is positive.
2001-11-04 17:08:08 +00:00
While this input method is active, the variable
`input-method-function' is bound to the function `ucs-input-method'."
(if (and arg
(< (prefix-numeric-value arg) 0))
(unwind-protect
(progn
(quail-hide-guidance)
2001-11-04 17:08:08 +00:00
(quail-delete-overlays)
(setq describe-current-input-method-function nil))
(kill-local-variable 'input-method-function))
(setq deactivate-current-input-method-function 'ucs-input-deactivate)
2001-11-04 17:08:08 +00:00
(setq describe-current-input-method-function 'ucs-input-help)
(quail-delete-overlays)
(if (eq (selected-window) (minibuffer-window))
(add-hook 'minibuffer-exit-hook 'quail-exit-from-minibuffer))
(set (make-local-variable 'input-method-function)
'ucs-input-method)))
(defun ucs-input-deactivate ()
"Deactivate UCS input method."
2001-11-04 17:08:08 +00:00
(interactive)
(ucs-input-activate -1))
(define-obsolete-function-alias
'ucs-input-inactivate
'ucs-input-deactivate "24.3")
2001-11-04 17:08:08 +00:00
(defun ucs-input-help ()
(interactive)
(with-output-to-temp-buffer "*Help*"
(princ "\
Input method: ucs (mode line indicator:U+)
2001-11-04 17:08:08 +00:00
Input as Unicode: U<hex> or u<hex>, where <hex> is a four-digit hex number.")))
Move runtime leim lisp files to lisp/leim directory This allows us to reuse much of the lisp build and installation machinery, rather than duplicating it. * Makefile.in (abs_builddir, leimdir): Remove. (buildlisppath, SUBDIR, COPYDIR, COPYDESTS): No more leim directory. (epaths-force-w32): No longer set BLD. (leim): Remove. (install-arch-indep): No longer run or install leim. (mostlyclean, clean): No longer run leim rule. (bootstrap-clean): Change leim target. (maintainer-clean): Add leim. (check-declare): Remove leim. * README: Update for leim changes. * configure.ac (leimdir): Remove. (standardlisppath): No more leimdir. * make-dist: Update for files from leim/ now being in lisp/leim/. * doc/lispref/loading.texi (Library Search): * doc/lispref/os.texi (Startup Summary): No more leim directory. * leim/Makefile.in (leimdir): New variable. (TIT_GB, TIT_BIG5, MISC, changed.tit, changed.misc) (${leimdir}/leim-list.el, ${leimdir}/ja-dic/ja-dic.el): Generate in $leimdir. (all): Remove compilation, add ja-dic. (leim-list.el): Now PHONY. (setwins, compile-targets, compile-main, clean, mostlyclean) (extraclean): Remove. (bootstrap-clean): Delete all generated files. * leim/README: Update for moved leim/ directory. * leim/leim-ext.el (ucs-input-activate, hangul-input-method-activate): Remove manual autoloads; now in loaddefs.el. Disable byte-compile, version-control, autoloads in the output. * lisp/Makefile.in (setwins_for_subdirs): Skip leim/ directory. (compile-main): Depend on lisp/leim rule. (leim): New rule. * lisp/loadup.el: Move leim-list.el to leim/ subdirectory. * lisp/startup.el (normal-top-level): No more leim directory. * lisp/international/ja-dic-cnv.el (skkdic-convert): Disable version-control and autoloads in output files. * lisp/international/titdic-cnv.el (titdic-convert, miscdic-convert): Disable version-control and autoloads in output files. * lisp/leim/quail: Move here from ../leim. * lisp/leim/quail/hangul.el (hangul-input-method-activate): Add autoload cookie. (generated-autoload-load-name): Set file-local value. * lisp/leim/quail/uni-input.el (ucs-input-activate): Add autoload cookie. (generated-autoload-load-name): Set file-local value. * nt/README.W32: * nt/addpm.c (env_vars): * nt/epaths.nt (PATH_LOADSEARCH, PATH_DUMPLOADSEARCH): * nt/paths.h (PATH_LOADSEARCH): No more leim directory. * src/Makefile.in (leimdir): Now in lisp source directory. ($(leimdir)/leim-list.el): Just use ../leim . * src/epaths.in (PATH_DUMPLOADSEARCH): * src/lread.c (load_path_default): * src/nsterm.m (ns_load_path): No more leim directory. * .bzrignore: Update for relocated leim files.
2013-11-26 22:15:06 -08:00
;; The file leim-list.el contains the following call.
;; (register-input-method "ucs" "UTF-8" 'ucs-input-activate "U+"
;; "Unicode input as hex in the form Uxxxx.")
2001-11-04 17:08:08 +00:00
(provide 'uni-input)
Move runtime leim lisp files to lisp/leim directory This allows us to reuse much of the lisp build and installation machinery, rather than duplicating it. * Makefile.in (abs_builddir, leimdir): Remove. (buildlisppath, SUBDIR, COPYDIR, COPYDESTS): No more leim directory. (epaths-force-w32): No longer set BLD. (leim): Remove. (install-arch-indep): No longer run or install leim. (mostlyclean, clean): No longer run leim rule. (bootstrap-clean): Change leim target. (maintainer-clean): Add leim. (check-declare): Remove leim. * README: Update for leim changes. * configure.ac (leimdir): Remove. (standardlisppath): No more leimdir. * make-dist: Update for files from leim/ now being in lisp/leim/. * doc/lispref/loading.texi (Library Search): * doc/lispref/os.texi (Startup Summary): No more leim directory. * leim/Makefile.in (leimdir): New variable. (TIT_GB, TIT_BIG5, MISC, changed.tit, changed.misc) (${leimdir}/leim-list.el, ${leimdir}/ja-dic/ja-dic.el): Generate in $leimdir. (all): Remove compilation, add ja-dic. (leim-list.el): Now PHONY. (setwins, compile-targets, compile-main, clean, mostlyclean) (extraclean): Remove. (bootstrap-clean): Delete all generated files. * leim/README: Update for moved leim/ directory. * leim/leim-ext.el (ucs-input-activate, hangul-input-method-activate): Remove manual autoloads; now in loaddefs.el. Disable byte-compile, version-control, autoloads in the output. * lisp/Makefile.in (setwins_for_subdirs): Skip leim/ directory. (compile-main): Depend on lisp/leim rule. (leim): New rule. * lisp/loadup.el: Move leim-list.el to leim/ subdirectory. * lisp/startup.el (normal-top-level): No more leim directory. * lisp/international/ja-dic-cnv.el (skkdic-convert): Disable version-control and autoloads in output files. * lisp/international/titdic-cnv.el (titdic-convert, miscdic-convert): Disable version-control and autoloads in output files. * lisp/leim/quail: Move here from ../leim. * lisp/leim/quail/hangul.el (hangul-input-method-activate): Add autoload cookie. (generated-autoload-load-name): Set file-local value. * lisp/leim/quail/uni-input.el (ucs-input-activate): Add autoload cookie. (generated-autoload-load-name): Set file-local value. * nt/README.W32: * nt/addpm.c (env_vars): * nt/epaths.nt (PATH_LOADSEARCH, PATH_DUMPLOADSEARCH): * nt/paths.h (PATH_LOADSEARCH): No more leim directory. * src/Makefile.in (leimdir): Now in lisp source directory. ($(leimdir)/leim-list.el): Just use ../leim . * src/epaths.in (PATH_DUMPLOADSEARCH): * src/lread.c (load_path_default): * src/nsterm.m (ns_load_path): No more leim directory. * .bzrignore: Update for relocated leim files.
2013-11-26 22:15:06 -08:00
;; Local Variables:
;; generated-autoload-load-name: "quail/uni-input"
;; End:
2001-11-04 17:08:08 +00:00
;;; uni-input.el ends here