Function: describe-language-environment

describe-language-environment is an interactive and byte-compiled function defined in mule-cmds.el.gz.

Signature

(describe-language-environment LANGUAGE-NAME)

Documentation

Describe how Emacs supports language environment LANGUAGE-NAME.

View in manual

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/international/mule-cmds.el.gz
(defun describe-language-environment (language-name)
  "Describe how Emacs supports language environment LANGUAGE-NAME."
  (interactive
   (list (read-language-name
	  'documentation
	  (format-prompt "Describe language environment"
                         current-language-environment)
          current-language-environment)))
  (let ((help-buffer-under-preparation t))
    (if (null language-name)
	(setq language-name current-language-environment))
    (if (or (null language-name)
	    (null (get-language-info language-name 'documentation)))
	(error "No documentation for the specified language"))
    (if (symbolp language-name)
	(setq language-name (symbol-name language-name)))
    (dolist (feature (get-language-info language-name 'features))
      (require feature))
    (let ((doc (get-language-info language-name 'documentation)))
      (help-setup-xref (list #'describe-language-environment language-name)
		       (called-interactively-p 'interactive))
      (with-output-to-temp-buffer (help-buffer)
	(with-current-buffer standard-output
	  (insert language-name " language environment\n\n")
	  (if (stringp doc)
	      (insert (substitute-command-keys doc) "\n\n"))
	  (condition-case nil
	      (let ((str (eval (get-language-info language-name 'sample-text))))
		(if (stringp str)
		    (insert "Sample text:\n  "
			    (string-replace "\n" "\n  " str)
			    "\n\n")))
	    (error nil))
	  (let ((input-method (get-language-info language-name 'input-method))
		(l (copy-sequence input-method-alist))
		(first t))
	    (when (and input-method
		       (setq input-method (assoc input-method l)))
	      (insert "Input methods (default " (car input-method) ")\n")
	      (setq l (cons input-method (delete input-method l))
		    first nil))
	    (dolist (elt l)
	      (when (or (eq input-method elt)
			(string-equal-ignore-case language-name (nth 1 elt)))
		(when first
		  (insert "Input methods:\n")
		  (setq first nil))
		(insert "  " (car elt))
		(search-backward (car elt))
		(help-xref-button 0 'help-input-method (car elt))
		(goto-char (point-max))
		(insert " (\""
			(if (stringp (nth 3 elt)) (nth 3 elt) (car (nth 3 elt)))
			"\" in mode line)\n")))
	    (or first
		(insert "\n")))
	  (insert "Character sets:\n")
	  (let ((l (get-language-info language-name 'charset)))
	    (if (null l)
		(insert "  nothing specific to " language-name "\n")
	      (while l
		(insert "  " (symbol-name (car l)))
		(search-backward (symbol-name (car l)))
		(help-xref-button 0 'help-character-set (car l))
		(goto-char (point-max))
		(insert ": " (charset-description (car l)) "\n")
		(setq l (cdr l)))))
	  (insert "\n")
	  (insert "Coding systems:\n")
	  (let ((l (get-language-info language-name 'coding-system)))
	    (if (null l)
		(insert "  nothing specific to " language-name "\n")
	      (while l
		(insert "  " (symbol-name (car l)))
		(search-backward (symbol-name (car l)))
		(help-xref-button 0 'help-coding-system (car l))
		(goto-char (point-max))
		(insert (substitute-command-keys " (`")
			(coding-system-mnemonic (car l))
			(substitute-command-keys "' in mode line):\n\t")
			(substitute-command-keys
			 (coding-system-doc-string (car l)))
			"\n")
		(let ((aliases (coding-system-aliases (car l))))
		  (when aliases
		    (insert "\t(alias:")
		    (while aliases
		      (insert " " (symbol-name (car aliases)))
		      (setq aliases (cdr aliases)))
		    (insert ")\n")))
		(setq l (cdr l))))))))))