X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/828fac3a6708099573f1b4bdbc3fb8b61f1f1ba4..e623859c9604ee1a6994ef05d82cf91053d5aba8:/lisp/disp-table.el diff --git a/lisp/disp-table.el b/lisp/disp-table.el index f793e506b2..8e5fa12bad 100644 --- a/lisp/disp-table.el +++ b/lisp/disp-table.el @@ -1,6 +1,7 @@ -;;; disp-table.el --- functions for dealing with char tables. +;;; disp-table.el --- functions for dealing with char tables -;; Copyright (C) 1987, 1994, 1995 Free Software Foundation, Inc. +;; Copyright (C) 1987, 1994, 1995, 1999, 2002, 2003, 2004, +;; 2005 Free Software Foundation, Inc. ;; Author: Erik Naggum ;; Based on a previous version by Howard Gayle @@ -21,8 +22,10 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: ;;; Code: @@ -111,19 +114,20 @@ Valid symbols are `truncation', `wrap', `escape', `control', ;;;###autoload (defun standard-display-8bit (l h) "Display characters in the range L to H literally." + (or standard-display-table + (setq standard-display-table (make-display-table))) (while (<= l h) - (if (and (>= l ?\ ) (< l 127)) - (aset standard-display-table l nil) - (aset standard-display-table l (vector l))) + (aset standard-display-table l (if (or (< l ?\ ) (>= l 127)) (vector l))) (setq l (1+ l)))) ;;;###autoload (defun standard-display-default (l h) "Display characters in the range L to H using the default notation." + (or standard-display-table + (setq standard-display-table (make-display-table))) (while (<= l h) - (if (and (>= l ?\ ) (< l 127)) - (aset standard-display-table l nil) - (aset standard-display-table l nil)) + (if (and (>= l ?\ ) (char-valid-p l)) + (aset standard-display-table l nil)) (setq l (1+ l)))) ;; This function does NOT take terminal-dependent escape sequences. @@ -132,6 +136,8 @@ Valid symbols are `truncation', `wrap', `escape', `control', ;;;###autoload (defun standard-display-ascii (c s) "Display character C using printable string S." + (or standard-display-table + (setq standard-display-table (make-display-table))) (aset standard-display-table c (vconcat s))) ;;;###autoload @@ -139,8 +145,10 @@ Valid symbols are `truncation', `wrap', `escape', `control', "Display character C as character SC in the g1 character set. This function assumes that your terminal uses the SO/SI characters; it is meaningless for an X frame." - (if window-system + (if (memq window-system '(x w32)) (error "Cannot use string glyphs in a windowing system")) + (or standard-display-table + (setq standard-display-table (make-display-table))) (aset standard-display-table c (vector (create-glyph (concat "\016" (char-to-string sc) "\017"))))) @@ -149,24 +157,27 @@ it is meaningless for an X frame." "Display character C as character GC in graphics character set. This function assumes VT100-compatible escapes; it is meaningless for an X frame." - (if window-system + (if (memq window-system '(x w32)) (error "Cannot use string glyphs in a windowing system")) + (or standard-display-table + (setq standard-display-table (make-display-table))) (aset standard-display-table c (vector (create-glyph (concat "\e(0" (char-to-string gc) "\e(B"))))) ;;;###autoload (defun standard-display-underline (c uc) "Display character C as character UC plus underlining." - (if window-system (require 'faces)) + (or standard-display-table + (setq standard-display-table (make-display-table))) (aset standard-display-table c - (vector + (vector (if window-system - (logior uc (lsh (face-id (internal-find-face 'underline)) 19)) + (logior uc (lsh (face-id 'underline) 19)) (create-glyph (concat "\e[4m" (char-to-string uc) "\e[m")))))) -;; Allocate a glyph code to display by sending STRING to the terminal. ;;;###autoload (defun create-glyph (string) + "Allocate a glyph code to display by sending STRING to the terminal." (if (= (length glyph-table) 65536) (error "No free glyph codes remain")) ;; Don't use slots that correspond to ASCII characters. @@ -176,30 +187,29 @@ X frame." (1- (length glyph-table))) ;;;###autoload -(defun standard-display-european (arg &optional auto) - "Toggle display of European characters encoded with ISO 8859. -This function is semi-obsolete; it is better to use -`set-language-environment' and `set-terminal-coding-system', -coupled with the `--unibyte' option if you prefer to use unibyte characters. - -When enabled, characters in the range of 160 to 255 display not -as octal escapes, but as accented characters. Codes 146 and 160 -display as apostrophe and space, even though they are not the ASCII -codes for apostrophe and space. - -With prefix argument, enable European character display iff arg is positive. - -Normally, this function turns off `enable-multibyte-characters' -for subsequently created Emacs buffers, and for `*scratch*. -This is because users who call this function -probably want to edit European characters in single-byte mode." - - ;; If the optional argument AUTO is non-nil, this function - ;; does not alter `enable-multibyte-characters'. - ;; AUTO also specifies, in this case, the coding system for terminal output. - ;; The AUTO argument is meant for use by startup.el only. - ;; which is why it is not in the doc string. - (interactive "P") +(defun standard-display-european (arg) + "Semi-obsolete way to toggle display of ISO 8859 European characters. + +This function is semi-obsolete; if you want to do your editing with +unibyte characters, it is better to `set-language-environment' coupled +with either the `--unibyte' option or the EMACS_UNIBYTE environment +variable, or else customize `enable-multibyte-characters'. + +With prefix argument, this command enables European character display +if arg is positive, disables it otherwise. Otherwise, it toggles +European character display. + +When this mode is enabled, characters in the range of 160 to 255 +display not as octal escapes, but as accented characters. Codes 146 +and 160 display as apostrophe and space, even though they are not the +ASCII codes for apostrophe and space. + +Enabling European character display with this command noninteractively +from Lisp code also selects Latin-1 as the language environment, and +selects unibyte mode for all Emacs buffers \(both existing buffers and +those created subsequently). This provides increased compatibility +for users who call this function in `.emacs'." + (if (or (<= (prefix-numeric-value arg) 0) (and (null arg) (char-table-p standard-display-table) @@ -207,33 +217,26 @@ probably want to edit European characters in single-byte mode." (equal (aref standard-display-table 161) [161]))) (progn (standard-display-default 160 255) - (unless (memq window-system '(x w32)) - (set-terminal-coding-system nil))) - ;; If the user does this explicitly, - ;; turn off multibyte chars for more compatibility. - (unless auto - (setq-default enable-multibyte-characters nil) - (if (get-buffer "*scratch*") - (with-current-buffer "*scratch*" - (set-buffer-multibyte nil)))) - ;; If the user does this explicitly, - ;; switch to Latin-1 language environment + (unless (or (memq window-system '(x w32))) + (and (terminal-coding-system) + (set-terminal-coding-system nil)))) + ;; Turn off multibyte chars for more compatibility. + (setq-default enable-multibyte-characters nil) + + ;; Switch to Latin-1 language environment ;; unless some other has been specified. - (unless auto - (if (equal current-language-environment "English") - (set-language-environment "latin-1"))) + (if (equal current-language-environment "English") + (set-language-environment "latin-1")) (unless (or noninteractive (memq window-system '(x w32))) - ;; Send those codes literally to a non-X terminal. - ;; If AUTO is nil, we are using single-byte characters, - ;; so it doesn't matter which one we use. + ;; Send those codes literally to a character-based terminal. + ;; If we are using single-byte characters, + ;; it doesn't matter which coding system we use. (set-terminal-coding-system - (cond ((not (equal current-language-environment "English")) - (intern (downcase current-language-environment))) - ((eq auto t) 'latin-1) - ((symbolp auto) (or auto 'latin-1)) - ((stringp auto) (intern auto))))) + (let ((c (intern (downcase current-language-environment)))) + (if (coding-system-p c) c 'latin-1)))) (standard-display-european-internal))) (provide 'disp-table) +;;; arch-tag: ffe4c28c-960c-47aa-b8a8-ae89d371ffc7 ;;; disp-table.el ends here