LCOV - code coverage report
Current view: top level - lisp/term - x-win.el (source / functions) Hit Total Coverage
Test: tramp-tests.info Lines: 0 131 0.0 %
Date: 2017-08-27 09:44:50 Functions: 0 18 0.0 %

          Line data    Source code
       1             : ;;; x-win.el --- parse relevant switches and set up for X  -*- lexical-binding:t -*-
       2             : 
       3             : ;; Copyright (C) 1993-1994, 2001-2017 Free Software Foundation, Inc.
       4             : 
       5             : ;; Author: FSF
       6             : ;; Keywords: terminals, i18n
       7             : 
       8             : ;; This file is part of GNU Emacs.
       9             : 
      10             : ;; GNU Emacs is free software: you can redistribute it and/or modify
      11             : ;; it under the terms of the GNU General Public License as published by
      12             : ;; the Free Software Foundation, either version 3 of the License, or
      13             : ;; (at your option) any later version.
      14             : 
      15             : ;; GNU Emacs is distributed in the hope that it will be useful,
      16             : ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
      17             : ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      18             : ;; GNU General Public License for more details.
      19             : 
      20             : ;; You should have received a copy of the GNU General Public License
      21             : ;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
      22             : 
      23             : ;;; Commentary:
      24             : 
      25             : ;; X-win.el: this file defines functions to initialize the X window
      26             : ;; system and process X-specific command line parameters before
      27             : ;; creating the first X frame.
      28             : 
      29             : ;; Beginning in Emacs 23, the act of loading this file should not have
      30             : ;; the side effect of initializing the window system or processing
      31             : ;; command line arguments (this file is now loaded in loadup.el).  See
      32             : ;; `handle-args-function' and `window-system-initialization' for more details.
      33             : 
      34             : ;; startup.el will then examine startup files, and eventually call the hooks
      35             : ;; which create the first window(s).
      36             : 
      37             : ;;; Code:
      38             : 
      39             : ;; These are the standard X switches from the Xt Initialize.c file of
      40             : ;; Release 4.
      41             : 
      42             : ;; Command line         Resource Manager string
      43             : 
      44             : ;; +rv                  *reverseVideo
      45             : ;; +synchronous         *synchronous
      46             : ;; -background          *background
      47             : ;; -bd                  *borderColor
      48             : ;; -bg                  *background
      49             : ;; -bordercolor         *borderColor
      50             : ;; -borderwidth         .borderWidth
      51             : ;; -bw                  .borderWidth
      52             : ;; -display             .display
      53             : ;; -fg                  *foreground
      54             : ;; -fn                  *font
      55             : ;; -font                *font
      56             : ;; -foreground          *foreground
      57             : ;; -geometry            .geometry
      58             : ;; -iconic              .iconic
      59             : ;; -name                .name
      60             : ;; -reverse             *reverseVideo
      61             : ;; -rv                  *reverseVideo
      62             : ;; -selectionTimeout    .selectionTimeout
      63             : ;; -synchronous         *synchronous
      64             : ;; -xrm
      65             : 
      66             : ;; An alist of X options and the function which handles them.  See
      67             : ;; ../startup.el.
      68             : 
      69             : (eval-when-compile (require 'cl-lib))
      70             : 
      71             : (if (not (fboundp 'x-create-frame))
      72             :     (error "%s: Loading x-win.el but not compiled for X" (invocation-name)))
      73             : 
      74             : (require 'term/common-win)
      75             : (require 'frame)
      76             : (require 'mouse)
      77             : (require 'scroll-bar)
      78             : (require 'faces)
      79             : (require 'select)
      80             : (require 'menu-bar)
      81             : (require 'fontset)
      82             : (require 'x-dnd)
      83             : 
      84             : (defvar x-invocation-args)
      85             : (defvar x-keysym-table)
      86             : (defvar x-selection-timeout)
      87             : (defvar x-session-id)
      88             : (defvar x-session-previous-id)
      89             : 
      90             : (defun x-handle-no-bitmap-icon (_switch)
      91           0 :   (setq default-frame-alist (cons '(icon-type) default-frame-alist)))
      92             : 
      93             : ;; Handle the --parent-id option.
      94             : (defun x-handle-parent-id (switch)
      95           0 :   (or (consp x-invocation-args)
      96           0 :       (error "%s: missing argument to `%s' option" (invocation-name) switch))
      97           0 :   (setq initial-frame-alist (cons
      98           0 :                              (cons 'parent-id
      99           0 :                                    (string-to-number (car x-invocation-args)))
     100           0 :                              initial-frame-alist)
     101           0 :         x-invocation-args (cdr x-invocation-args)))
     102             : 
     103             : ;; Handle the --smid switch.  This is used by the session manager
     104             : ;; to give us back our session id we had on the previous run.
     105             : (defun x-handle-smid (switch)
     106           0 :   (or (consp x-invocation-args)
     107           0 :       (error "%s: missing argument to `%s' option" (invocation-name) switch))
     108           0 :   (setq x-session-previous-id (car x-invocation-args)
     109           0 :         x-invocation-args (cdr x-invocation-args)))
     110             : 
     111             : (defvar emacs-save-session-functions nil
     112             :   "Special hook run when a save-session event occurs.
     113             : The functions do not get any argument.
     114             : Functions can return non-nil to inform the session manager that the
     115             : window system shutdown should be aborted.
     116             : 
     117             : See also `emacs-session-save'.")
     118             : 
     119             : (defun emacs-session-filename (session-id)
     120             :   "Construct a filename to save the session in based on SESSION-ID.
     121             : Return a filename in `user-emacs-directory', unless the session file
     122             : already exists in the home directory."
     123           0 :   (let ((basename (concat "session." session-id)))
     124           0 :     (locate-user-emacs-file basename
     125           0 :                             (concat ".emacs-" basename))))
     126             : 
     127             : (defun emacs-session-save ()
     128             :   "This function is called when the window system is shutting down.
     129             : If this function returns non-nil, the window system shutdown is canceled.
     130             : 
     131             : When a session manager tells Emacs that the window system is shutting
     132             : down, this function is called.  It calls the functions in the hook
     133             : `emacs-save-session-functions'.  Functions are called with the current
     134             : buffer set to a temporary buffer.  Functions should use `insert' to insert
     135             : lisp code to save the session state.  The buffer is saved in a file in the
     136             : home directory of the user running Emacs.  The file is evaluated when
     137             : Emacs is restarted by the session manager.
     138             : 
     139             : If any of the functions returns non-nil, no more functions are called
     140             : and this function returns non-nil.  This will inform the session manager
     141             : that it should abort the window system shutdown."
     142           0 :   (let ((filename (emacs-session-filename x-session-id))
     143           0 :         (buf (get-buffer-create (concat " *SES " x-session-id))))
     144           0 :     (when (file-exists-p filename)
     145           0 :       (delete-file filename))
     146           0 :     (with-current-buffer buf
     147           0 :       (let ((cancel-shutdown (condition-case nil
     148             :                                  ;; A return of t means cancel the shutdown.
     149           0 :                                  (run-hook-with-args-until-success
     150           0 :                                   'emacs-save-session-functions)
     151           0 :                                (error t))))
     152           0 :         (unless cancel-shutdown
     153           0 :           (write-file filename))
     154           0 :         (kill-buffer buf)
     155           0 :         cancel-shutdown))))
     156             : 
     157             : (defun emacs-session-restore (previous-session-id)
     158             :   "Restore the Emacs session if started by a session manager.
     159             : The file saved by `emacs-session-save' is evaluated and deleted if it
     160             : exists."
     161           0 :   (let ((filename (emacs-session-filename previous-session-id)))
     162           0 :     (when (file-exists-p filename)
     163           0 :       (load-file filename)
     164           0 :       (delete-file filename)
     165           0 :       (message "Restored session data"))))
     166             : 
     167             : 
     168             : 
     169             : 
     170             : ;;
     171             : ;; Standard X cursor shapes, courtesy of Mr. Fox, who wanted ALL of them.
     172             : ;;
     173             : 
     174             : (defconst x-pointer-X-cursor 0)
     175             : (defconst x-pointer-arrow 2)
     176             : (defconst x-pointer-based-arrow-down 4)
     177             : (defconst x-pointer-based-arrow-up 6)
     178             : (defconst x-pointer-boat 8)
     179             : (defconst x-pointer-bogosity 10)
     180             : (defconst x-pointer-bottom-left-corner 12)
     181             : (defconst x-pointer-bottom-right-corner 14)
     182             : (defconst x-pointer-bottom-side 16)
     183             : (defconst x-pointer-bottom-tee 18)
     184             : (defconst x-pointer-box-spiral 20)
     185             : (defconst x-pointer-center-ptr 22)
     186             : (defconst x-pointer-circle 24)
     187             : (defconst x-pointer-clock 26)
     188             : (defconst x-pointer-coffee-mug 28)
     189             : (defconst x-pointer-cross 30)
     190             : (defconst x-pointer-cross-reverse 32)
     191             : (defconst x-pointer-crosshair 34)
     192             : (defconst x-pointer-diamond-cross 36)
     193             : (defconst x-pointer-dot 38)
     194             : (defconst x-pointer-dotbox 40)
     195             : (defconst x-pointer-double-arrow 42)
     196             : (defconst x-pointer-draft-large 44)
     197             : (defconst x-pointer-draft-small 46)
     198             : (defconst x-pointer-draped-box 48)
     199             : (defconst x-pointer-exchange 50)
     200             : (defconst x-pointer-fleur 52)
     201             : (defconst x-pointer-gobbler 54)
     202             : (defconst x-pointer-gumby 56)
     203             : (defconst x-pointer-hand1 58)
     204             : (defconst x-pointer-hand2 60)
     205             : (defconst x-pointer-heart 62)
     206             : (defconst x-pointer-icon 64)
     207             : (defconst x-pointer-iron-cross 66)
     208             : (defconst x-pointer-left-ptr 68)
     209             : (defconst x-pointer-left-side 70)
     210             : (defconst x-pointer-left-tee 72)
     211             : (defconst x-pointer-leftbutton 74)
     212             : (defconst x-pointer-ll-angle 76)
     213             : (defconst x-pointer-lr-angle 78)
     214             : (defconst x-pointer-man 80)
     215             : (defconst x-pointer-middlebutton 82)
     216             : (defconst x-pointer-mouse 84)
     217             : (defconst x-pointer-pencil 86)
     218             : (defconst x-pointer-pirate 88)
     219             : (defconst x-pointer-plus 90)
     220             : (defconst x-pointer-question-arrow 92)
     221             : (defconst x-pointer-right-ptr 94)
     222             : (defconst x-pointer-right-side 96)
     223             : (defconst x-pointer-right-tee 98)
     224             : (defconst x-pointer-rightbutton 100)
     225             : (defconst x-pointer-rtl-logo 102)
     226             : (defconst x-pointer-sailboat 104)
     227             : (defconst x-pointer-sb-down-arrow 106)
     228             : (defconst x-pointer-sb-h-double-arrow 108)
     229             : (defconst x-pointer-sb-left-arrow 110)
     230             : (defconst x-pointer-sb-right-arrow 112)
     231             : (defconst x-pointer-sb-up-arrow 114)
     232             : (defconst x-pointer-sb-v-double-arrow 116)
     233             : (defconst x-pointer-shuttle 118)
     234             : (defconst x-pointer-sizing 120)
     235             : (defconst x-pointer-spider 122)
     236             : (defconst x-pointer-spraycan 124)
     237             : (defconst x-pointer-star 126)
     238             : (defconst x-pointer-target 128)
     239             : (defconst x-pointer-tcross 130)
     240             : (defconst x-pointer-top-left-arrow 132)
     241             : (defconst x-pointer-top-left-corner 134)
     242             : (defconst x-pointer-top-right-corner 136)
     243             : (defconst x-pointer-top-side 138)
     244             : (defconst x-pointer-top-tee 140)
     245             : (defconst x-pointer-trek 142)
     246             : (defconst x-pointer-ul-angle 144)
     247             : (defconst x-pointer-umbrella 146)
     248             : (defconst x-pointer-ur-angle 148)
     249             : (defconst x-pointer-watch 150)
     250             : (defconst x-pointer-xterm 152)
     251             : (defconst x-pointer-invisible 255)
     252             : 
     253             : 
     254             : ;;;; Keysyms
     255             : 
     256             : (defun vendor-specific-keysyms (vendor)
     257             :   "Return the appropriate value of `system-key-alist' for VENDOR.
     258             : VENDOR is a string containing the name of the X Server's vendor,
     259             : as returned by `x-server-vendor'."
     260           0 :   (cond ((or (string-equal vendor "Hewlett-Packard Incorporated")
     261           0 :              (string-equal vendor "Hewlett-Packard Company"))
     262             :          '((  168 . mute-acute)
     263             :            (  169 . mute-grave)
     264             :            (  170 . mute-asciicircum)
     265             :            (  171 . mute-diaeresis)
     266             :            (  172 . mute-asciitilde)
     267             :            (  175 . lira)
     268             :            (  190 . guilder)
     269             :            (  252 . block)
     270             :            (  256 . longminus)
     271             :            (65388 . reset)
     272             :            (65389 . system)
     273             :            (65390 . user)
     274             :            (65391 . clearline)
     275             :            (65392 . insertline)
     276             :            (65393 . deleteline)
     277             :            (65394 . insertchar)
     278             :            (65395 . deletechar)
     279             :            (65396 . backtab)
     280             :            (65397 . kp-backtab)))
     281             :         ;; Fixme: What about non-X11/NeWS sun server?
     282           0 :         ((or (string-equal vendor "X11/NeWS - Sun Microsystems Inc.")
     283           0 :              (string-equal vendor "X Consortium"))
     284             :          '((392976 . f36)
     285             :            (392977 . f37)
     286             :            (393056 . req)
     287             :            ;; These are for Sun under X11R6
     288             :            (393072 . props)
     289             :            (393073 . front)
     290             :            (393074 . copy)
     291             :            (393075 . open)
     292             :            (393076 . paste)
     293             :            (393077 . cut)))
     294             :         (t
     295             :          ;; This is used by DEC's X server.
     296           0 :          '((65280 . remove)))))
     297             : 
     298             : ;; Latin-1
     299             : (let ((i 160))
     300             :   (while (< i 256)
     301             :     (puthash i i x-keysym-table)
     302             :     (setq i (1+ i))))
     303             : 
     304             : ;; Table from Kuhn's proposed additions to the `KEYSYM Encoding'
     305             : ;; appendix to the X protocol definition.
     306             : (dolist
     307             :      (pair
     308             :       '(
     309             :         ;; Latin-2
     310             :         (#x1a1 . ?Ą)
     311             :         (#x1a2 . ?˘)
     312             :         (#x1a3 . ?Ł)
     313             :         (#x1a5 . ?Ľ)
     314             :         (#x1a6 . ?Ś)
     315             :         (#x1a9 . ?Š)
     316             :         (#x1aa . ?Ş)
     317             :         (#x1ab . ?Ť)
     318             :         (#x1ac . ?Ź)
     319             :         (#x1ae . ?Ž)
     320             :         (#x1af . ?Ż)
     321             :         (#x1b1 . ?ą)
     322             :         (#x1b2 . ?˛)
     323             :         (#x1b3 . ?ł)
     324             :         (#x1b5 . ?ľ)
     325             :         (#x1b6 . ?ś)
     326             :         (#x1b7 . ?ˇ)
     327             :         (#x1b9 . ?š)
     328             :         (#x1ba . ?ş)
     329             :         (#x1bb . ?ť)
     330             :         (#x1bc . ?ź)
     331             :         (#x1bd . ?˝)
     332             :         (#x1be . ?ž)
     333             :         (#x1bf . ?ż)
     334             :         (#x1c0 . ?Ŕ)
     335             :         (#x1c3 . ?Ă)
     336             :         (#x1c5 . ?Ĺ)
     337             :         (#x1c6 . ?Ć)
     338             :         (#x1c8 . ?Č)
     339             :         (#x1ca . ?Ę)
     340             :         (#x1cc . ?Ě)
     341             :         (#x1cf . ?Ď)
     342             :         (#x1d0 . ?Đ)
     343             :         (#x1d1 . ?Ń)
     344             :         (#x1d2 . ?Ň)
     345             :         (#x1d5 . ?Ő)
     346             :         (#x1d8 . ?Ř)
     347             :         (#x1d9 . ?Ů)
     348             :         (#x1db . ?Ű)
     349             :         (#x1de . ?Ţ)
     350             :         (#x1e0 . ?ŕ)
     351             :         (#x1e3 . ?ă)
     352             :         (#x1e5 . ?ĺ)
     353             :         (#x1e6 . ?ć)
     354             :         (#x1e8 . ?č)
     355             :         (#x1ea . ?ę)
     356             :         (#x1ec . ?ě)
     357             :         (#x1ef . ?ď)
     358             :         (#x1f0 . ?đ)
     359             :         (#x1f1 . ?ń)
     360             :         (#x1f2 . ?ň)
     361             :         (#x1f5 . ?ő)
     362             :         (#x1f8 . ?ř)
     363             :         (#x1f9 . ?ů)
     364             :         (#x1fb . ?ű)
     365             :         (#x1fe . ?ţ)
     366             :         (#x1ff . ?˙)
     367             :         ;; Latin-3
     368             :         (#x2a1 . ?Ħ)
     369             :         (#x2a6 . ?Ĥ)
     370             :         (#x2a9 . ?İ)
     371             :         (#x2ab . ?Ğ)
     372             :         (#x2ac . ?Ĵ)
     373             :         (#x2b1 . ?ħ)
     374             :         (#x2b6 . ?ĥ)
     375             :         (#x2b9 . ?ı)
     376             :         (#x2bb . ?ğ)
     377             :         (#x2bc . ?ĵ)
     378             :         (#x2c5 . ?Ċ)
     379             :         (#x2c6 . ?Ĉ)
     380             :         (#x2d5 . ?Ġ)
     381             :         (#x2d8 . ?Ĝ)
     382             :         (#x2dd . ?Ŭ)
     383             :         (#x2de . ?Ŝ)
     384             :         (#x2e5 . ?ċ)
     385             :         (#x2e6 . ?ĉ)
     386             :         (#x2f5 . ?ġ)
     387             :         (#x2f8 . ?ĝ)
     388             :         (#x2fd . ?ŭ)
     389             :         (#x2fe . ?ŝ)
     390             :         ;; Latin-4
     391             :         (#x3a2 . ?ĸ)
     392             :         (#x3a3 . ?Ŗ)
     393             :         (#x3a5 . ?Ĩ)
     394             :         (#x3a6 . ?Ļ)
     395             :         (#x3aa . ?Ē)
     396             :         (#x3ab . ?Ģ)
     397             :         (#x3ac . ?Ŧ)
     398             :         (#x3b3 . ?ŗ)
     399             :         (#x3b5 . ?ĩ)
     400             :         (#x3b6 . ?ļ)
     401             :         (#x3ba . ?ē)
     402             :         (#x3bb . ?ģ)
     403             :         (#x3bc . ?ŧ)
     404             :         (#x3bd . ?Ŋ)
     405             :         (#x3bf . ?ŋ)
     406             :         (#x3c0 . ?Ā)
     407             :         (#x3c7 . ?Į)
     408             :         (#x3cc . ?Ė)
     409             :         (#x3cf . ?Ī)
     410             :         (#x3d1 . ?Ņ)
     411             :         (#x3d2 . ?Ō)
     412             :         (#x3d3 . ?Ķ)
     413             :         (#x3d9 . ?Ų)
     414             :         (#x3dd . ?Ũ)
     415             :         (#x3de . ?Ū)
     416             :         (#x3e0 . ?ā)
     417             :         (#x3e7 . ?į)
     418             :         (#x3ec . ?ė)
     419             :         (#x3ef . ?ī)
     420             :         (#x3f1 . ?ņ)
     421             :         (#x3f2 . ?ō)
     422             :         (#x3f3 . ?ķ)
     423             :         (#x3f9 . ?ų)
     424             :         (#x3fd . ?ũ)
     425             :         (#x3fe . ?ū)
     426             :         (#x47e . ?‾)
     427             :         (#x4a1 . ?。)
     428             :         (#x4a2 . ?\「)
     429             :         (#x4a3 . ?\」)
     430             :         (#x4a4 . ?、)
     431             :         (#x4a5 . ?・)
     432             :         (#x4a6 . ?ヲ)
     433             :         (#x4a7 . ?ァ)
     434             :         (#x4a8 . ?ィ)
     435             :         (#x4a9 . ?ゥ)
     436             :         (#x4aa . ?ェ)
     437             :         (#x4ab . ?ォ)
     438             :         (#x4ac . ?ャ)
     439             :         (#x4ad . ?ュ)
     440             :         (#x4ae . ?ョ)
     441             :         (#x4af . ?ッ)
     442             :         (#x4b0 . ?ー)
     443             :         (#x4b1 . ?ア)
     444             :         (#x4b2 . ?イ)
     445             :         (#x4b3 . ?ウ)
     446             :         (#x4b4 . ?エ)
     447             :         (#x4b5 . ?オ)
     448             :         (#x4b6 . ?カ)
     449             :         (#x4b7 . ?キ)
     450             :         (#x4b8 . ?ク)
     451             :         (#x4b9 . ?ケ)
     452             :         (#x4ba . ?コ)
     453             :         (#x4bb . ?サ)
     454             :         (#x4bc . ?シ)
     455             :         (#x4bd . ?ス)
     456             :         (#x4be . ?セ)
     457             :         (#x4bf . ?ソ)
     458             :         (#x4c0 . ?タ)
     459             :         (#x4c1 . ?チ)
     460             :         (#x4c2 . ?ツ)
     461             :         (#x4c3 . ?テ)
     462             :         (#x4c4 . ?ト)
     463             :         (#x4c5 . ?ナ)
     464             :         (#x4c6 . ?ニ)
     465             :         (#x4c7 . ?ヌ)
     466             :         (#x4c8 . ?ネ)
     467             :         (#x4c9 . ?ノ)
     468             :         (#x4ca . ?ハ)
     469             :         (#x4cb . ?ヒ)
     470             :         (#x4cc . ?フ)
     471             :         (#x4cd . ?ヘ)
     472             :         (#x4ce . ?ホ)
     473             :         (#x4cf . ?マ)
     474             :         (#x4d0 . ?ミ)
     475             :         (#x4d1 . ?ム)
     476             :         (#x4d2 . ?メ)
     477             :         (#x4d3 . ?モ)
     478             :         (#x4d4 . ?ヤ)
     479             :         (#x4d5 . ?ユ)
     480             :         (#x4d6 . ?ヨ)
     481             :         (#x4d7 . ?ラ)
     482             :         (#x4d8 . ?リ)
     483             :         (#x4d9 . ?ル)
     484             :         (#x4da . ?レ)
     485             :         (#x4db . ?ロ)
     486             :         (#x4dc . ?ワ)
     487             :         (#x4dd . ?ン)
     488             :         (#x4de . ?゛)
     489             :         (#x4df . ?゜)
     490             :         ;; Arabic
     491             :         (#x5ac . ?،)
     492             :         (#x5bb . ?؛)
     493             :         (#x5bf . ?؟)
     494             :         (#x5c1 . ?ء)
     495             :         (#x5c2 . ?آ)
     496             :         (#x5c3 . ?أ)
     497             :         (#x5c4 . ?ؤ)
     498             :         (#x5c5 . ?إ)
     499             :         (#x5c6 . ?ئ)
     500             :         (#x5c7 . ?ا)
     501             :         (#x5c8 . ?ب)
     502             :         (#x5c9 . ?ة)
     503             :         (#x5ca . ?ت)
     504             :         (#x5cb . ?ث)
     505             :         (#x5cc . ?ج)
     506             :         (#x5cd . ?ح)
     507             :         (#x5ce . ?خ)
     508             :         (#x5cf . ?د)
     509             :         (#x5d0 . ?ذ)
     510             :         (#x5d1 . ?ر)
     511             :         (#x5d2 . ?ز)
     512             :         (#x5d3 . ?س)
     513             :         (#x5d4 . ?ش)
     514             :         (#x5d5 . ?ص)
     515             :         (#x5d6 . ?ض)
     516             :         (#x5d7 . ?ط)
     517             :         (#x5d8 . ?ظ)
     518             :         (#x5d9 . ?ع)
     519             :         (#x5da . ?غ)
     520             :         (#x5e0 . ?ـ)
     521             :         (#x5e1 . ?ف)
     522             :         (#x5e2 . ?ق)
     523             :         (#x5e3 . ?ك)
     524             :         (#x5e4 . ?ل)
     525             :         (#x5e5 . ?م)
     526             :         (#x5e6 . ?ن)
     527             :         (#x5e7 . ?ه)
     528             :         (#x5e8 . ?و)
     529             :         (#x5e9 . ?ى)
     530             :         (#x5ea . ?ي)
     531             :         (#x5eb . ?ً)
     532             :         (#x5ec . ?ٌ)
     533             :         (#x5ed . ?ٍ)
     534             :         (#x5ee . ?َ)
     535             :         (#x5ef . ?ُ)
     536             :         (#x5f0 . ?ِ)
     537             :         (#x5f1 . ?ّ)
     538             :         (#x5f2 . ?ْ)
     539             :         ;; Cyrillic
     540             :         (#x680 . ?Ғ)
     541             :         (#x681 . ?Җ)
     542             :         (#x682 . ?Қ)
     543             :         (#x683 . ?Ҝ)
     544             :         (#x684 . ?Ң)
     545             :         (#x685 . ?Ү)
     546             :         (#x686 . ?Ұ)
     547             :         (#x687 . ?Ҳ)
     548             :         (#x688 . ?Ҷ)
     549             :         (#x689 . ?Ҹ)
     550             :         (#x68a . ?Һ)
     551             :         (#x68c . ?Ә)
     552             :         (#x68d . ?Ӣ)
     553             :         (#x68e . ?Ө)
     554             :         (#x68f . ?Ӯ)
     555             :         (#x690 . ?ғ)
     556             :         (#x691 . ?җ)
     557             :         (#x692 . ?қ)
     558             :         (#x693 . ?ҝ)
     559             :         (#x694 . ?ң)
     560             :         (#x695 . ?ү)
     561             :         (#x696 . ?ұ)
     562             :         (#x697 . ?ҳ)
     563             :         (#x698 . ?ҷ)
     564             :         (#x699 . ?ҹ)
     565             :         (#x69a . ?һ)
     566             :         (#x69c . ?ә)
     567             :         (#x69d . ?ӣ)
     568             :         (#x69e . ?ө)
     569             :         (#x69f . ?ӯ)
     570             :         (#x6a1 . ?ђ)
     571             :         (#x6a2 . ?ѓ)
     572             :         (#x6a3 . ?ё)
     573             :         (#x6a4 . ?є)
     574             :         (#x6a5 . ?ѕ)
     575             :         (#x6a6 . ?і)
     576             :         (#x6a7 . ?ї)
     577             :         (#x6a8 . ?ј)
     578             :         (#x6a9 . ?љ)
     579             :         (#x6aa . ?њ)
     580             :         (#x6ab . ?ћ)
     581             :         (#x6ac . ?ќ)
     582             :         (#x6ae . ?ў)
     583             :         (#x6af . ?џ)
     584             :         (#x6b0 . ?№)
     585             :         (#x6b1 . ?Ђ)
     586             :         (#x6b2 . ?Ѓ)
     587             :         (#x6b3 . ?Ё)
     588             :         (#x6b4 . ?Є)
     589             :         (#x6b5 . ?Ѕ)
     590             :         (#x6b6 . ?І)
     591             :         (#x6b7 . ?Ї)
     592             :         (#x6b8 . ?Ј)
     593             :         (#x6b9 . ?Љ)
     594             :         (#x6ba . ?Њ)
     595             :         (#x6bb . ?Ћ)
     596             :         (#x6bc . ?Ќ)
     597             :         (#x6be . ?Ў)
     598             :         (#x6bf . ?Џ)
     599             :         (#x6c0 . ?ю)
     600             :         (#x6c1 . ?а)
     601             :         (#x6c2 . ?б)
     602             :         (#x6c3 . ?ц)
     603             :         (#x6c4 . ?д)
     604             :         (#x6c5 . ?е)
     605             :         (#x6c6 . ?ф)
     606             :         (#x6c7 . ?г)
     607             :         (#x6c8 . ?х)
     608             :         (#x6c9 . ?и)
     609             :         (#x6ca . ?й)
     610             :         (#x6cb . ?к)
     611             :         (#x6cc . ?л)
     612             :         (#x6cd . ?м)
     613             :         (#x6ce . ?н)
     614             :         (#x6cf . ?о)
     615             :         (#x6d0 . ?п)
     616             :         (#x6d1 . ?я)
     617             :         (#x6d2 . ?р)
     618             :         (#x6d3 . ?с)
     619             :         (#x6d4 . ?т)
     620             :         (#x6d5 . ?у)
     621             :         (#x6d6 . ?ж)
     622             :         (#x6d7 . ?в)
     623             :         (#x6d8 . ?ь)
     624             :         (#x6d9 . ?ы)
     625             :         (#x6da . ?з)
     626             :         (#x6db . ?ш)
     627             :         (#x6dc . ?э)
     628             :         (#x6dd . ?щ)
     629             :         (#x6de . ?ч)
     630             :         (#x6df . ?ъ)
     631             :         (#x6e0 . ?Ю)
     632             :         (#x6e1 . ?А)
     633             :         (#x6e2 . ?Б)
     634             :         (#x6e3 . ?Ц)
     635             :         (#x6e4 . ?Д)
     636             :         (#x6e5 . ?Е)
     637             :         (#x6e6 . ?Ф)
     638             :         (#x6e7 . ?Г)
     639             :         (#x6e8 . ?Х)
     640             :         (#x6e9 . ?И)
     641             :         (#x6ea . ?Й)
     642             :         (#x6eb . ?К)
     643             :         (#x6ec . ?Л)
     644             :         (#x6ed . ?М)
     645             :         (#x6ee . ?Н)
     646             :         (#x6ef . ?О)
     647             :         (#x6f0 . ?П)
     648             :         (#x6f1 . ?Я)
     649             :         (#x6f2 . ?Р)
     650             :         (#x6f3 . ?С)
     651             :         (#x6f4 . ?Т)
     652             :         (#x6f5 . ?У)
     653             :         (#x6f6 . ?Ж)
     654             :         (#x6f7 . ?В)
     655             :         (#x6f8 . ?Ь)
     656             :         (#x6f9 . ?Ы)
     657             :         (#x6fa . ?З)
     658             :         (#x6fb . ?Ш)
     659             :         (#x6fc . ?Э)
     660             :         (#x6fd . ?Щ)
     661             :         (#x6fe . ?Ч)
     662             :         (#x6ff . ?Ъ)
     663             :         ;; Greek
     664             :         (#x7a1 . ?Ά)
     665             :         (#x7a2 . ?Έ)
     666             :         (#x7a3 . ?Ή)
     667             :         (#x7a4 . ?Ί)
     668             :         (#x7a5 . ?Ϊ)
     669             :         (#x7a7 . ?Ό)
     670             :         (#x7a8 . ?Ύ)
     671             :         (#x7a9 . ?Ϋ)
     672             :         (#x7ab . ?Ώ)
     673             :         (#x7ae . ?΅)
     674             :         (#x7af . ?―)
     675             :         (#x7b1 . ?ά)
     676             :         (#x7b2 . ?έ)
     677             :         (#x7b3 . ?ή)
     678             :         (#x7b4 . ?ί)
     679             :         (#x7b5 . ?ϊ)
     680             :         (#x7b6 . ?ΐ)
     681             :         (#x7b7 . ?ό)
     682             :         (#x7b8 . ?ύ)
     683             :         (#x7b9 . ?ϋ)
     684             :         (#x7ba . ?ΰ)
     685             :         (#x7bb . ?ώ)
     686             :         (#x7c1 . ?Α)
     687             :         (#x7c2 . ?Β)
     688             :         (#x7c3 . ?Γ)
     689             :         (#x7c4 . ?Δ)
     690             :         (#x7c5 . ?Ε)
     691             :         (#x7c6 . ?Ζ)
     692             :         (#x7c7 . ?Η)
     693             :         (#x7c8 . ?Θ)
     694             :         (#x7c9 . ?Ι)
     695             :         (#x7ca . ?Κ)
     696             :         (#x7cb . ?Λ)
     697             :         (#x7cc . ?Μ)
     698             :         (#x7cd . ?Ν)
     699             :         (#x7ce . ?Ξ)
     700             :         (#x7cf . ?Ο)
     701             :         (#x7d0 . ?Π)
     702             :         (#x7d1 . ?Ρ)
     703             :         (#x7d2 . ?Σ)
     704             :         (#x7d4 . ?Τ)
     705             :         (#x7d5 . ?Υ)
     706             :         (#x7d6 . ?Φ)
     707             :         (#x7d7 . ?Χ)
     708             :         (#x7d8 . ?Ψ)
     709             :         (#x7d9 . ?Ω)
     710             :         (#x7e1 . ?α)
     711             :         (#x7e2 . ?β)
     712             :         (#x7e3 . ?γ)
     713             :         (#x7e4 . ?δ)
     714             :         (#x7e5 . ?ε)
     715             :         (#x7e6 . ?ζ)
     716             :         (#x7e7 . ?η)
     717             :         (#x7e8 . ?θ)
     718             :         (#x7e9 . ?ι)
     719             :         (#x7ea . ?κ)
     720             :         (#x7eb . ?λ)
     721             :         (#x7ec . ?μ)
     722             :         (#x7ed . ?ν)
     723             :         (#x7ee . ?ξ)
     724             :         (#x7ef . ?ο)
     725             :         (#x7f0 . ?π)
     726             :         (#x7f1 . ?ρ)
     727             :         (#x7f2 . ?σ)
     728             :         (#x7f3 . ?ς)
     729             :         (#x7f4 . ?τ)
     730             :         (#x7f5 . ?υ)
     731             :         (#x7f6 . ?φ)
     732             :         (#x7f7 . ?χ)
     733             :         (#x7f8 . ?ψ)
     734             :         (#x7f9 . ?ω)
     735             :          ;; Technical
     736             :         (#x8a1 . ?⎷)
     737             :         (#x8a2 . ?┌)
     738             :         (#x8a3 . ?─)
     739             :         (#x8a4 . ?⌠)
     740             :         (#x8a5 . ?⌡)
     741             :         (#x8a6 . ?│)
     742             :         (#x8a7 . ?⎡)
     743             :         (#x8a8 . ?⎣)
     744             :         (#x8a9 . ?⎤)
     745             :         (#x8aa . ?⎦)
     746             :         (#x8ab . ?⎛)
     747             :         (#x8ac . ?⎝)
     748             :         (#x8ad . ?⎞)
     749             :         (#x8ae . ?⎠)
     750             :         (#x8af . ?⎨)
     751             :         (#x8b0 . ?⎬)
     752             :         (#x8bc . ?≤)
     753             :         (#x8bd . ?≠)
     754             :         (#x8be . ?≥)
     755             :         (#x8bf . ?∫)
     756             :         (#x8c0 . ?∴)
     757             :         (#x8c1 . ?∝)
     758             :         (#x8c2 . ?∞)
     759             :         (#x8c5 . ?∇)
     760             :         (#x8c8 . ?∼)
     761             :         (#x8c9 . ?≃)
     762             :         (#x8cd . ?⇔)
     763             :         (#x8ce . ?⇒)
     764             :         (#x8cf . ?≡)
     765             :         (#x8d6 . ?√)
     766             :         (#x8da . ?⊂)
     767             :         (#x8db . ?⊃)
     768             :         (#x8dc . ?∩)
     769             :         (#x8dd . ?∪)
     770             :         (#x8de . ?∧)
     771             :         (#x8df . ?∨)
     772             :         (#x8ef . ?∂)
     773             :         (#x8f6 . ?ƒ)
     774             :         (#x8fb . ?←)
     775             :         (#x8fc . ?↑)
     776             :         (#x8fd . ?→)
     777             :         (#x8fe . ?↓)
     778             :         ;; Special
     779             :         (#x9e0 . ?◆)
     780             :         (#x9e1 . ?▒)
     781             :         (#x9e2 . ?␉)
     782             :         (#x9e3 . ?␌)
     783             :         (#x9e4 . ?␍)
     784             :         (#x9e5 . ?␊)
     785             :         (#x9e8 . ?␤)
     786             :         (#x9e9 . ?␋)
     787             :         (#x9ea . ?┘)
     788             :         (#x9eb . ?┐)
     789             :         (#x9ec . ?┌)
     790             :         (#x9ed . ?└)
     791             :         (#x9ee . ?┼)
     792             :         (#x9ef . ?⎺)
     793             :         (#x9f0 . ?⎻)
     794             :         (#x9f1 . ?─)
     795             :         (#x9f2 . ?⎼)
     796             :         (#x9f3 . ?⎽)
     797             :         (#x9f4 . ?├)
     798             :         (#x9f5 . ?┤)
     799             :         (#x9f6 . ?┴)
     800             :         (#x9f7 . ?┬)
     801             :         (#x9f8 . ?│)
     802             :         ;; Publishing
     803             :         (#xaa1 . ? )
     804             :         (#xaa2 . ? )
     805             :         (#xaa3 . ? )
     806             :         (#xaa4 . ? )
     807             :         (#xaa5 . ? )
     808             :         (#xaa6 . ? )
     809             :         (#xaa7 . ? )
     810             :         (#xaa8 . ? )
     811             :         (#xaa9 . ?—)
     812             :         (#xaaa . ?–)
     813             :         (#xaae . ?…)
     814             :         (#xaaf . ?‥)
     815             :         (#xab0 . ?⅓)
     816             :         (#xab1 . ?⅔)
     817             :         (#xab2 . ?⅕)
     818             :         (#xab3 . ?⅖)
     819             :         (#xab4 . ?⅗)
     820             :         (#xab5 . ?⅘)
     821             :         (#xab6 . ?⅙)
     822             :         (#xab7 . ?⅚)
     823             :         (#xab8 . ?℅)
     824             :         (#xabb . ?‒)
     825             :         (#xabc . ?〈)
     826             :         (#xabe . ?〉)
     827             :         (#xac3 . ?⅛)
     828             :         (#xac4 . ?⅜)
     829             :         (#xac5 . ?⅝)
     830             :         (#xac6 . ?⅞)
     831             :         (#xac9 . ?™)
     832             :         (#xaca . ?☓)
     833             :         (#xacc . ?◁)
     834             :         (#xacd . ?▷)
     835             :         (#xace . ?○)
     836             :         (#xacf . ?▯)
     837             :         (#xad0 . ?‘)
     838             :         (#xad1 . ?’)
     839             :         (#xad2 . ?“)
     840             :         (#xad3 . ?”)
     841             :         (#xad4 . ?℞)
     842             :         (#xad6 . ?′)
     843             :         (#xad7 . ?″)
     844             :         (#xad9 . ?✝)
     845             :         (#xadb . ?▬)
     846             :         (#xadc . ?◀)
     847             :         (#xadd . ?▶)
     848             :         (#xade . ?●)
     849             :         (#xadf . ?▮)
     850             :         (#xae0 . ?◦)
     851             :         (#xae1 . ?▫)
     852             :         (#xae2 . ?▭)
     853             :         (#xae3 . ?△)
     854             :         (#xae4 . ?▽)
     855             :         (#xae5 . ?☆)
     856             :         (#xae6 . ?•)
     857             :         (#xae7 . ?▪)
     858             :         (#xae8 . ?▲)
     859             :         (#xae9 . ?▼)
     860             :         (#xaea . ?☜)
     861             :         (#xaeb . ?☞)
     862             :         (#xaec . ?♣)
     863             :         (#xaed . ?♦)
     864             :         (#xaee . ?♥)
     865             :         (#xaf0 . ?✠)
     866             :         (#xaf1 . ?†)
     867             :         (#xaf2 . ?‡)
     868             :         (#xaf3 . ?✓)
     869             :         (#xaf4 . ?✗)
     870             :         (#xaf5 . ?♯)
     871             :         (#xaf6 . ?♭)
     872             :         (#xaf7 . ?♂)
     873             :         (#xaf8 . ?♀)
     874             :         (#xaf9 . ?☎)
     875             :         (#xafa . ?⌕)
     876             :         (#xafb . ?℗)
     877             :         (#xafc . ?‸)
     878             :         (#xafd . ?‚)
     879             :         (#xafe . ?„)
     880             :         ;; APL
     881             :         (#xba3 . ?<)
     882             :         (#xba6 . ?>)
     883             :         (#xba8 . ?∨)
     884             :         (#xba9 . ?∧)
     885             :         (#xbc0 . ?¯)
     886             :         (#xbc2 . ?⊥)
     887             :         (#xbc3 . ?∩)
     888             :         (#xbc4 . ?⌊)
     889             :         (#xbc6 . ?_)
     890             :         (#xbca . ?∘)
     891             :         (#xbcc . ?⎕)
     892             :         (#xbce . ?⊤)
     893             :         (#xbcf . ?○)
     894             :         (#xbd3 . ?⌈)
     895             :         (#xbd6 . ?∪)
     896             :         (#xbd8 . ?⊃)
     897             :         (#xbda . ?⊂)
     898             :         (#xbdc . ?⊢)
     899             :         (#xbfc . ?⊣)
     900             :         ;; Hebrew
     901             :         (#xcdf . ?‗)
     902             :         (#xce0 . ?א)
     903             :         (#xce1 . ?ב)
     904             :         (#xce2 . ?ג)
     905             :         (#xce3 . ?ד)
     906             :         (#xce4 . ?ה)
     907             :         (#xce5 . ?ו)
     908             :         (#xce6 . ?ז)
     909             :         (#xce7 . ?ח)
     910             :         (#xce8 . ?ט)
     911             :         (#xce9 . ?י)
     912             :         (#xcea . ?ך)
     913             :         (#xceb . ?כ)
     914             :         (#xcec . ?ל)
     915             :         (#xced . ?ם)
     916             :         (#xcee . ?מ)
     917             :         (#xcef . ?ן)
     918             :         (#xcf0 . ?נ)
     919             :         (#xcf1 . ?ס)
     920             :         (#xcf2 . ?ע)
     921             :         (#xcf3 . ?ף)
     922             :         (#xcf4 . ?פ)
     923             :         (#xcf5 . ?ץ)
     924             :         (#xcf6 . ?צ)
     925             :         (#xcf7 . ?ק)
     926             :         (#xcf8 . ?ר)
     927             :         (#xcf9 . ?ש)
     928             :         (#xcfa . ?ת)
     929             :         ;; Thai
     930             :         (#xda1 . ?ก)
     931             :         (#xda2 . ?ข)
     932             :         (#xda3 . ?ฃ)
     933             :         (#xda4 . ?ค)
     934             :         (#xda5 . ?ฅ)
     935             :         (#xda6 . ?ฆ)
     936             :         (#xda7 . ?ง)
     937             :         (#xda8 . ?จ)
     938             :         (#xda9 . ?ฉ)
     939             :         (#xdaa . ?ช)
     940             :         (#xdab . ?ซ)
     941             :         (#xdac . ?ฌ)
     942             :         (#xdad . ?ญ)
     943             :         (#xdae . ?ฎ)
     944             :         (#xdaf . ?ฏ)
     945             :         (#xdb0 . ?ฐ)
     946             :         (#xdb1 . ?ฑ)
     947             :         (#xdb2 . ?ฒ)
     948             :         (#xdb3 . ?ณ)
     949             :         (#xdb4 . ?ด)
     950             :         (#xdb5 . ?ต)
     951             :         (#xdb6 . ?ถ)
     952             :         (#xdb7 . ?ท)
     953             :         (#xdb8 . ?ธ)
     954             :         (#xdb9 . ?น)
     955             :         (#xdba . ?บ)
     956             :         (#xdbb . ?ป)
     957             :         (#xdbc . ?ผ)
     958             :         (#xdbd . ?ฝ)
     959             :         (#xdbe . ?พ)
     960             :         (#xdbf . ?ฟ)
     961             :         (#xdc0 . ?ภ)
     962             :         (#xdc1 . ?ม)
     963             :         (#xdc2 . ?ย)
     964             :         (#xdc3 . ?ร)
     965             :         (#xdc4 . ?ฤ)
     966             :         (#xdc5 . ?ล)
     967             :         (#xdc6 . ?ฦ)
     968             :         (#xdc7 . ?ว)
     969             :         (#xdc8 . ?ศ)
     970             :         (#xdc9 . ?ษ)
     971             :         (#xdca . ?ส)
     972             :         (#xdcb . ?ห)
     973             :         (#xdcc . ?ฬ)
     974             :         (#xdcd . ?อ)
     975             :         (#xdce . ?ฮ)
     976             :         (#xdcf . ?ฯ)
     977             :         (#xdd0 . ?ะ)
     978             :         (#xdd1 . ?ั)
     979             :         (#xdd2 . ?า)
     980             :         (#xdd3 . ?ำ)
     981             :         (#xdd4 . ?ิ)
     982             :         (#xdd5 . ?ี)
     983             :         (#xdd6 . ?ึ)
     984             :         (#xdd7 . ?ื)
     985             :         (#xdd8 . ?ุ)
     986             :         (#xdd9 . ?ู)
     987             :         (#xdda . ?ฺ)
     988             :         (#xddf . ?฿)
     989             :         (#xde0 . ?เ)
     990             :         (#xde1 . ?แ)
     991             :         (#xde2 . ?โ)
     992             :         (#xde3 . ?ใ)
     993             :         (#xde4 . ?ไ)
     994             :         (#xde5 . ?ๅ)
     995             :         (#xde6 . ?ๆ)
     996             :         (#xde7 . ?็)
     997             :         (#xde8 . ?่)
     998             :         (#xde9 . ?้)
     999             :         (#xdea . ?๊)
    1000             :         (#xdeb . ?๋)
    1001             :         (#xdec . ?์)
    1002             :         (#xded . ?ํ)
    1003             :         (#xdf0 . ?๐)
    1004             :         (#xdf1 . ?๑)
    1005             :         (#xdf2 . ?๒)
    1006             :         (#xdf3 . ?๓)
    1007             :         (#xdf4 . ?๔)
    1008             :         (#xdf5 . ?๕)
    1009             :         (#xdf6 . ?๖)
    1010             :         (#xdf7 . ?๗)
    1011             :         (#xdf8 . ?๘)
    1012             :         (#xdf9 . ?๙)
    1013             :         ;; Korean
    1014             :         (#xea1 . ?ㄱ)
    1015             :         (#xea2 . ?ㄲ)
    1016             :         (#xea3 . ?ㄳ)
    1017             :         (#xea4 . ?ㄴ)
    1018             :         (#xea5 . ?ㄵ)
    1019             :         (#xea6 . ?ㄶ)
    1020             :         (#xea7 . ?ㄷ)
    1021             :         (#xea8 . ?ㄸ)
    1022             :         (#xea9 . ?ㄹ)
    1023             :         (#xeaa . ?ㄺ)
    1024             :         (#xeab . ?ㄻ)
    1025             :         (#xeac . ?ㄼ)
    1026             :         (#xead . ?ㄽ)
    1027             :         (#xeae . ?ㄾ)
    1028             :         (#xeaf . ?ㄿ)
    1029             :         (#xeb0 . ?ㅀ)
    1030             :         (#xeb1 . ?ㅁ)
    1031             :         (#xeb2 . ?ㅂ)
    1032             :         (#xeb3 . ?ㅃ)
    1033             :         (#xeb4 . ?ㅄ)
    1034             :         (#xeb5 . ?ㅅ)
    1035             :         (#xeb6 . ?ㅆ)
    1036             :         (#xeb7 . ?ㅇ)
    1037             :         (#xeb8 . ?ㅈ)
    1038             :         (#xeb9 . ?ㅉ)
    1039             :         (#xeba . ?ㅊ)
    1040             :         (#xebb . ?ㅋ)
    1041             :         (#xebc . ?ㅌ)
    1042             :         (#xebd . ?ㅍ)
    1043             :         (#xebe . ?ㅎ)
    1044             :         (#xebf . ?ㅏ)
    1045             :         (#xec0 . ?ㅐ)
    1046             :         (#xec1 . ?ㅑ)
    1047             :         (#xec2 . ?ㅒ)
    1048             :         (#xec3 . ?ㅓ)
    1049             :         (#xec4 . ?ㅔ)
    1050             :         (#xec5 . ?ㅕ)
    1051             :         (#xec6 . ?ㅖ)
    1052             :         (#xec7 . ?ㅗ)
    1053             :         (#xec8 . ?ㅘ)
    1054             :         (#xec9 . ?ㅙ)
    1055             :         (#xeca . ?ㅚ)
    1056             :         (#xecb . ?ㅛ)
    1057             :         (#xecc . ?ㅜ)
    1058             :         (#xecd . ?ㅝ)
    1059             :         (#xece . ?ㅞ)
    1060             :         (#xecf . ?ㅟ)
    1061             :         (#xed0 . ?ㅠ)
    1062             :         (#xed1 . ?ㅡ)
    1063             :         (#xed2 . ?ㅢ)
    1064             :         (#xed3 . ?ㅣ)
    1065             :         (#xed4 . ?ᆨ)
    1066             :         (#xed5 . ?ᆩ)
    1067             :         (#xed6 . ?ᆪ)
    1068             :         (#xed7 . ?ᆫ)
    1069             :         (#xed8 . ?ᆬ)
    1070             :         (#xed9 . ?ᆭ)
    1071             :         (#xeda . ?ᆮ)
    1072             :         (#xedb . ?ᆯ)
    1073             :         (#xedc . ?ᆰ)
    1074             :         (#xedd . ?ᆱ)
    1075             :         (#xede . ?ᆲ)
    1076             :         (#xedf . ?ᆳ)
    1077             :         (#xee0 . ?ᆴ)
    1078             :         (#xee1 . ?ᆵ)
    1079             :         (#xee2 . ?ᆶ)
    1080             :         (#xee3 . ?ᆷ)
    1081             :         (#xee4 . ?ᆸ)
    1082             :         (#xee5 . ?ᆹ)
    1083             :         (#xee6 . ?ᆺ)
    1084             :         (#xee7 . ?ᆻ)
    1085             :         (#xee8 . ?ᆼ)
    1086             :         (#xee9 . ?ᆽ)
    1087             :         (#xeea . ?ᆾ)
    1088             :         (#xeeb . ?ᆿ)
    1089             :         (#xeec . ?ᇀ)
    1090             :         (#xeed . ?ᇁ)
    1091             :         (#xeee . ?ᇂ)
    1092             :         (#xeef . ?ㅭ)
    1093             :         (#xef0 . ?ㅱ)
    1094             :         (#xef1 . ?ㅸ)
    1095             :         (#xef2 . ?ㅿ)
    1096             :         (#xef3 . ?ㆁ)
    1097             :         (#xef4 . ?ㆄ)
    1098             :         (#xef5 . ?ㆆ)
    1099             :         (#xef6 . ?ㆍ)
    1100             :         (#xef7 . ?ㆎ)
    1101             :         (#xef8 . ?ᇫ)
    1102             :         (#xef9 . ?ᇰ)
    1103             :         (#xefa . ?ᇹ)
    1104             :         (#xeff . ?₩)
    1105             :         ;; Latin-5
    1106             :         ;; Latin-6
    1107             :         ;; Latin-7
    1108             :         ;; Latin-8
    1109             :         ;; Latin-9
    1110             :         (#x13bc . ?Œ)
    1111             :         (#x13bd . ?œ)
    1112             :         (#x13be . ?Ÿ)
    1113             :         ;; Currency
    1114             :         (#x20a0 . ?₠)
    1115             :         (#x20a1 . ?₡)
    1116             :         (#x20a2 . ?₢)
    1117             :         (#x20a3 . ?₣)
    1118             :         (#x20a4 . ?₤)
    1119             :         (#x20a5 . ?₥)
    1120             :         (#x20a6 . ?₦)
    1121             :         (#x20a7 . ?₧)
    1122             :         (#x20a8 . ?₨)
    1123             :         (#x20aa . ?₪)
    1124             :         (#x20ab . ?₫)
    1125             :         (#x20ac . ?€)))
    1126             :   (puthash (car pair) (cdr pair) x-keysym-table))
    1127             : 
    1128             : ;; The following keysym codes for graphics are listed in the document
    1129             : ;; as not having unicodes available:
    1130             : 
    1131             : ;; #x08b1       TOP LEFT SUMMATION      Technical
    1132             : ;; #x08b2       BOTTOM LEFT SUMMATION   Technical
    1133             : ;; #x08b3       TOP VERTICAL SUMMATION CONNECTOR        Technical
    1134             : ;; #x08b4       BOTTOM VERTICAL SUMMATION CONNECTOR     Technical
    1135             : ;; #x08b5       TOP RIGHT SUMMATION     Technical
    1136             : ;; #x08b6       BOTTOM RIGHT SUMMATION  Technical
    1137             : ;; #x08b7       RIGHT MIDDLE SUMMATION  Technical
    1138             : ;; #x0aac       SIGNIFICANT BLANK SYMBOL        Publish
    1139             : ;; #x0abd       DECIMAL POINT   Publish
    1140             : ;; #x0abf       MARKER  Publish
    1141             : ;; #x0acb       TRADEMARK SIGN IN CIRCLE        Publish
    1142             : ;; #x0ada       HEXAGRAM        Publish
    1143             : ;; #x0aff       CURSOR  Publish
    1144             : ;; #x0dde       THAI MAIHANAKAT Thai
    1145             : 
    1146             : 
    1147             : ;;;; Selections
    1148             : 
    1149             : (define-obsolete-function-alias 'x-cut-buffer-or-selection-value
    1150             :   'x-selection-value "24.1")
    1151             : 
    1152             : ;; Arrange for the kill and yank functions to set and check the clipboard.
    1153             : 
    1154             : (defun x-clipboard-yank ()
    1155             :   "Insert the clipboard contents, or the last stretch of killed text."
    1156             :   (declare (obsolete clipboard-yank "25.1"))
    1157             :   (interactive "*")
    1158           0 :   (let ((clipboard-text (gui--selection-value-internal 'CLIPBOARD))
    1159             :         (select-enable-clipboard t))
    1160           0 :     (if (and clipboard-text (> (length clipboard-text) 0))
    1161           0 :         (kill-new clipboard-text))
    1162           0 :     (yank)))
    1163             : 
    1164             : (declare-function accelerate-menu "xmenu.c" (&optional frame) t)
    1165             : 
    1166             : (defun x-menu-bar-open (&optional frame)
    1167             :   "Open the menu bar if it is shown.
    1168             : `popup-menu' is used if it is off."
    1169             :   (interactive "i")
    1170           0 :   (cond
    1171           0 :    ((and (not (zerop (or (frame-parameter nil 'menu-bar-lines) 0)))
    1172           0 :          (fboundp 'accelerate-menu))
    1173           0 :     (accelerate-menu frame))
    1174             :    (t
    1175           0 :     (popup-menu (mouse-menu-bar-map) last-nonmenu-event))))
    1176             : 
    1177             : 
    1178             : ;;; Window system initialization.
    1179             : 
    1180             : (defun x-win-suspend-error ()
    1181             :   "Report an error when a suspend is attempted.
    1182             : This returns an error if any Emacs frames are X frames."
    1183             :   ;; Don't allow suspending if any of the frames are X frames.
    1184           0 :   (if (memq 'x (mapcar #'window-system (frame-list)))
    1185           0 :       (error "Cannot suspend Emacs while an X GUI frame exists")))
    1186             : 
    1187             : (defvar x-initialized nil
    1188             :   "Non-nil if the X window system has been initialized.")
    1189             : 
    1190             : (declare-function x-open-connection "xfns.c"
    1191             :                   (display &optional xrm-string must-succeed))
    1192             : (declare-function x-server-max-request-size "xfns.c" (&optional terminal))
    1193             : (declare-function x-get-resource "frame.c"
    1194             :                   (attribute class &optional component subclass))
    1195             : (declare-function x-parse-geometry "frame.c" (string))
    1196             : (defvar x-resource-name)
    1197             : (defvar x-display-name)
    1198             : (defvar x-command-line-resources)
    1199             : 
    1200             : (cl-defmethod window-system-initialization (&context (window-system x)
    1201             :                                             &optional display)
    1202             :   "Initialize Emacs for X frames and open the first connection to an X server."
    1203           0 :   (cl-assert (not x-initialized))
    1204             : 
    1205             :   ;; Make sure we have a valid resource name.
    1206           0 :   (or (stringp x-resource-name)
    1207           0 :       (let (i)
    1208           0 :         (setq x-resource-name (invocation-name))
    1209             : 
    1210             :         ;; Change any . or * characters in x-resource-name to hyphens,
    1211             :         ;; so as not to choke when we use it in X resource queries.
    1212           0 :         (while (setq i (string-match "[.*]" x-resource-name))
    1213           0 :           (aset x-resource-name i ?-))))
    1214             : 
    1215           0 :   (x-open-connection (or display
    1216           0 :                          (setq x-display-name (or (getenv "DISPLAY" (selected-frame))
    1217           0 :                                                   (getenv "DISPLAY"))))
    1218           0 :                      x-command-line-resources
    1219             :                      ;; Exit Emacs with fatal error if this fails and we
    1220             :                      ;; are the initial display.
    1221           0 :                      (eq initial-window-system 'x))
    1222             : 
    1223             :   ;; Create the default fontset.
    1224           0 :   (create-default-fontset)
    1225             : 
    1226             :   ;; Create the standard fontset.
    1227           0 :   (condition-case err
    1228           0 :         (create-fontset-from-fontset-spec standard-fontset-spec t)
    1229           0 :     (error (display-warning
    1230             :             'initialization
    1231           0 :             (format "Creation of the standard fontset failed: %s" err)
    1232           0 :             :error)))
    1233             : 
    1234             :   ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1, ...).
    1235           0 :   (create-fontset-from-x-resource)
    1236             : 
    1237             :   ;; Set scroll bar mode to right if set by X resources. Default is left.
    1238           0 :   (if (equal (x-get-resource "verticalScrollBars" "ScrollBars") "right")
    1239           0 :       (customize-set-variable 'scroll-bar-mode 'right))
    1240             : 
    1241             :   ;; Apply a geometry resource to the initial frame.  Put it at the end
    1242             :   ;; of the alist, so that anything specified on the command line takes
    1243             :   ;; precedence.
    1244           0 :   (let* ((res-geometry (x-get-resource "geometry" "Geometry"))
    1245             :          parsed)
    1246           0 :     (if res-geometry
    1247           0 :         (progn
    1248           0 :           (setq parsed (x-parse-geometry res-geometry))
    1249             :           ;; If the resource specifies a position,
    1250             :           ;; call the position and size "user-specified".
    1251           0 :           (if (or (assq 'top parsed) (assq 'left parsed))
    1252           0 :               (setq parsed (cons '(user-position . t)
    1253           0 :                                  (cons '(user-size . t) parsed))))
    1254             :           ;; All geometry parms apply to the initial frame.
    1255           0 :           (setq initial-frame-alist (append initial-frame-alist parsed))
    1256             :           ;; The size parms apply to all frames.  Don't set it if there are
    1257             :           ;; sizes there already (from command line).
    1258           0 :           (if (and (assq 'height parsed)
    1259           0 :                    (not (assq 'height default-frame-alist)))
    1260           0 :               (setq default-frame-alist
    1261           0 :                     (cons (cons 'height (cdr (assq 'height parsed)))
    1262           0 :                           default-frame-alist)))
    1263           0 :           (if (and (assq 'width parsed)
    1264           0 :                    (not (assq 'width default-frame-alist)))
    1265           0 :               (setq default-frame-alist
    1266           0 :                     (cons (cons 'width (cdr (assq 'width parsed)))
    1267           0 :                           default-frame-alist))))))
    1268             : 
    1269             :   ;; Check the reverseVideo resource.
    1270           0 :   (let ((case-fold-search t))
    1271           0 :     (let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
    1272           0 :       (if (and rv
    1273           0 :                (string-match "^\\(true\\|yes\\|on\\)$" rv))
    1274           0 :           (setq default-frame-alist
    1275           0 :                 (cons '(reverse . t) default-frame-alist)))))
    1276             : 
    1277             :   ;; Set x-selection-timeout, measured in milliseconds.
    1278           0 :   (let ((res-selection-timeout (x-get-resource "selectionTimeout"
    1279           0 :                                                "SelectionTimeout")))
    1280           0 :     (setq x-selection-timeout
    1281           0 :           (if res-selection-timeout
    1282           0 :               (string-to-number res-selection-timeout)
    1283           0 :             5000)))
    1284             : 
    1285             :   ;; Don't let Emacs suspend under X.
    1286           0 :   (add-hook 'suspend-hook 'x-win-suspend-error)
    1287             : 
    1288             :   ;; During initialization, we defer sending size hints to the window
    1289             :   ;; manager, because that can induce a race condition:
    1290             :   ;; http://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00033.html
    1291             :   ;; Send the size hints once initialization is done.
    1292           0 :   (add-hook 'after-init-hook 'x-wm-set-size-hint)
    1293             : 
    1294             :   ;; Turn off window-splitting optimization; X is usually fast enough
    1295             :   ;; that this is only annoying.
    1296           0 :   (setq split-window-keep-point t)
    1297             : 
    1298             :   ;; Motif direct handling of f10 wasn't working right,
    1299             :   ;; So temporarily we've turned it off in lwlib-Xm.c
    1300             :   ;; and turned the Emacs f10 back on.
    1301             :   ;; ;; Motif normally handles f10 itself, so don't try to handle it a second time.
    1302             :   ;; (if (featurep 'motif)
    1303             :   ;;     (global-set-key [f10] 'ignore))
    1304             : 
    1305             :   ;; Enable CLIPBOARD copy/paste through menu bar commands.
    1306           0 :   (menu-bar-enable-clipboard)
    1307             : 
    1308             :   ;; ;; Override Paste so it looks at CLIPBOARD first.
    1309             :   ;; (define-key menu-bar-edit-menu [paste]
    1310             :   ;;   (append '(menu-item "Paste" x-clipboard-yank
    1311             :   ;;                    :enable (not buffer-read-only)
    1312             :   ;;                    :help "Paste (yank) text most recently cut/copied")
    1313             :   ;;        nil))
    1314             : 
    1315           0 :   (x-apply-session-resources)
    1316           0 :   (setq x-initialized t))
    1317             : 
    1318             : (declare-function x-own-selection-internal "xselect.c"
    1319             :                   (selection value &optional frame))
    1320             : (declare-function x-disown-selection-internal "xselect.c"
    1321             :                   (selection &optional time-object terminal))
    1322             : (declare-function x-selection-owner-p "xselect.c"
    1323             :                   (&optional selection terminal))
    1324             : (declare-function x-selection-exists-p "xselect.c"
    1325             :                   (&optional selection terminal))
    1326             : (declare-function x-get-selection-internal "xselect.c"
    1327             :                   (selection-symbol target-type &optional time-stamp terminal))
    1328             : 
    1329             : (add-to-list 'display-format-alist '("\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" . x))
    1330             : (cl-defmethod handle-args-function (args &context (window-system x))
    1331           0 :   (x-handle-args args))
    1332             : 
    1333             : (cl-defmethod frame-creation-function (params &context (window-system x))
    1334           0 :   (x-create-frame-with-faces params))
    1335             : 
    1336             : (cl-defmethod gui-backend-set-selection (selection value
    1337             :                                          &context (window-system x))
    1338           0 :   (if value (x-own-selection-internal selection value)
    1339           0 :     (x-disown-selection-internal selection)))
    1340             : 
    1341             : (cl-defmethod gui-backend-selection-owner-p (selection
    1342             :                                              &context (window-system x))
    1343           0 :   (x-selection-owner-p selection))
    1344             : 
    1345             : (cl-defmethod gui-backend-selection-exists-p (selection
    1346             :                                               &context (window-system x))
    1347           0 :   (x-selection-exists-p selection))
    1348             : 
    1349             : (cl-defmethod gui-backend-get-selection (selection-symbol target-type
    1350             :                                          &context (window-system x)
    1351             :                                          &optional time-stamp terminal)
    1352           0 :   (x-get-selection-internal selection-symbol target-type time-stamp terminal))
    1353             : 
    1354             : ;; Initiate drag and drop
    1355             : (add-hook 'after-make-frame-functions 'x-dnd-init-frame)
    1356             : (define-key special-event-map [drag-n-drop] 'x-dnd-handle-drag-n-drop-event)
    1357             : 
    1358             : (defcustom x-gtk-stock-map
    1359             :   (mapcar (lambda (arg)
    1360             :             (cons (purecopy (car arg)) (purecopy (cdr arg))))
    1361             :   '(
    1362             :     ("etc/images/new" . ("document-new" "gtk-new"))
    1363             :     ("etc/images/open" . ("document-open" "gtk-open"))
    1364             :     ("etc/images/diropen" . "n:system-file-manager")
    1365             :     ("etc/images/close" . ("window-close" "gtk-close"))
    1366             :     ("etc/images/save" . ("document-save" "gtk-save"))
    1367             :     ("etc/images/saveas" . ("document-save-as" "gtk-save-as"))
    1368             :     ("etc/images/undo" . ("edit-undo" "gtk-undo"))
    1369             :     ("etc/images/cut" . ("edit-cut" "gtk-cut"))
    1370             :     ("etc/images/copy" . ("edit-copy" "gtk-copy"))
    1371             :     ("etc/images/paste" . ("edit-paste" "gtk-paste"))
    1372             :     ("etc/images/search" . ("edit-find" "gtk-find"))
    1373             :     ("etc/images/print" . ("document-print" "gtk-print"))
    1374             :     ("etc/images/preferences" . ("preferences-system" "gtk-preferences"))
    1375             :     ("etc/images/help" . ("help-browser" "gtk-help"))
    1376             :     ("etc/images/left-arrow" . ("go-previous" "gtk-go-back"))
    1377             :     ("etc/images/right-arrow" . ("go-next" "gtk-go-forward"))
    1378             :     ("etc/images/home" . ("go-home" "gtk-home"))
    1379             :     ("etc/images/jump-to" . ("go-jump" "gtk-jump-to"))
    1380             :     ("etc/images/index" . "gtk-index")
    1381             :     ("etc/images/exit" . ("application-exit" "gtk-quit"))
    1382             :     ("etc/images/cancel" . "gtk-cancel")
    1383             :     ("etc/images/info" . ("dialog-information" "gtk-info"))
    1384             :     ("etc/images/bookmark_add" . "n:bookmark_add")
    1385             :     ;; Used in Gnus and/or MH-E:
    1386             :     ("etc/images/attach" . "gtk-attach")
    1387             :     ("etc/images/connect" . "gtk-connect")
    1388             :     ("etc/images/contact" . "gtk-contact")
    1389             :     ("etc/images/delete" . ("edit-delete" "gtk-delete"))
    1390             :     ("etc/images/describe" . ("document-properties" "gtk-properties"))
    1391             :     ("etc/images/disconnect" . "gtk-disconnect")
    1392             :     ;; ("etc/images/exit" . "gtk-exit")
    1393             :     ("etc/images/lock-broken" . "gtk-lock_broken")
    1394             :     ("etc/images/lock-ok" . "gtk-lock_ok")
    1395             :     ("etc/images/lock" . "gtk-lock")
    1396             :     ("etc/images/next-page" . "gtk-next-page")
    1397             :     ("etc/images/refresh" . ("view-refresh" "gtk-refresh"))
    1398             :     ("etc/images/sort-ascending" . ("view-sort-ascending" "gtk-sort-ascending"))
    1399             :     ("etc/images/sort-column-ascending" . "gtk-sort-column-ascending")
    1400             :     ("etc/images/sort-criteria" . "gtk-sort-criteria")
    1401             :     ("etc/images/sort-descending" . ("view-sort-descending"
    1402             :                                      "gtk-sort-descending"))
    1403             :     ("etc/images/sort-row-ascending" . "gtk-sort-row-ascending")
    1404             :     ("images/gnus/toggle-subscription" . "gtk-task-recurring")
    1405             :     ("images/mail/compose" . "gtk-mail-compose")
    1406             :     ("images/mail/copy" . "gtk-mail-copy")
    1407             :     ("images/mail/forward" . "gtk-mail-forward")
    1408             :     ("images/mail/inbox" . "gtk-inbox")
    1409             :     ("images/mail/move" . "gtk-mail-move")
    1410             :     ("images/mail/not-spam" . "gtk-not-spam")
    1411             :     ("images/mail/outbox" . "gtk-outbox")
    1412             :     ("images/mail/reply-all" . "gtk-mail-reply-to-all")
    1413             :     ("images/mail/reply" . "gtk-mail-reply")
    1414             :     ("images/mail/save-draft" . "gtk-mail-handling")
    1415             :     ("images/mail/send" . "gtk-mail-send")
    1416             :     ("images/mail/spam" . "gtk-spam")
    1417             :     ;; Used for GDB Graphical Interface
    1418             :     ("images/gud/break" . "gtk-no")
    1419             :     ("images/gud/recstart" . ("media-record" "gtk-media-record"))
    1420             :     ("images/gud/recstop" . ("media-playback-stop" "gtk-media-stop"))
    1421             :     ;; No themed versions available:
    1422             :     ;; mail/preview (combining stock_mail and stock_zoom)
    1423             :     ;; mail/save    (combining stock_mail, stock_save and stock_convert)
    1424             :     ))
    1425             :   "How icons for tool bars are mapped to Gtk+ stock items.
    1426             : Emacs must be compiled with the Gtk+ toolkit for this to have any effect.
    1427             : A value that begins with n: denotes a named icon instead of a stock icon."
    1428             :   :version "22.2"
    1429             :   :type '(choice (repeat
    1430             :                   (choice symbol
    1431             :                           (cons (string :tag "Emacs icon")
    1432             :                                 (choice (group (string :tag "Named")
    1433             :                                                (string :tag "Stock"))
    1434             :                                         (string :tag "Stock/named"))))))
    1435             :   :group 'x)
    1436             : 
    1437             : (defcustom icon-map-list '(x-gtk-stock-map)
    1438             :   "A list of alists that map icon file names to stock/named icons.
    1439             : The alists are searched in the order they appear.  The first match is used.
    1440             : The keys in the alists are file names without extension and with two directory
    1441             : components.  For example, to map /usr/share/emacs/22.1.1/etc/images/open.xpm
    1442             : to stock item gtk-open, use:
    1443             : 
    1444             :   (\"etc/images/open\" . \"gtk-open\")
    1445             : 
    1446             : Themes also have named icons.  To map to one of those, use n: before the name:
    1447             : 
    1448             :   (\"etc/images/diropen\" . \"n:system-file-manager\")
    1449             : 
    1450             : The list elements are either the symbol name for the alist or the
    1451             : alist itself.
    1452             : 
    1453             : If you don't want stock icons, set the variable to nil."
    1454             :   :version "22.2"
    1455             :   :type '(choice (const :tag "Don't use stock icons" nil)
    1456             :                  (repeat (choice symbol
    1457             :                                  (cons (string :tag "Emacs icon")
    1458             :                                        (string :tag "Stock/named")))))
    1459             :   :group 'x)
    1460             : 
    1461             : (defconst x-gtk-stock-cache (make-hash-table :weakness t :test 'equal))
    1462             : 
    1463             : (defun x-gtk-map-stock (file)
    1464             :   "Map icon with file name FILE to a Gtk+ stock name.
    1465             : This uses `icon-map-list' to map icon file names to stock icon names."
    1466           0 :   (when (stringp file)
    1467           0 :     (or (gethash file x-gtk-stock-cache)
    1468           0 :         (puthash
    1469           0 :          file
    1470           0 :          (save-match-data
    1471           0 :            (let* ((file-sans (file-name-sans-extension file))
    1472           0 :                   (key (and (string-match "/\\([^/]+/[^/]+/[^/]+$\\)"
    1473           0 :                                           file-sans)
    1474           0 :                             (match-string 1 file-sans)))
    1475           0 :                   (icon-map icon-map-list)
    1476             :                   elem value)
    1477           0 :              (while (and (null value) icon-map)
    1478           0 :                (setq elem (car icon-map)
    1479           0 :                      value (assoc-string (or key file-sans)
    1480           0 :                                          (if (symbolp elem)
    1481           0 :                                              (symbol-value elem)
    1482           0 :                                            elem))
    1483           0 :                      icon-map (cdr icon-map)))
    1484           0 :              (and value (cdr value))))
    1485           0 :          x-gtk-stock-cache))))
    1486             : 
    1487             : (global-set-key [XF86WakeUp] 'ignore)
    1488             : 
    1489             : (provide 'x-win)
    1490             : (provide 'term/x-win)
    1491             : 
    1492             : ;;; x-win.el ends here

Generated by: LCOV version 1.12