Function: quail-start-conversion
quail-start-conversion is a byte-compiled function defined in
quail.el.gz.
Signature
(quail-start-conversion KEY)
Documentation
Start conversion of the typed character KEY by the current Quail package.
Return the input string.
Source Code
;; Defined in /usr/src/emacs/lisp/international/quail.el.gz
(defun quail-start-conversion (key)
"Start conversion of the typed character KEY by the current Quail package.
Return the input string."
;; Check the possibility of translating KEY.
;; If KEY is nil, we can anyway start translation.
(if (or (and (integerp key)
(assq (if (quail-kbd-translate)
(quail-keyboard-translate key) key)
(cdr (quail-map))))
(null key))
;; Ok, we can start translation and conversion.
(let* ((echo-keystrokes 0)
(help-char nil)
(overriding-terminal-local-map (quail-conversion-keymap))
;; (generated-events nil) ;FIXME: What is this?
(input-method-function nil)
(modified-p (buffer-modified-p))
last-command-event last-command this-command)
(setq quail-current-key ""
quail-current-str ""
quail-translating t
quail-converting t
quail-conversion-str "")
(if key (quail-add-unread-command-events key))
(while quail-converting
(set-buffer-modified-p modified-p)
(or quail-translating
(progn
(setq quail-current-key ""
quail-current-str ""
quail-translating t)
(quail-setup-overlays nil)))
(quail-show-guidance)
(let* ((prompt (if input-method-use-echo-area
(format "%s%s%s %s"
(or input-method-previous-message "")
quail-conversion-str
quail-current-str
quail-guidance-str)))
(keyseq (read-key-sequence prompt nil nil t))
(cmd (lookup-key (quail-conversion-keymap) keyseq)))
(if (if key (commandp cmd) (eq cmd 'quail-self-insert-command))
(progn
(setq last-command-event (aref keyseq (1- (length keyseq)))
last-command this-command
this-command cmd)
(setq key t)
(condition-case err
(call-interactively cmd)
(quail-error (message "%s" (cdr err)) (beep)))
(or quail-translating
(progn
(if quail-current-str
(setq quail-conversion-str
(concat quail-conversion-str
(if (stringp quail-current-str)
quail-current-str
(char-to-string quail-current-str)))))
(if (or input-method-exit-on-first-char
(= (length quail-conversion-str) 0))
(setq quail-converting nil)))))
;; KEYSEQ is not defined in the conversion keymap.
;; Let's return the event(s) to the caller.
(quail-add-unread-command-events (this-single-command-raw-keys))
(setq quail-converting nil))))
(setq quail-translating nil)
(if (overlay-start quail-conv-overlay)
(delete-region (overlay-start quail-conv-overlay)
(overlay-end quail-conv-overlay)))
(if (> (length quail-conversion-str) 0)
quail-conversion-str))
;; Since KEY doesn't start any translation, just return it.
;; But translate KEY if necessary.
(if (quail-kbd-translate)
(setq key (quail-keyboard-translate key)))
(char-to-string key)))