]> code.delx.au - gnu-emacs/blobdiff - lisp/disp-table.el
(idlwave-sintern-structtag): Declare as a function.
[gnu-emacs] / lisp / disp-table.el
index 6a8fe08ca2020464684e5f5a4a0e18d00a9b9d46..653d5b8360bd7e6b2666e285bf8fe8679581d29e 100644 (file)
@@ -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, 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 1994, 1995, 1999, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Erik Naggum <erik@naggum.no>
 ;; Based on a previous version by Howard Gayle
 
 ;; Author: Erik Naggum <erik@naggum.no>
 ;; Based on a previous version by Howard Gayle
@@ -11,7 +12,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -21,8 +22,8 @@
 
 ;; 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
 
 ;; 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:
 
 
 ;;; Commentary:
 
@@ -74,7 +75,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
 ;;;###autoload
 (defun describe-display-table (dt)
   "Describe the display table DT in a help buffer."
 ;;;###autoload
 (defun describe-display-table (dt)
   "Describe the display table DT in a help buffer."
-  (with-output-to-temp-buffer "*Help*"
+  (with-help-window "*Help*"
     (princ "\nTruncation glyph: ")
     (prin1 (display-table-slot dt 'truncation))
     (princ "\nWrap glyph: ")
     (princ "\nTruncation glyph: ")
     (prin1 (display-table-slot dt 'truncation))
     (princ "\nWrap glyph: ")
@@ -96,8 +97,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
          (aset vector i (aref dt i))
          (setq i (1+ i)))
        (describe-vector vector))
          (aset vector i (aref dt i))
          (setq i (1+ i)))
        (describe-vector vector))
-      (help-mode))
-    (print-help-return-message)))
+      (help-mode))))
 
 ;;;###autoload
 (defun describe-current-display-table ()
 
 ;;;###autoload
 (defun describe-current-display-table ()
@@ -113,17 +113,19 @@ Valid symbols are `truncation', `wrap', `escape', `control',
 ;;;###autoload
 (defun standard-display-8bit (l h)
   "Display characters in the range L to H literally."
 ;;;###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)
   (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 ?\s) (>= 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."
     (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)
   (while (<= l h)
-    (if (and (>= l ?\ ) (char-valid-p l))
+    (if (and (>= l ?\s) (char-valid-p l))
        (aset standard-display-table l nil))
     (setq l (1+ l))))
 
        (aset standard-display-table l nil))
     (setq l (1+ l))))
 
@@ -133,6 +135,8 @@ Valid symbols are `truncation', `wrap', `escape', `control',
 ;;;###autoload
 (defun standard-display-ascii (c s)
   "Display character C using printable string S."
 ;;;###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
   (aset standard-display-table c (vconcat s)))
 
 ;;;###autoload
@@ -140,8 +144,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."
   "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 (memq window-system '(x w32))
+  (if (memq window-system '(x w32 mac))
       (error "Cannot use string glyphs in a windowing system"))
       (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")))))
 
   (aset standard-display-table c
        (vector (create-glyph (concat "\016" (char-to-string sc) "\017")))))
 
@@ -150,18 +156,22 @@ 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."
   "Display character C as character GC in graphics character set.
 This function assumes VT100-compatible escapes; it is meaningless for an
 X frame."
-  (if (memq window-system '(x w32))
+  (if (memq window-system '(x w32 mac))
       (error "Cannot use string glyphs in a windowing system"))
       (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."
   (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."
+  (or standard-display-table
+      (setq standard-display-table (make-display-table)))
   (aset standard-display-table c
   (aset standard-display-table c
-       (vector 
+       (vector
         (if window-system
         (if window-system
-            (logior uc (lsh (face-id 'underline) 19))
+            (make-glyph-code uc 'underline)
           (create-glyph (concat "\e[4m" (char-to-string uc) "\e[m"))))))
 
 ;;;###autoload
           (create-glyph (concat "\e[4m" (char-to-string uc) "\e[m"))))))
 
 ;;;###autoload
@@ -175,6 +185,30 @@ X frame."
   (setq glyph-table (vconcat glyph-table (list string)))
   (1- (length glyph-table)))
 
   (setq glyph-table (vconcat glyph-table (list string)))
   (1- (length glyph-table)))
 
+;;;###autoload
+(defun make-glyph-code (char &optional face)
+  "Return a glyph code representing char CHAR with face FACE."
+  ;; Due to limitations on Emacs integer values, faces with
+  ;; face id greater that 4091 are silently ignored.
+  (if (and face (<= (face-id face) #xfff))
+      (logior char (lsh (face-id face) 19))
+    char))
+
+;;;###autoload
+(defun glyph-char (glyph)
+  "Return the character of glyph code GLYPH."
+  (logand glyph #x7ffff))
+
+;;;###autoload
+(defun glyph-face (glyph)
+  "Return the face of glyph code GLYPH, or nil if glyph has default face."
+  (let ((face-id (lsh glyph -19)))
+    (and (> face-id 0)
+        (car (delq nil (mapcar (lambda (face)
+                                 (and (eq (get face 'face) face-id)
+                                      face))
+                               (face-list)))))))
+
 ;;;###autoload
 (defun standard-display-european (arg)
   "Semi-obsolete way to toggle display of ISO 8859 European characters.
 ;;;###autoload
 (defun standard-display-european (arg)
   "Semi-obsolete way to toggle display of ISO 8859 European characters.
@@ -185,7 +219,7 @@ 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
 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
+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
 European character display.
 
 When this mode is enabled, characters in the range of 160 to 255
@@ -206,17 +240,19 @@ for users who call this function in `.emacs'."
               (equal (aref standard-display-table 161) [161])))
       (progn
        (standard-display-default 160 255)
               (equal (aref standard-display-table 161) [161])))
       (progn
        (standard-display-default 160 255)
-       (unless (or (memq window-system '(x w32)))
+       (unless (or (memq window-system '(x w32 mac)))
          (and (terminal-coding-system)
               (set-terminal-coding-system nil))))
          (and (terminal-coding-system)
               (set-terminal-coding-system nil))))
-    ;; Turn off multibyte chars for more compatibility.
-    (setq-default enable-multibyte-characters nil)
+
+    (display-warning 'i18n
+                    "`standard-display-european' is semi-obsolete; see its doc string for details"
+                    :warning)
 
     ;; Switch to Latin-1 language environment
     ;; unless some other has been specified.
     (if (equal current-language-environment "English")
        (set-language-environment "latin-1"))
 
     ;; Switch to Latin-1 language environment
     ;; unless some other has been specified.
     (if (equal current-language-environment "English")
        (set-language-environment "latin-1"))
-    (unless (or noninteractive (memq window-system '(x w32)))
+    (unless (or noninteractive (memq window-system '(x w32 mac)))
       ;; 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.
       ;; 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.
@@ -227,4 +263,5 @@ for users who call this function in `.emacs'."
 
 (provide 'disp-table)
 
 
 (provide 'disp-table)
 
+;; arch-tag: ffe4c28c-960c-47aa-b8a8-ae89d371ffc7
 ;;; disp-table.el ends here
 ;;; disp-table.el ends here