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.
|
|
|
|
|
2008-05-07 03:37:08 +00:00
|
|
|
;; 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
|
2008-05-07 03:37:08 +00:00
|
|
|
;; 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
|
|
|
|
2008-05-07 03:37: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
|
2008-05-07 03:37:08 +00:00
|
|
|
;; 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.
|
|
|
|
|
2002-06-24 19:26:00 +00:00
|
|
|
;; 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)
|
|
|
|
|
2004-09-21 02:25:16 +00:00
|
|
|
(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)
|
2004-09-21 02:25:16 +00:00
|
|
|
(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
|
2002-06-24 19:26:00 +00:00
|
|
|
?b ?c ?d ?e ?f ?A ?B ?C ?D ?E ?F)))
|
2001-11-04 17:08:08 +00:00
|
|
|
(progn
|
|
|
|
(push key events)
|
2004-09-21 02:25:16 +00:00
|
|
|
(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)
|
2002-06-24 19:26:00 +00:00
|
|
|
(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.
|
2013-06-21 15:37:15 +02:00
|
|
|
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
|
2004-09-21 02:25:16 +00:00
|
|
|
(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))
|
2012-07-29 00:16:45 -07:00
|
|
|
(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)))
|
|
|
|
|
2012-07-29 00:16:45 -07:00
|
|
|
(defun ucs-input-deactivate ()
|
|
|
|
"Deactivate UCS input method."
|
2001-11-04 17:08:08 +00:00
|
|
|
(interactive)
|
|
|
|
(ucs-input-activate -1))
|
|
|
|
|
2012-07-29 00:16:45 -07:00
|
|
|
(define-obsolete-function-alias
|
|
|
|
'ucs-input-inactivate
|
2012-08-15 09:29:11 -07:00
|
|
|
'ucs-input-deactivate "24.3")
|
2012-07-29 00:16:45 -07:00
|
|
|
|
2001-11-04 17:08:08 +00:00
|
|
|
(defun ucs-input-help ()
|
|
|
|
(interactive)
|
|
|
|
(with-output-to-temp-buffer "*Help*"
|
|
|
|
(princ "\
|
2006-12-09 19:20:45 +00:00
|
|
|
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.
|
2004-09-21 02:25:16 +00:00
|
|
|
;; (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
|