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)))