annotate lisp/mule/mule-cmds.el @ 502:7039e6323819

[xemacs-hg @ 2001-05-04 22:41:46 by ben] ----------------------- byte-comp warning fixes ----------------- New functions for cleanly eliminating byte-compiler warnings. Their definitions require no changes at all in bytecomp.el, meaning that any package that wants to use them and be compatible with older versions of XEmacs need only copy the code and rename the functions (i.e. prefix them with the package name). Eliminate byte-compiler warnings using the new functions in bytecomp-runtime.el. Move coding-system-put,get,category, since they're not Mule-specific and are used in prefer-coding-system. font.el was incredibly ugly. Clean it up. Avoid using defsubst for any exported functions, to avoid possible compatibility problems if we later change the internal interface. (It happened before, with face accessors, between 19.8 and 19.9). Fix tons of warnings. Clean up (new function gpm-is-supported-p eliminates duplicate code in gpm-create/delete-device-hook) and eliminate warnings. ---------- make byte-recompile-directory work in the --------- core `lisp' dir, even in the absence of a Mule XEmacs (i.e. make it skip the Mule files rather than trying to compile them). now you should be able to do `touch *.el' in the `lisp' dir, then M-x byte-recompile-directory, and get no warnings. Avoid trying to compile Mule files in byte-recompile-directory when we're not in a Mule XEmacs, since we're highly likely to get syntax errors. Add a coding-system cookie to all Mule files so that byte-recompile-directory ignores them. Magic cookie function moved to files.el from code-files.el (for use by bytecomp even in a non-coding-system XEmacs), and changed names and semantics for use by bytecomp. NOTE: IMO this is an internal function that we can change as we like (and there is absolutely no code anywhere else using the function). ---------------- GUI improvements: menus, help ------------------- Rearrange order of keymap declarations to be alphabetical. Improve help on help to include all bindings, and group by category. Add bindings for new Info commands. Remove warnings. Use command-hyper-apropos in place of command-apropos. Add a function to do the equivalent of command-apropos. Evals its help-text argument so you can put expressions there. Used now by help-for-help. Add binding to continue text searches. Expand index searches to work over multiple info documents. Add commands to search text/index in User and Lispref. Add new entry, "Uncomment Region" (parallels "Comment Out Region"). Redo Help menu; add bindings for new Info commands to search the index or text of the User and Lispref manuals. Add command for mark-paragraph, activate-region. Make Edit->R accelerator be rectangle, not register (more commonly used), and put rectangle first. Fix the Edit Init File entry to never load the .elc file. Simplify the default-popup-menu. Add Cmds->Tabs menu. Use kp-left not kp_left, etc. ---------------- Miscellaneous bug fixes/cleanup ------------------- byte-compiler-options: Correct doc string. easy-menu-do-define: fix extra quote. fill-paragraph-or-region:Rewrite to be more correct -- use call-interactively so that we always get exactly the same behavior as if the functions were called directly. No need to fiddle with zmacs-region-stays, now that bogus clearing of it (2001-04-28 src/ChangeLog) is removed. Put dialog titles back in -- this time correctly. Fix various other problems with leaks and such. key-sequence-list-description: Clean up fun to always correctly canonicalize. Clean up Kinsoku comments, synch comment-region with FSF 20.7. * simple.el (region-exists-p): * simple.el (region-active-p): Add comment about which one is correct to use in menu specs. * sound.el (load-sound-file): Minor code clean up. * startup.el: * startup.el (command-line-early): * startup.el (initial-scratch-message): Comment changes. Add info about sample.init.el to splash screen. Improve initial-scratch-message and clarify purpose of Scratch buffer. Fix byte-compile warning. ------------------------ Added features ------------------------- Add new variable to control whether etags checks all parent directories for tag files. (On by default.) * hash-table.el: New file, useful utility functions. * dumped-lisp.el (preloaded-file-list): Dump hash-table.el. ------------ notable bug fix: Windows event code -------------- Get critical quit working. ------------ notable bug fix and new feature: regex code -------------- Shy groups were implemented in a horrible, half-assed way that would cause them to screw up regex searching in most cases. Fixed to work correctly. Also extended back-reference syntax past 9. Only is recognized as such if there are at least that many non-shy groups; and optionally will warn about such uses, to catch old code that might be using them differently. (Added variable to control this in search.c -- `warn-about-possibly-incompatible-back- references', on by default for the moment. Declared in lisp.h. ---------------- process/SIGIO improvements ------------------- define USE_GETADDRINFO to replace more complex conditional, and use it. the code conditionalized on this in unix_open_network_stream had *serious* problems handling errors. it's now fixed, and major amounts of duplicate code between the two versions were combined. don't disable SIGIO and other interrupts unless CONNECT_NEEDS_SLOWED_INTERRUPTS is defined -- don't penalize OS's without bugs. similarly for a freebsd bug that was affecting all OS's. * s\ultrix.h: define CONNECT_NEEDS_SLOWED_INTERRUPTS, since that's the OS mentioned as having a kernel bug. * sysdep.c (request_sigio_on_device): * sysdep.c (unrequest_sigio_on_device): fix SIGIO problems on Linux. add check for O_ASYNC in case it's defined and FASYNC isn't. add comment about other ways to do SIGIO on Linux. * callproc.c (Fold_call_process_internal): * process.c (Fstart_process_internal): Deal with the possibility that `default-directory' doesn't have terminating slash. Correct comments about vfork. ---------------- Miscellaneous bug fixes/cleanup ------------------- * callint.c (Finteractive): Add lots of documentation -- exactly what the Lisp equivalents of all the interactive specs are. * console.h (struct console): change type of quit_char to Emchar. * event-msw.c (lstream_type_create_mswindows_selectable): spacing change. Eliminate events-mod.h and combine into events.h. * emacs.c: * emacs.c (make_arg_list_1): * emacs.c (main_1): A couple of char->Extbyte changes, add a comment. * glyphs-msw.c: Correct indentation of function defns to not exceed 80 cols. Try (sort of) to fix some code that sets the colors of the progress gauge. (Commented out) * keymap.c (syms_of_keymap): use DEFSYMBOL. * process.c (read_process_output): No need to fiddle with zmacs_region_stays, now that bogus clearing of it (see below) is removed. * search.c (Freplace_match): warning fix.
author ben
date Fri, 04 May 2001 22:42:35 +0000
parents 3078fd1074e8
children 943eaba38521
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 448
diff changeset
1 ;;; mule-cmds.el --- Commands for multilingual environment -*- coding: iso-2022-7bit; -*-
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 ;; Licensed to the Free Software Foundation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 ;; Copyright (C) 1997 MORIOKA Tomohiko
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Keywords: mule, multilingual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 ;; XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; along with XEmacs; see the file COPYING. If not, write to the Free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;; 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
26 ;; Note: Some of the code here is now in code-cmds.el
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
27
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 ;;; MULE related key bindings and menus.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
32 (require 'code-cmds)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
34 ;; Preserve the old name
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
35 (defvaralias 'mule-keymap 'coding-keymap)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
36
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 (define-key mule-keymap "x" 'set-selection-coding-system)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 (define-key mule-keymap "X" 'set-next-selection-coding-system)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 (define-key mule-keymap "\C-\\" 'set-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 ;;(define-key mule-keymap "c" 'list-coding-system-briefly) ; XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 (define-key mule-keymap "C" 'describe-coding-system) ; XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 (define-key mule-keymap "r" 'toggle-display-direction) ; XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 (define-key mule-keymap "l" 'set-language-environment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 (define-key help-map "L" 'describe-language-environment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 (define-key help-map "\C-\\" 'describe-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 (define-key help-map "I" 'describe-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 (define-key help-map "h" 'view-hello-file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 ;; Menu for XEmacs were moved to menubar-items.el.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 ;; This should be a single character key binding because users use it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 ;; very frequently while editing multilingual text. Now we can use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 ;; only two such keys: "\C-\\" and "\C-^", but the latter is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 ;; convenient because it requires shifting on most keyboards. An
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 ;; alternative is "\C-\]" which is now bound to `abort-recursive-edit'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 ;; but it won't be used that frequently.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 (define-key global-map "\C-\\" 'toggle-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 ;;; This is no good because people often type Shift-SPC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 ;;; meaning to type SPC. -- rms.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 ;;; ;; Here's an alternative key binding for X users (Shift-SPACE).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 ;;; (define-key global-map [?\S- ] 'toggle-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 (defun coding-system-change-eol-conversion (coding-system eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 "Return a coding system which differs from CODING-SYSTEM in eol conversion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 The returned coding system converts end-of-line by EOL-TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 but text as the same way as CODING-SYSTEM.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 EOL-TYPE should be `lf', `crlf', `cr' or nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 If EOL-TYPE is nil, the returned coding system detects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 how end-of-line is formatted automatically while decoding.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 EOL-TYPE can be specified by an symbol `unix', `dos' or `mac'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 They means `lf', `crlf', and `cr' respectively."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 (if (symbolp eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 (setq eol-type (cond ((or (eq eol-type 'unix)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 (eq eol-type 'lf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 'eol-lf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 ((or (eq eol-type 'dos)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 (eq eol-type 'crlf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 'eol-crlf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 ((or (eq eol-type 'mac)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 (eq eol-type 'cr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 'eol-cr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 (t eol-type))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 (let ((orig-eol-type (coding-system-eol-type coding-system)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 (if (null orig-eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 (if (not eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 coding-system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 (coding-system-property coding-system eol-type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 (let ((base (coding-system-base coding-system)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 (if (not eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 base
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
95 (if (eq eol-type orig-eol-type)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 coding-system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 (setq orig-eol-type (coding-system-eol-type base))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 (if (null orig-eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 (coding-system-property base eol-type))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 ;; (defun coding-system-change-text-conversion (coding-system coding)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 ;; "Return a coding system which differs from CODING-SYSTEM in text conversion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 ;; The returned coding system converts text by CODING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 ;; but end-of-line as the same way as CODING-SYSTEM.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 ;; If CODING is nil, the returned coding system detects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 ;; how text is formatted automatically while decoding."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 ;; (if (not coding)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 ;; (coding-system-base coding-system)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 ;; (let ((eol-type (coding-system-eol-type coding-system)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 ;; (coding-system-change-eol-conversion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 ;; coding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 ;; (if (numberp eol-type) (aref [unix dos mac] eol-type))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 (defun view-hello-file ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 "Display the HELLO file which list up many languages and characters."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 ;; We have to decode the file in any environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 (let ((coding-system-for-read 'iso-2022-7bit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 (find-file-read-only (expand-file-name "HELLO" data-directory))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 ;;; Language support stuff.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 (defvar language-info-alist nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 "Alist of language environment definitions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 Each element looks like:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 (LANGUAGE-NAME . ((KEY . INFO) ...))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 where LANGUAGE-NAME is a string, the name of the language environment,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 KEY is a symbol denoting the kind of information, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 INFO is the data associated with KEY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 Meaningful values for KEY include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 documentation value is documentation of what this language environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 is meant for, and how to use it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 charset value is a list of the character sets used by this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 sample-text value is one line of text,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 written using those character sets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 appropriate for this language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 setup-function value is a function to call to switch to this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 exit-function value is a function to call to leave this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 coding-system value is a list of coding systems that are good
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 for saving text written in this language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 This list serves as suggestions to the user;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 in effect, as a kind of documentation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 coding-priority value is a list of coding systems for this language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 environment, in order of decreasing priority.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 This is used to set up the coding system priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 list when you switch to this language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 input-method value is a default input method for this language
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 features value is a list of features requested in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 tutorial value is a tutorial file name written in the language.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 (defun get-language-info (lang-env key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 "Return information listed under KEY for language environment LANG-ENV.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 KEY is a symbol denoting the kind of information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 For a list of useful values for KEY and their meanings,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 see `language-info-alist'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 (if (symbolp lang-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 (setq lang-env (symbol-name lang-env)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 (let ((lang-slot (assoc-ignore-case lang-env language-info-alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 (if lang-slot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 (cdr (assq key (cdr lang-slot))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 (defun set-language-info (lang-env key info)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 "Modify part of the definition of language environment LANG-ENV.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 Specifically, this stores the information INFO under KEY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 in the definition of this language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 KEY is a symbol denoting the kind of information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 INFO is the value for that information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 For a list of useful values for KEY and their meanings,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 see `language-info-alist'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 (if (symbolp lang-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 (setq lang-env (symbol-name lang-env)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 (let (lang-slot key-slot)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 (setq lang-slot (assoc lang-env language-info-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 (if (null lang-slot) ; If no slot for the language, add it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 (setq lang-slot (list lang-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 language-info-alist (cons lang-slot language-info-alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 (setq key-slot (assq key lang-slot))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 (if (null key-slot) ; If no slot for the key, add it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 (setq key-slot (list key))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 (setcdr lang-slot (cons key-slot (cdr lang-slot)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 (setcdr key-slot info)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 (defun set-language-info-alist (lang-env alist &optional parents)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 "Store ALIST as the definition of language environment LANG-ENV.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 ALIST is an alist of KEY and INFO values. See the documentation of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 `set-language-info' for the meanings of KEY and INFO."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 (if (symbolp lang-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 (setq lang-env (symbol-name lang-env)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 (let (; (describe-map describe-language-environment-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 ; (setup-map setup-language-environment-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 ;; (if parents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 ;; (let ((l parents)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 ;; map parent-symbol parent)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 ;; (while l
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 ;; (if (symbolp (setq parent-symbol (car l)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 ;; (setq parent (symbol-name parent))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 ;; (setq parent parent-symbol parent-symbol (intern parent)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 ;; (setq map (lookup-key describe-map (vector parent-symbol)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 ;; (if (not map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 ;; (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 ;; (setq map (intern (format "describe-%s-environment-map"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 ;; (downcase parent))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 ;; (define-prefix-command map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 ;; (define-key-after describe-map (vector parent-symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 ;; (cons parent map) t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 ;; (setq describe-map (symbol-value map))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 ;; (setq map (lookup-key setup-map (vector parent-symbol)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 ;; (if (not map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 ;; (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 ;; (setq map (intern (format "setup-%s-environment-map"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 ;; (downcase parent))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 ;; (define-prefix-command map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 ;; (define-key-after setup-map (vector parent-symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 ;; (cons parent map) t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 ;; (setq setup-map (symbol-value map))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 ;; (setq l (cdr l)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 ;; Set up menu items for this language env.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 (let ((doc (assq 'documentation alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 (when doc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 ;; (define-key-after describe-map (vector (intern lang-env))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 ;; (cons lang-env 'describe-specified-language-support) t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 (when (featurep 'menubar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 (eval-after-load
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 "menubar-items.elc"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 `(add-menu-button
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
237 '("%_Edit" "%_Multilingual (\"Mule\")"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
238 "%_Describe Language Support")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 (vector ,lang-env
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 '(describe-language-environment ,lang-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 t))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 ;; (define-key-after setup-map (vector (intern lang-env))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 ;; (cons lang-env 'setup-specified-language-environment) t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 (when (featurep 'menubar)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 (eval-after-load
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 "menubar-items.elc"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 `(add-menu-button
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
249 '("%_Edit" "%_Multilingual (\"Mule\")"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
250 "%_Set Language Environment")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 (vector ,lang-env
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 '(set-language-environment ,lang-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 t))))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
254
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 (while alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 (set-language-info lang-env (car (car alist)) (cdr (car alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 (setq alist (cdr alist)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 (defun read-language-name (key prompt &optional default)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 "Read a language environment name which has information for KEY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 If KEY is nil, read any language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 Prompt with PROMPT. DEFAULT is the default choice of language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 This returns a language environment name as a string."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 (let* ((completion-ignore-case t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 (name (completing-read prompt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 language-info-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 (and key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 (function (lambda (elm) (assq key elm))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 t nil nil default)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 (if (and (> (length name) 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 (or (not key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 (get-language-info name key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 ;;; Multilingual input methods.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 (defconst leim-list-file-name "leim-list.el"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 "Name of LEIM list file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 This file contains a list of libraries of Emacs input methods (LEIM)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 in the format of Lisp expression for registering each input method.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 Emacs loads this file at startup time.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 (defvar leim-list-header (format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 ";;; %s -- list of LEIM (Library of Emacs Input Method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 ;; This file contains a list of LEIM (Library of Emacs Input Method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 ;; in the same directory as this file. Loading this file registers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 ;; the whole input methods in Emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 ;; Each entry has the form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 ;; (register-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 ;; INPUT-METHOD LANGUAGE-NAME ACTIVATE-FUNC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 ;; TITLE DESCRIPTION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 ;; ARG ...)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 ;; See the function `register-input-method' for the meanings of arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 ;; If this directory is included in load-path, Emacs automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 ;; loads this file at startup time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 leim-list-file-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 "Header to be inserted in LEIM list file.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 (defvar leim-list-entry-regexp "^(register-input-method"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 "Regexp matching head of each entry in LEIM list file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 See also the variable `leim-list-header'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 (defvar update-leim-list-functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 '(quail-update-leim-list-file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 "List of functions to call to update LEIM list file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 Each function is called with one arg, LEIM directory name.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 (defun update-leim-list-file (&rest dirs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 "Update LEIM list file in directories DIRS."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 (let ((functions update-leim-list-functions))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 (while functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 (apply (car functions) dirs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 (setq functions (cdr functions)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 (defvar current-input-method nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 "The current input method for multilingual text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 If nil, that means no input method is activated now.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 (make-variable-buffer-local 'current-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 (put 'current-input-method 'permanent-local t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 (defvar current-input-method-title nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 "Title string of the current input method shown in mode line.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 (make-variable-buffer-local 'current-input-method-title)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 (put 'current-input-method-title 'permanent-local t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 (defcustom default-input-method nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 "*Default input method for multilingual text (a string).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 This is the input method activated automatically by the command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 `toggle-input-method' (\\[toggle-input-method])."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 :group 'mule
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 :type '(choice (const nil) string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 (put 'input-method-function 'permanent-local t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 (defvar input-method-history nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 "History list for some commands that read input methods.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 (make-variable-buffer-local 'input-method-history)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 (put 'input-method-history 'permanent-local t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 (defvar inactivate-current-input-method-function nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 "Function to call for inactivating the current input method.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 Every input method should set this to an appropriate value when activated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 This function is called with no argument.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 This function should never change the value of `current-input-method'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 It is set to nil by the function `inactivate-input-method'.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 (make-variable-buffer-local 'inactivate-current-input-method-function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (put 'inactivate-current-input-method-function 'permanent-local t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 (defvar describe-current-input-method-function nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 "Function to call for describing the current input method.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 This function is called with no argument.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 (make-variable-buffer-local 'describe-current-input-method-function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 (put 'describe-current-input-method-function 'permanent-local t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (defvar input-method-alist nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 "Alist of input method names vs how to use them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 Each element has the form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 (INPUT-METHOD LANGUAGE-ENV ACTIVATE-FUNC TITLE DESCRIPTION ARGS...)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 See the function `register-input-method' for the meanings of the elements.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 (defun register-input-method (input-method lang-env &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 "Register INPUT-METHOD as an input method for language environment ENV.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 INPUT-METHOD and LANG-ENV are symbols or strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 The remaining arguments are:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 ACTIVATE-FUNC, TITLE, DESCRIPTION, and ARGS...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 ACTIVATE-FUNC is a function to call to activate this method.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 TITLE is a string to show in the mode line when this method is active.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 DESCRIPTION is a string describing this method and what it is good for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 The ARGS, if any, are passed as arguments to ACTIVATE-FUNC.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 All told, the arguments to ACTIVATE-FUNC are INPUT-METHOD and the ARGS.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 This function is mainly used in the file \"leim-list.el\" which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 created at building time of emacs, registering all quail input methods
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 contained in the emacs distribution.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 In case you want to register a new quail input method by yourself, be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 careful to use the same input method title as given in the third
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 parameter of `quail-define-package' (if the values are different, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 string specified in this function takes precedence).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 The commands `describe-input-method' and `list-input-methods' need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 this duplicated values to show some information about input methods
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 without loading the affected quail packages."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 (if (symbolp lang-env)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 (setq lang-env (symbol-name lang-env)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 (if (symbolp input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 (setq input-method (symbol-name input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (let ((info (cons lang-env args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 (slot (assoc input-method input-method-alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 (if slot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 (setcdr slot info)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 (setq slot (cons input-method info))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 (setq input-method-alist (cons slot input-method-alist)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 (defun read-input-method-name (prompt &optional default inhibit-null)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 "Read a name of input method from a minibuffer prompting with PROMPT.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 If DEFAULT is non-nil, use that as the default,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 and substitute it into PROMPT at the first `%s'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 If INHIBIT-NULL is non-nil, null input signals an error.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 The return value is a string."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 (if default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 (setq prompt (format prompt default)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 (let* ((completion-ignore-case t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 ;; This binding is necessary because input-method-history is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 ;; buffer local.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 (input-method (completing-read prompt input-method-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 nil t nil 'input-method-history
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 default)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 (if (and input-method (symbolp input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 (setq input-method (symbol-name input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 (if (> (length input-method) 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 (if inhibit-null
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 (error "No valid input method is specified")))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 (defun activate-input-method (input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 "Switch to input method INPUT-METHOD for the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 If some other input method is already active, turn it off first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 If INPUT-METHOD is nil, deactivate any current input method."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 (if (and input-method (symbolp input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 (setq input-method (symbol-name input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 (if (and current-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 (not (string= current-input-method input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 (inactivate-input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 (unless (or current-input-method (null input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 (let ((slot (assoc input-method input-method-alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 (if (null slot)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 (error "Can't activate input method `%s'" input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 (let ((func (nth 2 slot)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 (if (functionp func)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 (apply (nth 2 slot) input-method (nthcdr 5 slot))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 (if (and (consp func) (symbolp (car func)) (symbolp (cdr func)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 (require (cdr func))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 (apply (car func) input-method (nthcdr 5 slot)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 (error "Can't activate input method `%s'" input-method))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 (setq current-input-method input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 (setq current-input-method-title (nth 3 slot))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 (run-hooks 'input-method-activate-hook)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 (force-mode-line-update)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 (defun inactivate-input-method ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 "Turn off the current input method."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 (when current-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 (if input-method-history
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 (unless (string= current-input-method (car input-method-history))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 (setq input-method-history
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 (cons current-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 (delete current-input-method input-method-history))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 (setq input-method-history (list current-input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 (funcall inactivate-current-input-method-function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 (run-hooks 'input-method-inactivate-hook)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 (setq current-input-method nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 current-input-method-title nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 (force-mode-line-update)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 (defun set-input-method (input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 "Select and activate input method INPUT-METHOD for the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 This also sets the default input method to the one you specify."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 (interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 (let* ((default (or (car input-method-history) default-input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 (list (read-input-method-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 (if default "Select input method (default %s): " "Select input method: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 default t))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 (activate-input-method input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 (setq default-input-method input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 (defun toggle-input-method (&optional arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 "Turn on or off a multilingual text input method for the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 With no prefix argument, if an input method is currently activated,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 turn it off. Otherwise, activate an input method -- the one most
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 recently used, or the one specified in `default-input-method', or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 the one read from the minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 With a prefix argument, read an input method from the minibuffer and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 turn it on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 The default is to use the most recent input method specified
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 \(not including the currently active input method, if any)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 (interactive "P")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 (if (and current-input-method (not arg))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 (inactivate-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 (let ((default (or (car input-method-history) default-input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 (if (and arg default (equal current-input-method default)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 (> (length input-method-history) 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 (setq default (nth 1 input-method-history)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 (activate-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 (if (or arg (not default))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 (read-input-method-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 (if default "Input method (default %s): " "Input method: " )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 default t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 default))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 (or default-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 (setq default-input-method current-input-method)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 (defun describe-input-method (input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 "Describe input method INPUT-METHOD."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 (interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 (list (read-input-method-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 "Describe input method (default, current choice): ")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 (if (and input-method (symbolp input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 (setq input-method (symbol-name input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 (if (null input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 (describe-current-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 (with-output-to-temp-buffer "*Help*"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 (let ((elt (assoc input-method input-method-alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 (princ (format "Input method: %s (`%s' in mode line) for %s\n %s\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 input-method (nth 3 elt) (nth 1 elt) (nth 4 elt)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 (defun describe-current-input-method ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 "Describe the input method currently in use."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 (if current-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 (if (and (symbolp describe-current-input-method-function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 (fboundp describe-current-input-method-function))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 (funcall describe-current-input-method-function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 (message "No way to describe the current input method `%s'"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 current-input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 (ding))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 (error "No input method is activated now")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 (defun read-multilingual-string (prompt &optional initial-input input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 "Read a multilingual string from minibuffer, prompting with string PROMPT.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 The input method selected last time is activated in minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 If optional second arg INITIAL-INPUT is non-nil, insert it in the minibuffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 initially.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 Optional 3rd argument INPUT-METHOD specifies the input method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 to be activated instead of the one selected last time. It is a symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 or a string."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 (setq input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 (or input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 current-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 default-input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 (read-input-method-name "Input method: " nil t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 (if (and input-method (symbolp input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 (setq input-method (symbol-name input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 (let ((prev-input-method current-input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 (activate-input-method input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 ;; FSF Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 ;; (read-string prompt initial-input nil nil t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 (read-string prompt initial-input nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 (activate-input-method prev-input-method))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 ;; Variables to control behavior of input methods. All input methods
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 ;; should react to these variables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 (defcustom input-method-verbose-flag 'default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 "*A flag to control extra guidance given by input methods.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 The value should be nil, t, `complex-only', or `default'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 The extra guidance is done by showing list of available keys in echo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 area. When you use the input method in the minibuffer, the guidance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 is shown at the bottom short window (split from the existing window).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 If the value is t, extra guidance is always given, if the value is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 nil, extra guidance is always suppressed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 If the value is `complex-only', only complex input methods such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 `chinese-py' and `japanese' give extra guidance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 If the value is `default', complex input methods always give extra
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 guidance, but simple input methods give it only when you are not in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 the minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 See also the variable `input-method-highlight-flag'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 :type '(choice (const t) (const nil) (const complex-only) (const default))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 :group 'mule)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 (defcustom input-method-highlight-flag t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 "*If this flag is non-nil, input methods highlight partially-entered text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 For instance, while you are in the middle of a Quail input method sequence,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 the text inserted so far is temporarily underlined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 The underlining goes away when you finish or abort the input method sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 See also the variable `input-method-verbose-flag'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 :group 'mule)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 (defvar input-method-activate-hook nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 "Normal hook run just after an input method is activated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 The variable `current-input-method' keeps the input method name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 just activated.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 (defvar input-method-inactivate-hook nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 "Normal hook run just after an input method is inactivated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 The variable `current-input-method' still keeps the input method name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 just inactivated.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 (defvar input-method-after-insert-chunk-hook nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 "Normal hook run just after an input method insert some chunk of text.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 (defvar input-method-exit-on-first-char nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 "This flag controls a timing when an input method returns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 Usually, the input method does not return while there's a possibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 that it may find a different translation if a user types another key.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 But, it this flag is non-nil, the input method returns as soon as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 the current key sequence gets long enough to have some valid translation.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 (defvar input-method-use-echo-area nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 "This flag controls how an input method shows an intermediate key sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 Usually, the input method inserts the intermediate key sequence,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 or candidate translations corresponding to the sequence,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 at point in the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 But, if this flag is non-nil, it displays them in echo area instead.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 (defvar input-method-exit-on-invalid-key nil
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
622 "This flag controls the behavior of an input method on invalid key input.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 Usually, when a user types a key which doesn't start any character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 handled by the input method, the key is handled by turning off the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 input method temporarily. After that key, the input method is re-enabled.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 But, if this flag is non-nil, the input method is never back on.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 (defvar set-language-environment-hook nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 "Normal hook run after some language environment is set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 When you set some hook function here, that effect usually should not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 be inherited to another language environment. So, you had better set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 another function in `exit-language-environment-hook' (which see) to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 cancel the effect.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 (defvar exit-language-environment-hook nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 "Normal hook run after exiting from some language environment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 When this hook is run, the variable `current-language-environment'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 is still bound to the language environment being exited.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 This hook is mainly used for canceling the effect of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 `set-language-environment-hook' (which-see).")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 (put 'setup-specified-language-environment 'apropos-inhibit t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 (defun setup-specified-language-environment ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 "Switch to a specified language environment."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 (let (language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 (if (and (symbolp last-command-event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 (or (not (eq last-command-event 'Default))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 (setq last-command-event 'English))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 (setq language-name (symbol-name last-command-event)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 (set-language-environment language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 (error "Bogus calling sequence"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 (defcustom current-language-environment "English"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 "The last language environment specified with `set-language-environment'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 This variable should be set only with \\[customize], which is equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 to using the function `set-language-environment'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 :link '(custom-manual "(emacs)Language Environments")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 :set (lambda (symbol value) (set-language-environment value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 :get (lambda (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 (or (car-safe (assoc-ignore-case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 (if (symbolp current-language-environment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 (symbol-name current-language-environment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 current-language-environment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 language-info-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 "English"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 :type (cons 'choice (mapcar (lambda (lang)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 (list 'const (car lang)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 language-info-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 :initialize 'custom-initialize-default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 :group 'mule
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 :type 'string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 (defun reset-language-environment ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 "Reset multilingual environment of Emacs to the default status.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 The default status is as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
683 The default value of `buffer-file-coding-system' is nil.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 The default coding system for process I/O is nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 The default value for the command `set-terminal-coding-system' is nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 The default value for the command `set-keyboard-coding-system' is nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 The order of priorities of coding categories and the coding system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 bound to each category are as follows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 coding category coding system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 --------------------------------------------------
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
692 iso-7 iso-2022-7bit
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
693 no-conversion raw-text
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
694 utf-8 utf-8
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 iso-8-1 iso-8859-1
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
696 iso-8-2 ctext (iso-8859-1 alias)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
697 iso-8-designate ctext (iso-8859-1 alias)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 iso-lock-shift iso-2022-lock
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 shift-jis shift_jis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 big5 big5
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
701 ucs-4 iso-10646-ucs-4
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 "
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
703 ;; The old table (from FSF synch?) was not what we use (cf mule-coding.el),
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
704 ;; and as documented iso-8-designate is inconsistent with iso-2022-8bit-ss2.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
705 ;; The order of priorities of coding categories and the coding system
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
706 ;; bound to each category are as follows
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
707 ;; coding category coding system
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
708 ;; --------------------------------------------------
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
709 ;; iso-8-2 iso-8859-1
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
710 ;; iso-8-1 iso-8859-1
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
711 ;; iso-7 iso-2022-7bit
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
712 ;; iso-lock-shift iso-2022-lock
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
713 ;; iso-8-designate iso-2022-8bit-ss2
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
714 ;; no-conversion raw-text
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
715 ;; shift-jis shift_jis
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
716 ;; big5 big5
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
717 ;; ucs-4 ----
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
718 ;; utf-8 ----
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
721 (set-coding-category-system 'iso-7 'iso-2022-7)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 (set-coding-category-system 'iso-8-1 'iso-8859-1)
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
723 (set-coding-category-system 'iso-8-2 'ctext)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 (set-coding-category-system 'iso-lock-shift 'iso-2022-lock)
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
725 (set-coding-category-system 'iso-8-designate 'ctext)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 (set-coding-category-system 'no-conversion 'raw-text)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 (set-coding-category-system 'shift-jis 'shift_jis)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 (set-coding-category-system 'big5 'big5)
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
729 ;; #### Can we now assume the existence of the 10646 coding systems?
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
730 ;; #### These lists need to be synched with the ones in mule-coding.el.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 (cond ((eq (coding-system-type (coding-category-system 'utf-8)) 'utf-8)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 (set-coding-category-system 'ucs-4 'iso-10646-ucs-4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 (set-coding-category-system 'utf-8 'utf-8)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 (set-coding-priority-list
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
735 '(iso-7
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
736 no-conversion
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
737 utf-8
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
738 iso-8-1
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 iso-8-2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 iso-8-designate
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
741 iso-lock-shift
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 shift-jis
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
743 big5
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
744 ucs-4))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 (set-coding-priority-list
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
748 '(iso-7
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
749 no-conversion
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
750 iso-8-1
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 iso-8-2
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
752 iso-8-designate
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 iso-lock-shift
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 shift-jis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 big5))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 ;; (update-coding-systems-internal)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 (set-default-coding-systems nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 ;; Don't alter the terminal and keyboard coding systems here.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 ;; The terminal still supports the same coding system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 ;; that it supported a minute ago.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 ;;; (set-terminal-coding-system-internal nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 ;;; (set-keyboard-coding-system-internal nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 ;; (setq nonascii-translation-table nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 ;; nonascii-insert-offset 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 (defun set-language-environment (language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 "Set up multi-lingual environment for using LANGUAGE-NAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 This sets the coding system priority and the default input method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 and sometimes other things. LANGUAGE-NAME should be a string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 which is the name of a language environment. For example, \"Latin-1\"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 specifies the character set for the major languages of Western Europe."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 (interactive (list (read-language-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 "Set language environment (default, English): ")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 (if language-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 (if (symbolp language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 (setq language-name (symbol-name language-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 (setq language-name "English"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 (or (assoc-ignore-case language-name language-info-alist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 (error "Language environment not defined: %S" language-name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 (if current-language-environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 (let ((func (get-language-info current-language-environment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 'exit-function)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 (run-hooks 'exit-language-environment-hook)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 (if (fboundp func) (funcall func))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 (let ((default-eol-type (coding-system-eol-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 default-buffer-file-coding-system)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 (reset-language-environment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 (setq current-language-environment language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 (set-language-environment-coding-systems language-name default-eol-type))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 (let ((input-method (get-language-info language-name 'input-method)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 (when input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 (setq default-input-method input-method)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 (if input-method-history
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 (setq input-method-history
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 (cons input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 (delete input-method input-method-history))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 ;; (let ((nonascii (get-language-info language-name 'nonascii-translation))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 ;; (dos-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 ;; (if (eq window-system 'pc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 ;; (intern
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 ;; (concat "cp" dos-codepage "-nonascii-translation-table")))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 ;; (cond
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 ;; ((char-table-p nonascii)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 ;; (setq nonascii-translation-table nonascii))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 ;; ((and (eq window-system 'pc) (boundp dos-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 ;; ;; DOS terminals' default is to use a special non-ASCII translation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 ;; ;; table as appropriate for the installed codepage.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 ;; (setq nonascii-translation-table (symbol-value dos-table)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 ;; ((charsetp nonascii)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 ;; (setq nonascii-insert-offset (- (make-char nonascii) 128)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 ;; (setq charset-origin-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 ;; (get-language-info language-name 'charset-origin-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 ;; Unibyte setups if necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 ;; (unless default-enable-multibyte-characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 ;; ;; Syntax and case table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 ;; (let ((syntax (get-language-info language-name 'unibyte-syntax)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 ;; (if syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 ;; (let ((set-case-syntax-set-multibyte nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 ;; (load syntax nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 ;; ;; No information for syntax and case. Reset to the defaults.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 ;; (let ((syntax-table (standard-syntax-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 ;; (case-table (standard-case-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 ;; (ch (if (eq window-system 'pc) 128 160)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 ;; (while (< ch 256)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 ;; (modify-syntax-entry ch " " syntax-table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 ;; (aset case-table ch ch)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 ;; (setq ch (1+ ch)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 ;; (set-char-table-extra-slot case-table 0 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 ;; (set-char-table-extra-slot case-table 1 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 ;; (set-char-table-extra-slot case-table 2 nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 ;; (set-standard-case-table (standard-case-table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 ;; (let ((list (buffer-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 ;; (while list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 ;; (with-current-buffer (car list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 ;; (set-case-table (standard-case-table)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 ;; (setq list (cdr list))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 ;; ;; Display table and coding system for terminal.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 ;; (let ((coding (get-language-info language-name 'unibyte-display)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 ;; (if coding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 ;; (standard-display-european-internal)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 ;; (standard-display-default (if (eq window-system 'pc) 128 160) 255)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 ;; (aset standard-display-table 146 nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 ;; (or (eq window-system 'pc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 ;; (set-terminal-coding-system coding))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 (let ((required-features (get-language-info language-name 'features)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 (while required-features
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 (require (car required-features))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 (setq required-features (cdr required-features))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 (let ((func (get-language-info language-name 'setup-function)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 (if (fboundp func)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 (funcall func)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 (run-hooks 'set-language-environment-hook)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 (force-mode-line-update t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 ;; (defun standard-display-european-internal ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 ;; ;; Actually set up direct output of non-ASCII characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 ;; (standard-display-8bit (if (eq window-system 'pc) 128 160) 255)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 ;; ;; Unibyte Emacs on MS-DOS wants to display all 8-bit characters with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 ;; ;; the native font, and codes 160 and 146 stand for something very
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 ;; ;; different there.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 ;; (or (and (eq window-system 'pc) (not default-enable-multibyte-characters))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 ;; (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 ;; ;; Make non-line-break space display as a plain space.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 ;; ;; Most X fonts do the wrong thing for code 160.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 ;; (aset standard-display-table 160 [32])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 ;; ;; Most Windows programs send out apostrophe's as \222. Most X fonts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 ;; ;; don't contain a character at that position. Map it to the ASCII
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 ;; ;; apostrophe.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 ;; (aset standard-display-table 146 [39]))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 (defun set-language-environment-coding-systems (language-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 &optional eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 "Do various coding system setups for language environment LANGUAGE-NAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 The optional arg EOL-TYPE specifies the eol-type of the default value
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
886 of buffer-file-coding-system set by this function.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
887
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
888 Note that `coding-priority-list' is not reset first; thus changing language
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
889 environment allows recognition of coding systems from previously set language
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
890 environments. (This will not work if the desired coding systems are from the
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
891 same category. E.g., starting with a Hebrew language environment, ISO 8859-8
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
892 will be recognized. If you shift to Russian, ISO 8859-8 will be shadowed by
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
893 ISO 8859-5, and cannot be automatically recognized without resetting the
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
894 language environment to Hebrew. However, if you shift from Japanese to
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
895 Russian, ISO-2022-JP will continue to be automatically recognized, since
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
896 ISO-8859-5 and ISO-2022-JP are different coding categories.)"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 (let* ((priority (get-language-info language-name 'coding-priority))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 (default-coding (car priority)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 (if priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 (let ((categories (mapcar 'coding-system-category priority))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 category checked-categories)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 (set-default-coding-systems
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 (if (memq eol-type '(lf crlf cr unix dos mac))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 (coding-system-change-eol-conversion default-coding eol-type)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 default-coding))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 ;; (setq default-sendmail-coding-system default-coding)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 (while priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 (unless (memq (setq category (car categories)) checked-categories)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 (set-coding-category-system category (car priority))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 (setq checked-categories (cons category checked-categories)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 (setq priority (cdr priority)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 categories (cdr categories)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 (set-coding-priority-list (nreverse checked-categories))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 ;; (update-coding-systems-internal)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 ))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 ;; Print all arguments with `princ', then print "\n".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 (defsubst princ-list (&rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 (while args (princ (car args)) (setq args (cdr args)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 (princ "\n"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 (put 'describe-specified-language-support 'apropos-inhibit t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 ;; Print a language specific information such as input methods,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 ;; charsets, and coding systems. This function is intended to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 ;; called from the menu:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 ;; [menu-bar mule describe-language-environment LANGUAGE]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 ;; and should not run it by `M-x describe-current-input-method-function'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 (defun describe-specified-language-support ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 "Describe how Emacs supports the specified language environment."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 (let (language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 (if (not (and (symbolp last-command-event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 (setq language-name (symbol-name last-command-event))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 (error "Bogus calling sequence"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 (describe-language-environment language-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 (defun describe-language-environment (language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 "Describe how Emacs supports language environment LANGUAGE-NAME."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 (interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 (list (read-language-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 'documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 "Describe language environment (default, current choice): ")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 (if (null language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 (setq language-name current-language-environment))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 (if (or (null language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 (null (get-language-info language-name 'documentation)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 (error "No documentation for the specified language"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 (if (symbolp language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 (setq language-name (symbol-name language-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 (let ((doc (get-language-info language-name 'documentation)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 (with-output-to-temp-buffer "*Help*"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 (princ-list language-name " language environment" "\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 (if (stringp doc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 (princ-list doc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 (terpri)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 (let ((str (get-language-info language-name 'sample-text)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 (if (stringp str)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 (princ "Sample text:\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 (princ-list " " str)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 (terpri))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 (let ((input-method (get-language-info language-name 'input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 (l (copy-sequence input-method-alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 (princ "Input methods")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 (when input-method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 (princ (format " (default, %s)" input-method))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 (setq input-method (assoc input-method input-method-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 (setq l (cons input-method (delete input-method l))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 (princ ":\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 (while l
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 (if (string= language-name (nth 1 (car l)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 (princ-list " " (car (car l))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 (format " (`%s' in mode line)" (nth 3 (car l)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 (setq l (cdr l))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 (princ "Character sets:\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 (let ((l (get-language-info language-name 'charset)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 (if (null l)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 (princ-list " nothing specific to " language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 (while l
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 (princ-list " " (car l) ": "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 (charset-description (car l)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 (setq l (cdr l)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 (princ "Coding systems:\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 (let ((l (get-language-info language-name 'coding-system)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 (if (null l)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 (princ-list " nothing specific to " language-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 (while l
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 (princ ; (format " %s (`%c' in mode line):\n\t%s\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 ;; In XEmacs, `coding-system-mnemonic' returns string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 (format " %s (`%s' in mode line):\n\t%s\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 (car l)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 (coding-system-mnemonic (car l))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 (coding-system-doc-string (car l))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 ;; (let ((aliases (coding-system-get (car l) 'alias-coding-systems)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 ;; (when aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 ;; (princ "\t")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 ;; (princ (cons 'alias: (cdr aliases)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 ;; (terpri)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 (setq l (cdr l))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 ;;; Charset property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 ;; (defsubst get-charset-property (charset propname)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 ;; "Return the value of CHARSET's PROPNAME property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 ;; This is the last value stored with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 ;; `(put-charset-property CHARSET PROPNAME VALUE)'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 ;; (plist-get (charset-plist charset) propname))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 ;; (defsubst put-charset-property (charset propname value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 ;; "Store CHARSETS's PROPNAME property with value VALUE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 ;; It can be retrieved with `(get-charset-property CHARSET PROPNAME)'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 ;; (set-charset-plist charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 ;; (plist-put (charset-plist charset) propname value)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 (defvar char-code-property-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 (make-char-table 'generic)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 "Char-table containing a property list of each character code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 See also the documentation of `get-char-code-property' and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 `put-char-code-property'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 ;; (let ((plist (aref char-code-property-table char)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 (defun get-char-code-property (char propname)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 "Return the value of CHAR's PROPNAME property in `char-code-property-table'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 (let ((plist (get-char-table char char-code-property-table)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 (if (listp plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 (car (cdr (memq propname plist))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 (defun put-char-code-property (char propname value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 "Store CHAR's PROPNAME property with VALUE in `char-code-property-table'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 It can be retrieved with `(get-char-code-property CHAR PROPNAME)'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 (let ((plist (get-char-table char char-code-property-table)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 (if plist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 (let ((slot (memq propname plist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 (if slot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 (setcar (cdr slot) value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 (nconc plist (list propname value))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 (put-char-table char (list propname value) char-code-property-table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 )))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 ;; Pretty description of encoded string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 ;; Alist of ISO 2022 control code vs the corresponding mnemonic string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 ;; (defvar iso-2022-control-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 ;; '((?\x1b . "ESC")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 ;; (?\x0e . "SO")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 ;; (?\x0f . "SI")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 ;; (?\x8e . "SS2")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 ;; (?\x8f . "SS3")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 ;; (?\x9b . "CSI")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 ;; (defun encoded-string-description (str coding-system)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 ;; "Return a pretty description of STR that is encoded by CODING-SYSTEM."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 ;; (setq str (string-as-unibyte str))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 ;; (let ((char (aref str 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 ;; desc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 ;; (when (< char 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 ;; (setq desc (or (cdr (assq char iso-2022-control-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 ;; (char-to-string char)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 ;; (let ((i 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 ;; (len (length str)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 ;; (while (< i len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 ;; (setq char (aref str i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 ;; (if (>= char 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 ;; (setq desc nil i len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 ;; (setq desc (concat desc " "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 ;; (or (cdr (assq char iso-2022-control-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 ;; (char-to-string char)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 ;; i (1+ i))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 ;; (or desc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 ;; (mapconcat (function (lambda (x) (format "0x%02x" x))) str " "))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 ;; (defun encode-coding-char (char coding-system)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 ;; "Encode CHAR by CODING-SYSTEM and return the resulting string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 ;; If CODING-SYSTEM can't safely encode CHAR, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 ;; (if (cmpcharp char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 ;; (setq char (car (decompose-composite-char char 'list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 ;; (let ((str1 (char-to-string char))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 ;; (str2 (make-string 2 char))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 ;; (safe-charsets (and coding-system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 ;; (coding-system-get coding-system 'safe-charsets)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 ;; enc1 enc2 i1 i2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 ;; (when (or (eq safe-charsets t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 ;; (memq (char-charset char) safe-charsets))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 ;; ;; We must find the encoded string of CHAR. But, just encoding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 ;; ;; CHAR will put extra control sequences (usually to designate
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1091 ;; ;; ASCII charset) at the tail if type of CODING is ISO 2022.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 ;; ;; To exclude such tailing bytes, we at first encode one-char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 ;; ;; string and two-char string, then check how many bytes at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 ;; ;; tail of both encoded strings are the same.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 ;; (setq enc1 (string-as-unibyte (encode-coding-string str1 coding-system))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 ;; i1 (length enc1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 ;; enc2 (string-as-unibyte (encode-coding-string str2 coding-system))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 ;; i2 (length enc2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 ;; (while (and (> i1 0) (= (aref enc1 (1- i1)) (aref enc2 (1- i2))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 ;; (setq i1 (1- i1) i2 (1- i2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 ;; ;; Now (substring enc1 i1) and (substring enc2 i2) are the same,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 ;; ;; and they are the extra control sequences at the tail to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 ;; ;; exclude.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 ;; (substring enc2 0 i2))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 ;;; mule-cmds.el ends here