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.

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))))
  (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)
		      (eq t (compare-strings language-name nil nil
					     (nth 1 elt) nil nil t)))
	      (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)))))))))