aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-07-25 10:54:22 +0200
committerJoakim Verona2011-07-25 10:54:22 +0200
commit37d6e227b2e4460b36363e42a3de45c082233c74 (patch)
tree99ce5c28b62bd068319ab2c24a97adf764c9a2e2
parentb60646c64ead035bff3e5ba925f768f36964f661 (diff)
parent0f0a88b94cce778a7903196b07a0d70657fb4dc0 (diff)
downloademacs-37d6e227b2e4460b36363e42a3de45c082233c74.tar.gz
emacs-37d6e227b2e4460b36363e42a3de45c082233c74.zip
upstream merge. cleanup
-rw-r--r--README.xwidget1
-rw-r--r--doc/lispref/ChangeLog4
-rw-r--r--doc/lispref/display.texi130
-rw-r--r--leim/ChangeLog7
-rw-r--r--leim/quail/hebrew.el882
-rw-r--r--lisp/ChangeLog10
-rw-r--r--lisp/gnus/ChangeLog15
-rw-r--r--lisp/gnus/gnus-sum.el55
-rw-r--r--lisp/gnus/nnimap.el30
-rw-r--r--lisp/gnus/nnir.el11
-rw-r--r--lisp/image.el4
-rw-r--r--lisp/net/tramp-sh.el35
-rw-r--r--src/ChangeLog46
-rw-r--r--src/nsterm.m3
-rw-r--r--src/xdisp.c186
-rw-r--r--src/xfaces.c3
-rw-r--r--src/xfns.c2
-rw-r--r--src/xml.c5
-rw-r--r--src/xwidget.c59
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
28bzr co bzr+ssh://bzr.savannah.gnu.org/emacs/xwidget/ 28bzr co bzr+ssh://bzr.savannah.gnu.org/emacs/xwidget/
29#the below compiler flags shouldn't be strictly necessary
29export CFLAGS=" -g -DGLYPH_DEBUG=1" 30export CFLAGS=" -g -DGLYPH_DEBUG=1"
30./configure --with-x-toolkit=gtk3 --with-xwidgets 31./configure --with-x-toolkit=gtk3 --with-xwidgets
31make -j4 32make -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 @@
12011-07-23 Eli Zaretskii <eliz@gnu.org>
2
3 * display.texi (Bidirectional Display): New section.
4
12011-07-16 Lars Magne Ingebrigtsen <larsi@gnus.org> 52011-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
5966the window system, and creating the initial window. Users should not 5968the window system, and creating the initial window. Users should not
5967interfere with it. 5969interfere 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,
5978and Hebrew, whose natural ordering of horizontal text for display is
5979from right to left. However, digits and Latin text embedded in these
5980scripts are still displayed left to right. It is also not uncommon to
5981have small portions of text in Arabic or Hebrew embedded in otherwise
5982Latin document, e.g., as comments and strings in a program source
5983file. Likewise, small portions of Latin text can be embedded in an
5984Arabic or Farsi document. For these reasons, text that uses these
5985scripts is actually @dfn{bidirectional}: a mixture of runs of
5986left-to-right and right-to-left characters.
5987
5988 This section describes the facilities and options provided by Emacs
5989for 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
5996of the first character you read precedes that of the next character.
5997Reordering of bidirectional text into the @dfn{visual} order happens
5998at display time. As result, character positions no longer increase
5999monotonically with their positions on display. Emacs implements the
6000Unicode Bidirectional Algorithm (a.k.a.@: @acronym{UBA}) described in
6001the Unicode Standard Annex #9, for reordering of bidirectional text
6002for display. Reordering of bidirectional text for display in Emacs is
6003a ``Full bidirectionality'' class implementation of the @acronym{UBA}.
6004
6005@defvar bidi-display-reordering
6006 The buffer-local variable @code{bidi-display-reordering} controls
6007whether text in the buffer is reordered for display. If its value is
6008non-@code{nil}, Emacs reorders characters that have right-to-left
6009directionality when they are displayed. The default value is
6010@code{nil}. Text in overlay strings (@pxref{Overlay
6011Properties,,before-string}), display strings (@pxref{Overlay
6012Properties,,display}), and @code{display} text properties
6013(@pxref{Display Property}) is also reordered if the buffer whose text
6014includes these strings is reordered for display. Turning off
6015@code{bidi-display-reordering} for a buffer turns off reordering of
6016all the overlay and display strings in that buffer.
6017
6018 Reordering of strings that are unrelated to any buffer, such as text
6019displayed 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.
6027This is because unibyte buffers contain raw bytes, not characters, and
6028thus don't have bidirectional properties defined for them which are
6029required for correct reordering. Therefore, to test whether text in a
6030buffer will be reordered for display, it is not enough to test the
6031value of @code{bidi-display-reordering} alone. The correct test is
6032this:
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
6043because plain-@sc{ascii} strings are stored by Emacs as unibyte
6044strings. If a unibyte display or overlay string includes
6045non-@sc{ascii} characters, these characters are assumed to have
6046left-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
6051properties that replace buffer text, is treated as a single unit when
6052it is reordered for display. That is, the entire chunk of text
6053covered by these properties is reordered together. Moreover, the
6054bidirectional properties of the characters in this chunk of text are
6055ignored, and Emacs reorders them as if they were replaced with a
6056single character @code{u+FFFC}, known as the @dfn{Object Replacement
6057Character}. This means that placing a display property over a portion
6058of text may change the way that the surrounding text is reordered for
6059display. To prevent this unexpected effect, always place such
6060properties on text whose directionality is identical with text that
6061surrounds it.
6062
6063@cindex base direction of a paragraph
6064 Each paragraph of bidirectional text can have its own @dfn{base
6065direction}, either right-to-left or left-to-right. Text in
6066left-to-right paragraphs is displayed beginning at the left margin of
6067the window and is truncated or continued when it reaches the right
6068margin. By contrast, display of text in right-to-left paragraphs
6069begins at the right margin and is continued or truncated at the left
6070margin.
6071
6072@defvar bidi-paragraph-direction
6073 Emacs determines the base direction of each paragraph dynamically,
6074based on the text at the beginning of the paragraph. The precise
6075method of determining the base direction is specified by the
6076@acronym{UBA}; in a nutshell, the first character in a paragraph that
6077has an explicit directionality determines the base direction of the
6078paragraph. However, sometimes a buffer may need to force a certain
6079base direction for its paragraphs. For example, a buffer that visits
6080a source code of a program should force all its paragraphs to be
6081displayed left to right. The variable
6082@code{bidi-paragraph-direction}, if non-@code{nil}, disables the
6083dynamic determination of the base direction, and instead forces all
6084paragraphs in the buffer to have the direction specified by its
6085buffer-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
6090This 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
6093omitted or @code{nil}, it defaults to the current buffer. If the
6094buffer-local value of the variable @code{bidi-paragraph-direction} is
6095non-@code{nil}, the returned value will be identical to that value;
6096otherwise, the returned value reflects the paragraph direction
6097determined 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 @@
12011-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
12011-06-12 Andreas Schwab <schwab@linux-m68k.org> 82011-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
34Based on Hebrew typewriter keys. 37Based on SI-1452 keyboard layout.
35Hebrew letters are assigned to lowercases. 38Only 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
114Based on latest draft of SI-1452 keyboard layout.
115Only Hebrew-related characters are considered.
116 '`' is used to switch levels instead of Alt-Gr.
117Geresh 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
261Based on LyX keyboard layout.
262Additional 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
336Provides 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
458Based on Society of Biblical Literature's Tiro keyboard layout.
459Not 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
604Based on Society of Biblical Literature's SIL keyboard layout.
605Phonetic 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
731Based on Royal Yiddish typewriter.
732Better 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
814Based on Keyman keyboard layout.
815Better 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 @@
12011-07-25 Deniz Dogan <deniz@dogan.se>
2
3 * image.el (insert-image): Clarifying docstring.
4
52011-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
12011-07-22 Alan Mackenzie <acm@muc.de> 112011-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 @@
12011-07-24 Andrew Cohen <cohen@andy.bu.edu>
2
3 * nnimap.el (nnimap-make-thread-query): Quote message-ids for gmail.
4
52011-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
12011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org> 162011-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
123nil value will only search for thread-related articles in the
124current 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.
123If the root of a thread has expired or been read in a previous 130If 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
8976If no backend-specific 'request-thread function is available 8983know how to search for threads (currently only 'nnimap) a
8977fetch LIMIT (the numerical prefix) old headers. If LIMIT is nil 8984non-numeric prefix arg will use nnir to search the entire
8978fetch what's specified by the `gnus-refer-thread-limit' 8985server; without a prefix arg only the current group is
8979variable." 8986searched. If the variable `gnus-refer-thread-use-nnir' is
8987non-nil the prefix arg has the reverse meaning. If no
8988backend-specific 'request-thread function is available fetch
8989LIMIT (the numerical prefix) old headers. If LIMIT is
8990non-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.
415IMAGE is displayed by inserting STRING into the current buffer 415IMAGE is displayed by inserting STRING into the current buffer
416with a `display' property whose value is the image. STRING is 416with a `display' property whose value is the image. STRING
417defaulted if you omit it. 417defaults to the empty string if you omit it.
418AREA is where to display the image. AREA nil or omitted means 418AREA is where to display the image. AREA nil or omitted means
419display it in the text area, a value of `left-margin' means 419display it in the text area, a value of `left-margin' means
420display it in the left marginal area, a value of `right-margin' 420display 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.
4506Similar to `tramp-send-command-and-check' but accepts two more arguments 4506Similar to `tramp-send-command-and-check' but accepts two more arguments
4507FMT and ARGS which are passed to `error'." 4507FMT 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.
4513In case there is no valid Lisp expression and NOERROR is nil, it 4513In case there is no valid Lisp expression and NOERROR is nil, it
4514raises an error." 4514raises 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 @@
12011-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
62011-07-23 Paul Eggert <eggert@cs.ucla.edu>
7
8 * xml.c (parse_region): Remove unused local
9 that was recently introduced.
10
112011-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
232011-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
282011-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
12011-07-22 Eli Zaretskii <eliz@gnu.org> 472011-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. */
3141static EMACS_INT cached_disp_pos;
3142static EMACS_INT cached_prev_pos;
3143static struct buffer *cached_disp_buffer;
3144static int cached_disp_modiff;
3145static 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
7286static void
7287compute_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 }
diff --git a/src/xml.c b/src/xml.c
index a8a4d8122da..55352baae3a 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -87,7 +87,6 @@ static Lisp_Object
87parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int htmlp) 87parse_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
259int xwidget_query_composition_called = 0;
260int hasNamePixmap = 0;
261
262
263
264
265
266
267
268void 259void
269xwidget_show_view (struct xwidget_view *xv) 260xwidget_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)
279void 269void
280xwidget_hide_view (struct xwidget_view *xv) 270xwidget_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