Mercurial > hg > xemacs-beta
comparison lisp/code-cmds.el @ 444:576fb035e263 r21-2-37
Import from CVS: tag r21-2-37
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:36:19 +0200 |
parents | |
children | 943eaba38521 |
comparison
equal
deleted
inserted
replaced
443:a8296e22da4e | 444:576fb035e263 |
---|---|
1 ;;; code-cmds.el --- Commands for manipulating coding systems.. | |
2 | |
3 ;; Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN. | |
4 ;; Licensed to the Free Software Foundation. | |
5 ;; Copyright (C) 2000 Free Software Foundation | |
6 ;; Copyright (C) 1997 MORIOKA Tomohiko | |
7 | |
8 | |
9 ;; This file is part of XEmacs. | |
10 | |
11 ;; XEmacs is free software; you can redistribute it and/or modify it | |
12 ;; under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; XEmacs is distributed in the hope that it will be useful, but | |
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
19 ;; General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
22 ;; along with XEmacs; see the file COPYING. If not, write to the Free | |
23 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
24 ;; 02111-1307, USA. | |
25 | |
26 ;; | |
27 ;; This code defines the keybindings and utility commands for the | |
28 ;; user to manipulate coding systems. | |
29 ;; This code used to be in mule-cmds.el which now only needs the | |
30 ;; additional bindings/commands that are avaible on the real mule. | |
31 | |
32 | |
33 ;;; Code: | |
34 | |
35 ;;; Coding related key bindings and menus. | |
36 | |
37 (defvar coding-keymap (make-sparse-keymap "Mule/Conding") | |
38 "Keymap for Mule and Coding cystem specific commands.") | |
39 | |
40 ;; Keep "C-x C-m ..." for mule specific commands. | |
41 (define-key ctl-x-map "\C-m" coding-keymap) | |
42 | |
43 (define-key coding-keymap "f" 'set-buffer-file-coding-system) | |
44 (define-key coding-keymap "F" 'set-default-buffer-file-coding-system) ; XEmacs | |
45 (define-key coding-keymap "t" 'set-terminal-coding-system) | |
46 (define-key coding-keymap "p" 'set-buffer-process-coding-system) | |
47 ;(define-key coding-keymap "x" 'set-selection-coding-system) | |
48 ;(define-key coding-keymap "X" 'set-next-selection-coding-system) | |
49 (define-key coding-keymap "c" 'universal-coding-system-argument) | |
50 ;;(define-key coding-keymap "c" 'list-coding-system-briefly) ; XEmacs | |
51 ;;(define-key coding-keymap "C" 'describe-coding-system) ; XEmacs | |
52 | |
53 | |
54 (defun coding-system-change-eol-conversion (coding-system eol-type) | |
55 "Return a coding system which differs from CODING-SYSTEM in eol conversion. | |
56 The returned coding system converts end-of-line by EOL-TYPE | |
57 but text as the same way as CODING-SYSTEM. | |
58 EOL-TYPE should be `lf', `crlf', `cr' or nil. | |
59 If EOL-TYPE is nil, the returned coding system detects | |
60 how end-of-line is formatted automatically while decoding. | |
61 | |
62 EOL-TYPE can be specified by an symbol `unix', `dos' or `mac'. | |
63 They means `lf', `crlf', and `cr' respectively." | |
64 (if (symbolp eol-type) | |
65 (setq eol-type (cond ((or (eq eol-type 'unix) | |
66 (eq eol-type 'lf)) | |
67 'eol-lf) | |
68 ((or (eq eol-type 'dos) | |
69 (eq eol-type 'crlf)) | |
70 'eol-crlf) | |
71 ((or (eq eol-type 'mac) | |
72 (eq eol-type 'cr)) | |
73 'eol-cr) | |
74 (t eol-type)))) | |
75 (let ((orig-eol-type (coding-system-eol-type coding-system))) | |
76 (if (null orig-eol-type) | |
77 (if (not eol-type) | |
78 coding-system | |
79 (coding-system-property coding-system eol-type)) | |
80 (let ((base (coding-system-base coding-system))) | |
81 (if (not eol-type) | |
82 base | |
83 (if (= eol-type orig-eol-type) | |
84 coding-system | |
85 (setq orig-eol-type (coding-system-eol-type base)) | |
86 (if (null orig-eol-type) | |
87 (coding-system-property base eol-type)))))))) | |
88 | |
89 | |
90 (defun universal-coding-system-argument () | |
91 "Execute an I/O command using the specified coding system." | |
92 (interactive) | |
93 (let* ((default (and buffer-file-coding-system | |
94 (not (eq (coding-system-type buffer-file-coding-system) | |
95 t)) | |
96 (coding-system-name buffer-file-coding-system))) | |
97 (coding-system | |
98 (read-coding-system | |
99 (if default | |
100 (format "Coding system for following command (default, %s): " | |
101 default) | |
102 "Coding system for following command: ") | |
103 default)) | |
104 (keyseq (read-key-sequence | |
105 (format "Command to execute with %s:" coding-system))) | |
106 (cmd (key-binding keyseq))) | |
107 (let ((coding-system-for-read coding-system) | |
108 (coding-system-for-write coding-system)) | |
109 (message "") | |
110 (call-interactively cmd)))) | |
111 | |
112 (defun set-default-coding-systems (coding-system) | |
113 "Set default value of various coding systems to CODING-SYSTEM. | |
114 This sets the following coding systems: | |
115 o coding system of a newly created buffer | |
116 o default coding system for terminal output | |
117 o default coding system for keyboard input | |
118 o default coding system for subprocess I/O | |
119 o default coding system for converting file names." | |
120 (check-coding-system coding-system) | |
121 ;;(setq-default buffer-file-coding-system coding-system) | |
122 (set-default-buffer-file-coding-system coding-system) | |
123 ;; (if default-enable-multibyte-characters | |
124 ;; (setq default-file-name-coding-system coding-system)) | |
125 ;; If coding-system is nil, honor that on MS-DOS as well, so | |
126 ;; that they could reset the terminal coding system. | |
127 ;; (unless (and (eq window-system 'pc) coding-system) | |
128 ;; (setq default-terminal-coding-system coding-system)) | |
129 (set-terminal-coding-system coding-system) | |
130 ;;(setq default-keyboard-coding-system coding-system) | |
131 (set-keyboard-coding-system coding-system) | |
132 ;;(setq default-process-coding-system (cons coding-system coding-system)) | |
133 ;; Refer to coding-system-for-read and coding-system-for-write | |
134 ;; so that C-x RET c works. | |
135 (add-hook 'comint-exec-hook | |
136 `(lambda () | |
137 (let ((proc (get-buffer-process (current-buffer)))) | |
138 (set-process-input-coding-system | |
139 proc (or coding-system-for-read ',coding-system)) | |
140 (set-process-output-coding-system | |
141 proc (or coding-system-for-write ',coding-system)))) | |
142 'append) | |
143 (setq file-name-coding-system coding-system)) | |
144 | |
145 (defun prefer-coding-system (coding-system) | |
146 "Add CODING-SYSTEM at the front of the priority list for automatic detection. | |
147 This also sets the following coding systems: | |
148 o coding system of a newly created buffer | |
149 o default coding system for terminal output | |
150 o default coding system for keyboard input | |
151 o default coding system for converting file names. | |
152 | |
153 If CODING-SYSTEM specifies a certain type of EOL conversion, the coding | |
154 systems set by this function will use that type of EOL conversion. | |
155 | |
156 This command does not change the default value of terminal coding system | |
157 for MS-DOS terminal, because DOS terminals only support a single coding | |
158 system, and Emacs automatically sets the default to that coding system at | |
159 startup." | |
160 (interactive "zPrefer coding system: ") | |
161 (if (not (and coding-system (find-coding-system coding-system))) | |
162 (error "Invalid coding system `%s'" coding-system)) | |
163 (let ((coding-category (coding-system-category coding-system)) | |
164 (base (coding-system-base coding-system)) | |
165 (eol-type (coding-system-eol-type coding-system))) | |
166 (if (not coding-category) | |
167 ;; CODING-SYSTEM is no-conversion or undecided. | |
168 (error "Can't prefer the coding system `%s'" coding-system)) | |
169 (set-coding-category-system coding-category (or base coding-system)) | |
170 ;; (update-coding-systems-internal) | |
171 (or (eq coding-category (car (coding-category-list))) | |
172 ;; We must change the order. | |
173 (set-coding-priority-list (list coding-category))) | |
174 (if (and base (interactive-p)) | |
175 (message "Highest priority is set to %s (base of %s)" | |
176 base coding-system)) | |
177 ;; If they asked for specific EOL conversion, honor that. | |
178 (if (memq eol-type '(lf crlf mac)) | |
179 (setq coding-system | |
180 (coding-system-change-eol-conversion base eol-type)) | |
181 (setq coding-system base)) | |
182 (set-default-coding-systems coding-system))) | |
183 | |
184 ;;; Commands | |
185 | |
186 (defun set-buffer-process-coding-system (decoding encoding) | |
187 "Set coding systems for the process associated with the current buffer. | |
188 DECODING is the coding system to be used to decode input from the process, | |
189 ENCODING is the coding system to be used to encode output to the process. | |
190 | |
191 For a list of possible values of CODING-SYSTEM, use \\[list-coding-systems]." | |
192 (interactive | |
193 "zCoding-system for process input: \nzCoding-system for process output: ") | |
194 (let ((proc (get-buffer-process (current-buffer)))) | |
195 (if (null proc) | |
196 (error "no process") | |
197 (check-coding-system decoding) | |
198 (check-coding-system encoding) | |
199 (set-process-coding-system proc decoding encoding))) | |
200 (force-mode-line-update)) | |
201 | |
202 (provide 'code-cmds) | |
203 | |
204 ;;; code-cmds.el ends here |