diff options
| author | Joakim Verona | 2011-07-25 10:54:22 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-25 10:54:22 +0200 |
| commit | 37d6e227b2e4460b36363e42a3de45c082233c74 (patch) | |
| tree | 99ce5c28b62bd068319ab2c24a97adf764c9a2e2 | |
| parent | b60646c64ead035bff3e5ba925f768f36964f661 (diff) | |
| parent | 0f0a88b94cce778a7903196b07a0d70657fb4dc0 (diff) | |
| download | emacs-37d6e227b2e4460b36363e42a3de45c082233c74.tar.gz emacs-37d6e227b2e4460b36363e42a3de45c082233c74.zip | |
upstream merge. cleanup
| -rw-r--r-- | README.xwidget | 1 | ||||
| -rw-r--r-- | doc/lispref/ChangeLog | 4 | ||||
| -rw-r--r-- | doc/lispref/display.texi | 130 | ||||
| -rw-r--r-- | leim/ChangeLog | 7 | ||||
| -rw-r--r-- | leim/quail/hebrew.el | 882 | ||||
| -rw-r--r-- | lisp/ChangeLog | 10 | ||||
| -rw-r--r-- | lisp/gnus/ChangeLog | 15 | ||||
| -rw-r--r-- | lisp/gnus/gnus-sum.el | 55 | ||||
| -rw-r--r-- | lisp/gnus/nnimap.el | 30 | ||||
| -rw-r--r-- | lisp/gnus/nnir.el | 11 | ||||
| -rw-r--r-- | lisp/image.el | 4 | ||||
| -rw-r--r-- | lisp/net/tramp-sh.el | 35 | ||||
| -rw-r--r-- | src/ChangeLog | 46 | ||||
| -rw-r--r-- | src/nsterm.m | 3 | ||||
| -rw-r--r-- | src/xdisp.c | 186 | ||||
| -rw-r--r-- | src/xfaces.c | 3 | ||||
| -rw-r--r-- | src/xfns.c | 2 | ||||
| -rw-r--r-- | src/xml.c | 5 | ||||
| -rw-r--r-- | src/xwidget.c | 59 |
19 files changed, 1310 insertions, 178 deletions
diff --git a/README.xwidget b/README.xwidget index bb058f3b73c..84b47b7a3b4 100644 --- a/README.xwidget +++ b/README.xwidget | |||
| @@ -26,6 +26,7 @@ necessary to support the Emacs window paradigm. | |||
| 26 | 26 | ||
| 27 | ** building | 27 | ** building |
| 28 | bzr co bzr+ssh://bzr.savannah.gnu.org/emacs/xwidget/ | 28 | bzr co bzr+ssh://bzr.savannah.gnu.org/emacs/xwidget/ |
| 29 | #the below compiler flags shouldn't be strictly necessary | ||
| 29 | export CFLAGS=" -g -DGLYPH_DEBUG=1" | 30 | export CFLAGS=" -g -DGLYPH_DEBUG=1" |
| 30 | ./configure --with-x-toolkit=gtk3 --with-xwidgets | 31 | ./configure --with-x-toolkit=gtk3 --with-xwidgets |
| 31 | make -j4 | 32 | make -j4 |
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 091a6ffda59..d59bbf87bce 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2011-07-23 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * display.texi (Bidirectional Display): New section. | ||
| 4 | |||
| 1 | 2011-07-16 Lars Magne Ingebrigtsen <larsi@gnus.org> | 5 | 2011-07-16 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 2 | Tim Cross <theophilusx@gmail.com> (tiny change) | 6 | Tim Cross <theophilusx@gmail.com> (tiny change) |
| 3 | Glenn Morris <rgm@gnu.org> | 7 | Glenn Morris <rgm@gnu.org> |
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index d8be424a69f..903232bcbda 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi | |||
| @@ -34,6 +34,8 @@ that Emacs presents to the user. | |||
| 34 | * Display Tables:: How to specify other conventions. | 34 | * Display Tables:: How to specify other conventions. |
| 35 | * Beeping:: Audible signal to the user. | 35 | * Beeping:: Audible signal to the user. |
| 36 | * Window Systems:: Which window system is being used. | 36 | * Window Systems:: Which window system is being used. |
| 37 | * Bidirectional Display:: Display of bidirectional scripts, such as | ||
| 38 | Arabic and Farsi. | ||
| 37 | @end menu | 39 | @end menu |
| 38 | 40 | ||
| 39 | @node Refresh Screen | 41 | @node Refresh Screen |
| @@ -5966,3 +5968,131 @@ This hook is used for internal purposes: setting up communication with | |||
| 5966 | the window system, and creating the initial window. Users should not | 5968 | the window system, and creating the initial window. Users should not |
| 5967 | interfere with it. | 5969 | interfere with it. |
| 5968 | @end defvar | 5970 | @end defvar |
| 5971 | |||
| 5972 | @node Bidirectional Display | ||
| 5973 | @section Bidirectional Display | ||
| 5974 | @cindex bidirectional display | ||
| 5975 | @cindex right-to-left text | ||
| 5976 | |||
| 5977 | Emacs can display text written in scripts, such as Arabic, Farsi, | ||
| 5978 | and Hebrew, whose natural ordering of horizontal text for display is | ||
| 5979 | from right to left. However, digits and Latin text embedded in these | ||
| 5980 | scripts are still displayed left to right. It is also not uncommon to | ||
| 5981 | have small portions of text in Arabic or Hebrew embedded in otherwise | ||
| 5982 | Latin document, e.g., as comments and strings in a program source | ||
| 5983 | file. Likewise, small portions of Latin text can be embedded in an | ||
| 5984 | Arabic or Farsi document. For these reasons, text that uses these | ||
| 5985 | scripts is actually @dfn{bidirectional}: a mixture of runs of | ||
| 5986 | left-to-right and right-to-left characters. | ||
| 5987 | |||
| 5988 | This section describes the facilities and options provided by Emacs | ||
| 5989 | for editing and displaying bidirectional text. | ||
| 5990 | |||
| 5991 | @cindex logical order | ||
| 5992 | @cindex visual order | ||
| 5993 | @cindex unicode bidirectional algorithm | ||
| 5994 | Emacs stores right-to-left and bidirectional text in the so-called | ||
| 5995 | @dfn{logical} (or @dfn{reading}) order: the buffer or string position | ||
| 5996 | of the first character you read precedes that of the next character. | ||
| 5997 | Reordering of bidirectional text into the @dfn{visual} order happens | ||
| 5998 | at display time. As result, character positions no longer increase | ||
| 5999 | monotonically with their positions on display. Emacs implements the | ||
| 6000 | Unicode Bidirectional Algorithm (a.k.a.@: @acronym{UBA}) described in | ||
| 6001 | the Unicode Standard Annex #9, for reordering of bidirectional text | ||
| 6002 | for display. Reordering of bidirectional text for display in Emacs is | ||
| 6003 | a ``Full bidirectionality'' class implementation of the @acronym{UBA}. | ||
| 6004 | |||
| 6005 | @defvar bidi-display-reordering | ||
| 6006 | The buffer-local variable @code{bidi-display-reordering} controls | ||
| 6007 | whether text in the buffer is reordered for display. If its value is | ||
| 6008 | non-@code{nil}, Emacs reorders characters that have right-to-left | ||
| 6009 | directionality when they are displayed. The default value is | ||
| 6010 | @code{nil}. Text in overlay strings (@pxref{Overlay | ||
| 6011 | Properties,,before-string}), display strings (@pxref{Overlay | ||
| 6012 | Properties,,display}), and @code{display} text properties | ||
| 6013 | (@pxref{Display Property}) is also reordered if the buffer whose text | ||
| 6014 | includes these strings is reordered for display. Turning off | ||
| 6015 | @code{bidi-display-reordering} for a buffer turns off reordering of | ||
| 6016 | all the overlay and display strings in that buffer. | ||
| 6017 | |||
| 6018 | Reordering of strings that are unrelated to any buffer, such as text | ||
| 6019 | displayed on the mode line (@pxref{Mode Line Format}) or header line | ||
| 6020 | (@pxref{Header Lines}), is controlled by the default value of | ||
| 6021 | @code{bidi-display-reordering}. | ||
| 6022 | @end defvar | ||
| 6023 | |||
| 6024 | @cindex unibyte buffers, and bidi reordering | ||
| 6025 | Emacs does not reorder text in unibyte buffers, even if | ||
| 6026 | @code{bidi-display-reordering} is non-@code{nil} in such a buffer. | ||
| 6027 | This is because unibyte buffers contain raw bytes, not characters, and | ||
| 6028 | thus don't have bidirectional properties defined for them which are | ||
| 6029 | required for correct reordering. Therefore, to test whether text in a | ||
| 6030 | buffer will be reordered for display, it is not enough to test the | ||
| 6031 | value of @code{bidi-display-reordering} alone. The correct test is | ||
| 6032 | this: | ||
| 6033 | |||
| 6034 | @example | ||
| 6035 | (if (and enable-multibyte-characters | ||
| 6036 | bidi-display-reordering) | ||
| 6037 | ;; Buffer is being reordered for display | ||
| 6038 | ) | ||
| 6039 | @end example | ||
| 6040 | |||
| 6041 | In contrast to unibyte buffers, unibyte display and overlay strings | ||
| 6042 | @emph{are} reordered, if their parent buffer is reordered. This is | ||
| 6043 | because plain-@sc{ascii} strings are stored by Emacs as unibyte | ||
| 6044 | strings. If a unibyte display or overlay string includes | ||
| 6045 | non-@sc{ascii} characters, these characters are assumed to have | ||
| 6046 | left-to-right direction. | ||
| 6047 | |||
| 6048 | @cindex display properties, and bidi reordering of text | ||
| 6049 | Text covered by @code{display} text properties, by overlays with | ||
| 6050 | @code{display} properties whose value is a string, and by any other | ||
| 6051 | properties that replace buffer text, is treated as a single unit when | ||
| 6052 | it is reordered for display. That is, the entire chunk of text | ||
| 6053 | covered by these properties is reordered together. Moreover, the | ||
| 6054 | bidirectional properties of the characters in this chunk of text are | ||
| 6055 | ignored, and Emacs reorders them as if they were replaced with a | ||
| 6056 | single character @code{u+FFFC}, known as the @dfn{Object Replacement | ||
| 6057 | Character}. This means that placing a display property over a portion | ||
| 6058 | of text may change the way that the surrounding text is reordered for | ||
| 6059 | display. To prevent this unexpected effect, always place such | ||
| 6060 | properties on text whose directionality is identical with text that | ||
| 6061 | surrounds it. | ||
| 6062 | |||
| 6063 | @cindex base direction of a paragraph | ||
| 6064 | Each paragraph of bidirectional text can have its own @dfn{base | ||
| 6065 | direction}, either right-to-left or left-to-right. Text in | ||
| 6066 | left-to-right paragraphs is displayed beginning at the left margin of | ||
| 6067 | the window and is truncated or continued when it reaches the right | ||
| 6068 | margin. By contrast, display of text in right-to-left paragraphs | ||
| 6069 | begins at the right margin and is continued or truncated at the left | ||
| 6070 | margin. | ||
| 6071 | |||
| 6072 | @defvar bidi-paragraph-direction | ||
| 6073 | Emacs determines the base direction of each paragraph dynamically, | ||
| 6074 | based on the text at the beginning of the paragraph. The precise | ||
| 6075 | method of determining the base direction is specified by the | ||
| 6076 | @acronym{UBA}; in a nutshell, the first character in a paragraph that | ||
| 6077 | has an explicit directionality determines the base direction of the | ||
| 6078 | paragraph. However, sometimes a buffer may need to force a certain | ||
| 6079 | base direction for its paragraphs. For example, a buffer that visits | ||
| 6080 | a source code of a program should force all its paragraphs to be | ||
| 6081 | displayed left to right. The variable | ||
| 6082 | @code{bidi-paragraph-direction}, if non-@code{nil}, disables the | ||
| 6083 | dynamic determination of the base direction, and instead forces all | ||
| 6084 | paragraphs in the buffer to have the direction specified by its | ||
| 6085 | buffer-local value. The value can be either @code{right-to-left} or | ||
| 6086 | @code{left-to-right}. Any other value is interpreted as @code{nil}. | ||
| 6087 | @end defvar | ||
| 6088 | |||
| 6089 | @defun current-bidi-paragraph-direction &optional buffer | ||
| 6090 | This function returns the paragraph direction at point in the named | ||
| 6091 | @var{buffer}. The returned value is a symbol, either | ||
| 6092 | @code{left-to-right} or @code{right-to-left}. If @var{buffer} is | ||
| 6093 | omitted or @code{nil}, it defaults to the current buffer. If the | ||
| 6094 | buffer-local value of the variable @code{bidi-paragraph-direction} is | ||
| 6095 | non-@code{nil}, the returned value will be identical to that value; | ||
| 6096 | otherwise, the returned value reflects the paragraph direction | ||
| 6097 | determined dynamically by Emacs. | ||
| 6098 | @end defun | ||
diff --git a/leim/ChangeLog b/leim/ChangeLog index 6df1c507d02..5309671651b 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2011-07-23 Yair F <yair.f.lists@gmail.com> | ||
| 2 | |||
| 3 | * quail/hebrew.el ("hebrew"): Additional key mappings. | ||
| 4 | ("hebrew-new", "hebrew-lyx", "hebrew-full") | ||
| 5 | ("hebrew-biblical-tiro", "hebrew-biblical-sil", "yiddish-royal") | ||
| 6 | ("yiddish-keyman"): New input methods. | ||
| 7 | |||
| 1 | 2011-06-12 Andreas Schwab <schwab@linux-m68k.org> | 8 | 2011-06-12 Andreas Schwab <schwab@linux-m68k.org> |
| 2 | 9 | ||
| 3 | * SKK-DIC/SKK-JISYO.L: Add proper coding tag. | 10 | * SKK-DIC/SKK-JISYO.L: Add proper coding tag. |
diff --git a/leim/quail/hebrew.el b/leim/quail/hebrew.el index 828532040ee..7c7f6c6a8b5 100644 --- a/leim/quail/hebrew.el +++ b/leim/quail/hebrew.el | |||
| @@ -1,11 +1,14 @@ | |||
| 1 | ;;; hebrew.el --- Quail package for inputting Hebrew characters -*-coding: iso-2022-7bit;-*- | 1 | ;; hebrew.el --- Quail package for inputting Hebrew characters -*-coding: iso-2022-7bit;-*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, | 3 | ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, |
| 4 | ;; 2008, 2009, 2010, 2011 | 4 | ;; 2008, 2009, 2010, 2011 |
| 5 | ;; National Institute of Advanced Industrial Science and Technology (AIST) | 5 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
| 6 | ;; Registration Number H14PRO021 | 6 | ;; Registration Number H14PRO021 |
| 7 | 7 | ||
| 8 | ;; Keywords: mule, input method, Hebrew | 8 | ;; Many input methods in this file provided |
| 9 | ;; by Yair Friedman <yair.f.lists@gmail.com> | ||
| 10 | |||
| 11 | ;; Keywords: multilingual, input method, Hebrew | ||
| 9 | 12 | ||
| 10 | ;; This file is part of GNU Emacs. | 13 | ;; This file is part of GNU Emacs. |
| 11 | 14 | ||
| @@ -29,50 +32,851 @@ | |||
| 29 | (require 'quail) | 32 | (require 'quail) |
| 30 | 33 | ||
| 31 | (quail-define-package | 34 | (quail-define-package |
| 32 | "hebrew" "Hebrew" ",Hr(B" nil "Hebrew (ISO 8859-8) input method. | 35 | "hebrew" "Hebrew" ",Hr(B" nil "Hebrew SI-1452 input method. |
| 33 | 36 | ||
| 34 | Based on Hebrew typewriter keys. | 37 | Based on SI-1452 keyboard layout. |
| 35 | Hebrew letters are assigned to lowercases. | 38 | Only Hebrew-related characters are considered. |
| 39 | 'q' is used to switch levels instead of Alt-Gr. | ||
| 40 | Maqaaf ($,1,^(B) is mapped to '/,Ht(B'. | ||
| 36 | " nil t t t t nil nil nil nil nil t) | 41 | " nil t t t t nil nil nil nil nil t) |
| 37 | 42 | ||
| 38 | ;; 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+ ;~ | ||
| 39 | ;; /Q 'W ,Hw(BE ,Hx(BR ,H`(BT ,Hh(BY ,He(BU ,Ho(BI ,Hm(BO ,Ht(BP [{ ]} | ||
| 40 | ;; ,Hy(BA ,Hc(BS ,Hb(BD ,Hk(BF ,Hr(BG ,Hi(BH ,Hg(BJ ,Hl(BK ,Hj(BL ,Hs(B: ," \| | ||
| 41 | ;; ,Hf(BZ ,Hq(BX ,Ha(BC ,Hd(BV ,Hp(BB ,Hn(BN ,Hv(BM ,Hz(B< ,Hu(B> .? | ||
| 42 | ;; | ||
| 43 | |||
| 44 | (quail-define-rules | 43 | (quail-define-rules |
| 45 | ("`" ?\;) | 44 | ("`" ?\;) |
| 45 | ("w" ?\') | ||
| 46 | ("e" ?,Hw(B) ; Qof | ||
| 47 | ("r" ?,Hx(B) ; Resh | ||
| 48 | ("t" ?,H`(B) ; Alef | ||
| 49 | ("y" ?,Hh(B) ; Tet | ||
| 50 | ("u" ?,He(B) ; Vav | ||
| 51 | ("i" ?,Ho(B) ; Final Nun | ||
| 52 | ("o" ?,Hm(B) ; Final Mem | ||
| 53 | ("p" ?,Ht(B) ; Pe | ||
| 54 | ("[" ?\]) ; mirroring | ||
| 55 | ("]" ?\[) ; mirroring | ||
| 56 | ("a" ?,Hy(B) ; Shin | ||
| 57 | ("s" ?,Hc(B) ; Dalet | ||
| 58 | ("d" ?,Hb(B) ; Gimel | ||
| 59 | ("f" ?,Hk(B) ; Kaf | ||
| 60 | ("g" ?,Hr(B) ; Ayin | ||
| 61 | ("h" ?,Hi(B) ; Yod | ||
| 62 | ("j" ?,Hg(B) ; Het | ||
| 63 | ("k" ?,Hl(B) ; Lamed | ||
| 64 | ("l" ?,Hj(B) ; Final Kaf | ||
| 65 | (";" ?,Hs(B) ; Final Pe | ||
| 66 | ("'" ?,) | ||
| 67 | ("z" ?,Hf(B) ; Zayin | ||
| 68 | ("x" ?,Hq(B) ; Samekh | ||
| 69 | ("c" ?,Ha(B) ; Bet | ||
| 70 | ("v" ?,Hd(B) ; He | ||
| 71 | ("b" ?,Hp(B) ; Nun | ||
| 72 | ("n" ?,Hn(B) ; Mem | ||
| 73 | ("m" ?,Hv(B) ; Tsadi | ||
| 74 | ("," ?,Hz(B) ; Tav | ||
| 75 | ("." ?,Hu(B) ; Final Tsadi | ||
| 76 | ("/" ?.) ; Stop | ||
| 77 | ("(" ?\)) ; mirroring | ||
| 78 | (")" ?\() ; mirroring | ||
| 79 | ("{" ?}) ; mirroring | ||
| 80 | ("}" ?{) ; mirroring | ||
| 81 | ("<" ?>) ; mirroring | ||
| 82 | (">" ?<) ; mirroring | ||
| 83 | ("q`" ?$,1,P(B) ; Sheva | ||
| 84 | ("q1" ?$,1,Q(B) ; Hataf Segol | ||
| 85 | ("q2" ?$,1,R(B) ; Hataf Patah | ||
| 86 | ("q3" ?$,1,S(B) ; Hataf Qamats | ||
| 87 | ("q4" ?$,1,T(B) ; Hiriq | ||
| 88 | ("q5" ?$,1,U(B) ; Tsere | ||
| 89 | ("q6" ?$,1,V(B) ; Segol (Point) | ||
| 90 | ("q7" ?$,1,W(B) ; Patah | ||
| 91 | ("q8" ?$,1,X(B) ; Qamats | ||
| 92 | ("q9" ?$,1,b(B) ; Sin dot | ||
| 93 | ("q0" ?$,1,a(B) ; Shin dot | ||
| 94 | ("q-" ?$,1,Y(B) ; Holam | ||
| 95 | ("q=" ?$,1,\(B) ; Dagesh or Mapiq | ||
| 96 | ("q\\" ?$,1,[(B) ; Qubuts | ||
| 97 | ("qq" ?/) | ||
| 98 | ("qw" ?$,1-3(B) ; Geresh (Punct.) | ||
| 99 | ("qi" ?$,1-0(B) ; Yiddish Double Vav | ||
| 100 | ("qp" ?$,1,^(B) ; Maqaf | ||
| 101 | ("q[" ?$,1,_(B) ; Rafe | ||
| 102 | ("q]" ?$,1,](B) ; Meteg | ||
| 103 | ("qa" ?$,1tJ(B) ; New Sheqel sign | ||
| 104 | ("qh" ?$,1-2(B) ; Yiddish Double Yod | ||
| 105 | ("qj" ?$,1-1(B) ; Yiddish Vav Yod | ||
| 106 | ("q\"" ?$,1-4(B) ; Gershayim (Punct.) | ||
| 107 | ("q," ?\u200E) ; LRM | ||
| 108 | ("q." ?\u200F) ; RLM | ||
| 109 | ) | ||
| 110 | |||
| 111 | (quail-define-package | ||
| 112 | "hebrew-new" "Hebrew" ",Hr(B" nil "Hebrew SI-1452 new draft input method. | ||
| 113 | |||
| 114 | Based on latest draft of SI-1452 keyboard layout. | ||
| 115 | Only Hebrew-related characters are considered. | ||
| 116 | '`' is used to switch levels instead of Alt-Gr. | ||
| 117 | Geresh is mapped to '`k'. | ||
| 118 | " nil t t t t nil nil nil nil nil t) | ||
| 119 | |||
| 120 | (quail-define-rules | ||
| 46 | ("q" ?/) | 121 | ("q" ?/) |
| 122 | ("w" ?\') | ||
| 123 | ("e" ?,Hw(B) ; Qof | ||
| 124 | ("r" ?,Hx(B) ; Resh | ||
| 125 | ("t" ?,H`(B) ; Alef | ||
| 126 | ("y" ?,Hh(B) ; Tet | ||
| 127 | ("u" ?,He(B) ; Vav | ||
| 128 | ("i" ?,Ho(B) ; Final Nun | ||
| 129 | ("o" ?,Hm(B) ; Final Mem | ||
| 130 | ("p" ?,Ht(B) ; Pe | ||
| 131 | ("[" ?\]) ; mirroring | ||
| 132 | ("]" ?\[) ; mirroring | ||
| 133 | ("a" ?,Hy(B) ; Shin | ||
| 134 | ("s" ?,Hc(B) ; Dalet | ||
| 135 | ("d" ?,Hb(B) ; Gimel | ||
| 136 | ("f" ?,Hk(B) ; Kaf | ||
| 137 | ("g" ?,Hr(B) ; Ayin | ||
| 138 | ("h" ?,Hi(B) ; Yod | ||
| 139 | ("j" ?,Hg(B) ; Het | ||
| 140 | ("k" ?,Hl(B) ; Lamed | ||
| 141 | ("l" ?,Hj(B) ; Final Kaf | ||
| 142 | (";" ?,Hs(B) ; Final Pe | ||
| 143 | ("'" ?,) | ||
| 144 | ("z" ?,Hf(B) ; Zayin | ||
| 145 | ("x" ?,Hq(B) ; Samekh | ||
| 146 | ("c" ?,Ha(B) ; Bet | ||
| 147 | ("v" ?,Hd(B) ; He | ||
| 148 | ("b" ?,Hp(B) ; Nun | ||
| 149 | ("n" ?,Hn(B) ; Mem | ||
| 150 | ("m" ?,Hv(B) ; Tsadi | ||
| 151 | ("," ?,Hz(B) ; Tav | ||
| 152 | ("." ?,Hu(B) ; Final Tsadi | ||
| 153 | ("/" ?.) ; Stop | ||
| 154 | ("(" ?\)) ; mirroring | ||
| 155 | (")" ?\() ; mirroring | ||
| 156 | ("{" ?}) ; mirroring | ||
| 157 | ("}" ?{) ; mirroring | ||
| 158 | ("<" ?>) ; mirroring | ||
| 159 | (">" ?<) ; mirroring | ||
| 160 | |||
| 161 | ("``" ?\;) | ||
| 162 | ("`1" ?$,1,](B) ; Meteg | ||
| 163 | ;("`2" ??) ; Unassigned | ||
| 164 | ("`3" ?,F$(B) ; Euro Sign | ||
| 165 | ("`4" ?$,1tJ(B) ; New Sheqel sign | ||
| 166 | ("`5" ?,A0(B) ; Degree Sign | ||
| 167 | ("`6" ?$,1,K(B) ; Ole | ||
| 168 | ;("`7" ??) ; Unassigned | ||
| 169 | ("`8" ?,AW(B) ; Multiplication Sign | ||
| 170 | ("`9" ?\u200E) ; LRM | ||
| 171 | ("`0" ?\u200F) ; RLM | ||
| 172 | ("`-" ?$,1,^(B) ; Maqaf | ||
| 173 | ("`=" ?$(G!9(B) ; En Dash | ||
| 174 | ("`q" ?$,1,b(B) ; Sin dot | ||
| 175 | ("`w" ?$,1,a(B) ; Shin dot | ||
| 176 | ("`e" ?$,1,X(B) ; Qamats | ||
| 177 | ("`r" ?$,1,S(B) ; Hataf Qamats | ||
| 178 | ;("`t" ??) ; Unassigned | ||
| 179 | ("`y" ?$,1-0(B) ; Yiddish Double Vav | ||
| 180 | ("`u" ?$,1,Y(B) ; Holam | ||
| 181 | ;("`i" ??) ; Unassigned | ||
| 182 | ;("`o" ??) ; Unassigned | ||
| 183 | ("`p" ?$,1,W(B) ; Patah | ||
| 184 | ("`[" ?$,1,R(B) ; Hataf Patah | ||
| 185 | ("`]" ?$,1,_(B) ; Rafe | ||
| 186 | ("`\\" ?$,1,[(B) ; Qubuts | ||
| 187 | ("`a" ?$,1,P(B) ; Sheva | ||
| 188 | ("`s" ?$,1,\(B) ; Dagesh or Mapiq | ||
| 189 | ;("`d" ??) ; Unassigned | ||
| 190 | ;("`f" ??) ; Unassigned | ||
| 191 | ("`g" ?$,1-1(B) ; Yiddish Vav Yod | ||
| 192 | ("`h" ?$,1-2(B) ; Yiddish Double Yod | ||
| 193 | ("`j" ?$,1,T(B) ; Hiriq | ||
| 194 | ("`k" ?$,1-3(B) ; Geresh (Punct.) | ||
| 195 | ("`l" ?,Y4(B) ; Left Double Quotation Mark | ||
| 196 | ("`;" ?,Y!(B) ; Right Double Quotation Mark | ||
| 197 | ("`'" ?$,1-4(B) ; Gershayim (Punct.) | ||
| 198 | ;("`z" ??) ; Unassigned | ||
| 199 | ("`x" ?$,1,V(B) ; Segol (Point) | ||
| 200 | ("`c" ?$,1,Q(B) ; Hataf Segol | ||
| 201 | ;("`v" ??) ; Unassigned | ||
| 202 | ;("`b" ??) ; Unassigned | ||
| 203 | ;("`n" ??) ; Unassigned | ||
| 204 | ("`m" ?$,1,U(B) ; Tsere | ||
| 205 | ;("`," ??) ; Unassigned | ||
| 206 | ;("`." ??) ; Unassigned | ||
| 207 | ("`/" ?,Aw(B) ; Division Sign | ||
| 208 | |||
| 209 | ("``" ?$,1,c(B) ; Sof Pasuq | ||
| 210 | ("`!" ?$,1,1(B) ; Etnahta | ||
| 211 | ("`@" ?$,1,2(B) ; Segol (Accent) | ||
| 212 | ("`#" ?$,1,3(B) ; Shalshelet | ||
| 213 | ("`$" ?$,1,4(B) ; Zaqef Qatan | ||
| 214 | ("`%" ?$,1,5(B) ; Zaqef Gadol | ||
| 215 | ("`^" ?$,1,6(B) ; Tipeha | ||
| 216 | ("`&" ?$,1,7(B) ; Revia | ||
| 217 | ("`*" ?$,1,8(B) ; Zarqa | ||
| 218 | ("`(" ?$,1,9(B) ; Pashta | ||
| 219 | ("`)" ?$,1,:(B) ; Yetiv | ||
| 220 | ("`_" ?$,1,;(B) ; Tevir | ||
| 221 | ("`+" ?$,1,<(B) ; Geresh (Accent) | ||
| 222 | ("`Q" ?$,1,=(B) ; Geresh Muqdam | ||
| 223 | ("`W" ?$,1,>(B) ; Gershayim (Accent) | ||
| 224 | ("`E" ?$,1,g(B) ; Qamats Qatan | ||
| 225 | ("`R" ?$,1,?(B) ; Qarney Para | ||
| 226 | ("`T" ?$,1,@(B) ; Telisha Gedola | ||
| 227 | ("`Y" ?$,1,A(B) ; Pazer | ||
| 228 | ("`U" ?$,1,Z(B) ; Holam Haser for Vav | ||
| 229 | ("`I" ?$,1,B(B) ; Atnah Hafukh | ||
| 230 | ("`O" ?$,1,C(B) ; Munah | ||
| 231 | ;("`P" ??) ; Reserved | ||
| 232 | ("`{" ?$,1,D(B) ; Mahapakh | ||
| 233 | ("`}" ?$,1,E(B) ; Merkha | ||
| 234 | ("`|" ?$,1,F(B) ; Merkha Kefula | ||
| 235 | ;("`A" ??) ; Reserved | ||
| 236 | ;("`S" ??) ; Reserved | ||
| 237 | ("`D" ?$,1,G(B) ; Darga | ||
| 238 | ("`F" ?$,1,H(B) ; Qadma | ||
| 239 | ("`G" ?$,1,I(B) ; Telisha Qetana | ||
| 240 | ("`H" ?$,1,J(B) ; Yerah Ben Yomo | ||
| 241 | ("`J" ?\u200D) ; ZWJ | ||
| 242 | ("`K" ?$,1,L(B) ; Iluy | ||
| 243 | ("`L" ?,Y4(B) ; Left Double Quotation Mark (2nd) | ||
| 244 | ("`:" ?,Y%(B) ; Double Low-9 Quotation Mark | ||
| 245 | ("`\"" ?$,1,M(B) ; Dehi | ||
| 246 | ("`Z" ?$,1,N(B) ; Zinor | ||
| 247 | ("`X" ?$,1,O(B) ; Masora Circle | ||
| 248 | ("`C" ?\u034F) ; CGJ | ||
| 249 | ("`V" ?$,1,`(B) ; Paseq | ||
| 250 | ("`B" ?$,1,f(B) ; Nun Hafukha | ||
| 251 | ("`N" ?\u200C) ; ZWNJ | ||
| 252 | ;("`M" ??) ; Unassigned | ||
| 253 | ;("`<" ??) ; Unassigned | ||
| 254 | ("`>" ?$,1,e(B) ; Lower Dot | ||
| 255 | ("`?" ?$,1,d(B) ; Upper Dot | ||
| 256 | ) | ||
| 257 | |||
| 258 | (quail-define-package | ||
| 259 | "hebrew-lyx" "Hebrew" ",Hl$,1,T(B" nil "Hebrew LyX input method. | ||
| 260 | |||
| 261 | Based on LyX keyboard layout. | ||
| 262 | Additional mappings for Rafe and Yiddish ligatures. | ||
| 263 | " nil t t t t nil nil nil nil nil t) | ||
| 264 | |||
| 265 | (quail-define-rules | ||
| 266 | ("`" ?\;) | ||
| 267 | ("_" ?$,1,^(B) ; Maqaf | ||
| 268 | ("q`" ?$,1,P(B) ; Sheva | ||
| 269 | ("w" ?\') | ||
| 270 | ("e" ?,Hw(B) ; Qof | ||
| 271 | ("r" ?,Hx(B) ; Resh | ||
| 272 | ("t" ?,H`(B) ; Alef | ||
| 273 | ("y" ?,Hh(B) ; Tet | ||
| 274 | ("u" ?,He(B) ; Vav | ||
| 275 | ("i" ?,Ho(B) ; Final Nun | ||
| 276 | ("o" ?,Hm(B) ; Final Mem | ||
| 277 | ("p" ?,Ht(B) ; Pe | ||
| 278 | ("[" ?\]) ; mirroring | ||
| 279 | ("]" ?\[) ; mirroring | ||
| 280 | ("a" ?,Hy(B) ; Shin | ||
| 281 | ("s" ?,Hc(B) ; Dalet | ||
| 282 | ("d" ?,Hb(B) ; Gimel | ||
| 283 | ("f" ?,Hk(B) ; Kaf | ||
| 284 | ("g" ?,Hr(B) ; Ayin | ||
| 285 | ("h" ?,Hi(B) ; Yod | ||
| 286 | ("j" ?,Hg(B) ; Het | ||
| 287 | ("k" ?,Hl(B) ; Lamed | ||
| 288 | ("l" ?,Hj(B) ; Final Kaf | ||
| 289 | (";" ?,Hs(B) ; Final Pe | ||
| 290 | ("'" ?,) | ||
| 291 | ("z" ?,Hf(B) ; Zayin | ||
| 292 | ("x" ?,Hq(B) ; Samekh | ||
| 293 | ("c" ?,Ha(B) ; Bet | ||
| 294 | ("v" ?,Hd(B) ; He | ||
| 295 | ("b" ?,Hp(B) ; Nun | ||
| 296 | ("n" ?,Hn(B) ; Mem | ||
| 297 | ("m" ?,Hv(B) ; Tsadi | ||
| 298 | ("," ?,Hz(B) ; Tav | ||
| 299 | ("." ?,Hu(B) ; Final Tsadi | ||
| 300 | ("/" ?.) ; Stop | ||
| 301 | ("(" ?\)) ; mirroring | ||
| 302 | (")" ?\() ; mirroring | ||
| 303 | ("W" ?$,1-3(B) ; Geresh (Punct.) | ||
| 304 | ("E" ?$,1,X(B) ; Qamats | ||
| 305 | ("R" ?$,1,_(B) ; Rafe | ||
| 306 | ("T" ?\u200E) ; LRM | ||
| 307 | ("Y" ?\u200F) ; RLM | ||
| 308 | ("U" ?$,1,Y(B) ; Holam | ||
| 309 | ("I" ?$,1-2(B) ; Yiddish Double Yod | ||
| 310 | ("O" ?$,1-0(B) ; Yiddish Double Vav | ||
| 311 | ("P" ?$,1,W(B) ; Patah | ||
| 312 | ("{" ?}) ; mirroring | ||
| 313 | ("}" ?{) ; mirroring | ||
| 314 | ("A" ?$,1,P(B) ; Sheva | ||
| 315 | ("S" ?$,1,\(B) ; Dagesh or Mapiq | ||
| 316 | ("F" ?$,1-4(B) ; Gershayim (Punct.) | ||
| 317 | ("G" ?$,1,b(B) ; Sin dot | ||
| 318 | ("H" ?$,1,a(B) ; Shin dot | ||
| 319 | ("J" ?$,1,T(B) ; Hiriq | ||
| 320 | ("K" ?$,1tJ(B) ; New Sheqel sign | ||
| 321 | ("L" ?$,1-1(B) ; Yiddish Vav Yod | ||
| 322 | ("X" ?$,1,V(B) ; Segol (Point) | ||
| 323 | ("C" ?$,1,[(B) ; Qubuts | ||
| 324 | ("V" ?$,1,Q(B) ; Hataf Segol | ||
| 325 | ("B" ?$,1,R(B) ; Hataf Patah | ||
| 326 | ("N" ?$,1,S(B) ; Hataf Qamats | ||
| 327 | ("M" ?$,1,U(B) ; Tsere | ||
| 328 | ("<" ?>) ; mirroring | ||
| 329 | (">" ?<) ; mirroring | ||
| 330 | ) | ||
| 331 | |||
| 332 | |||
| 333 | (quail-define-package | ||
| 334 | "hebrew-full" "Hebrew" ",Hr$,1,T,K(B" nil "Hebrew Full method. | ||
| 335 | |||
| 336 | Provides access to all Hebrew characters suiltable to Modern Hebrew. | ||
| 337 | " nil t t t t nil nil nil nil nil t) | ||
| 338 | |||
| 339 | (quail-define-rules | ||
| 340 | ("`" ?\;) | ||
| 341 | ("-" ?$,1,^(B) ; Maqaf | ||
| 47 | ("w" ?') | 342 | ("w" ?') |
| 48 | ("e" ?,Hw(B) | 343 | ("e" ?,Hw(B) ; Qof |
| 49 | ("r" ?,Hx(B) | 344 | ("r" ?,Hx(B) ; Resh |
| 50 | ("t" ?,H`(B) | 345 | ("t" ?,H`(B) ; Alef |
| 51 | ("y" ?,Hh(B) | 346 | ("y" ?,Hh(B) ; Tet |
| 52 | ("u" ?,He(B) | 347 | ("u" ?,He(B) ; Vav |
| 53 | ("i" ?,Ho(B) | 348 | ("i" ?,Ho(B) ; Final Nun |
| 54 | ("o" ?,Hm(B) | 349 | ("o" ?,Hm(B) ; Final Mem |
| 55 | ("p" ?,Ht(B) | 350 | ("p" ?,Ht(B) ; Pe |
| 56 | ("a" ?,Hy(B) | 351 | ("[" ?\]) ; mirroring |
| 57 | ("s" ?,Hc(B) | 352 | ("]" ?\[) ; mirroring |
| 58 | ("d" ?,Hb(B) | 353 | ("a" ?,Hy(B) ; Shin |
| 59 | ("f" ?,Hk(B) | 354 | ("s" ?,Hc(B) ; Dalet |
| 60 | ("g" ?,Hr(B) | 355 | ("d" ?,Hb(B) ; Gimel |
| 61 | ("h" ?,Hi(B) | 356 | ("f" ?,Hk(B) ; Kaf |
| 62 | ("j" ?,Hg(B) | 357 | ("g" ?,Hr(B) ; Ayin |
| 63 | ("k" ?,Hl(B) | 358 | ("h" ?,Hi(B) ; Yod |
| 64 | ("l" ?,Hj(B) | 359 | ("j" ?,Hg(B) ; Het |
| 65 | (";" ?,Hs(B) | 360 | ("k" ?,Hl(B) ; Lamed |
| 66 | ("z" ?,Hf(B) | 361 | ("l" ?,Hj(B) ; Final Kaf |
| 67 | ("x" ?,Hq(B) | 362 | (";" ?,Hs(B) ; Final Pe |
| 68 | ("c" ?,Ha(B) | 363 | ("'" ?,) |
| 69 | ("v" ?,Hd(B) | 364 | ("z" ?,Hf(B) ; Zayin |
| 70 | ("b" ?,Hp(B) | 365 | ("x" ?,Hq(B) ; Samekh |
| 71 | ("n" ?,Hn(B) | 366 | ("c" ?,Ha(B) ; Bet |
| 72 | ("m" ?,Hv(B) | 367 | ("v" ?,Hd(B) ; He |
| 73 | ("," ?,Hz(B) | 368 | ("b" ?,Hp(B) ; Nun |
| 74 | ("." ?,Hu(B) | 369 | ("n" ?,Hn(B) ; Mem |
| 370 | ("m" ?,Hv(B) ; Tsadi | ||
| 371 | ("," ?,Hz(B) ; Tav | ||
| 372 | ("." ?,Hu(B) ; Final Tsadi | ||
| 75 | ("/" ?.) | 373 | ("/" ?.) |
| 76 | ("'" ?,)) | 374 | |
| 375 | ("(" ?\)) ; mirroring | ||
| 376 | (")" ?\() ; mirroring | ||
| 377 | ("Q" ?/) | ||
| 378 | ("W" ?$,1-3(B) ; Geresh (Punct.) | ||
| 379 | ("E" ?$,1tJ(B) ; New Sheqel Sign | ||
| 380 | ("R" ?$,1,_(B) ; Rafe | ||
| 381 | ("T" ?$,1,Q(B) ; Hataf Segol | ||
| 382 | ("Y" ?$,1-1(B) ; Yiddish Vav Yod | ||
| 383 | ("U" ?$,1-0(B) ; Yiddish Double Vav | ||
| 384 | ("I" ?$,1,R(B) ; Hataf Patah | ||
| 385 | ("O" ?$,1,S(B) ; Hataf Qamats | ||
| 386 | ("P" ?$,1-4(B) ; Gershayim (Punct.) | ||
| 387 | ("{" ?}) ; mirroring | ||
| 388 | ("}" ?{) ; mirroring | ||
| 389 | ("A" ?$,1,P(B) ; Sheva | ||
| 390 | ("S" ?$,1,\(B) ; Dagesh or Mapiq | ||
| 391 | ("D" ?$,1,[(B) ; Qubuts | ||
| 392 | ("F" ?$,1,Y(B) ; Holam | ||
| 393 | ("G" ?$,1,V(B) ; Segol (Point) | ||
| 394 | ("H" ?$,1,U(B) ; Tsere | ||
| 395 | ("J" ?$,1,T(B) ; Hiriq | ||
| 396 | ("K" ?$,1,W(B) ; Patah | ||
| 397 | ("L" ?$,1,X(B) ; Qamats | ||
| 398 | ("Z" ?$,1,b(B) ; Sin Dot | ||
| 399 | ("X" ?$,1,a(B) ; Shin Dot | ||
| 400 | ("C" ?$,1,K(B) ; Ole | ||
| 401 | ("V" ?$,1-2(B) ; Yiddish Double Yod | ||
| 402 | ("B" ?$,1,c(B) ; Sof Pasuq | ||
| 403 | ("N" ?\u200E) ; LRM | ||
| 404 | ("M" ?\u200F) ; RLM | ||
| 405 | ("<" ?>) ; mirroring | ||
| 406 | (">" ?<) ; mirroring | ||
| 407 | |||
| 408 | ("q`" ?\u202D) ; LRO | ||
| 409 | ("q1" ?\u202E) ; RLO | ||
| 410 | ("q2" ?\u202A) ; LRE | ||
| 411 | ("q3" ?\u202B) ; RLE | ||
| 412 | ("q4" ?\u202C) ; PDF | ||
| 413 | ("q5" ?\u034F) ; CGJ | ||
| 414 | ("q6" ?$,1,L(B) ; Iluy | ||
| 415 | ("q8" ?$,1,M(B) ; Dehi | ||
| 416 | ("q9" ?$,1,g(B) ; Qamats Qatan | ||
| 417 | ("q0" ?$,1,=(B) ; Geresh Muqdam | ||
| 418 | ("q-" ?-) ; Minus | ||
| 419 | ("q=" ?$,1,N(B) ; Zinor | ||
| 420 | ("q|" ?$,1,`(B) ; Paseq | ||
| 421 | ("qw" ?$,1,O(B) ; Masora Circle | ||
| 422 | ("qe" ?$,1,d(B) ; Upper Dot | ||
| 423 | ("qr" ?$,1,e(B) ; Lower Dot | ||
| 424 | ("qy" ?$,1,?(B) ; Qarney Para | ||
| 425 | ("qu" ?$,1,3(B) ; Shalshelet | ||
| 426 | ("qi" ?$,1,>(B) ; Gershayim (Accent) | ||
| 427 | ("qo" ?$,1,<(B) ; Geresh (Accent) | ||
| 428 | ("qp" ?$,1,H(B) ; Qadma | ||
| 429 | ("q[" ?$,1,f(B) ; Nun Hafukha | ||
| 430 | ("qa" ?$,1,Z(B) ; Holam Haser for Vav | ||
| 431 | ("qs" ?$,1,I(B) ; Telisha Qetana | ||
| 432 | ("qd" ?$,1,@(B) ; Telisha Gedola | ||
| 433 | ("qf" ?$,1,A(B) ; Pazer | ||
| 434 | ("qg" ?$,1,5(B) ; Zaqef Gadol | ||
| 435 | ("qh" ?$,1,4(B) ; Zaqef Qatan | ||
| 436 | ("qj" ?$,1,9(B) ; Pashta | ||
| 437 | ("qk" ?$,1,D(B) ; Mahapakh | ||
| 438 | ("ql" ?$,1,7(B) ; Revia | ||
| 439 | ("q;" ?$,1,2(B) ; Segol (Accent) | ||
| 440 | ("q'" ?$,1,8(B) ; Zarqa | ||
| 441 | ("qz" ?$,1,J(B) ; Yerah Ben Yomo | ||
| 442 | ("qx" ?$,1,F(B) ; Merkha Kefula | ||
| 443 | ("qc" ?$,1,:(B) ; Yetiv | ||
| 444 | ("qv" ?$,1,;(B) ; Tevir | ||
| 445 | ("qb" ?$,1,G(B) ; Darga | ||
| 446 | ("qn" ?$,1,1(B) ; Etnahta | ||
| 447 | ("qm" ?$,1,C(B) ; Munah | ||
| 448 | ("q," ?$,1,6(B) ; Tipeha | ||
| 449 | ("q." ?$,1,E(B) ; Merkha | ||
| 450 | ("q/" ?$,1,](B) ; Meteg | ||
| 451 | ) | ||
| 452 | |||
| 453 | |||
| 454 | (quail-define-package | ||
| 455 | "hebrew-biblical-tiro" "Hebrew" ",Hz$,1,T,Hx$,1,Y(B" nil | ||
| 456 | "Biblical Hebrew Tiro input method. | ||
| 457 | |||
| 458 | Based on Society of Biblical Literature's Tiro keyboard layout. | ||
| 459 | Not suiltable for modern Hebrew input. | ||
| 460 | 'q' is used to switch levels instead of Alt-Gr. | ||
| 461 | Combining dot above (Called Masora dot) ($,1%G(B) is mapped to 'q1'. | ||
| 462 | " nil t t t t nil nil nil nil nil t) | ||
| 463 | |||
| 464 | (quail-define-rules | ||
| 465 | ("`" ?$,1,c(B) ; Sof Pasuq | ||
| 466 | ("-" ?$,1,^(B) ; Maqaf | ||
| 467 | ("=" ?$(O#?(B) ; White Bullet | ||
| 468 | ("w" ?$,1-3(B) ; Geresh (Punct.) | ||
| 469 | ("e" ?,Hw(B) ; Qof | ||
| 470 | ("r" ?,Hx(B) ; Resh | ||
| 471 | ("t" ?,H`(B) ; Alef | ||
| 472 | ("y" ?,Hh(B) ; Tet | ||
| 473 | ("u" ?,He(B) ; Vav | ||
| 474 | ("i" ?,Ho(B) ; Final Nun | ||
| 475 | ("o" ?,Hm(B) ; Final Mem | ||
| 476 | ("p" ?,Ht(B) ; Pe | ||
| 477 | ("[" ?\]) ; mirroring | ||
| 478 | ("]" ?\[) ; mirroring | ||
| 479 | ("\\" ?$,1,`(B) ; Paseq | ||
| 480 | ("a" ?,Hy(B) ; Shin | ||
| 481 | ("s" ?,Hc(B) ; Dalet | ||
| 482 | ("d" ?,Hb(B) ; Gimel | ||
| 483 | ("f" ?,Hk(B) ; Kaf | ||
| 484 | ("g" ?,Hr(B) ; Ayin | ||
| 485 | ("h" ?,Hi(B) ; Yod | ||
| 486 | ("j" ?,Hg(B) ; Het | ||
| 487 | ("k" ?,Hl(B) ; Lamed | ||
| 488 | ("l" ?,Hj(B) ; Final Kaf | ||
| 489 | (";" ?,Hs(B) ; Final Pe | ||
| 490 | ("'" ?$,1,:(B) ; Yetiv | ||
| 491 | ("z" ?,Hf(B) ; Zayin | ||
| 492 | ("x" ?,Hq(B) ; Samekh | ||
| 493 | ("c" ?,Ha(B) ; Bet | ||
| 494 | ("v" ?,Hd(B) ; He | ||
| 495 | ("b" ?,Hp(B) ; Nun | ||
| 496 | ("n" ?,Hn(B) ; Mem | ||
| 497 | ("m" ?,Hv(B) ; Tsadi | ||
| 498 | ("," ?,Hz(B) ; Tav | ||
| 499 | ("." ?,Hu(B) ; Final Tsadi | ||
| 500 | ("/" ?$,1,M(B) ; Dehi | ||
| 501 | ("~" ?$,1,N(B) ; Zinor | ||
| 502 | ("!" ?$,1,I(B) ; Telisha Qetana | ||
| 503 | ("@" ?$,1,9(B) ; Pashta | ||
| 504 | ("#" ?$,1,2(B) ; Segol (Accent) | ||
| 505 | ("$" ?$,1,O(B) ; Masora circle | ||
| 506 | ("%" ?$,1,Z(B) ; Holam Haser for Vav | ||
| 507 | ("^" ?$,1,Y(B) ; Holam | ||
| 508 | ("&" ?$,1,_(B) ; Rafe | ||
| 509 | ("*" ?$,1,b(B) ; Sin dot | ||
| 510 | ("(" ?$,1,a(B) ; Shin dot | ||
| 511 | (")" ?$,1,=(B) ; Geresh Muqdam | ||
| 512 | ("_" ?$,1,@(B) ; Telisha Gedola | ||
| 513 | ("+" ?$,1,\(B) ; Dagesh or Mapiq | ||
| 514 | ("Q" ?$,1,d(B) ; Upper dot | ||
| 515 | ("W" ?$,1,L(B) ; Iluy | ||
| 516 | ("E" ?$,1,K(B) ; Ole | ||
| 517 | ("R" ?$,1,?(B) ; Qarney Para | ||
| 518 | ("T" ?$,1,3(B) ; Shalshelet | ||
| 519 | ("Y" ?$,1,>(B) ; Gershayim (Accent) | ||
| 520 | ("U" ?$,1,<(B) ; Geresh (Accent) | ||
| 521 | ("I" ?$,1,A(B) ; Pazer | ||
| 522 | ("O" ?$,1,5(B) ; Zaqef Gadol | ||
| 523 | ("P" ?$,1,4(B) ; Zaqef Qatan | ||
| 524 | ("{" ?$,1,7(B) ; Revia | ||
| 525 | ("}" ?$,1,8(B) ; Zarqa | ||
| 526 | ("|" ?$,1,H(B) ; Qadma | ||
| 527 | ("A" ?$,1,](B) ; Meteg | ||
| 528 | ("S" ?$,1,P(B) ; Sheva | ||
| 529 | ("D" ?$,1,[(B) ; Qubuts | ||
| 530 | ("F" ?$,1,T(B) ; Hiriq | ||
| 531 | ("G" ?$,1,Q(B) ; Hataf Segol | ||
| 532 | ("H" ?$,1,V(B) ; Segol (Point) | ||
| 533 | ("J" ?$,1,U(B) ; Tsere | ||
| 534 | ("K" ?$,1,S(B) ; Hataf Qamats | ||
| 535 | ("L" ?$,1,X(B) ; Qamats | ||
| 536 | (":" ?$,1,R(B) ; Hataf Patah | ||
| 537 | ("\"" ?$,1,W(B) ; Patah | ||
| 538 | ("Z" ?$,1,e(B) ; Lower dot | ||
| 539 | ("X" ?$,1,D(B) ; Mahapakh | ||
| 540 | ("C" ?$,1,J(B) ; Yerah Ben Yomo | ||
| 541 | ("V" ?$,1,F(B) ; Merkha Kefula | ||
| 542 | ("B" ?$,1,E(B) ; Merkha | ||
| 543 | ("N" ?$,1,G(B) ; Darga | ||
| 544 | ("M" ?$,1,;(B) ; Tevir | ||
| 545 | ("<" ?$,1,1(B) ; Etnahta | ||
| 546 | (">" ?$,1,6(B) ; Tipeha | ||
| 547 | ("?" ?$,1,C(B) ; Munah | ||
| 548 | |||
| 549 | ("q`" ?\;) | ||
| 550 | ("q1" ?\u0307) ; Combining dot above | ||
| 551 | ("q2" ?\u0336) ; Combining long stroke overlay | ||
| 552 | ("q3" ?\u030A) ; Combining ring above | ||
| 553 | ("q4" ?$,1tJ(B) ; New Sheqel Sign | ||
| 554 | ("q5" ?\u200D) ; ZWJ | ||
| 555 | ("q6" ?\u200C) ; ZWNJ | ||
| 556 | ("q7" ?\u034F) ; CGJ | ||
| 557 | ("q8" ?\u200E) ; LRM | ||
| 558 | ("q9" ?\u200F) ; RLM | ||
| 559 | ("q0" ?$,2",(B) ; Dotted Circle | ||
| 560 | ("q-" ?-) ; Minus | ||
| 561 | ("q=" ?$(O#@(B) ; Bullet | ||
| 562 | ("qq" ?\u0308) ; Combining Diaeresis | ||
| 563 | ("qw" ?$,1-4(B) ; Gershayim (Punct.) | ||
| 564 | ("qe" ?,F$(B) ; Euro Sign | ||
| 565 | ("qu" ?$,1-0(B) ; Yiddish Double Vav | ||
| 566 | ("q\\" ?\\) | ||
| 567 | ("qh" ?$,1-2(B) ; Yiddish Double Yod | ||
| 568 | ("qj" ?$,1-1(B) ; Yiddish Vav Yod | ||
| 569 | ("ql" ?$,1,g(B) ; Qamats Qatan | ||
| 570 | ("q'" ?,) | ||
| 571 | ("qc" ?$,1,B(B) ; Atnah Hafukh | ||
| 572 | ("qb" ?$,1,f(B) ; Nun Hafukha | ||
| 573 | ("q/" ?.) | ||
| 574 | |||
| 575 | ("q~" ?~) | ||
| 576 | ("q!" ?!) | ||
| 577 | ("q@" ?@) | ||
| 578 | ("q#" ?#) | ||
| 579 | ("q$" ?$) | ||
| 580 | ("q%" ?%) | ||
| 581 | ("q^" ?^) | ||
| 582 | ("q&" ?&) | ||
| 583 | ("q*" ?*) | ||
| 584 | ("q(" ?\)) ; mirroring | ||
| 585 | ("q)" ?\() ; mirroring | ||
| 586 | ("q_" ?_) | ||
| 587 | ("q+" ?+) | ||
| 588 | ("qQ" ?/) | ||
| 589 | ("qW" ?') | ||
| 590 | ("q{" ?}) ; mirroring | ||
| 591 | ("q}" ?{) ; mirroring | ||
| 592 | ("q|" ?|) | ||
| 593 | ("q:" ?:) | ||
| 594 | ("q\"" ?\") | ||
| 595 | ("q<" ?>) | ||
| 596 | ("q>" ?<) | ||
| 597 | ("q?" ??) | ||
| 598 | ) | ||
| 599 | |||
| 600 | (quail-define-package | ||
| 601 | "hebrew-biblical-sil" "Hebrew" ",Hq$,1,T,Hl(B" nil | ||
| 602 | "Biblical Hebrew SIL input method. | ||
| 603 | |||
| 604 | Based on Society of Biblical Literature's SIL keyboard layout. | ||
| 605 | Phonetic and not suiltable for modern Hebrew input. | ||
| 606 | '`' is used to switch levels instead of Alt-Gr. | ||
| 607 | Euro Sign (,F$(B) is mapped to 'Z'. | ||
| 608 | " nil t t t t nil nil nil nil nil t) | ||
| 609 | |||
| 610 | (quail-define-rules | ||
| 611 | ("-" ?$,1,^(B) ; Maqaf | ||
| 612 | ("=" ?$,1,\(B) ; Dagesh or Mapiq | ||
| 613 | ("q" ?,Hw(B) ; Qof | ||
| 614 | ("w" ?,He(B) ; Vav | ||
| 615 | ("e" ?$,1,V(B) ; Segol (Point) | ||
| 616 | ("r" ?,Hx(B) ; Resh | ||
| 617 | ("t" ?,Hz(B) ; Tav | ||
| 618 | ("y" ?,Hi(B) ; Yod | ||
| 619 | ("u" ?$,1,[(B) ; Qubuts | ||
| 620 | ("i" ?$,1,T(B) ; Hiriq | ||
| 621 | ("o" ?$,1,Y(B) ; Holam | ||
| 622 | ("p" ?,Ht(B) ; Pe | ||
| 623 | ("[" ?\]) ; mirroring | ||
| 624 | ("]" ?\[) ; mirroring | ||
| 625 | ("\\" ?$,1,`(B) ; Paseq | ||
| 626 | ("a" ?$,1,W(B) ; Patah | ||
| 627 | ("s" ?,Hq(B) ; Samekh | ||
| 628 | ("d" ?,Hc(B) ; Dalet | ||
| 629 | ("f" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot | ||
| 630 | ("g" ?,Hb(B) ; Gimel | ||
| 631 | ("h" ?,Hd(B) ; He | ||
| 632 | ("j" [ ",Hy$,1,a(B" ]) ; Shin + Shin dot | ||
| 633 | ("k" ?,Hk(B) ; Kaf | ||
| 634 | ("l" ?,Hl(B) ; Lamed | ||
| 635 | (";" ?$,1,P(B) ; Sheva | ||
| 636 | ("'" ?,F"(B) ; Right Single Quotation Mark | ||
| 637 | ("z" ?,Hf(B) ; Zayin | ||
| 638 | ("x" ?,Hg(B) ; Het | ||
| 639 | ("c" ?,Hv(B) ; Tsadi | ||
| 640 | ("v" ?,Hh(B) ; Tet | ||
| 641 | ("b" ?,Ha(B) ; Bet | ||
| 642 | ("n" ?,Hp(B) ; Nun | ||
| 643 | ("m" ?,Hn(B) ; Mem | ||
| 644 | |||
| 645 | ("~" ?$,1tJ(B) ; New Sheqel Sign | ||
| 646 | ("@" ?$,1,8(B) ; Zarqa | ||
| 647 | ("#" ?$,1,H(B) ; Qadma | ||
| 648 | ("$" ?$,1,<(B) ; Geresh (Accent) | ||
| 649 | ("%" ?$,1,>(B) ; Gershayim (Accent) | ||
| 650 | ("&" ?$,1,L(B) ; Iluy | ||
| 651 | ("*" ?$,1,=(B) ; Geresh Muqdam | ||
| 652 | ("(" ?\)) ; mirroring | ||
| 653 | (")" ?\() ; mirroring | ||
| 654 | ("_" ?$(G!9(B) ; Em Dash | ||
| 655 | ("Q" ?$,1,7(B) ; Revia | ||
| 656 | ("E" ?$,1,U(B) ; Tsere | ||
| 657 | ("Y" ?$,1,?(B) ; Qarney Para | ||
| 658 | ("O" ?$,1,Z(B) ; Holam Haser for Vav | ||
| 659 | ("P" ?,Hs(B) ; Final Pe | ||
| 660 | ("{" ?}) ; mirroring | ||
| 661 | ("}" ?{) ; mirroring | ||
| 662 | |||
| 663 | ("A" ?$,1,X(B) ; Qamats | ||
| 664 | ("S" ?,Hy(B) ; Shin | ||
| 665 | ("K" ?,Hj(B) ; Final Kaf | ||
| 666 | (":" ?$,1-4(B) ; Gershayim (Punct.) | ||
| 667 | ("\"" ?,Y!(B) ; Right Double Quotation Mark | ||
| 668 | ("Z" ?,F$(B) ; Euro Sign | ||
| 669 | ("C" ?,Hu(B) ; Final Tsadi | ||
| 670 | ("N" ?,Ho(B) ; Final Nun | ||
| 671 | ("M" ?,Hm(B) ; Final Mem | ||
| 672 | ("<" ?,Hr(B) ; Ayin | ||
| 673 | (">" ?,H`(B) ; Alef | ||
| 674 | |||
| 675 | ("``" ?$) | ||
| 676 | ("`1" ?$,1,](B) ; Meteg | ||
| 677 | ("`2" ?$,1,B(B) ; Atnah Hafukh | ||
| 678 | ("`3" ?$,1,6(B) ; Tipeha | ||
| 679 | ("`4" ?$,1,E(B) ; Merkha | ||
| 680 | ("`5" ?$,1,F(B) ; Merkha Kefula | ||
| 681 | ("`6" ?$,1,M(B) ; Dehi | ||
| 682 | ("`7" ?$,1,C(B) ; Munah | ||
| 683 | ("`8" ?$,1,;(B) ; Tevir | ||
| 684 | ("`9" ?$,1,G(B) ; Darga | ||
| 685 | ("`0" ?$,1,J(B) ; Yerah Ben Yomo | ||
| 686 | ("`-" ?$(G!7(B) ; Em Dash | ||
| 687 | ("`=" ?$,1,1(B) ; Etnahta | ||
| 688 | ("`]" ?$,1,:(B) ; Accent Yetiv | ||
| 689 | ("`\\" ?$,1,D(B) ; Mahapakh | ||
| 690 | ("`a" ?$,1,g(B) ; Qamats Qatan | ||
| 691 | ("`g" ? $(O#?(B) ; White Bullet | ||
| 692 | ("`h" ?\u0336) ; Combining Long Stroke Overlay | ||
| 693 | ("`;" ?\;) | ||
| 694 | ("`'" ?\u0323); Combining Dot Below (Lower Point??) | ||
| 695 | ("`m" ?\u200C) ; ZWNJ | ||
| 696 | ("`," ?,A;(B) ; mirroring | ||
| 697 | ("`." ?,A+(B) ; mirroring | ||
| 698 | ("`/" ?$,1-3(B) ; Geresh (Punct.) | ||
| 699 | |||
| 700 | ("`!" ?$,1,7(B) ; Revia | ||
| 701 | ("`@" ?$,1,N(B) ; Zinor | ||
| 702 | ("`#" ?$,1,9(B) ; Pashta | ||
| 703 | ("`$" ?$,1,@(B) ; Telisha Gedola | ||
| 704 | ("`%" ?$,1,I(B) ; Telisha Qetana | ||
| 705 | ("`&" ?$,1,A(B) ; Pazer | ||
| 706 | ("`*" ?$,1,5(B) ; Zaqef Gadol | ||
| 707 | ("`(" ?$,1,3(B) ; Shalshelet | ||
| 708 | ("`)" ?$,1,O(B) ; Masora Circle | ||
| 709 | ("`_" ?$,1,_(B) ; Rafe | ||
| 710 | ("`+" ?$,2",(B) ; Dotted Circle | ||
| 711 | ("`E" ?$,1,Q(B) ; Hataf Segol | ||
| 712 | ("`O" ?$,1,S(B) ; Hataf Qamats | ||
| 713 | ("`P" ?\u034F) ; CGJ | ||
| 714 | ("`{" ?$,1,4(B) ; Zaqef Qatan | ||
| 715 | ("`}" ?$,1,2(B) ; Segol (Accent) | ||
| 716 | ("`|" ?$,1,K(B) ; Ole | ||
| 717 | ("`A" ?$,1,R(B) ; Hataf Patah | ||
| 718 | ("`G" ?$(O#@(B) ; Bullet | ||
| 719 | ("`H" ?\u030A) ; Combining ring above | ||
| 720 | ("`:" ?$,1,c(B) ; Sof Pasuq | ||
| 721 | ("`\"" ?$,1,d(B) ; Upper Dot | ||
| 722 | ("`M" ?\u200D) ; ZWJ | ||
| 723 | ("`<" ?\u0307) ; Combining dot above | ||
| 724 | ("`>" ?\u0308) ; Combining Diaeresis | ||
| 725 | ) | ||
| 726 | |||
| 727 | |||
| 728 | (quail-define-package | ||
| 729 | "yiddish-royal" "Hebrew" "$,1-2,Hx(B" nil "Yiddish Royal input method. | ||
| 730 | |||
| 731 | Based on Royal Yiddish typewriter. | ||
| 732 | Better for yiddish than Hebrew methods. | ||
| 733 | " nil t t t t nil nil nil nil nil t) | ||
| 734 | |||
| 735 | (quail-define-rules | ||
| 736 | ("`" ?~) | ||
| 737 | ("q" ?,Hw(B) ; Qof | ||
| 738 | ("w" [ ",H`$,1,X(B" ]) ; Qamats Alef (Komets Alef) | ||
| 739 | ("e" ?,Hx(B) ; Resh | ||
| 740 | ("r" ?,H`(B) ; Alef (Shtumer Alef) | ||
| 741 | ("t" ?,Hh(B) ; Tet | ||
| 742 | ("y" ?$,1-0(B) ; Yiddish Double Vav (Tsvey Vovn) | ||
| 743 | ("u" ?,He(B) ; Vav | ||
| 744 | ("i" ?,Ho(B) ; Final Nun | ||
| 745 | ("o" ?,Hm(B) ; Final Mem | ||
| 746 | ("p" [ ",Ht$,1,_(B" ]) ; Rafe Pe (Fey) | ||
| 747 | ("[" [ ",Ht$,1,\(B" ]) ; Dagesh Pe (Pey) | ||
| 748 | ("]" ?,) | ||
| 749 | ("a" ?,Hy(B) ; Shin | ||
| 750 | ("s" ?,Hc(B) ; Dalet | ||
| 751 | ("d" ?,Hb(B) ; Gimel | ||
| 752 | ("f" ?,Hk(B) ; Kaf | ||
| 753 | ("g" ?,Hr(B) ; Ayin | ||
| 754 | ("h" ?$,1-2(B) ; Yiddish Double Yod (Tsvey Yudn) | ||
| 755 | ("j" ?,Hi(B) ; Yod | ||
| 756 | ("k" ?,Hg(B) ; Het | ||
| 757 | ("l" ?,Hl(B) ; Lamed | ||
| 758 | (";" ?,Hj(B) ; Final Kaf | ||
| 759 | ("'" ?,Hs(B) ; Final Pe | ||
| 760 | ("z" ?.) | ||
| 761 | ("x" ?,Hf(B) ; Zayin | ||
| 762 | ("c" ?,Hq(B) ; Samekh | ||
| 763 | ("v" ?,Ha(B) ; Bet | ||
| 764 | ("b" ?,Hd(B) ; He | ||
| 765 | ("n" ?,Hp(B) ; Nun | ||
| 766 | ("m" ?,Hn(B) ; Mem | ||
| 767 | ("," ?,Hv(B) ; Tsadi | ||
| 768 | ("." ?,Hz(B) ; Tav | ||
| 769 | ("/" ?,Hu(B) ; Final Tsadi | ||
| 770 | |||
| 771 | ("~" ?@) | ||
| 772 | ("!" ?,Y!(B) ; Right Double Quotation Mark | ||
| 773 | ("@" ?,Y%(B) ; Double Low-9 Quotation Mark | ||
| 774 | ("(" ?\)) ; mirroring | ||
| 775 | (")" ?\() ; mirroring | ||
| 776 | ("Q" ?,A=(B) ; Right Double Quotation Mark | ||
| 777 | ("W" ?,A<(B) | ||
| 778 | ("E" ?,A>(B) ; Yiddish Double Yod (x2) | ||
| 779 | ("R" [ ",H`$,1,W(B" ]) ; Patah Alef (Pasekh Alef) | ||
| 780 | ; ("T" "") | ||
| 781 | ("Y" ?$,1-1(B) ; Ligature Yiddish Vav Yod (vov yud) | ||
| 782 | ("U" [ ",He$,1,\(B" ]) ; Melupm vov | ||
| 783 | ("I" ?/) | ||
| 784 | ("O" ?\\) | ||
| 785 | ("P" ?,Ht(B) ; Pe | ||
| 786 | ("{" ??) | ||
| 787 | ("}" ?!) | ||
| 788 | ("A" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot | ||
| 789 | ("S" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot | ||
| 790 | ; ("D" "") | ||
| 791 | ("F" [ ",Hk$,1,\(B" ]) ; Dagesh Kaf (Kof) | ||
| 792 | ; ("G" "") | ||
| 793 | ("H" [ "$,1-2,W(B" ]) ; Yiddish Double Yod + Patah (Pasekh Tsvey Yudn) | ||
| 794 | ("J" [ ",Hi$,1,T(B" ]) ; Khirik Yud | ||
| 795 | ("K" ?}) ; mirroring | ||
| 796 | ("L" ?{) ; mirroring | ||
| 797 | ("\"" ?\;) | ||
| 798 | ("Z" ??) | ||
| 799 | ("X" ?|) | ||
| 800 | ("C" [ ",Ha$,1,\(B" ]) ; Dagesh Bet (Beys) | ||
| 801 | ("V" [ ",Ha$,1,_(B" ]) ; Rafe Bet (Veys) | ||
| 802 | ("B" ?\]) ; mirroring | ||
| 803 | ("N" ?\[) ; mirroring | ||
| 804 | ("M" ?>) ; mirroring | ||
| 805 | ("<" ?<) ; mirroring | ||
| 806 | (">" [ ",Hz$,1,\(B" ]) ; Dagesh Tav (Tof) | ||
| 807 | ("?" ?\') | ||
| 808 | ) | ||
| 809 | |||
| 810 | |||
| 811 | (quail-define-package | ||
| 812 | "yiddish-keyman" "Hebrew" "$,1-2,Hw(B" nil "Yiddish Keyman input method. | ||
| 813 | |||
| 814 | Based on Keyman keyboard layout. | ||
| 815 | Better for yiddish than Hebrew methods.. | ||
| 816 | " nil t t t t nil nil nil nil nil t) | ||
| 817 | |||
| 818 | (quail-define-rules | ||
| 819 | ("`" ?\;) | ||
| 820 | ("q" ?,Y%(B) ; Double Low-9 Quotation Mark | ||
| 821 | ("w" ?,Hy(B) ; Shin | ||
| 822 | ("e" ?,Hr(B) ; Ayin | ||
| 823 | ("r" ?,Hx(B) ; Resh | ||
| 824 | ("t" ?,Hh(B) ; Tet | ||
| 825 | ("y" ?,Hi(B) ; Yod | ||
| 826 | ("u" ?,He(B) ; Vav | ||
| 827 | ("i" ?,Hi(B) ; Yod (x2) | ||
| 828 | ("o" [ ",H`$,1,X(B" ]) ; Qamats Alef (Komets Alef) | ||
| 829 | ("p" [ ",Ht$,1,\(B" ]) ; Dagesh Pe (Pey) | ||
| 830 | ("[" ?\]) ; mirroring | ||
| 831 | ("]" ?\[) ; mirroring | ||
| 832 | ("a" [ ",H`$,1,W(B" ]) ; Patah Alef (Pasekh Alef) | ||
| 833 | ("s" ?,Hq(B) ; Samekh | ||
| 834 | ("d" ?,Hc(B) ; Dalet | ||
| 835 | ("f" [ ",Ht$,1,_(B" ]) ; Rafe Pe (Fey) | ||
| 836 | ("g" ?,Hb(B) ; Gimel | ||
| 837 | ("h" ?,Hd(B) ; He | ||
| 838 | ("j" ?$,1-2(B) ; Yiddish Double Yod (Tsvey Yudn) | ||
| 839 | ("k" ?,Hw(B) ; Qof | ||
| 840 | ("l" ?,Hl(B) ; Lamed | ||
| 841 | ("z" ?,Hf(B) ; Zayin | ||
| 842 | ("x" ?,Hk(B) ; Kaf | ||
| 843 | ("c" ?,Hv(B) ; Tsadi | ||
| 844 | ("v" ?$,1-0(B) ; Yiddish Double Vav (Tsvey Vovn) | ||
| 845 | ("b" ?,Ha(B) ; Bet | ||
| 846 | ("n" ?,Hp(B) ; Nun | ||
| 847 | ("m" ?,Hn(B) ; Mem | ||
| 848 | |||
| 849 | ("(" ?\)) ; mirroring | ||
| 850 | (")" ?\() ; mirroring | ||
| 851 | ("Q" ?,Y!(B) ; Right Double Quotation Mark | ||
| 852 | ("W" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot | ||
| 853 | ("E" ?$,1-2(B) ; Yiddish Double Yod (x2) | ||
| 854 | ; ("R" "") ; | ||
| 855 | ("T" [ ",Hz$,1,\(B" ]) ; Dagesh Tav (Tof) | ||
| 856 | ("Y" [ "$,1-2,W(B" ]) ; Yiddish Double Yod + Patah (Pasekh Tsvey Yudn) | ||
| 857 | ("U" [ ",He$,1,\(B" ]) ; Melupm vov | ||
| 858 | ("I" [ ",Hi$,1,T(B" ]) ; Khirik Yud | ||
| 859 | ("O" ?$,1-1(B) ; Ligature Yiddish Vav Yod (vov yud) | ||
| 860 | ; ("P" "") | ||
| 861 | ("{" ?}) ; mirroring | ||
| 862 | ("}" ?{) ; mirroring | ||
| 863 | ("A" ?,H`(B) ; Alef (Shtumer Alef) | ||
| 864 | ("S" ?,Hz(B) ; Tav | ||
| 865 | ("F" ?,Hs(B) ; Final Pe | ||
| 866 | ("G" ?$,1-3(B) ; Geresh (Punct.) | ||
| 867 | ("H" ?,Hg(B) ; Het | ||
| 868 | ("J" ?$,1-2(B) ; Yiddish Double Yod (x2) | ||
| 869 | ("K" [ ",Hk$,1,\(B" ]) ; Dagesh Kaf (Kof) | ||
| 870 | ; ("L" "") | ||
| 871 | ; ("Z" "") | ||
| 872 | ("X" ?,Hj(B) ; Final Kaf | ||
| 873 | ("C" ?,Hu(B) ; Final Tsadi | ||
| 874 | ("V" [ ",Ha$,1,_(B" ]) ; Rafe Bet (Veys) ) ; Bet | ||
| 875 | ; ("B" "") | ||
| 876 | ("N" ?,Ho(B) ; Final Nun | ||
| 877 | ("M" ?,Hm(B) ; Final Mem | ||
| 878 | ("<" ?>) ; mirroring | ||
| 879 | (">" ?<) ; mirroring | ||
| 880 | ) | ||
| 77 | 881 | ||
| 78 | ;;; hebrew.el ends here | 882 | ;;; hebrew.el ends here |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index aac855804cb..93674179121 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,13 @@ | |||
| 1 | 2011-07-25 Deniz Dogan <deniz@dogan.se> | ||
| 2 | |||
| 3 | * image.el (insert-image): Clarifying docstring. | ||
| 4 | |||
| 5 | 2011-07-24 Michael Albinus <michael.albinus@gmx.de> | ||
| 6 | |||
| 7 | * net/tramp-sh.el (tramp-barf-unless-okay): Return the value of | ||
| 8 | `tramp-send-command-and-check' if there is no error. | ||
| 9 | (tramp-send-command-and-read): Suppress *all* errors if NOERROR. | ||
| 10 | |||
| 1 | 2011-07-22 Alan Mackenzie <acm@muc.de> | 11 | 2011-07-22 Alan Mackenzie <acm@muc.de> |
| 2 | 12 | ||
| 3 | Prevent cc-langs.elc being loaded at run time. | 13 | Prevent cc-langs.elc being loaded at run time. |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index a8065fc5ca4..f90e180b128 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,18 @@ | |||
| 1 | 2011-07-24 Andrew Cohen <cohen@andy.bu.edu> | ||
| 2 | |||
| 3 | * nnimap.el (nnimap-make-thread-query): Quote message-ids for gmail. | ||
| 4 | |||
| 5 | 2011-07-23 Andrew Cohen <cohen@andy.bu.edu> | ||
| 6 | |||
| 7 | * nnir.el (nnir-search-thread): New function to make an nnir group | ||
| 8 | based on a thread query. | ||
| 9 | |||
| 10 | * gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use | ||
| 11 | of nnir in thread referral. | ||
| 12 | (gnus-summary-refer-thread): Use it. | ||
| 13 | |||
| 14 | * nnimap.el (nnimap-request-thread): Use it. | ||
| 15 | |||
| 1 | 2011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org> | 16 | 2011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 2 | 17 | ||
| 3 | * shr.el (shr-tag-comment): Ignore HTML comments. | 18 | * shr.el (shr-tag-comment): Ignore HTML comments. |
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 6e8fc63d79f..5917c9d7cef 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el | |||
| @@ -118,6 +118,13 @@ If t, fetch all the available old headers." | |||
| 118 | :type '(choice number | 118 | :type '(choice number |
| 119 | (sexp :menu-tag "other" t))) | 119 | (sexp :menu-tag "other" t))) |
| 120 | 120 | ||
| 121 | (defcustom gnus-refer-thread-use-nnir nil | ||
| 122 | "*Use nnir to search an entire server when referring threads. A | ||
| 123 | nil value will only search for thread-related articles in the | ||
| 124 | current group." | ||
| 125 | :group 'gnus-thread | ||
| 126 | :type 'boolean) | ||
| 127 | |||
| 121 | (defcustom gnus-summary-make-false-root 'adopt | 128 | (defcustom gnus-summary-make-false-root 'adopt |
| 122 | "*nil means that Gnus won't gather loose threads. | 129 | "*nil means that Gnus won't gather loose threads. |
| 123 | If the root of a thread has expired or been read in a previous | 130 | If the root of a thread has expired or been read in a previous |
| @@ -8972,11 +8979,16 @@ Return the number of articles fetched." | |||
| 8972 | result)) | 8979 | result)) |
| 8973 | 8980 | ||
| 8974 | (defun gnus-summary-refer-thread (&optional limit) | 8981 | (defun gnus-summary-refer-thread (&optional limit) |
| 8975 | "Fetch all articles in the current thread. | 8982 | "Fetch all articles in the current thread. For backends that |
| 8976 | If no backend-specific 'request-thread function is available | 8983 | know how to search for threads (currently only 'nnimap) a |
| 8977 | fetch LIMIT (the numerical prefix) old headers. If LIMIT is nil | 8984 | non-numeric prefix arg will use nnir to search the entire |
| 8978 | fetch what's specified by the `gnus-refer-thread-limit' | 8985 | server; without a prefix arg only the current group is |
| 8979 | variable." | 8986 | searched. If the variable `gnus-refer-thread-use-nnir' is |
| 8987 | non-nil the prefix arg has the reverse meaning. If no | ||
| 8988 | backend-specific 'request-thread function is available fetch | ||
| 8989 | LIMIT (the numerical prefix) old headers. If LIMIT is | ||
| 8990 | non-numeric or nil fetch the number specified by the | ||
| 8991 | `gnus-refer-thread-limit' variable." | ||
| 8980 | (interactive "P") | 8992 | (interactive "P") |
| 8981 | (gnus-warp-to-article) | 8993 | (gnus-warp-to-article) |
| 8982 | (let* ((header (gnus-summary-article-header)) | 8994 | (let* ((header (gnus-summary-article-header)) |
| @@ -8984,13 +8996,16 @@ variable." | |||
| 8984 | (gnus-inhibit-demon t) | 8996 | (gnus-inhibit-demon t) |
| 8985 | (gnus-summary-ignore-duplicates t) | 8997 | (gnus-summary-ignore-duplicates t) |
| 8986 | (gnus-read-all-available-headers t) | 8998 | (gnus-read-all-available-headers t) |
| 8987 | (limit (if limit (prefix-numeric-value limit) | 8999 | (gnus-refer-thread-use-nnir |
| 8988 | gnus-refer-thread-limit)) | 9000 | (if (and (not (null limit)) (listp limit)) |
| 9001 | (not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir)) | ||
| 8989 | (new-headers | 9002 | (new-headers |
| 8990 | (if (gnus-check-backend-function | 9003 | (if (gnus-check-backend-function |
| 8991 | 'request-thread gnus-newsgroup-name) | 9004 | 'request-thread gnus-newsgroup-name) |
| 8992 | (gnus-request-thread header gnus-newsgroup-name) | 9005 | (gnus-request-thread header gnus-newsgroup-name) |
| 8993 | (let* ((last (if (numberp limit) | 9006 | (let* ((limit (if (numberp limit) (prefix-numeric-value limit) |
| 9007 | gnus-refer-thread-limit)) | ||
| 9008 | (last (if (numberp limit) | ||
| 8994 | (min (+ (mail-header-number header) | 9009 | (min (+ (mail-header-number header) |
| 8995 | limit) | 9010 | limit) |
| 8996 | gnus-newsgroup-highest) | 9011 | gnus-newsgroup-highest) |
| @@ -9005,17 +9020,19 @@ variable." | |||
| 9005 | (regexp-opt (append refs (list id subject))))))) | 9020 | (regexp-opt (append refs (list id subject))))))) |
| 9006 | (gnus-fetch-headers (list last) (if (numberp limit) | 9021 | (gnus-fetch-headers (list last) (if (numberp limit) |
| 9007 | (* 2 limit) limit) t))))) | 9022 | (* 2 limit) limit) t))))) |
| 9008 | (dolist (header new-headers) | 9023 | (when (listp new-headers) |
| 9009 | (when (member (mail-header-number header) gnus-newsgroup-unselected) | 9024 | (dolist (header new-headers) |
| 9010 | (push (mail-header-number header) gnus-newsgroup-unreads) | 9025 | (when (member (mail-header-number header) gnus-newsgroup-unselected) |
| 9011 | (setq gnus-newsgroup-unselected | 9026 | (push (mail-header-number header) gnus-newsgroup-unreads) |
| 9012 | (delete (mail-header-number header) gnus-newsgroup-unselected)))) | 9027 | (setq gnus-newsgroup-unselected |
| 9013 | (setq gnus-newsgroup-headers | 9028 | (delete (mail-header-number header) |
| 9014 | (gnus-delete-duplicate-headers | 9029 | gnus-newsgroup-unselected)))) |
| 9015 | (gnus-merge | 9030 | (setq gnus-newsgroup-headers |
| 9016 | 'list gnus-newsgroup-headers new-headers | 9031 | (gnus-delete-duplicate-headers |
| 9017 | 'gnus-article-sort-by-number))) | 9032 | (gnus-merge |
| 9018 | (gnus-summary-limit-include-thread id))) | 9033 | 'list gnus-newsgroup-headers new-headers |
| 9034 | 'gnus-article-sort-by-number))) | ||
| 9035 | (gnus-summary-limit-include-thread id)))) | ||
| 9019 | 9036 | ||
| 9020 | (defun gnus-summary-refer-article (message-id) | 9037 | (defun gnus-summary-refer-article (message-id) |
| 9021 | "Fetch an article specified by MESSAGE-ID." | 9038 | "Fetch an article specified by MESSAGE-ID." |
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 385522759b6..52de48869d8 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el | |||
| @@ -1566,15 +1566,17 @@ textual parts.") | |||
| 1566 | (articles &optional limit force-new dependencies)) | 1566 | (articles &optional limit force-new dependencies)) |
| 1567 | 1567 | ||
| 1568 | (deffoo nnimap-request-thread (header &optional group server) | 1568 | (deffoo nnimap-request-thread (header &optional group server) |
| 1569 | (when (nnimap-possibly-change-group group server) | 1569 | (if gnus-refer-thread-use-nnir |
| 1570 | (let* ((cmd (nnimap-make-thread-query header)) | 1570 | (nnir-search-thread header) |
| 1571 | (result (with-current-buffer (nnimap-buffer) | 1571 | (when (nnimap-possibly-change-group group server) |
| 1572 | (nnimap-command "UID SEARCH %s" cmd)))) | 1572 | (let* ((cmd (nnimap-make-thread-query header)) |
| 1573 | (when result | 1573 | (result (with-current-buffer (nnimap-buffer) |
| 1574 | (gnus-fetch-headers | 1574 | (nnimap-command "UID SEARCH %s" cmd)))) |
| 1575 | (and (car result) (delete 0 (mapcar #'string-to-number | 1575 | (when result |
| 1576 | (cdr (assoc "SEARCH" (cdr result)))))) | 1576 | (gnus-fetch-headers |
| 1577 | nil t))))) | 1577 | (and (car result) (delete 0 (mapcar #'string-to-number |
| 1578 | (cdr (assoc "SEARCH" (cdr result)))))) | ||
| 1579 | nil t)))))) | ||
| 1578 | 1580 | ||
| 1579 | (defun nnimap-possibly-change-group (group server) | 1581 | (defun nnimap-possibly-change-group (group server) |
| 1580 | (let ((open-result t)) | 1582 | (let ((open-result t)) |
| @@ -1945,13 +1947,13 @@ textual parts.") | |||
| 1945 | (refs (split-string | 1947 | (refs (split-string |
| 1946 | (or (mail-header-references header) | 1948 | (or (mail-header-references header) |
| 1947 | ""))) | 1949 | ""))) |
| 1948 | (value | 1950 | (value |
| 1949 | (format | 1951 | (format |
| 1950 | "(OR HEADER REFERENCES %s HEADER Message-Id %s)" | 1952 | "(OR HEADER REFERENCES %S HEADER Message-Id %S)" |
| 1951 | id id))) | 1953 | id id))) |
| 1952 | (dolist (refid refs value) | 1954 | (dolist (refid refs value) |
| 1953 | (setq value (format | 1955 | (setq value (format |
| 1954 | "(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)" | 1956 | "(OR (OR HEADER Message-Id %S HEADER REFERENCES %S) %s)" |
| 1955 | refid refid value))))) | 1957 | refid refid value))))) |
| 1956 | 1958 | ||
| 1957 | 1959 | ||
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index 9840dddcb66..e6420a4d7bb 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el | |||
| @@ -289,6 +289,7 @@ is `(valuefunc member)'." | |||
| 289 | (autoload 'nnimap-buffer "nnimap") | 289 | (autoload 'nnimap-buffer "nnimap") |
| 290 | (autoload 'nnimap-command "nnimap") | 290 | (autoload 'nnimap-command "nnimap") |
| 291 | (autoload 'nnimap-possibly-change-group "nnimap") | 291 | (autoload 'nnimap-possibly-change-group "nnimap") |
| 292 | (autoload 'nnimap-make-thread-query "nnimap") | ||
| 292 | (autoload 'gnus-registry-action "gnus-registry") | 293 | (autoload 'gnus-registry-action "gnus-registry") |
| 293 | (defvar gnus-registry-install)) | 294 | (defvar gnus-registry-install)) |
| 294 | 295 | ||
| @@ -1649,6 +1650,16 @@ server is of form 'backend:name'." | |||
| 1649 | (nnir-open-server server))) | 1650 | (nnir-open-server server))) |
| 1650 | 1651 | ||
| 1651 | 1652 | ||
| 1653 | (defun nnir-search-thread (header) | ||
| 1654 | "Make an nnir group based on the thread containing the article header" | ||
| 1655 | (let ((parm (list | ||
| 1656 | (cons 'query | ||
| 1657 | (nnimap-make-thread-query header)) | ||
| 1658 | (cons 'criteria "") | ||
| 1659 | (cons 'server (gnus-method-to-server | ||
| 1660 | (gnus-find-method-for-group | ||
| 1661 | gnus-newsgroup-name)))))) | ||
| 1662 | (gnus-group-make-nnir-group nil parm))) | ||
| 1652 | 1663 | ||
| 1653 | ;; unused? | 1664 | ;; unused? |
| 1654 | (defun nnir-artlist-groups (artlist) | 1665 | (defun nnir-artlist-groups (artlist) |
diff --git a/lisp/image.el b/lisp/image.el index c6862622639..30362251664 100644 --- a/lisp/image.el +++ b/lisp/image.el | |||
| @@ -413,8 +413,8 @@ means display it in the right marginal area." | |||
| 413 | (defun insert-image (image &optional string area slice) | 413 | (defun insert-image (image &optional string area slice) |
| 414 | "Insert IMAGE into current buffer at point. | 414 | "Insert IMAGE into current buffer at point. |
| 415 | IMAGE is displayed by inserting STRING into the current buffer | 415 | IMAGE is displayed by inserting STRING into the current buffer |
| 416 | with a `display' property whose value is the image. STRING is | 416 | with a `display' property whose value is the image. STRING |
| 417 | defaulted if you omit it. | 417 | defaults to the empty string if you omit it. |
| 418 | AREA is where to display the image. AREA nil or omitted means | 418 | AREA is where to display the image. AREA nil or omitted means |
| 419 | display it in the text area, a value of `left-margin' means | 419 | display it in the text area, a value of `left-margin' means |
| 420 | display it in the left marginal area, a value of `right-margin' | 420 | display it in the left marginal area, a value of `right-margin' |
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 1c6f0844be0..bcd23572908 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el | |||
| @@ -4505,27 +4505,30 @@ DONT-SUPPRESS-ERR is non-nil, stderr won't be sent to /dev/null." | |||
| 4505 | "Run COMMAND, check exit status, throw error if exit status not okay. | 4505 | "Run COMMAND, check exit status, throw error if exit status not okay. |
| 4506 | Similar to `tramp-send-command-and-check' but accepts two more arguments | 4506 | Similar to `tramp-send-command-and-check' but accepts two more arguments |
| 4507 | FMT and ARGS which are passed to `error'." | 4507 | FMT and ARGS which are passed to `error'." |
| 4508 | (unless (tramp-send-command-and-check vec command) | 4508 | (or (tramp-send-command-and-check vec command) |
| 4509 | (apply 'tramp-error vec 'file-error fmt args))) | 4509 | (apply 'tramp-error vec 'file-error fmt args))) |
| 4510 | 4510 | ||
| 4511 | (defun tramp-send-command-and-read (vec command &optional noerror) | 4511 | (defun tramp-send-command-and-read (vec command &optional noerror) |
| 4512 | "Run COMMAND and return the output, which must be a Lisp expression. | 4512 | "Run COMMAND and return the output, which must be a Lisp expression. |
| 4513 | In case there is no valid Lisp expression and NOERROR is nil, it | 4513 | In case there is no valid Lisp expression and NOERROR is nil, it |
| 4514 | raises an error." | 4514 | raises an error." |
| 4515 | (tramp-barf-unless-okay vec command "`%s' returns with error" command) | 4515 | (when (if noerror |
| 4516 | (with-current-buffer (tramp-get-connection-buffer vec) | 4516 | (tramp-send-command-and-check vec command) |
| 4517 | ;; Read the expression. | 4517 | (tramp-barf-unless-okay |
| 4518 | (goto-char (point-min)) | 4518 | vec command "`%s' returns with error" command)) |
| 4519 | (condition-case nil | 4519 | (with-current-buffer (tramp-get-connection-buffer vec) |
| 4520 | (prog1 (read (current-buffer)) | 4520 | ;; Read the expression. |
| 4521 | ;; Error handling. | 4521 | (goto-char (point-min)) |
| 4522 | (when (re-search-forward "\\S-" (point-at-eol) t) | 4522 | (condition-case nil |
| 4523 | (error nil))) | 4523 | (prog1 (read (current-buffer)) |
| 4524 | (error (unless noerror | 4524 | ;; Error handling. |
| 4525 | (tramp-error | 4525 | (when (re-search-forward "\\S-" (point-at-eol) t) |
| 4526 | vec 'file-error | 4526 | (error nil))) |
| 4527 | "`%s' does not return a valid Lisp expression: `%s'" | 4527 | (error (unless noerror |
| 4528 | command (buffer-string))))))) | 4528 | (tramp-error |
| 4529 | vec 'file-error | ||
| 4530 | "`%s' does not return a valid Lisp expression: `%s'" | ||
| 4531 | command (buffer-string)))))))) | ||
| 4529 | 4532 | ||
| 4530 | (defun tramp-convert-file-attributes (vec attr) | 4533 | (defun tramp-convert-file-attributes (vec attr) |
| 4531 | "Convert file-attributes ATTR generated by perl script, stat or ls. | 4534 | "Convert file-attributes ATTR generated by perl script, stat or ls. |
diff --git a/src/ChangeLog b/src/ChangeLog index 0b06e5bf2c0..e537848ea41 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,49 @@ | |||
| 1 | 2011-07-24 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * xfaces.c (check_lface_attrs) [HAVE_WINDOW_SYSTEM]: Allow `nil' | ||
| 4 | for attrs[LFACE_FONTSET_INDEX]. | ||
| 5 | |||
| 6 | 2011-07-23 Paul Eggert <eggert@cs.ucla.edu> | ||
| 7 | |||
| 8 | * xml.c (parse_region): Remove unused local | ||
| 9 | that was recently introduced. | ||
| 10 | |||
| 11 | 2011-07-23 Eli Zaretskii <eliz@gnu.org> | ||
| 12 | |||
| 13 | * xfns.c (unwind_create_frame) [GLYPH_DEBUG]: Adapt to changes in | ||
| 14 | 2008-02-22T17:42:09Z!monnier@iro.umontreal.ca. | ||
| 15 | |||
| 16 | * xdisp.c (move_it_in_display_line_to): Record the best matching | ||
| 17 | position for TO_CHARPOS while scanning the line, and restore it on | ||
| 18 | exit if none of the characters scanned was an exact match. Fixes | ||
| 19 | vertical-motion and pos-visible-in-window-p under bidi redisplay | ||
| 20 | when exact match is impossible due to invisible text, and the | ||
| 21 | lines are truncated. | ||
| 22 | |||
| 23 | 2011-07-23 Jan Djärv <jan.h.d@swipnet.se> | ||
| 24 | |||
| 25 | * nsterm.m (initFrameFromEmacs): Set NSTitledWindowMask in styleMask | ||
| 26 | for OSX >= 10.7. | ||
| 27 | |||
| 28 | 2011-07-22 Eli Zaretskii <eliz@gnu.org> | ||
| 29 | |||
| 30 | Fix a significant slow-down of cursor motion with C-n, C-p, | ||
| 31 | C-f/C-b, and C-v/M-v that couldn't keep up with keyboard | ||
| 32 | auto-repeat under bidi redisplay in fontified buffers. | ||
| 33 | * xdisp.c (compute_stop_pos_backwards): New function. | ||
| 34 | (next_element_from_buffer): Call compute_stop_pos_backwards to | ||
| 35 | find a suitable prev_stop when we find ourselves before | ||
| 36 | base_level_stop. | ||
| 37 | (reseat): Don't look for prev_stop, as that could mean a very long | ||
| 38 | run. | ||
| 39 | <cached_disp_pos, cached_disp_buffer, cached_disp_modiff> | ||
| 40 | <cached_disp_overlay_modiff>: Cache for last found display string | ||
| 41 | position. | ||
| 42 | (compute_display_string_pos): Return the cached position if asked | ||
| 43 | about the same buffer in the same area of character positions, and | ||
| 44 | the buffer wasn't changed since the time the display string | ||
| 45 | position was cached. | ||
| 46 | |||
| 1 | 2011-07-22 Eli Zaretskii <eliz@gnu.org> | 47 | 2011-07-22 Eli Zaretskii <eliz@gnu.org> |
| 2 | 48 | ||
| 3 | * xdisp.c (rows_from_pos_range): Don't ignore glyphs whose object | 49 | * xdisp.c (rows_from_pos_range): Don't ignore glyphs whose object |
diff --git a/src/nsterm.m b/src/nsterm.m index 546247ab74a..e45dc1a902d 100644 --- a/src/nsterm.m +++ b/src/nsterm.m | |||
| @@ -5304,6 +5304,9 @@ ns_term_shutdown (int sig) | |||
| 5304 | win = [[EmacsWindow alloc] | 5304 | win = [[EmacsWindow alloc] |
| 5305 | initWithContentRect: r | 5305 | initWithContentRect: r |
| 5306 | styleMask: (NSResizableWindowMask | | 5306 | styleMask: (NSResizableWindowMask | |
| 5307 | #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 | ||
| 5308 | NSTitledWindowMask | | ||
| 5309 | #endif | ||
| 5307 | NSMiniaturizableWindowMask | | 5310 | NSMiniaturizableWindowMask | |
| 5308 | NSClosableWindowMask) | 5311 | NSClosableWindowMask) |
| 5309 | backing: NSBackingStoreBuffered | 5312 | backing: NSBackingStoreBuffered |
diff --git a/src/xdisp.c b/src/xdisp.c index 0effc63c3db..a8d62e32ed0 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -3136,6 +3136,14 @@ next_overlay_change (EMACS_INT pos) | |||
| 3136 | return endpos; | 3136 | return endpos; |
| 3137 | } | 3137 | } |
| 3138 | 3138 | ||
| 3139 | /* Record one cached display string position found recently by | ||
| 3140 | compute_display_string_pos. */ | ||
| 3141 | static EMACS_INT cached_disp_pos; | ||
| 3142 | static EMACS_INT cached_prev_pos; | ||
| 3143 | static struct buffer *cached_disp_buffer; | ||
| 3144 | static int cached_disp_modiff; | ||
| 3145 | static int cached_disp_overlay_modiff; | ||
| 3146 | |||
| 3139 | /* Return the character position of a display string at or after | 3147 | /* Return the character position of a display string at or after |
| 3140 | position specified by POSITION. If no display string exists at or | 3148 | position specified by POSITION. If no display string exists at or |
| 3141 | after POSITION, return ZV. A display string is either an overlay | 3149 | after POSITION, return ZV. A display string is either an overlay |
| @@ -3157,6 +3165,7 @@ compute_display_string_pos (struct text_pos *position, | |||
| 3157 | EMACS_INT begb = string_p ? 0 : BEGV; | 3165 | EMACS_INT begb = string_p ? 0 : BEGV; |
| 3158 | EMACS_INT bufpos, charpos = CHARPOS (*position); | 3166 | EMACS_INT bufpos, charpos = CHARPOS (*position); |
| 3159 | struct text_pos tpos; | 3167 | struct text_pos tpos; |
| 3168 | struct buffer *b; | ||
| 3160 | 3169 | ||
| 3161 | if (charpos >= eob | 3170 | if (charpos >= eob |
| 3162 | /* We don't support display properties whose values are strings | 3171 | /* We don't support display properties whose values are strings |
| @@ -3166,6 +3175,33 @@ compute_display_string_pos (struct text_pos *position, | |||
| 3166 | || (string->s && !STRINGP (object))) | 3175 | || (string->s && !STRINGP (object))) |
| 3167 | return eob; | 3176 | return eob; |
| 3168 | 3177 | ||
| 3178 | /* Check the cached values. */ | ||
| 3179 | if (!STRINGP (object)) | ||
| 3180 | { | ||
| 3181 | if (NILP (object)) | ||
| 3182 | b = current_buffer; | ||
| 3183 | else | ||
| 3184 | b = XBUFFER (object); | ||
| 3185 | if (b == cached_disp_buffer | ||
| 3186 | && BUF_MODIFF (b) == cached_disp_modiff | ||
| 3187 | && BUF_OVERLAY_MODIFF (b) == cached_disp_overlay_modiff) | ||
| 3188 | { | ||
| 3189 | if (cached_prev_pos | ||
| 3190 | && cached_prev_pos < charpos && charpos <= cached_disp_pos) | ||
| 3191 | return cached_disp_pos; | ||
| 3192 | /* Handle overstepping either end of the known interval. */ | ||
| 3193 | if (charpos > cached_disp_pos) | ||
| 3194 | cached_prev_pos = cached_disp_pos; | ||
| 3195 | else /* charpos <= cached_prev_pos */ | ||
| 3196 | cached_prev_pos = max (charpos - 1, BEGV); | ||
| 3197 | } | ||
| 3198 | |||
| 3199 | /* Record new values in the cache. */ | ||
| 3200 | cached_disp_buffer = b; | ||
| 3201 | cached_disp_modiff = BUF_MODIFF (b); | ||
| 3202 | cached_disp_overlay_modiff = BUF_OVERLAY_MODIFF (b); | ||
| 3203 | } | ||
| 3204 | |||
| 3169 | /* If the character at CHARPOS is where the display string begins, | 3205 | /* If the character at CHARPOS is where the display string begins, |
| 3170 | return CHARPOS. */ | 3206 | return CHARPOS. */ |
| 3171 | pos = make_number (charpos); | 3207 | pos = make_number (charpos); |
| @@ -3181,7 +3217,11 @@ compute_display_string_pos (struct text_pos *position, | |||
| 3181 | spec)) | 3217 | spec)) |
| 3182 | && handle_display_spec (NULL, spec, object, Qnil, &tpos, bufpos, | 3218 | && handle_display_spec (NULL, spec, object, Qnil, &tpos, bufpos, |
| 3183 | frame_window_p)) | 3219 | frame_window_p)) |
| 3184 | return charpos; | 3220 | { |
| 3221 | if (!STRINGP (object)) | ||
| 3222 | cached_disp_pos = charpos; | ||
| 3223 | return charpos; | ||
| 3224 | } | ||
| 3185 | 3225 | ||
| 3186 | /* Look forward for the first character with a `display' property | 3226 | /* Look forward for the first character with a `display' property |
| 3187 | that will replace the underlying text when displayed. */ | 3227 | that will replace the underlying text when displayed. */ |
| @@ -3201,6 +3241,8 @@ compute_display_string_pos (struct text_pos *position, | |||
| 3201 | || !handle_display_spec (NULL, spec, object, Qnil, &tpos, bufpos, | 3241 | || !handle_display_spec (NULL, spec, object, Qnil, &tpos, bufpos, |
| 3202 | frame_window_p)); | 3242 | frame_window_p)); |
| 3203 | 3243 | ||
| 3244 | if (!STRINGP (object)) | ||
| 3245 | cached_disp_pos = CHARPOS (tpos); | ||
| 3204 | return CHARPOS (tpos); | 3246 | return CHARPOS (tpos); |
| 3205 | } | 3247 | } |
| 3206 | 3248 | ||
| @@ -5752,17 +5794,19 @@ reseat (struct it *it, struct text_pos pos, int force_p) | |||
| 5752 | { | 5794 | { |
| 5753 | /* For bidi iteration, we need to prime prev_stop and | 5795 | /* For bidi iteration, we need to prime prev_stop and |
| 5754 | base_level_stop with our best estimations. */ | 5796 | base_level_stop with our best estimations. */ |
| 5755 | if (CHARPOS (pos) < it->prev_stop) | 5797 | /* Implementation note: Of course, POS is not necessarily a |
| 5756 | { | 5798 | stop position, so assigning prev_pos to it is a lie; we |
| 5757 | handle_stop_backwards (it, BEGV); | 5799 | should have called compute_stop_backwards. However, if |
| 5758 | if (CHARPOS (pos) < it->base_level_stop) | 5800 | the current buffer does not include any R2L characters, |
| 5759 | it->base_level_stop = 0; | 5801 | that call would be a waste of cycles, because the |
| 5760 | } | 5802 | iterator will never move back, and thus never cross this |
| 5761 | else if (CHARPOS (pos) > it->stop_charpos | 5803 | "fake" stop position. So we delay that backward search |
| 5762 | && it->stop_charpos >= BEGV) | 5804 | until the time we really need it, in next_element_from_buffer. */ |
| 5763 | handle_stop_backwards (it, it->stop_charpos); | 5805 | if (CHARPOS (pos) != it->prev_stop) |
| 5764 | else /* force_p */ | 5806 | it->prev_stop = CHARPOS (pos); |
| 5765 | handle_stop (it); | 5807 | if (CHARPOS (pos) < it->base_level_stop) |
| 5808 | it->base_level_stop = 0; /* meaning it's unknown */ | ||
| 5809 | handle_stop (it); | ||
| 5766 | } | 5810 | } |
| 5767 | else | 5811 | else |
| 5768 | { | 5812 | { |
| @@ -7031,10 +7075,10 @@ next_element_from_string (struct it *it) | |||
| 7031 | embedding level, so test for that explicitly. */ | 7075 | embedding level, so test for that explicitly. */ |
| 7032 | && !BIDI_AT_BASE_LEVEL (it->bidi_it)) | 7076 | && !BIDI_AT_BASE_LEVEL (it->bidi_it)) |
| 7033 | { | 7077 | { |
| 7034 | /* If we lost track of base_level_stop, we have no better place | 7078 | /* If we lost track of base_level_stop, we have no better |
| 7035 | for handle_stop_backwards to start from than BEGV. This | 7079 | place for handle_stop_backwards to start from than string |
| 7036 | happens, e.g., when we were reseated to the previous | 7080 | beginning. This happens, e.g., when we were reseated to |
| 7037 | screenful of text by vertical-motion. */ | 7081 | the previous screenful of text by vertical-motion. */ |
| 7038 | if (it->base_level_stop <= 0 | 7082 | if (it->base_level_stop <= 0 |
| 7039 | || IT_STRING_CHARPOS (*it) < it->base_level_stop) | 7083 | || IT_STRING_CHARPOS (*it) < it->base_level_stop) |
| 7040 | it->base_level_stop = 0; | 7084 | it->base_level_stop = 0; |
| @@ -7234,6 +7278,50 @@ next_element_from_stretch (struct it *it) | |||
| 7234 | return 1; | 7278 | return 1; |
| 7235 | } | 7279 | } |
| 7236 | 7280 | ||
| 7281 | /* Scan backwards from IT's current position until we find a stop | ||
| 7282 | position, or until BEGV. This is called when we find ourself | ||
| 7283 | before both the last known prev_stop and base_level_stop while | ||
| 7284 | reordering bidirectional text. */ | ||
| 7285 | |||
| 7286 | static void | ||
| 7287 | compute_stop_pos_backwards (struct it *it) | ||
| 7288 | { | ||
| 7289 | const int SCAN_BACK_LIMIT = 1000; | ||
| 7290 | struct text_pos pos; | ||
| 7291 | struct display_pos save_current = it->current; | ||
| 7292 | struct text_pos save_position = it->position; | ||
| 7293 | EMACS_INT charpos = IT_CHARPOS (*it); | ||
| 7294 | EMACS_INT where_we_are = charpos; | ||
| 7295 | EMACS_INT save_stop_pos = it->stop_charpos; | ||
| 7296 | EMACS_INT save_end_pos = it->end_charpos; | ||
| 7297 | |||
| 7298 | xassert (NILP (it->string) && !it->s); | ||
| 7299 | xassert (it->bidi_p); | ||
| 7300 | it->bidi_p = 0; | ||
| 7301 | do | ||
| 7302 | { | ||
| 7303 | it->end_charpos = min (charpos + 1, ZV); | ||
| 7304 | charpos = max (charpos - SCAN_BACK_LIMIT, BEGV); | ||
| 7305 | SET_TEXT_POS (pos, charpos, BYTE_TO_CHAR (charpos)); | ||
| 7306 | reseat_1 (it, pos, 0); | ||
| 7307 | compute_stop_pos (it); | ||
| 7308 | /* We must advance forward, right? */ | ||
| 7309 | if (it->stop_charpos <= charpos) | ||
| 7310 | abort (); | ||
| 7311 | } | ||
| 7312 | while (charpos > BEGV && it->stop_charpos >= it->end_charpos); | ||
| 7313 | |||
| 7314 | if (it->stop_charpos <= where_we_are) | ||
| 7315 | it->prev_stop = it->stop_charpos; | ||
| 7316 | else | ||
| 7317 | it->prev_stop = BEGV; | ||
| 7318 | it->bidi_p = 1; | ||
| 7319 | it->current = save_current; | ||
| 7320 | it->position = save_position; | ||
| 7321 | it->stop_charpos = save_stop_pos; | ||
| 7322 | it->end_charpos = save_end_pos; | ||
| 7323 | } | ||
| 7324 | |||
| 7237 | /* Scan forward from CHARPOS in the current buffer/string, until we | 7325 | /* Scan forward from CHARPOS in the current buffer/string, until we |
| 7238 | find a stop position > current IT's position. Then handle the stop | 7326 | find a stop position > current IT's position. Then handle the stop |
| 7239 | position before that. This is called when we bump into a stop | 7327 | position before that. This is called when we bump into a stop |
| @@ -7253,6 +7341,7 @@ handle_stop_backwards (struct it *it, EMACS_INT charpos) | |||
| 7253 | EMACS_INT next_stop; | 7341 | EMACS_INT next_stop; |
| 7254 | 7342 | ||
| 7255 | /* Scan in strict logical order. */ | 7343 | /* Scan in strict logical order. */ |
| 7344 | xassert (it->bidi_p); | ||
| 7256 | it->bidi_p = 0; | 7345 | it->bidi_p = 0; |
| 7257 | do | 7346 | do |
| 7258 | { | 7347 | { |
| @@ -7272,11 +7361,11 @@ handle_stop_backwards (struct it *it, EMACS_INT charpos) | |||
| 7272 | } | 7361 | } |
| 7273 | while (charpos <= where_we_are); | 7362 | while (charpos <= where_we_are); |
| 7274 | 7363 | ||
| 7275 | next_stop = it->stop_charpos; | ||
| 7276 | it->stop_charpos = it->prev_stop; | ||
| 7277 | it->bidi_p = 1; | 7364 | it->bidi_p = 1; |
| 7278 | it->current = save_current; | 7365 | it->current = save_current; |
| 7279 | it->position = save_position; | 7366 | it->position = save_position; |
| 7367 | next_stop = it->stop_charpos; | ||
| 7368 | it->stop_charpos = it->prev_stop; | ||
| 7280 | handle_stop (it); | 7369 | handle_stop (it); |
| 7281 | it->stop_charpos = next_stop; | 7370 | it->stop_charpos = next_stop; |
| 7282 | } | 7371 | } |
| @@ -7373,14 +7462,19 @@ next_element_from_buffer (struct it *it) | |||
| 7373 | embedding level, so test for that explicitly. */ | 7462 | embedding level, so test for that explicitly. */ |
| 7374 | && !BIDI_AT_BASE_LEVEL (it->bidi_it)) | 7463 | && !BIDI_AT_BASE_LEVEL (it->bidi_it)) |
| 7375 | { | 7464 | { |
| 7376 | /* If we lost track of base_level_stop, we have no better place | ||
| 7377 | for handle_stop_backwards to start from than BEGV. This | ||
| 7378 | happens, e.g., when we were reseated to the previous | ||
| 7379 | screenful of text by vertical-motion. */ | ||
| 7380 | if (it->base_level_stop <= 0 | 7465 | if (it->base_level_stop <= 0 |
| 7381 | || IT_CHARPOS (*it) < it->base_level_stop) | 7466 | || IT_CHARPOS (*it) < it->base_level_stop) |
| 7382 | it->base_level_stop = BEGV; | 7467 | { |
| 7383 | handle_stop_backwards (it, it->base_level_stop); | 7468 | /* If we lost track of base_level_stop, we need to find |
| 7469 | prev_stop by looking backwards. This happens, e.g., when | ||
| 7470 | we were reseated to the previous screenful of text by | ||
| 7471 | vertical-motion. */ | ||
| 7472 | it->base_level_stop = BEGV; | ||
| 7473 | compute_stop_pos_backwards (it); | ||
| 7474 | handle_stop_backwards (it, it->prev_stop); | ||
| 7475 | } | ||
| 7476 | else | ||
| 7477 | handle_stop_backwards (it, it->base_level_stop); | ||
| 7384 | return GET_NEXT_DISPLAY_ELEMENT (it); | 7478 | return GET_NEXT_DISPLAY_ELEMENT (it); |
| 7385 | } | 7479 | } |
| 7386 | else | 7480 | else |
| @@ -7582,8 +7676,9 @@ move_it_in_display_line_to (struct it *it, | |||
| 7582 | { | 7676 | { |
| 7583 | enum move_it_result result = MOVE_UNDEFINED; | 7677 | enum move_it_result result = MOVE_UNDEFINED; |
| 7584 | struct glyph_row *saved_glyph_row; | 7678 | struct glyph_row *saved_glyph_row; |
| 7585 | struct it wrap_it, atpos_it, atx_it; | 7679 | struct it wrap_it, atpos_it, atx_it, ppos_it; |
| 7586 | void *wrap_data = NULL, *atpos_data = NULL, *atx_data = NULL; | 7680 | void *wrap_data = NULL, *atpos_data = NULL, *atx_data = NULL; |
| 7681 | void *ppos_data = NULL; | ||
| 7587 | int may_wrap = 0; | 7682 | int may_wrap = 0; |
| 7588 | enum it_method prev_method = it->method; | 7683 | enum it_method prev_method = it->method; |
| 7589 | EMACS_INT prev_pos = IT_CHARPOS (*it); | 7684 | EMACS_INT prev_pos = IT_CHARPOS (*it); |
| @@ -7602,6 +7697,19 @@ move_it_in_display_line_to (struct it *it, | |||
| 7602 | atpos_it.sp = -1; | 7697 | atpos_it.sp = -1; |
| 7603 | atx_it.sp = -1; | 7698 | atx_it.sp = -1; |
| 7604 | 7699 | ||
| 7700 | /* Use ppos_it under bidi reordering to save a copy of IT for the | ||
| 7701 | position > CHARPOS that is the closest to CHARPOS. We restore | ||
| 7702 | that position in IT when we have scanned the entire display line | ||
| 7703 | without finding a match for CHARPOS and all the character | ||
| 7704 | positions are greater than CHARPOS. */ | ||
| 7705 | if (it->bidi_p) | ||
| 7706 | { | ||
| 7707 | SAVE_IT (ppos_it, *it, ppos_data); | ||
| 7708 | SET_TEXT_POS (ppos_it.current.pos, ZV, ZV_BYTE); | ||
| 7709 | if ((op & MOVE_TO_POS) && IT_CHARPOS (*it) >= to_charpos) | ||
| 7710 | SAVE_IT (ppos_it, *it, ppos_data); | ||
| 7711 | } | ||
| 7712 | |||
| 7605 | #define BUFFER_POS_REACHED_P() \ | 7713 | #define BUFFER_POS_REACHED_P() \ |
| 7606 | ((op & MOVE_TO_POS) != 0 \ | 7714 | ((op & MOVE_TO_POS) != 0 \ |
| 7607 | && BUFFERP (it->object) \ | 7715 | && BUFFERP (it->object) \ |
| @@ -7727,6 +7835,11 @@ move_it_in_display_line_to (struct it *it, | |||
| 7727 | if (IT_CHARPOS (*it) < CHARPOS (this_line_min_pos)) | 7835 | if (IT_CHARPOS (*it) < CHARPOS (this_line_min_pos)) |
| 7728 | SET_TEXT_POS (this_line_min_pos, | 7836 | SET_TEXT_POS (this_line_min_pos, |
| 7729 | IT_CHARPOS (*it), IT_BYTEPOS (*it)); | 7837 | IT_CHARPOS (*it), IT_BYTEPOS (*it)); |
| 7838 | if (it->bidi_p | ||
| 7839 | && (op & MOVE_TO_POS) | ||
| 7840 | && IT_CHARPOS (*it) > to_charpos | ||
| 7841 | && IT_CHARPOS (*it) < IT_CHARPOS (ppos_it)) | ||
| 7842 | SAVE_IT (ppos_it, *it, ppos_data); | ||
| 7730 | continue; | 7843 | continue; |
| 7731 | } | 7844 | } |
| 7732 | 7845 | ||
| @@ -7937,7 +8050,11 @@ move_it_in_display_line_to (struct it *it, | |||
| 7937 | if ((op & MOVE_TO_POS) != 0 | 8050 | if ((op & MOVE_TO_POS) != 0 |
| 7938 | && !saw_smaller_pos | 8051 | && !saw_smaller_pos |
| 7939 | && IT_CHARPOS (*it) > to_charpos) | 8052 | && IT_CHARPOS (*it) > to_charpos) |
| 7940 | result = MOVE_POS_MATCH_OR_ZV; | 8053 | { |
| 8054 | result = MOVE_POS_MATCH_OR_ZV; | ||
| 8055 | if (it->bidi_p && IT_CHARPOS (ppos_it) < ZV) | ||
| 8056 | RESTORE_IT (it, &ppos_it, ppos_data); | ||
| 8057 | } | ||
| 7941 | else | 8058 | else |
| 7942 | result = MOVE_NEWLINE_OR_CR; | 8059 | result = MOVE_NEWLINE_OR_CR; |
| 7943 | break; | 8060 | break; |
| @@ -7953,6 +8070,11 @@ move_it_in_display_line_to (struct it *it, | |||
| 7953 | SET_TEXT_POS (this_line_min_pos, IT_CHARPOS (*it), IT_BYTEPOS (*it)); | 8070 | SET_TEXT_POS (this_line_min_pos, IT_CHARPOS (*it), IT_BYTEPOS (*it)); |
| 7954 | if (IT_CHARPOS (*it) < to_charpos) | 8071 | if (IT_CHARPOS (*it) < to_charpos) |
| 7955 | saw_smaller_pos = 1; | 8072 | saw_smaller_pos = 1; |
| 8073 | if (it->bidi_p | ||
| 8074 | && (op & MOVE_TO_POS) | ||
| 8075 | && IT_CHARPOS (*it) >= to_charpos | ||
| 8076 | && IT_CHARPOS (*it) < IT_CHARPOS (ppos_it)) | ||
| 8077 | SAVE_IT (ppos_it, *it, ppos_data); | ||
| 7956 | 8078 | ||
| 7957 | /* Stop if lines are truncated and IT's current x-position is | 8079 | /* Stop if lines are truncated and IT's current x-position is |
| 7958 | past the right edge of the window now. */ | 8080 | past the right edge of the window now. */ |
| @@ -7962,7 +8084,9 @@ move_it_in_display_line_to (struct it *it, | |||
| 7962 | if (!FRAME_WINDOW_P (it->f) | 8084 | if (!FRAME_WINDOW_P (it->f) |
| 7963 | || IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)) | 8085 | || IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)) |
| 7964 | { | 8086 | { |
| 7965 | if (!get_next_display_element (it) | 8087 | int at_eob_p = 0; |
| 8088 | |||
| 8089 | if ((at_eob_p = !get_next_display_element (it)) | ||
| 7966 | || BUFFER_POS_REACHED_P () | 8090 | || BUFFER_POS_REACHED_P () |
| 7967 | /* If we are past TO_CHARPOS, but never saw any | 8091 | /* If we are past TO_CHARPOS, but never saw any |
| 7968 | character positions smaller than TO_CHARPOS, | 8092 | character positions smaller than TO_CHARPOS, |
| @@ -7973,6 +8097,8 @@ move_it_in_display_line_to (struct it *it, | |||
| 7973 | && IT_CHARPOS (*it) > to_charpos)) | 8097 | && IT_CHARPOS (*it) > to_charpos)) |
| 7974 | { | 8098 | { |
| 7975 | result = MOVE_POS_MATCH_OR_ZV; | 8099 | result = MOVE_POS_MATCH_OR_ZV; |
| 8100 | if (it->bidi_p && !at_eob_p && IT_CHARPOS (ppos_it) < ZV) | ||
| 8101 | RESTORE_IT (it, &ppos_it, ppos_data); | ||
| 7976 | break; | 8102 | break; |
| 7977 | } | 8103 | } |
| 7978 | if (ITERATOR_AT_END_OF_LINE_P (it)) | 8104 | if (ITERATOR_AT_END_OF_LINE_P (it)) |
| @@ -7986,6 +8112,8 @@ move_it_in_display_line_to (struct it *it, | |||
| 7986 | && IT_CHARPOS (*it) > to_charpos) | 8112 | && IT_CHARPOS (*it) > to_charpos) |
| 7987 | { | 8113 | { |
| 7988 | result = MOVE_POS_MATCH_OR_ZV; | 8114 | result = MOVE_POS_MATCH_OR_ZV; |
| 8115 | if (it->bidi_p && IT_CHARPOS (ppos_it) < ZV) | ||
| 8116 | RESTORE_IT (it, &ppos_it, ppos_data); | ||
| 7989 | break; | 8117 | break; |
| 7990 | } | 8118 | } |
| 7991 | result = MOVE_LINE_TRUNCATED; | 8119 | result = MOVE_LINE_TRUNCATED; |
| @@ -8011,6 +8139,8 @@ move_it_in_display_line_to (struct it *it, | |||
| 8011 | xfree (atx_data); | 8139 | xfree (atx_data); |
| 8012 | if (wrap_data) | 8140 | if (wrap_data) |
| 8013 | xfree (wrap_data); | 8141 | xfree (wrap_data); |
| 8142 | if (ppos_data) | ||
| 8143 | xfree (ppos_data); | ||
| 8014 | 8144 | ||
| 8015 | /* Restore the iterator settings altered at the beginning of this | 8145 | /* Restore the iterator settings altered at the beginning of this |
| 8016 | function. */ | 8146 | function. */ |
| @@ -23304,7 +23434,7 @@ produce_glyphless_glyph (struct it *it, int for_no_font, Lisp_Object acronym) | |||
| 23304 | base_width = font->average_width; | 23434 | base_width = font->average_width; |
| 23305 | 23435 | ||
| 23306 | /* Get a face ID for the glyph by utilizing a cache (the same way as | 23436 | /* Get a face ID for the glyph by utilizing a cache (the same way as |
| 23307 | doen for `escape-glyph' in get_next_display_element). */ | 23437 | done for `escape-glyph' in get_next_display_element). */ |
| 23308 | if (it->f == last_glyphless_glyph_frame | 23438 | if (it->f == last_glyphless_glyph_frame |
| 23309 | && it->face_id == last_glyphless_glyph_face_id) | 23439 | && it->face_id == last_glyphless_glyph_face_id) |
| 23310 | { | 23440 | { |
diff --git a/src/xfaces.c b/src/xfaces.c index c1e75ab3e59..32729ce6f8d 100644 --- a/src/xfaces.c +++ b/src/xfaces.c | |||
| @@ -1918,7 +1918,8 @@ check_lface_attrs (Lisp_Object *attrs) | |||
| 1918 | || IGNORE_DEFFACE_P (attrs[LFACE_FONT_INDEX]) | 1918 | || IGNORE_DEFFACE_P (attrs[LFACE_FONT_INDEX]) |
| 1919 | || FONTP (attrs[LFACE_FONT_INDEX])); | 1919 | || FONTP (attrs[LFACE_FONT_INDEX])); |
| 1920 | xassert (UNSPECIFIEDP (attrs[LFACE_FONTSET_INDEX]) | 1920 | xassert (UNSPECIFIEDP (attrs[LFACE_FONTSET_INDEX]) |
| 1921 | || STRINGP (attrs[LFACE_FONTSET_INDEX])); | 1921 | || STRINGP (attrs[LFACE_FONTSET_INDEX]) |
| 1922 | || NILP (attrs[LFACE_FONTSET_INDEX])); | ||
| 1922 | #endif | 1923 | #endif |
| 1923 | } | 1924 | } |
| 1924 | 1925 | ||
diff --git a/src/xfns.c b/src/xfns.c index 11bf9ab57e1..eec19b9d275 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -2933,7 +2933,7 @@ unwind_create_frame (Lisp_Object frame) | |||
| 2933 | #if GLYPH_DEBUG | 2933 | #if GLYPH_DEBUG |
| 2934 | /* Check that reference counts are indeed correct. */ | 2934 | /* Check that reference counts are indeed correct. */ |
| 2935 | xassert (dpyinfo->reference_count == dpyinfo_refcount); | 2935 | xassert (dpyinfo->reference_count == dpyinfo_refcount); |
| 2936 | //xassert (dpyinfo->image_cache->refcount == image_cache_refcount); //FIXME doesnt compilex | 2936 | xassert (dpyinfo->terminal->image_cache->refcount == image_cache_refcount); |
| 2937 | #endif | 2937 | #endif |
| 2938 | return Qt; | 2938 | return Qt; |
| 2939 | } | 2939 | } |
| @@ -87,7 +87,6 @@ static Lisp_Object | |||
| 87 | parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int htmlp) | 87 | parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int htmlp) |
| 88 | { | 88 | { |
| 89 | xmlDoc *doc; | 89 | xmlDoc *doc; |
| 90 | xmlNode *node; | ||
| 91 | Lisp_Object result = Qnil; | 90 | Lisp_Object result = Qnil; |
| 92 | const char *burl = ""; | 91 | const char *burl = ""; |
| 93 | EMACS_INT bytes; | 92 | EMACS_INT bytes; |
| @@ -129,13 +128,13 @@ parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int html | |||
| 129 | Lisp_Object r = Qnil; | 128 | Lisp_Object r = Qnil; |
| 130 | 129 | ||
| 131 | while (n) { | 130 | while (n) { |
| 132 | if (r != Qnil) | 131 | if (!NILP (r)) |
| 133 | result = Fcons (r, result); | 132 | result = Fcons (r, result); |
| 134 | r = make_dom (n); | 133 | r = make_dom (n); |
| 135 | n = n->next; | 134 | n = n->next; |
| 136 | } | 135 | } |
| 137 | 136 | ||
| 138 | if (result == Qnil) | 137 | if (NILP (result)) |
| 139 | result = r; | 138 | result = r; |
| 140 | else | 139 | else |
| 141 | result = Fcons (intern ("top"), | 140 | result = Fcons (intern ("top"), |
diff --git a/src/xwidget.c b/src/xwidget.c index 6732fad02d5..2186d429a32 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -256,19 +256,9 @@ send_xembed_ready_event (struct xwidget* xw, int xembedid) | |||
| 256 | 256 | ||
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | int xwidget_query_composition_called = 0; | ||
| 260 | int hasNamePixmap = 0; | ||
| 261 | |||
| 262 | |||
| 263 | |||
| 264 | |||
| 265 | |||
| 266 | |||
| 267 | |||
| 268 | void | 259 | void |
| 269 | xwidget_show_view (struct xwidget_view *xv) | 260 | xwidget_show_view (struct xwidget_view *xv) |
| 270 | { | 261 | { |
| 271 | //printf("xwidget %d shown\n",xw->id); | ||
| 272 | xv->hidden = 0; | 262 | xv->hidden = 0; |
| 273 | gtk_widget_show(GTK_WIDGET(xv->widgetwindow)); | 263 | gtk_widget_show(GTK_WIDGET(xv->widgetwindow)); |
| 274 | gtk_fixed_move (GTK_FIXED (xv->emacswindow), GTK_WIDGET (xv->widgetwindow), xv->x + xv->clip_left, xv->y + xv->clip_top); //TODO refactor | 264 | gtk_fixed_move (GTK_FIXED (xv->emacswindow), GTK_WIDGET (xv->widgetwindow), xv->x + xv->clip_left, xv->y + xv->clip_top); //TODO refactor |
| @@ -279,7 +269,6 @@ xwidget_show_view (struct xwidget_view *xv) | |||
| 279 | void | 269 | void |
| 280 | xwidget_hide_view (struct xwidget_view *xv) | 270 | xwidget_hide_view (struct xwidget_view *xv) |
| 281 | { | 271 | { |
| 282 | //printf("xwidget %d hidden\n",xw->id); | ||
| 283 | xv->hidden = 1; | 272 | xv->hidden = 1; |
| 284 | //gtk_widget_hide(GTK_WIDGET(xw->widgetwindow)); | 273 | //gtk_widget_hide(GTK_WIDGET(xw->widgetwindow)); |
| 285 | gtk_fixed_move (GTK_FIXED (xv->emacswindow), GTK_WIDGET (xv->widgetwindow), | 274 | gtk_fixed_move (GTK_FIXED (xv->emacswindow), GTK_WIDGET (xv->widgetwindow), |
| @@ -432,10 +421,6 @@ xwidget_init_view ( | |||
| 432 | xv->widget = gtk_toggle_button_new_with_label (XSTRING(xww->title)->data); | 421 | xv->widget = gtk_toggle_button_new_with_label (XSTRING(xww->title)->data); |
| 433 | } else if (EQ(xww->type, Qsocket)) { | 422 | } else if (EQ(xww->type, Qsocket)) { |
| 434 | xv->widget = gtk_socket_new (); | 423 | xv->widget = gtk_socket_new (); |
| 435 | //gtk_widget_set_app_paintable (xw->widget, TRUE); //workaround for composited sockets | ||
| 436 | |||
| 437 | //gdk_color_parse("blue",&color); //the blue color never seems to show up. something else draws a grey bg | ||
| 438 | //gtk_widget_modify_bg(xv->widget, GTK_STATE_NORMAL, &color); | ||
| 439 | g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); | 424 | g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); |
| 440 | g_signal_connect_after(xv->widget, "plug-removed", G_CALLBACK(xwidget_plug_removed), "plug removed"); | 425 | g_signal_connect_after(xv->widget, "plug-removed", G_CALLBACK(xwidget_plug_removed), "plug removed"); |
| 441 | } else if (EQ(xww->type, Qslider)) { | 426 | } else if (EQ(xww->type, Qslider)) { |
| @@ -518,39 +503,18 @@ xwidget_init_view ( | |||
| 518 | //make container widget 1st, and put the actual widget inside the container | 503 | //make container widget 1st, and put the actual widget inside the container |
| 519 | //later, drawing should crop container window if necessary to handle case where xwidget | 504 | //later, drawing should crop container window if necessary to handle case where xwidget |
| 520 | //is partially obscured by other emacs windows | 505 | //is partially obscured by other emacs windows |
| 506 | //other containers than gtk_fixed where explored, but gtk_fixed had the most predictable behaviour so far. | ||
| 521 | xv->emacswindow = GTK_CONTAINER (FRAME_GTK_WIDGET (s->f)); | 507 | xv->emacswindow = GTK_CONTAINER (FRAME_GTK_WIDGET (s->f)); |
| 522 | //xw->widgetwindow = GTK_CONTAINER (gtk_layout_new (NULL, NULL)); | 508 | xv->widgetwindow = GTK_CONTAINER (gtk_fixed_new ()); |
| 523 | //xw->widgetwindow = GTK_CONTAINER (gtk_offscreen_window_new ()); | ||
| 524 | |||
| 525 | xv->widgetwindow = GTK_CONTAINER (gtk_fixed_new ()); //works well for clipping on gtk2 not gtk3 | ||
| 526 | //xv->widgetwindow = GTK_CONTAINER (gtk_event_box_new ()); //doesnt help clipping gtk3 | ||
| 527 | //xv->widgetwindow = GTK_CONTAINER (gtk_scrolled_window_new (NULL, NULL)); //clips in gtk3 | ||
| 528 | //xv->widgetwindow = GTK_CONTAINER (gtk_viewport_new (NULL, NULL)); | ||
| 529 | |||
| 530 | |||
| 531 | /* GtkAllocation a; */ | ||
| 532 | /* a.x=0; a.y=0; a.width=xww->width; a.height=xww->height; */ | ||
| 533 | /* gtk_widget_set_allocation (GTK_WIDGET (xv->widget), &a); */ | ||
| 534 | |||
| 535 | gtk_widget_set_has_window(GTK_WIDGET ( xv->widgetwindow), TRUE); | 509 | gtk_widget_set_has_window(GTK_WIDGET ( xv->widgetwindow), TRUE); |
| 536 | //on GTK2 if gtk_fixed doesnt have a window it will surprisingly not honor | ||
| 537 | //setsize so that children gets clipped later. the documentation is | ||
| 538 | //not consistent regarding if its legal to call this method. | ||
| 539 | |||
| 540 | //on GTK3 the call isnt necessary except for windowless widgets such as the drawarea used for the webkit views | ||
| 541 | |||
| 542 | |||
| 543 | //gtk_layout_set_size (GTK_LAYOUT (xw->widgetwindow), xw->width, xw->height); | ||
| 544 | gtk_container_add (xv->widgetwindow, xv->widget); | 510 | gtk_container_add (xv->widgetwindow, xv->widget); |
| 545 | 511 | ||
| 546 | //gtk_scrolled_window_add_with_viewport (xv->widgetwindow, xv->widget); // when using scrollw | ||
| 547 | |||
| 548 | //store some xwidget data in the gtk widgets | 512 | //store some xwidget data in the gtk widgets |
| 549 | g_object_set_data (G_OBJECT (xv->widget), XG_FRAME_DATA, (gpointer) (s->f)); //the emacs frame | 513 | g_object_set_data (G_OBJECT (xv->widget), XG_FRAME_DATA, (gpointer) (s->f)); //the emacs frame |
| 550 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET, (gpointer) (xww)); //the xwidget | 514 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET, (gpointer) (xww)); //the xwidget |
| 551 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget | 515 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget |
| 552 | g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET, (gpointer) (xww)); //the xwidget | 516 | g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET, (gpointer) (xww)); //the xwidget window |
| 553 | g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget | 517 | g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget window |
| 554 | 518 | ||
| 555 | 519 | ||
| 556 | gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xww->width, xww->height); | 520 | gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xww->width, xww->height); |
| @@ -559,19 +523,6 @@ xwidget_init_view ( | |||
| 559 | xv->x = x; xv->y = y; | 523 | xv->x = x; xv->y = y; |
| 560 | gtk_widget_show_all (GTK_WIDGET (xv->widgetwindow)); | 524 | gtk_widget_show_all (GTK_WIDGET (xv->widgetwindow)); |
| 561 | 525 | ||
| 562 | |||
| 563 | //this seems to enable xcomposition. later we need to paint ourselves somehow, | ||
| 564 | //since the widget is no longer responsible for painting itself | ||
| 565 | //if(xw->type!=3) //im having trouble with compositing and sockets. hmmm. | ||
| 566 | //gdk_window_set_composited (xw->widget->window, TRUE); | ||
| 567 | //gdk_window_set_composited (GTK_LAYOUT (xw->widgetwindow)->bin_window, TRUE); | ||
| 568 | // gtk_widget_set_double_buffered (xw->widget,FALSE); | ||
| 569 | // gtk_widget_set_double_buffered (xw->widgetwindow,FALSE); | ||
| 570 | //gdk_window_set_composited (xw->widgetwindow, TRUE); | ||
| 571 | //g_signal_connect_after(xw->widget, "expose-event", G_CALLBACK(xwidget_composite_draw), "widget exposed"); | ||
| 572 | //g_signal_connect_after(xw->widgetwindow, "expose-event", G_CALLBACK(xwidget_composite_draw_widgetwindow), "widgetwindow exposed"); | ||
| 573 | // g_signal_connect_after(xw->widget, "damage-event", G_CALLBACK(xwidget_composite_draw), "damaged"); | ||
| 574 | |||
| 575 | //widgettype specific initialization only possible after realization | 526 | //widgettype specific initialization only possible after realization |
| 576 | if (EQ(xww->type, Qsocket)) { | 527 | if (EQ(xww->type, Qsocket)) { |
| 577 | printf ("xwid:%d socket id:%x %d\n", | 528 | printf ("xwid:%d socket id:%x %d\n", |
| @@ -693,8 +644,6 @@ DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_g | |||
| 693 | return make_string_from_bytes(str, wcslen((const wchar_t *)str), strlen(str)); | 644 | return make_string_from_bytes(str, wcslen((const wchar_t *)str), strlen(str)); |
| 694 | } | 645 | } |
| 695 | 646 | ||
| 696 | |||
| 697 | |||
| 698 | #endif | 647 | #endif |
| 699 | 648 | ||
| 700 | 649 | ||