aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-08-25 07:11:38 +0200
committerJoakim Verona2011-08-25 07:11:38 +0200
commiteff2e78688e5347aed84f237fabfa5829492feb1 (patch)
tree8033a98014481f35874226802703980d1b3481f1
parent2002bbd139da85246597a131d0b43c4ef921f233 (diff)
parente4ed06f12b052a3c80d5c572889cb670a41f3c7d (diff)
downloademacs-eff2e78688e5347aed84f237fabfa5829492feb1.tar.gz
emacs-eff2e78688e5347aed84f237fabfa5829492feb1.zip
upstream
-rw-r--r--admin/ChangeLog20
-rw-r--r--admin/unidata/unidata-gen.el107
-rw-r--r--doc/lispref/ChangeLog11
-rw-r--r--doc/lispref/display.texi4
-rw-r--r--doc/lispref/nonascii.texi53
-rw-r--r--etc/ChangeLog4
-rw-r--r--etc/refcards/refcard.tex20
-rw-r--r--lisp/ChangeLog88
-rw-r--r--lisp/battery.el2
-rw-r--r--lisp/cus-start.el7
-rw-r--r--lisp/emacs-lisp/eieio.el116
-rw-r--r--lisp/faces.el2
-rw-r--r--lisp/ibuffer.el4
-rw-r--r--lisp/international/charprop.el26
-rw-r--r--lisp/international/ucs-normalize.el10
-rw-r--r--lisp/international/uni-bidi.elbin8719 -> 7950 bytes
-rw-r--r--lisp/international/uni-category.elbin11396 -> 12759 bytes
-rw-r--r--lisp/international/uni-combining.elbin8369 -> 6251 bytes
-rw-r--r--lisp/international/uni-comment.elbin2386 -> 2407 bytes
-rw-r--r--lisp/international/uni-decimal.elbin1869 -> 2710 bytes
-rw-r--r--lisp/international/uni-decomposition.elbin28459 -> 28497 bytes
-rw-r--r--lisp/international/uni-digit.elbin2187 -> 3028 bytes
-rw-r--r--lisp/international/uni-lowercase.elbin5347 -> 6421 bytes
-rw-r--r--lisp/international/uni-mirrored.elbin10452 -> 9342 bytes
-rw-r--r--lisp/international/uni-name.elbin158765 -> 158786 bytes
-rw-r--r--lisp/international/uni-numeric.elbin3688 -> 4522 bytes
-rw-r--r--lisp/international/uni-old-name.elbin19692 -> 19713 bytes
-rw-r--r--lisp/international/uni-titlecase.elbin5434 -> 6462 bytes
-rw-r--r--lisp/international/uni-uppercase.elbin5430 -> 6458 bytes
-rw-r--r--lisp/isearch.el30
-rw-r--r--lisp/mail/smtpmail.el8
-rw-r--r--lisp/mpc.el39
-rw-r--r--lisp/proced.el2
-rw-r--r--lisp/view.el4
-rw-r--r--lisp/window.el74
-rw-r--r--src/ChangeLog42
-rw-r--r--src/bidi.c15
-rw-r--r--src/buffer.c32
-rw-r--r--src/chartab.c2
-rw-r--r--src/nsfont.m2
-rw-r--r--src/process.c3
-rw-r--r--src/xdisp.c24
42 files changed, 549 insertions, 202 deletions
diff --git a/admin/ChangeLog b/admin/ChangeLog
index bc38edfc8d4..17cbcbb3bdf 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,3 +1,23 @@
12011-08-23 Eli Zaretskii <eliz@gnu.org>
2
3 * unidata/unidata-gen.el (unidata-prop-alist): Update the default
4 values of bidi-class according to DerivedBidiClass.txt from the
5 latest UCD.
6
72011-08-23 Kenichi Handa <handa@m17n.org>
8
9 * unidata/unidata-gen.el (unidata-prop-alist): Provide default
10 values for name, general-category, canonical-combining-class,
11 mirrored, and bidi-class. Describe the meaning of value nil for
12 decimal-digit-value, digit-value, numeric-value, uppercase,
13 lowercase, titlecase, and mirroring.
14 (unidata-gen-table): Handle the case that default-value is a
15 list. Set default values of characters not listed in a table.
16 (unidata-get-name): Return an empty string if a value in a
17 char-table is nil.
18 (unidata-get-decomposition): Return a list of character itself if
19 a value in a char-table is nil.
20
12011-08-15 Eli Zaretskii <eliz@gnu.org> 212011-08-15 Eli Zaretskii <eliz@gnu.org>
2 22
3 * unidata/bidimirror.awk: File removed. 23 * unidata/bidimirror.awk: File removed.
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index ab1dcd134ac..1002bb003af 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -146,7 +146,7 @@
146 (setq unidata-list (cdr table)))) 146 (setq unidata-list (cdr table))))
147 147
148;; Alist of this form: 148;; Alist of this form:
149;; (PROP INDEX GENERATOR FILENAME DOCSTRING DESCRIBER VAL-LIST) 149;; (PROP INDEX GENERATOR FILENAME DOCSTRING DESCRIBER DEFAULT VAL-LIST)
150;; PROP: character property 150;; PROP: character property
151;; INDEX: index to each element of unidata-list for PROP. 151;; INDEX: index to each element of unidata-list for PROP.
152;; It may be a function that generates an alist of character codes 152;; It may be a function that generates an alist of character codes
@@ -155,14 +155,20 @@
155;; FILENAME: filename to store the char-table 155;; FILENAME: filename to store the char-table
156;; DOCSTRING: docstring for the property 156;; DOCSTRING: docstring for the property
157;; DESCRIBER: function to call to get a description string of property value 157;; DESCRIBER: function to call to get a description string of property value
158;; DEFAULT: the default value of the property 158;; DEFAULT: the default value of the property. It may have the form
159;; (VAL0 (FROM1 TO1 VAL1) ...) which indicates that the default
160;; value is VAL0 except for characters in the ranges specified by
161;; FROMn and TOn (incusive). The default value of characters
162;; between FROMn and TOn is VALn.
159;; VAL-LIST: list of specially ordered property values 163;; VAL-LIST: list of specially ordered property values
160 164
161(defconst unidata-prop-alist 165(defconst unidata-prop-alist
162 '((name 166 '((name
163 1 unidata-gen-table-name "uni-name.el" 167 1 unidata-gen-table-name "uni-name.el"
164 "Unicode character name. 168 "Unicode character name.
165Property value is a string.") 169Property value is a string."
170 nil
171 "")
166 (general-category 172 (general-category
167 2 unidata-gen-table-symbol "uni-category.el" 173 2 unidata-gen-table-symbol "uni-category.el"
168 "Unicode general category. 174 "Unicode general category.
@@ -170,7 +176,7 @@ Property value is one of the following symbols:
170 Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pc, Pd, Ps, Pe, Pi, Pf, Po, 176 Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pc, Pd, Ps, Pe, Pi, Pf, Po,
171 Sm, Sc, Sk, So, Zs, Zl, Zp, Cc, Cf, Cs, Co, Cn" 177 Sm, Sc, Sk, So, Zs, Zl, Zp, Cc, Cf, Cs, Co, Cn"
172 unidata-describe-general-category 178 unidata-describe-general-category
173 nil 179 Cn
174 ;; The order of elements must be in sync with unicode_category_t 180 ;; The order of elements must be in sync with unicode_category_t
175 ;; in src/character.h. 181 ;; in src/character.h.
176 (Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd Ps Pe Pi Pf Po 182 (Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd Ps Pe Pi Pf Po
@@ -179,7 +185,8 @@ Property value is one of the following symbols:
179 3 unidata-gen-table-integer "uni-combining.el" 185 3 unidata-gen-table-integer "uni-combining.el"
180 "Unicode canonical combining class. 186 "Unicode canonical combining class.
181Property value is an integer." 187Property value is an integer."
182 unidata-describe-canonical-combining-class) 188 unidata-describe-canonical-combining-class
189 0)
183 (bidi-class 190 (bidi-class
184 4 unidata-gen-table-symbol "uni-bidi.el" 191 4 unidata-gen-table-symbol "uni-bidi.el"
185 "Unicode bidi class. 192 "Unicode bidi class.
@@ -187,7 +194,12 @@ Property value is one of the following symbols:
187 L, LRE, LRO, R, AL, RLE, RLO, PDF, EN, ES, ET, 194 L, LRE, LRO, R, AL, RLE, RLO, PDF, EN, ES, ET,
188 AN, CS, NSM, BN, B, S, WS, ON" 195 AN, CS, NSM, BN, B, S, WS, ON"
189 unidata-describe-bidi-class 196 unidata-describe-bidi-class
190 L 197 ;; The assignment of default values to blocks of code points
198 ;; follows the file DerivedBidiClass.txt from the Unicode
199 ;; Character Database (UCD).
200 (L (#x0600 #x06FF AL) (#xFB50 #xFDFF AL) (#xFE70 #xFEFF AL)
201 (#x0590 #x05FF R) (#x07C0 #x08FF R)
202 (#xFB1D #xFB4F R) (#x10800 #x10FFF R) (#x1E800 #x1EFFF R))
191 ;; The order of elements must be in sync with bidi_type_t in 203 ;; The order of elements must be in sync with bidi_type_t in
192 ;; src/dispextern.h. 204 ;; src/dispextern.h.
193 (L R EN AN BN B AL LRE LRO RLE RLO PDF ES ET CS NSM S WS ON)) 205 (L R EN AN BN B AL LRE LRO RLE RLO PDF ES ET CS NSM S WS ON))
@@ -202,19 +214,24 @@ one of these symbols representing compatibility formatting tag:
202 (decimal-digit-value 214 (decimal-digit-value
203 6 unidata-gen-table-integer "uni-decimal.el" 215 6 unidata-gen-table-integer "uni-decimal.el"
204 "Unicode numeric value (decimal digit). 216 "Unicode numeric value (decimal digit).
205Property value is an integer.") 217Property value is an integer 0..9, or nil.
218The value nil stands for NaN \"Numeric_Value\".")
206 (digit-value 219 (digit-value
207 7 unidata-gen-table-integer "uni-digit.el" 220 7 unidata-gen-table-integer "uni-digit.el"
208 "Unicode numeric value (digit). 221 "Unicode numeric value (digit).
209Property value is an integer.") 222Property value is an integer 0..9, or nil.
223The value nil stands for NaN \"Numeric_Value\".")
210 (numeric-value 224 (numeric-value
211 8 unidata-gen-table-numeric "uni-numeric.el" 225 8 unidata-gen-table-numeric "uni-numeric.el"
212 "Unicode numeric value (numeric). 226 "Unicode numeric value (numeric).
213Property value is an integer or a floating point.") 227Property value is an integer, a floating point, or nil.
228The value nil stands for NaN \"Numeric_Value\".")
214 (mirrored 229 (mirrored
215 9 unidata-gen-table-symbol "uni-mirrored.el" 230 9 unidata-gen-table-symbol "uni-mirrored.el"
216 "Unicode bidi mirrored flag. 231 "Unicode bidi mirrored flag.
217Property value is a symbol `Y' or `N'. See also the property `mirroring'.") 232Property value is a symbol `Y' or `N'. See also the property `mirroring'."
233 nil
234 N)
218 (old-name 235 (old-name
219 10 unidata-gen-table-name "uni-old-name.el" 236 10 unidata-gen-table-name "uni-old-name.el"
220 "Unicode old names as published in Unicode 1.0. 237 "Unicode old names as published in Unicode 1.0.
@@ -226,23 +243,30 @@ Property value is a string.")
226 (uppercase 243 (uppercase
227 12 unidata-gen-table-character "uni-uppercase.el" 244 12 unidata-gen-table-character "uni-uppercase.el"
228 "Unicode simple uppercase mapping. 245 "Unicode simple uppercase mapping.
229Property value is a character." 246Property value is a character or nil.
247The value nil means that the actual property value of a character
248is the character itself."
230 string) 249 string)
231 (lowercase 250 (lowercase
232 13 unidata-gen-table-character "uni-lowercase.el" 251 13 unidata-gen-table-character "uni-lowercase.el"
233 "Unicode simple lowercase mapping. 252 "Unicode simple lowercase mapping.
234Property value is a character." 253Property value is a character or nil.
254The value nil means that the actual property value of a character
255is the character itself."
235 string) 256 string)
236 (titlecase 257 (titlecase
237 14 unidata-gen-table-character "uni-titlecase.el" 258 14 unidata-gen-table-character "uni-titlecase.el"
238 "Unicode simple titlecase mapping. 259 "Unicode simple titlecase mapping.
239Property value is a character." 260Property value is a character or nil.
261The value nil means that the actual property value of a character
262is the character itself."
240 string) 263 string)
241 (mirroring 264 (mirroring
242 unidata-gen-mirroring-list unidata-gen-table-character "uni-mirrored.el" 265 unidata-gen-mirroring-list unidata-gen-table-character "uni-mirrored.el"
243 "Unicode bidi-mirroring characters. 266 "Unicode bidi-mirroring characters.
244Property value is a character that has the corresponding mirroring image, 267Property value is a character that has the corresponding mirroring image or nil.
245or nil for non-mirrored character."))) 268The value nil means that the actual property value of a character
269is the character itself.")))
246 270
247;; Functions to access the above data. 271;; Functions to access the above data.
248(defsubst unidata-prop-index (prop) (nth 1 (assq prop unidata-prop-alist))) 272(defsubst unidata-prop-index (prop) (nth 1 (assq prop unidata-prop-alist)))
@@ -393,9 +417,18 @@ or nil for non-mirrored character.")))
393 (while tail 417 (while tail
394 (setcar tail (cons (car tail) val-code)) 418 (setcar tail (cons (car tail) val-code))
395 (setq tail (cdr tail) val-code (1+ val-code))) 419 (setq tail (cdr tail) val-code (1+ val-code)))
396 (setq default-value (unidata-encode-val val-list default-value)) 420 (if (consp default-value)
397 (set-char-table-range table t default-value) 421 (setq default-value (copy-sequence default-value))
398 (set-char-table-range table nil default-value) 422 (setq default-value (list default-value)))
423 (setcar default-value
424 (unidata-encode-val val-list (car default-value)))
425 (set-char-table-range table t (car default-value))
426 (set-char-table-range table nil (car default-value))
427 (dolist (elm (cdr default-value))
428 (setcar (nthcdr 2 elm)
429 (unidata-encode-val val-list (nth 2 elm)))
430 (set-char-table-range table (cons (car elm) (nth 1 elm)) (nth 2 elm)))
431
399 (setq tail unidata-list) 432 (setq tail unidata-list)
400 (while tail 433 (while tail
401 (setq elt (car tail) tail (cdr tail)) 434 (setq elt (car tail) tail (cdr tail))
@@ -419,17 +452,27 @@ or nil for non-mirrored character.")))
419 (setq prev-range-data (cons (cons from to) val-code))))) 452 (setq prev-range-data (cons (cons from to) val-code)))))
420 (let* ((start (lsh (lsh range -7) 7)) 453 (let* ((start (lsh (lsh range -7) 7))
421 (limit (+ start 127)) 454 (limit (+ start 127))
422 str count new-val) 455 str count new-val from to vcode)
423 (fillarray vec 0) 456 (fillarray vec (car default-value))
424 ;; See the comment above. 457 (dolist (elm (cdr default-value))
425 (when (and prev-range-data 458 (setq from (car elm) to (nth 1 elm))
426 (>= (cdr (car prev-range-data)) start)) 459 (when (and (<= from limit)
427 (let ((from (car (car prev-range-data))) 460 (or (>= from start) (>= to start)))
428 (to (cdr (car prev-range-data))) 461 (setq from (max from start)
429 (vcode (cdr prev-range-data))) 462 to (min to limit)
463 vcode (nth 2 elm))
430 (while (<= from to) 464 (while (<= from to)
431 (aset vec (- from start) vcode) 465 (aset vec (- from start) vcode)
432 (setq from (1+ from))))) 466 (setq from (1+ from)))))
467 ;; See the comment above.
468 (when (and prev-range-data
469 (>= (cdr (car prev-range-data)) start))
470 (setq from (car (car prev-range-data))
471 to (cdr (car prev-range-data))
472 vcode (cdr prev-range-data))
473 (while (<= from to)
474 (aset vec (- from start) vcode)
475 (setq from (1+ from))))
433 (setq prev-range-data nil) 476 (setq prev-range-data nil)
434 (if val-code 477 (if val-code
435 (aset vec (- range start) val-code)) 478 (aset vec (- range start) val-code))
@@ -669,7 +712,7 @@ or nil for non-mirrored character.")))
669 (aset table c name) 712 (aset table c name)
670 (if (= c char) 713 (if (= c char)
671 (setq val name)))) 714 (setq val name))))
672 val))) 715 (or val ""))))
673 716
674 ((and (integerp val) (> val 0)) 717 ((and (integerp val) (> val 0))
675 (let* ((symbol-table (aref (char-table-extra-slot table 4) 1)) 718 (let* ((symbol-table (aref (char-table-extra-slot table 4) 1))
@@ -695,7 +738,9 @@ or nil for non-mirrored character.")))
695 ((eq sym 'CJK\ COMPATIBILITY\ IDEOGRAPH) 738 ((eq sym 'CJK\ COMPATIBILITY\ IDEOGRAPH)
696 (format "%s-%04X" sym char)) 739 (format "%s-%04X" sym char))
697 ((eq sym 'VARIATION\ SELECTOR) 740 ((eq sym 'VARIATION\ SELECTOR)
698 (format "%s-%d" sym (+ (- char #xe0100) 17)))))))) 741 (format "%s-%d" sym (+ (- char #xe0100) 17))))))
742
743 (t "")))
699 744
700;; Store VAL as the name of CHAR in TABLE. 745;; Store VAL as the name of CHAR in TABLE.
701 746
@@ -707,6 +752,9 @@ or nil for non-mirrored character.")))
707 752
708(defun unidata-get-decomposition (char val table) 753(defun unidata-get-decomposition (char val table)
709 (cond 754 (cond
755 ((not val)
756 (list char))
757
710 ((consp val) 758 ((consp val)
711 val) 759 val)
712 760
@@ -747,7 +795,8 @@ or nil for non-mirrored character.")))
747 (aset vec idx (nconc word-list tail-list))) 795 (aset vec idx (nconc word-list tail-list)))
748 (dotimes (i 128) 796 (dotimes (i 128)
749 (aset table (+ first-char i) (aref vec i))) 797 (aset table (+ first-char i) (aref vec i)))
750 (aref vec (- char first-char))))) 798 (setq val (aref vec (- char first-char)))
799 (or val (list char)))))
751 800
752 ;; Hangul syllable 801 ;; Hangul syllable
753 ((and (eq val 0) (>= char #xAC00) (<= char #xD7A3)) 802 ((and (eq val 0) (>= char #xAC00) (<= char #xD7A3))
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 4cb4d0a6f50..4bf615328b1 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,14 @@
12011-08-24 Eli Zaretskii <eliz@gnu.org>
2
3 * display.texi (Bidirectional Display): Document return value in
4 buffers that are not bidi-reordered for display, and in unibyte
5 buffers.
6
72011-08-23 Eli Zaretskii <eliz@gnu.org>
8
9 * nonascii.texi (Character Properties): Document the values for
10 unassigned codepoints.
11
12011-08-18 Eli Zaretskii <eliz@gnu.org> 122011-08-18 Eli Zaretskii <eliz@gnu.org>
2 13
3 * nonascii.texi (Character Properties): Document use of 14 * nonascii.texi (Character Properties): Document use of
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 8f7f4003411..0593eba8f05 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -6104,7 +6104,9 @@ omitted or @code{nil}, it defaults to the current buffer. If the
6104buffer-local value of the variable @code{bidi-paragraph-direction} is 6104buffer-local value of the variable @code{bidi-paragraph-direction} is
6105non-@code{nil}, the returned value will be identical to that value; 6105non-@code{nil}, the returned value will be identical to that value;
6106otherwise, the returned value reflects the paragraph direction 6106otherwise, the returned value reflects the paragraph direction
6107determined dynamically by Emacs. 6107determined dynamically by Emacs. For buffers whose value of
6108@code{bidi-display-reordering} is @code{nil} as well as unibyte
6109buffers, this function always returns @code{left-to-right}.
6108@end defun 6110@end defun
6109 6111
6110@cindex layout on display, and bidirectional text 6112@cindex layout on display, and bidirectional text
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index 7b6d665b2ac..298c7c3d1a8 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -369,6 +369,12 @@ replacing each @samp{_} character with a dash @samp{-}. For example,
369@code{canonical-combining-class}. However, sometimes we shorten the 369@code{canonical-combining-class}. However, sometimes we shorten the
370names to make their use easier. 370names to make their use easier.
371 371
372@cindex unassigned character codepoints
373 Some codepoints are left @dfn{unassigned} by the
374@acronym{UCD}---they don't correspond to any character. The Unicode
375Standard defines default values of properties for such codepoints;
376they are mentioned below for each property.
377
372 Here is the full list of value types for all the character 378 Here is the full list of value types for all the character
373properties that Emacs knows about: 379properties that Emacs knows about:
374 380
@@ -376,24 +382,31 @@ properties that Emacs knows about:
376@item name 382@item name
377Corresponds to the @code{Name} Unicode property. The value is a 383Corresponds to the @code{Name} Unicode property. The value is a
378string consisting of upper-case Latin letters A to Z, digits, spaces, 384string consisting of upper-case Latin letters A to Z, digits, spaces,
379and hyphen @samp{-} characters. 385and hyphen @samp{-} characters. For unassigned codepoints, the value
386is an empty string.
380 387
381@cindex unicode general category 388@cindex unicode general category
382@item general-category 389@item general-category
383Corresponds to the @code{General_Category} Unicode property. The 390Corresponds to the @code{General_Category} Unicode property. The
384value is a symbol whose name is a 2-letter abbreviation of the 391value is a symbol whose name is a 2-letter abbreviation of the
385character's classification. 392character's classification. For unassigned codepoints, the value
393is @code{Cn}.
386 394
387@item canonical-combining-class 395@item canonical-combining-class
388Corresponds to the @code{Canonical_Combining_Class} Unicode property. 396Corresponds to the @code{Canonical_Combining_Class} Unicode property.
389The value is an integer number. 397The value is an integer number. For unassigned codepoints, the value
398is zero.
390 399
391@cindex bidirectional class of characters 400@cindex bidirectional class of characters
392@item bidi-class 401@item bidi-class
393Corresponds to the Unicode @code{Bidi_Class} property. The value is a 402Corresponds to the Unicode @code{Bidi_Class} property. The value is a
394symbol whose name is the Unicode @dfn{directional type} of the 403symbol whose name is the Unicode @dfn{directional type} of the
395character. Emacs uses this property when it reorders bidirectional 404character. Emacs uses this property when it reorders bidirectional
396text for display (@pxref{Bidirectional Display}). 405text for display (@pxref{Bidirectional Display}). For unassigned
406codepoints, the value depends on the code blocks to which the
407codepoint belongs: most unassigned codepoints get the value of
408@code{L} (strong L), but some get values of @code{AL} (Arabic letter)
409or @code{R} (strong R).
397 410
398@item decomposition 411@item decomposition
399Corresponds to the Unicode @code{Decomposition_Type} and 412Corresponds to the Unicode @code{Decomposition_Type} and
@@ -405,19 +418,22 @@ Note that the Unicode spec writes these tag names inside
405brackets; e.g., Unicode specifies @samp{<small>} where Emacs uses 418brackets; e.g., Unicode specifies @samp{<small>} where Emacs uses
406@samp{small}. 419@samp{small}.
407}; the other elements are characters that give the compatibility 420}; the other elements are characters that give the compatibility
408decomposition sequence of this character. 421decomposition sequence of this character. For unassigned codepoints,
422the value is the character itself.
409 423
410@item decimal-digit-value 424@item decimal-digit-value
411Corresponds to the Unicode @code{Numeric_Value} property for 425Corresponds to the Unicode @code{Numeric_Value} property for
412characters whose @code{Numeric_Type} is @samp{Digit}. The value is an 426characters whose @code{Numeric_Type} is @samp{Digit}. The value is an
413integer number. 427integer number. For unassigned codepoints, the value is @code{nil},
428which means @acronym{NaN}, or ``not-a-number''.
414 429
415@item digit-value 430@item digit-value
416Corresponds to the Unicode @code{Numeric_Value} property for 431Corresponds to the Unicode @code{Numeric_Value} property for
417characters whose @code{Numeric_Type} is @samp{Decimal}. The value is 432characters whose @code{Numeric_Type} is @samp{Decimal}. The value is
418an integer number. Examples of such characters include compatibility 433an integer number. Examples of such characters include compatibility
419subscript and superscript digits, for which the value is the 434subscript and superscript digits, for which the value is the
420corresponding number. 435corresponding number. For unassigned codepoints, the value is
436@code{nil}, which means @acronym{NaN}.
421 437
422@item numeric-value 438@item numeric-value
423Corresponds to the Unicode @code{Numeric_Value} property for 439Corresponds to the Unicode @code{Numeric_Value} property for
@@ -426,12 +442,15 @@ this property is an integer or a floating-point number. Examples of
426characters that have this property include fractions, subscripts, 442characters that have this property include fractions, subscripts,
427superscripts, Roman numerals, currency numerators, and encircled 443superscripts, Roman numerals, currency numerators, and encircled
428numbers. For example, the value of this property for the character 444numbers. For example, the value of this property for the character
429@code{U+2155} (@sc{vulgar fraction one fifth}) is @code{0.2}. 445@code{U+2155} (@sc{vulgar fraction one fifth}) is @code{0.2}. For
446unassigned codepoints, the value is @code{nil}, which means
447@acronym{NaN}.
430 448
431@cindex mirroring of characters 449@cindex mirroring of characters
432@item mirrored 450@item mirrored
433Corresponds to the Unicode @code{Bidi_Mirrored} property. The value 451Corresponds to the Unicode @code{Bidi_Mirrored} property. The value
434of this property is a symbol, either @code{Y} or @code{N}. 452of this property is a symbol, either @code{Y} or @code{N}. For
453unassigned codepoints, the value is @code{N}.
435 454
436@item mirroring 455@item mirroring
437Corresponds to the Unicode @code{Bidi_Mirroring_Glyph} property. The 456Corresponds to the Unicode @code{Bidi_Mirroring_Glyph} property. The
@@ -443,29 +462,33 @@ property; however, some characters whose @code{mirrored} property is
443@code{Y} also have @code{nil} for @code{mirroring}, because no 462@code{Y} also have @code{nil} for @code{mirroring}, because no
444appropriate characters exist with mirrored glyphs. Emacs uses this 463appropriate characters exist with mirrored glyphs. Emacs uses this
445property to display mirror images of characters when appropriate 464property to display mirror images of characters when appropriate
446(@pxref{Bidirectional Display}). 465(@pxref{Bidirectional Display}). For unassigned codepoints, the value
466is @code{nil}.
447 467
448@item old-name 468@item old-name
449Corresponds to the Unicode @code{Unicode_1_Name} property. The value 469Corresponds to the Unicode @code{Unicode_1_Name} property. The value
450is a string. 470is a string. For unassigned codepoints, the value is an empty string.
451 471
452@item iso-10646-comment 472@item iso-10646-comment
453Corresponds to the Unicode @code{ISO_Comment} property. The value is 473Corresponds to the Unicode @code{ISO_Comment} property. The value is
454a string. 474a string. For unassigned codepoints, the value is an empty string.
455 475
456@item uppercase 476@item uppercase
457Corresponds to the Unicode @code{Simple_Uppercase_Mapping} property. 477Corresponds to the Unicode @code{Simple_Uppercase_Mapping} property.
458The value of this property is a single character. 478The value of this property is a single character. For unassigned
479codepoints, the value is @code{nil}, which means the character itself.
459 480
460@item lowercase 481@item lowercase
461Corresponds to the Unicode @code{Simple_Lowercase_Mapping} property. 482Corresponds to the Unicode @code{Simple_Lowercase_Mapping} property.
462The value of this property is a single character. 483The value of this property is a single character. For unassigned
484codepoints, the value is @code{nil}, which means the character itself.
463 485
464@item titlecase 486@item titlecase
465Corresponds to the Unicode @code{Simple_Titlecase_Mapping} property. 487Corresponds to the Unicode @code{Simple_Titlecase_Mapping} property.
466@dfn{Title case} is a special form of a character used when the first 488@dfn{Title case} is a special form of a character used when the first
467character of a word needs to be capitalized. The value of this 489character of a word needs to be capitalized. The value of this
468property is a single character. 490property is a single character. For unassigned codepoints, the value
491is @code{nil}, which means the character itself.
469@end table 492@end table
470 493
471@defun get-char-code-property char propname 494@defun get-char-code-property char propname
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 31752a2bc2a..092aa6fb387 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
12011-08-24 Steve Chapel <schapel@laptop.stevechapel.com> (tiny change)
2
3 * refcards/refcard.tex: Add a few more commands. (Bug#9343)
4
12011-08-22 Juri Linkov <juri@jurta.org> 52011-08-22 Juri Linkov <juri@jurta.org>
2 6
3 * compilation.txt: Add more samples of output and non-output 7 * compilation.txt: Add more samples of output and non-output
diff --git a/etc/refcards/refcard.tex b/etc/refcards/refcard.tex
index 52b9348db26..7d4f9dbfa89 100644
--- a/etc/refcards/refcard.tex
+++ b/etc/refcards/refcard.tex
@@ -332,6 +332,7 @@ If Emacs is still searching, \kbd{C-g} cancels only the part not matched.
332 332
333\shortcopyrightnotice 333\shortcopyrightnotice
334 334
335\newcolumn
335\section{Motion} 336\section{Motion}
336 337
337\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr 338\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
@@ -352,7 +353,10 @@ If Emacs is still searching, \kbd{C-g} cancels only the part not matched.
352\key{scroll to previous screen}{M-v} 353\key{scroll to previous screen}{M-v}
353\key{scroll left}{C-x <} 354\key{scroll left}{C-x <}
354\key{scroll right}{C-x >} 355\key{scroll right}{C-x >}
355\key{scroll current line to center of screen}{C-u C-l} 356\key{scroll current line to center, top, bottom}{C-l}
357
358\key{goto line}{M-g g}
359\key{back to indentation}{M-m}
356 360
357\section{Killing and Deleting} 361\section{Killing and Deleting}
358 362
@@ -393,14 +397,15 @@ If Emacs is still searching, \kbd{C-g} cancels only the part not matched.
393 397
394Valid responses in query-replace mode are 398Valid responses in query-replace mode are
395 399
396\key{{\bf replace} this one, go on to next}{SPC} 400\key{{\bf replace} this one, go on to next}{SPC {\rm or} y}
397\key{replace this one, don't move}{,} 401\key{replace this one, don't move}{,}
398\key{{\bf skip} to next without replacing}{DEL} 402\key{{\bf skip} to next without replacing}{DEL {\rm or} n}
399\key{replace all remaining matches}{!} 403\key{replace all remaining matches}{!}
400\key{{\bf back up} to the previous match}{^} 404\key{{\bf back up} to the previous match}{^}
401\key{{\bf exit} query-replace}{RET} 405\key{{\bf exit} query-replace}{RET}
402\key{enter recursive edit (\kbd{C-M-c} to exit)}{C-r} 406\key{enter recursive edit (\kbd{C-M-c} to exit)}{C-r}
403 407
408\newcolumn
404\section{Multiple Windows} 409\section{Multiple Windows}
405 410
406When two commands are shown, the second is a similar command for a 411When two commands are shown, the second is a similar command for a
@@ -438,6 +443,7 @@ frame instead of a window.
438\key{indent {\bf region} (mode-dependent)}{C-M-\\} 443\key{indent {\bf region} (mode-dependent)}{C-M-\\}
439\key{indent {\bf sexp} (mode-dependent)}{C-M-q} 444\key{indent {\bf sexp} (mode-dependent)}{C-M-q}
440\key{indent region rigidly {\it arg\/} columns}{C-x TAB} 445\key{indent region rigidly {\it arg\/} columns}{C-x TAB}
446\key{indent for comment}{M-;}
441 447
442\key{insert newline after point}{C-o} 448\key{insert newline after point}{C-o}
443\key{move rest of line vertically down}{C-M-o} 449\key{move rest of line vertically down}{C-M-o}
@@ -536,6 +542,13 @@ minibuffer. Type \kbd{F10} to activate menu bar items on text terminals.
536 542
537\key{expand previous word dynamically}{M-/} 543\key{expand previous word dynamically}{M-/}
538 544
545\section{Miscellaneous}
546
547\key{numeric argument}{C-u {\it num}}
548\key{negative argument}{M--}
549\key{quoted insert}{C-q {\it char}}
550
551\newcolumn
539\section{Regular Expressions} 552\section{Regular Expressions}
540 553
541\key{any single character except a newline}{. {\rm(dot)}} 554\key{any single character except a newline}{. {\rm(dot)}}
@@ -604,6 +617,7 @@ Other:
604 617
605\endindentedkeys 618\endindentedkeys
606 619
620\newcolumn
607\section{Registers} 621\section{Registers}
608 622
609\key{save region in register}{C-x r s} 623\key{save region in register}{C-x r s}
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2973fa64360..91078ce3246 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,91 @@
12011-08-25 Chong Yidong <cyd@stupidchicken.com>
2
3 * window.el (bury-buffer, quit-window): Use bury-buffer-internal.
4
52011-08-25 Glenn Morris <rgm@gnu.org>
6
7 * mail/smtpmail.el (smtpmail-smtp-user): Add version: tag.
8 (smtpmail-via-smtp): Handle nil response from smtp.
9
102011-08-24 Juri Linkov <juri@jurta.org>
11
12 * proced.el (proced-marked): Inherit from `error' instead of
13 `font-lock-warning-face'.
14
15 * ibuffer.el (ibuffer-marked-face): Change default face from
16 `font-lock-warning-face' to `warning'.
17 (ibuffer-deletion-face): Change default face from
18 `font-lock-type-face' to `error'.
19
20 * battery.el (battery-update): Use the face `error' instead of
21 `font-lock-warning-face' (bug#6117).
22
232011-08-24 Juri Linkov <juri@jurta.org>
24
25 * faces.el (success): Change face color from "Green3" to
26 "ForestGreen" on light background (bug#9353).
27
282011-08-24 Chong Yidong <cyd@stupidchicken.com>
29
30 * window.el (quit-window): Renamed from quit-restore-window. Use
31 same arglist as old quit-window.
32 (frame-auto-delete): Doc fix.
33
34 * view.el (view-mode-exit): Use quit-window.
35
362011-08-24 Juri Linkov <juri@jurta.org>
37
38 * isearch.el (isearch-ring-adjust1): Start visiting previous
39 search strings from the index 0 (-1 + 1) instead of 1 (0 + 1).
40 (isearch-repeat, isearch-edit-string): Call `isearch-ring-adjust1'
41 for empty search string (when the last search string is reused
42 automatically) to adjust the isearch ring to the last element and
43 prepare the correct index for further M-p commands (bug#9185).
44
452011-08-24 Kenichi Handa <handa@m17n.org>
46
47 * international/ucs-normalize.el: If decomposition property of
48 CHAR is the default one (i.e. a list of CHAR itself), treat it as
49 nil.
50 (nfd, nfkd): Likewise.
51
522011-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
53
54 * mpc.el (mpc--proc-filter): Don't signal mpc-proc-error since signals
55 from process filters aren't reliably transmitted to the surrounding
56 accept-process-output.
57 (mpc-proc-check): New function.
58 (mpc-proc-sync): Use it (bug#8293)
59
602011-08-23 Stefan Monnier <monnier@iro.umontreal.ca>
61
62 * emacs-lisp/eieio.el (eieio-defmethod, eieio-defgeneric):
63 Add compatibility functions (bug#9313).
64
652011-08-23 Eli Zaretskii <eliz@gnu.org>
66
67 * cus-start.el (all): Add entry for bidi-paragraph-direction.
68
69 * international/uni-bidi.el: Regenerated.
70
712011-08-23 Kenichi Handa <handa@m17n.org>
72
73 * international/charprop.el:
74 * international/uni-bidi.el:
75 * international/uni-category.el:
76 * international/uni-combining.el:
77 * international/uni-comment.el:
78 * international/uni-decimal.el:
79 * international/uni-decomposition.el:
80 * international/uni-digit.el:
81 * international/uni-lowercase.el:
82 * international/uni-mirrored.el:
83 * international/uni-name.el:
84 * international/uni-numeric.el:
85 * international/uni-old-name.el:
86 * international/uni-titlecase.el:
87 * international/uni-uppercase.el: Regenerate.
88
12011-08-23 Martin Rudalics <rudalics@gmx.at> 892011-08-23 Martin Rudalics <rudalics@gmx.at>
2 90
3 * help.el (help-window-setup): Fix message displayed when other 91 * help.el (help-window-setup): Fix message displayed when other
diff --git a/lisp/battery.el b/lisp/battery.el
index d7d3045fa58..e0bba96b655 100644
--- a/lisp/battery.el
+++ b/lisp/battery.el
@@ -199,7 +199,7 @@ seconds."
199 'face 199 'face
200 (and (<= (car (read-from-string (cdr (assq ?p data)))) 200 (and (<= (car (read-from-string (cdr (assq ?p data))))
201 battery-load-critical) 201 battery-load-critical)
202 'font-lock-warning-face) 202 'error)
203 'help-echo "Battery status information"))) 203 'help-echo "Battery status information")))
204 (force-mode-line-update)) 204 (force-mode-line-update))
205 205
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 389716b35b9..232c6c3808e 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -118,6 +118,13 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
118 :standard (not noninteractive) 118 :standard (not noninteractive)
119 :initialize custom-initialize-delay 119 :initialize custom-initialize-delay
120 :set custom-set-minor-mode) 120 :set custom-set-minor-mode)
121 (bidi-paragraph-direction
122 paragraphs
123 (choice
124 (const :tag "Left to Right" left-to-right)
125 (const :tag "Right to Left" right-to-left)
126 (const :tag "Dynamic, according to paragraph text" nil))
127 "24.1")
121 ;; callint.c 128 ;; callint.c
122 (mark-even-if-inactive editing-basics boolean) 129 (mark-even-if-inactive editing-basics boolean)
123 ;; callproc.c 130 ;; callproc.c
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 83c09b6fe0f..f1fe9594fc0 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -1312,20 +1312,20 @@ Summary:
1312(defun eieio--defmethod (method kind argclass code) 1312(defun eieio--defmethod (method kind argclass code)
1313 "Work part of the `defmethod' macro defining METHOD with ARGS." 1313 "Work part of the `defmethod' macro defining METHOD with ARGS."
1314 (let ((key 1314 (let ((key
1315 ;; find optional keys 1315 ;; find optional keys
1316 (cond ((or (eq ':BEFORE kind) 1316 (cond ((or (eq ':BEFORE kind)
1317 (eq ':before kind)) 1317 (eq ':before kind))
1318 method-before) 1318 method-before)
1319 ((or (eq ':AFTER kind) 1319 ((or (eq ':AFTER kind)
1320 (eq ':after kind)) 1320 (eq ':after kind))
1321 method-after) 1321 method-after)
1322 ((or (eq ':PRIMARY kind) 1322 ((or (eq ':PRIMARY kind)
1323 (eq ':primary kind)) 1323 (eq ':primary kind))
1324 method-primary) 1324 method-primary)
1325 ((or (eq ':STATIC kind) 1325 ((or (eq ':STATIC kind)
1326 (eq ':static kind)) 1326 (eq ':static kind))
1327 method-static) 1327 method-static)
1328 ;; Primary key 1328 ;; Primary key
1329 (t method-primary)))) 1329 (t method-primary))))
1330 ;; Make sure there is a generic (when called from defclass). 1330 ;; Make sure there is a generic (when called from defclass).
1331 (eieio--defalias 1331 (eieio--defalias
@@ -1338,8 +1338,8 @@ Summary:
1338 ;; under the type `primary' which is a non-specific calling of the 1338 ;; under the type `primary' which is a non-specific calling of the
1339 ;; function. 1339 ;; function.
1340 (if argclass 1340 (if argclass
1341 (if (not (class-p argclass)) 1341 (if (not (class-p argclass))
1342 (error "Unknown class type %s in method parameters" 1342 (error "Unknown class type %s in method parameters"
1343 argclass)) 1343 argclass))
1344 (if (= key -1) 1344 (if (= key -1)
1345 (signal 'wrong-type-argument (list :static 'non-class-arg))) 1345 (signal 'wrong-type-argument (list :static 'non-class-arg)))
@@ -2864,6 +2864,106 @@ of `eq'."
2864) 2864)
2865 2865
2866 2866
2867;;; Obsolete backward compatibility functions.
2868;; Needed to run byte-code compiled with the EIEIO of Emacs-23.
2869
2870(defun eieio-defmethod (method args)
2871 "Obsolete work part of an old version of the `defmethod' macro."
2872 (let ((key nil) (body nil) (firstarg nil) (argfix nil) (argclass nil) loopa)
2873 ;; find optional keys
2874 (setq key
2875 (cond ((or (eq ':BEFORE (car args))
2876 (eq ':before (car args)))
2877 (setq args (cdr args))
2878 method-before)
2879 ((or (eq ':AFTER (car args))
2880 (eq ':after (car args)))
2881 (setq args (cdr args))
2882 method-after)
2883 ((or (eq ':PRIMARY (car args))
2884 (eq ':primary (car args)))
2885 (setq args (cdr args))
2886 method-primary)
2887 ((or (eq ':STATIC (car args))
2888 (eq ':static (car args)))
2889 (setq args (cdr args))
2890 method-static)
2891 ;; Primary key
2892 (t method-primary)))
2893 ;; get body, and fix contents of args to be the arguments of the fn.
2894 (setq body (cdr args)
2895 args (car args))
2896 (setq loopa args)
2897 ;; Create a fixed version of the arguments
2898 (while loopa
2899 (setq argfix (cons (if (listp (car loopa)) (car (car loopa)) (car loopa))
2900 argfix))
2901 (setq loopa (cdr loopa)))
2902 ;; make sure there is a generic
2903 (eieio-defgeneric
2904 method
2905 (if (stringp (car body))
2906 (car body) (format "Generically created method `%s'." method)))
2907 ;; create symbol for property to bind to. If the first arg is of
2908 ;; the form (varname vartype) and `vartype' is a class, then
2909 ;; that class will be the type symbol. If not, then it will fall
2910 ;; under the type `primary' which is a non-specific calling of the
2911 ;; function.
2912 (setq firstarg (car args))
2913 (if (listp firstarg)
2914 (progn
2915 (setq argclass (nth 1 firstarg))
2916 (if (not (class-p argclass))
2917 (error "Unknown class type %s in method parameters"
2918 (nth 1 firstarg))))
2919 (if (= key -1)
2920 (signal 'wrong-type-argument (list :static 'non-class-arg)))
2921 ;; generics are higher
2922 (setq key (eieio-specialized-key-to-generic-key key)))
2923 ;; Put this lambda into the symbol so we can find it
2924 (if (byte-code-function-p (car-safe body))
2925 (eieiomt-add method (car-safe body) key argclass)
2926 (eieiomt-add method (append (list 'lambda (reverse argfix)) body)
2927 key argclass))
2928 )
2929
2930 (when eieio-optimize-primary-methods-flag
2931 ;; Optimizing step:
2932 ;;
2933 ;; If this method, after this setup, only has primary methods, then
2934 ;; we can setup the generic that way.
2935 (if (generic-primary-only-p method)
2936 ;; If there is only one primary method, then we can go one more
2937 ;; optimization step.
2938 (if (generic-primary-only-one-p method)
2939 (eieio-defgeneric-reset-generic-form-primary-only-one method)
2940 (eieio-defgeneric-reset-generic-form-primary-only method))
2941 (eieio-defgeneric-reset-generic-form method)))
2942
2943 method)
2944(make-obsolete 'eieio-defmethod 'eieio--defmethod "24.1")
2945
2946(defun eieio-defgeneric (method doc-string)
2947 "Obsolete work part of an old version of the `defgeneric' macro."
2948 (if (and (fboundp method) (not (generic-p method))
2949 (or (byte-code-function-p (symbol-function method))
2950 (not (eq 'autoload (car (symbol-function method)))))
2951 )
2952 (error "You cannot create a generic/method over an existing symbol: %s"
2953 method))
2954 ;; Don't do this over and over.
2955 (unless (fboundp 'method)
2956 ;; This defun tells emacs where the first definition of this
2957 ;; method is defined.
2958 `(defun ,method nil)
2959 ;; Make sure the method tables are installed.
2960 (eieiomt-install method)
2961 ;; Apply the actual body of this function.
2962 (fset method (eieio-defgeneric-form method doc-string))
2963 ;; Return the method
2964 'method))
2965(make-obsolete 'eieio-defgeneric nil "24.1")
2966
2867;;; Interfacing with edebug 2967;;; Interfacing with edebug
2868;; 2968;;
2869(defun eieio-edebug-prin1-to-string (object &optional noescape) 2969(defun eieio-edebug-prin1-to-string (object &optional noescape)
diff --git a/lisp/faces.el b/lisp/faces.el
index 404bd7b6609..3c4a3330c81 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -2435,7 +2435,7 @@ It is used for characters of no fonts too."
2435 2435
2436(defface success 2436(defface success
2437 '((((class color) (min-colors 16) (background light)) 2437 '((((class color) (min-colors 16) (background light))
2438 (:foreground "Green3" :weight bold)) 2438 (:foreground "ForestGreen" :weight bold))
2439 (((class color) (min-colors 88) (background dark)) 2439 (((class color) (min-colors 88) (background dark))
2440 (:foreground "Green1" :weight bold)) 2440 (:foreground "Green1" :weight bold))
2441 (((class color) (min-colors 16) (background dark)) 2441 (((class color) (min-colors 16) (background dark))
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 725192399ff..5a86508e144 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -356,12 +356,12 @@ directory, like `default-directory'."
356 :type 'hook 356 :type 'hook
357 :group 'ibuffer) 357 :group 'ibuffer)
358 358
359(defcustom ibuffer-marked-face 'font-lock-warning-face 359(defcustom ibuffer-marked-face 'warning
360 "Face used for displaying marked buffers." 360 "Face used for displaying marked buffers."
361 :type 'face 361 :type 'face
362 :group 'ibuffer) 362 :group 'ibuffer)
363 363
364(defcustom ibuffer-deletion-face 'font-lock-type-face 364(defcustom ibuffer-deletion-face 'error
365 "Face used for displaying buffers marked for deletion." 365 "Face used for displaying buffers marked for deletion."
366 :type 'face 366 :type 'face
367 :group 'ibuffer) 367 :group 'ibuffer)
diff --git a/lisp/international/charprop.el b/lisp/international/charprop.el
index 919666010b1..2424e87ae44 100644
--- a/lisp/international/charprop.el
+++ b/lisp/international/charprop.el
@@ -29,15 +29,18 @@ one of these symbols representing compatibility formatting tag:
29;; FILE: uni-decimal.el 29;; FILE: uni-decimal.el
30(define-char-code-property 'decimal-digit-value "uni-decimal.el" 30(define-char-code-property 'decimal-digit-value "uni-decimal.el"
31 "Unicode numeric value (decimal digit). 31 "Unicode numeric value (decimal digit).
32Property value is an integer.") 32Property value is an integer 0..9, or nil.
33The value nil stands for NaN \"Numeric_Value\".")
33;; FILE: uni-digit.el 34;; FILE: uni-digit.el
34(define-char-code-property 'digit-value "uni-digit.el" 35(define-char-code-property 'digit-value "uni-digit.el"
35 "Unicode numeric value (digit). 36 "Unicode numeric value (digit).
36Property value is an integer.") 37Property value is an integer 0..9, or nil.
38The value nil stands for NaN \"Numeric_Value\".")
37;; FILE: uni-numeric.el 39;; FILE: uni-numeric.el
38(define-char-code-property 'numeric-value "uni-numeric.el" 40(define-char-code-property 'numeric-value "uni-numeric.el"
39 "Unicode numeric value (numeric). 41 "Unicode numeric value (numeric).
40Property value is an integer or a floating point.") 42Property value is an integer, a floating point, or nil.
43The value nil stands for NaN \"Numeric_Value\".")
41;; FILE: uni-mirrored.el 44;; FILE: uni-mirrored.el
42(define-char-code-property 'mirrored "uni-mirrored.el" 45(define-char-code-property 'mirrored "uni-mirrored.el"
43 "Unicode bidi mirrored flag. 46 "Unicode bidi mirrored flag.
@@ -53,20 +56,27 @@ Property value is a string.")
53;; FILE: uni-uppercase.el 56;; FILE: uni-uppercase.el
54(define-char-code-property 'uppercase "uni-uppercase.el" 57(define-char-code-property 'uppercase "uni-uppercase.el"
55 "Unicode simple uppercase mapping. 58 "Unicode simple uppercase mapping.
56Property value is a character.") 59Property value is a character or nil.
60The value nil means that the actual property value of a character
61is the character itself.")
57;; FILE: uni-lowercase.el 62;; FILE: uni-lowercase.el
58(define-char-code-property 'lowercase "uni-lowercase.el" 63(define-char-code-property 'lowercase "uni-lowercase.el"
59 "Unicode simple lowercase mapping. 64 "Unicode simple lowercase mapping.
60Property value is a character.") 65Property value is a character or nil.
66The value nil means that the actual property value of a character
67is the character itself.")
61;; FILE: uni-titlecase.el 68;; FILE: uni-titlecase.el
62(define-char-code-property 'titlecase "uni-titlecase.el" 69(define-char-code-property 'titlecase "uni-titlecase.el"
63 "Unicode simple titlecase mapping. 70 "Unicode simple titlecase mapping.
64Property value is a character.") 71Property value is a character or nil.
72The value nil means that the actual property value of a character
73is the character itself.")
65;; FILE: uni-mirrored.el 74;; FILE: uni-mirrored.el
66(define-char-code-property 'mirroring "uni-mirrored.el" 75(define-char-code-property 'mirroring "uni-mirrored.el"
67 "Unicode bidi-mirroring characters. 76 "Unicode bidi-mirroring characters.
68Property value is a character that has the corresponding mirroring image, 77Property value is a character that has the corresponding mirroring image or nil.
69or nil for non-mirrored character.") 78The value nil means that the actual property value of a character
79is the character itself.")
70;; Local Variables: 80;; Local Variables:
71;; coding: utf-8 81;; coding: utf-8
72;; no-byte-compile: t 82;; no-byte-compile: t
diff --git a/lisp/international/ucs-normalize.el b/lisp/international/ucs-normalize.el
index f83e0f7588f..df05b355b46 100644
--- a/lisp/international/ucs-normalize.el
+++ b/lisp/international/ucs-normalize.el
@@ -139,14 +139,17 @@
139 (defun nfd (char) 139 (defun nfd (char)
140 (let ((decomposition 140 (let ((decomposition
141 (get-char-code-property char 'decomposition))) 141 (get-char-code-property char 'decomposition)))
142 (if (and decomposition (numberp (car decomposition))) 142 (if (and decomposition (numberp (car decomposition))
143 (or (> (length decomposition) 1)
144 (/= (car decomposition) char)))
143 decomposition))) 145 decomposition)))
144 146
145 (defun nfkd (char) 147 (defun nfkd (char)
146 (let ((decomposition 148 (let ((decomposition
147 (get-char-code-property char 'decomposition))) 149 (get-char-code-property char 'decomposition)))
148 (if (symbolp (car decomposition)) (cdr decomposition) 150 (if (symbolp (car decomposition)) (cdr decomposition)
149 decomposition))) 151 (if (or (> (length decomposition) 1)
152 (/= (car decomposition) char)) decomposition))))
150 153
151 (defun hfs-nfd (char) 154 (defun hfs-nfd (char)
152 (when (or (and (>= char 0) (< char #x2000)) 155 (when (or (and (>= char 0) (< char #x2000))
@@ -180,6 +183,9 @@
180 (setq ccc (ucs-normalize-ccc char)) 183 (setq ccc (ucs-normalize-ccc char))
181 (setq decomposition (get-char-code-property 184 (setq decomposition (get-char-code-property
182 char 'decomposition)) 185 char 'decomposition))
186 (if (and (= (length decomposition) 1)
187 (= (car decomposition) char))
188 (setq decomposition nil))
183 (if (and ccc (/= 0 ccc)) (add-to-list 'combining-chars char)) 189 (if (and ccc (/= 0 ccc)) (add-to-list 'combining-chars char))
184 (if (and (numberp (car decomposition)) 190 (if (and (numberp (car decomposition))
185 (/= (ucs-normalize-ccc (car decomposition)) 191 (/= (ucs-normalize-ccc (car decomposition))
diff --git a/lisp/international/uni-bidi.el b/lisp/international/uni-bidi.el
index e7682c6d8ff..4d86fc821fa 100644
--- a/lisp/international/uni-bidi.el
+++ b/lisp/international/uni-bidi.el
Binary files differ
diff --git a/lisp/international/uni-category.el b/lisp/international/uni-category.el
index a4455decc52..94b7c18b6e2 100644
--- a/lisp/international/uni-category.el
+++ b/lisp/international/uni-category.el
Binary files differ
diff --git a/lisp/international/uni-combining.el b/lisp/international/uni-combining.el
index 227b9d0af79..1437ff9acbd 100644
--- a/lisp/international/uni-combining.el
+++ b/lisp/international/uni-combining.el
Binary files differ
diff --git a/lisp/international/uni-comment.el b/lisp/international/uni-comment.el
index c9743064bd4..21ccfe3ffe7 100644
--- a/lisp/international/uni-comment.el
+++ b/lisp/international/uni-comment.el
Binary files differ
diff --git a/lisp/international/uni-decimal.el b/lisp/international/uni-decimal.el
index 2c424ffb5de..096257add20 100644
--- a/lisp/international/uni-decimal.el
+++ b/lisp/international/uni-decimal.el
Binary files differ
diff --git a/lisp/international/uni-decomposition.el b/lisp/international/uni-decomposition.el
index b0bf07bbe85..b9660cdab0a 100644
--- a/lisp/international/uni-decomposition.el
+++ b/lisp/international/uni-decomposition.el
Binary files differ
diff --git a/lisp/international/uni-digit.el b/lisp/international/uni-digit.el
index fc52fd8c28c..efb78b0e43d 100644
--- a/lisp/international/uni-digit.el
+++ b/lisp/international/uni-digit.el
Binary files differ
diff --git a/lisp/international/uni-lowercase.el b/lisp/international/uni-lowercase.el
index 41890018204..7afd9503cb3 100644
--- a/lisp/international/uni-lowercase.el
+++ b/lisp/international/uni-lowercase.el
Binary files differ
diff --git a/lisp/international/uni-mirrored.el b/lisp/international/uni-mirrored.el
index 006cf575591..e650166c24c 100644
--- a/lisp/international/uni-mirrored.el
+++ b/lisp/international/uni-mirrored.el
Binary files differ
diff --git a/lisp/international/uni-name.el b/lisp/international/uni-name.el
index 7fac18b278d..8b681631067 100644
--- a/lisp/international/uni-name.el
+++ b/lisp/international/uni-name.el
Binary files differ
diff --git a/lisp/international/uni-numeric.el b/lisp/international/uni-numeric.el
index d16e8c00870..a1865f1fb23 100644
--- a/lisp/international/uni-numeric.el
+++ b/lisp/international/uni-numeric.el
Binary files differ
diff --git a/lisp/international/uni-old-name.el b/lisp/international/uni-old-name.el
index 4e704e5cdd0..de2d67b9450 100644
--- a/lisp/international/uni-old-name.el
+++ b/lisp/international/uni-old-name.el
Binary files differ
diff --git a/lisp/international/uni-titlecase.el b/lisp/international/uni-titlecase.el
index b8098c81876..517edb20445 100644
--- a/lisp/international/uni-titlecase.el
+++ b/lisp/international/uni-titlecase.el
Binary files differ
diff --git a/lisp/international/uni-uppercase.el b/lisp/international/uni-uppercase.el
index 899276eb725..fcb22d72470 100644
--- a/lisp/international/uni-uppercase.el
+++ b/lisp/international/uni-uppercase.el
Binary files differ
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 1942641fae9..7fcc31f188f 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -1191,19 +1191,17 @@ If first char entered is \\[isearch-yank-word-or-char], then do word search inst
1191 isearch-word isearch-new-word)) 1191 isearch-word isearch-new-word))
1192 1192
1193 ;; Empty isearch-string means use default. 1193 ;; Empty isearch-string means use default.
1194 (if (= 0 (length isearch-string)) 1194 (when (= 0 (length isearch-string))
1195 (setq isearch-string (or (car (if isearch-regexp 1195 (setq isearch-string (or (car (if isearch-regexp
1196 regexp-search-ring 1196 regexp-search-ring
1197 search-ring)) 1197 search-ring))
1198 "") 1198 "")
1199 1199
1200 isearch-message 1200 isearch-message
1201 (mapconcat 'isearch-text-char-description 1201 (mapconcat 'isearch-text-char-description
1202 isearch-string "")) 1202 isearch-string ""))
1203 ;; This used to set the last search string, 1203 ;; After taking the last element, adjust ring to previous one.
1204 ;; but I think it is not right to do that here. 1204 (isearch-ring-adjust1 nil)))
1205 ;; Only the string actually used should be saved.
1206 ))
1207 1205
1208 ;; This used to push the state as of before this C-s, but it adds 1206 ;; This used to push the state as of before this C-s, but it adds
1209 ;; an inconsistent state where part of variables are from the 1207 ;; an inconsistent state where part of variables are from the
@@ -1290,7 +1288,9 @@ Use `isearch-exit' to quit without signaling."
1290 isearch-message 1288 isearch-message
1291 (mapconcat 'isearch-text-char-description 1289 (mapconcat 'isearch-text-char-description
1292 isearch-string "") 1290 isearch-string "")
1293 isearch-case-fold-search isearch-last-case-fold-search)) 1291 isearch-case-fold-search isearch-last-case-fold-search)
1292 ;; After taking the last element, adjust ring to previous one.
1293 (isearch-ring-adjust1 nil))
1294 ;; If already have what to search for, repeat it. 1294 ;; If already have what to search for, repeat it.
1295 (or isearch-success 1295 (or isearch-success
1296 (progn 1296 (progn
@@ -2071,7 +2071,7 @@ Isearch mode."
2071 () 2071 ()
2072 (set yank-pointer-name 2072 (set yank-pointer-name
2073 (setq yank-pointer 2073 (setq yank-pointer
2074 (mod (+ (or yank-pointer 0) 2074 (mod (+ (or yank-pointer (if advance 0 -1))
2075 (if advance -1 1)) 2075 (if advance -1 1))
2076 length))) 2076 length)))
2077 (setq isearch-string (nth yank-pointer ring) 2077 (setq isearch-string (nth yank-pointer ring)
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index 40fbb072594..69c49c471c0 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -88,6 +88,7 @@ The default value would be \"smtp\" or 25."
88 88
89(defcustom smtpmail-smtp-user nil 89(defcustom smtpmail-smtp-user nil
90 "User name to use when looking up credentials." 90 "User name to use when looking up credentials."
91 :version "24.1"
91 :type '(choice (const nil) string) 92 :type '(choice (const nil) string)
92 :group 'smtpmail) 93 :group 'smtpmail)
93 94
@@ -677,7 +678,7 @@ The list is in preference order.")
677 (throw 'done (format "No greeting: %s" greeting))) 678 (throw 'done (format "No greeting: %s" greeting)))
678 (when (>= code 400) 679 (when (>= code 400)
679 (throw 'done (format "Connection not allowed: %s" greeting)))) 680 (throw 'done (format "Connection not allowed: %s" greeting))))
680 681
681 (with-current-buffer process-buffer 682 (with-current-buffer process-buffer
682 (set-buffer-process-coding-system 'raw-text-unix 'raw-text-unix) 683 (set-buffer-process-coding-system 'raw-text-unix 'raw-text-unix)
683 (make-local-variable 'smtpmail-read-point) 684 (make-local-variable 'smtpmail-read-point)
@@ -730,7 +731,7 @@ The list is in preference order.")
730 731
731 (when (member 'xusr supported-extensions) 732 (when (member 'xusr supported-extensions)
732 (smtpmail-command-or-throw process (format "XUSR"))) 733 (smtpmail-command-or-throw process (format "XUSR")))
733 734
734 ;; MAIL FROM:<sender> 735 ;; MAIL FROM:<sender>
735 (let ((size-part 736 (let ((size-part
736 (if (or (member 'size supported-extensions) 737 (if (or (member 'size supported-extensions)
@@ -769,7 +770,7 @@ The list is in preference order.")
769 ) 770 )
770 ((and auth-mechanisms 771 ((and auth-mechanisms
771 (not ask-for-password) 772 (not ask-for-password)
772 (= (car result) 530)) 773 (eq (car result) 530))
773 ;; We got a "530 auth required", so we close and try 774 ;; We got a "530 auth required", so we close and try
774 ;; again, this time asking the user for a password. 775 ;; again, this time asking the user for a password.
775 (smtpmail-send-command process "QUIT") 776 (smtpmail-send-command process "QUIT")
@@ -796,6 +797,7 @@ The list is in preference order.")
796 nil) 797 nil)
797 ((and auth-mechanisms 798 ((and auth-mechanisms
798 (not ask-for-password) 799 (not ask-for-password)
800 (integerp (car result))
799 (>= (car result) 550) 801 (>= (car result) 550)
800 (<= (car result) 554)) 802 (<= (car result) 554))
801 ;; We got a "550 relay not permitted" (or the like), 803 ;; We got a "550 relay not permitted" (or the like),
diff --git a/lisp/mpc.el b/lisp/mpc.el
index 5319ea43898..932fb5926fd 100644
--- a/lisp/mpc.el
+++ b/lisp/mpc.el
@@ -246,11 +246,12 @@ and HOST defaults to localhost."
246 (process-put proc 'ready t) 246 (process-put proc 'ready t)
247 (unless (eq (match-end 0) (point-max)) 247 (unless (eq (match-end 0) (point-max))
248 (error "Unexpected trailing text")) 248 (error "Unexpected trailing text"))
249 (let ((error (match-string 1))) 249 (let ((error-text (match-string 1)))
250 (delete-region (point) (point-max)) 250 (delete-region (point) (point-max))
251 (let ((callback (process-get proc 'callback))) 251 (let ((callback (process-get proc 'callback)))
252 (process-put proc 'callback nil) 252 (process-put proc 'callback nil)
253 (if error (signal 'mpc-proc-error error)) 253 (if error-text
254 (process-put proc 'mpc-proc-error error-text))
254 (funcall callback))))))))) 255 (funcall callback)))))))))
255 256
256(defun mpc--proc-connect (host) 257(defun mpc--proc-connect (host)
@@ -314,19 +315,23 @@ and HOST defaults to localhost."
314 mpc-proc) 315 mpc-proc)
315 (setq mpc-proc (mpc--proc-connect mpc-host)))) 316 (setq mpc-proc (mpc--proc-connect mpc-host))))
316 317
318(defun mpc-proc-check (proc)
319 (let ((error-text (process-get proc 'mpc-proc-error)))
320 (when error-text
321 (process-put proc 'mpc-proc-error nil)
322 (signal 'mpc-proc-error error-text))))
323
317(defun mpc-proc-sync (&optional proc) 324(defun mpc-proc-sync (&optional proc)
318 "Wait for MPC process until it is idle again. 325 "Wait for MPC process until it is idle again.
319Return the buffer in which the process is/was running." 326Return the buffer in which the process is/was running."
320 (unless proc (setq proc (mpc-proc))) 327 (unless proc (setq proc (mpc-proc)))
321 (unwind-protect 328 (unwind-protect
322 (condition-case err 329 (progn
323 (progn 330 (while (and (not (process-get proc 'ready))
324 (while (and (not (process-get proc 'ready)) 331 (accept-process-output proc)))
325 (accept-process-output proc))) 332 (mpc-proc-check proc)
326 (if (process-get proc 'ready) (process-buffer proc) 333 (if (process-get proc 'ready) (process-buffer proc)
327 ;; (delete-process proc) 334 (error "No response from MPD")))
328 (error "No response from MPD")))
329 (error (message "MPC: %s" err) (signal (car err) (cdr err))))
330 (unless (process-get proc 'ready) 335 (unless (process-get proc 'ready)
331 ;; (debug) 336 ;; (debug)
332 (message "Killing hung process") 337 (message "Killing hung process")
@@ -358,13 +363,13 @@ which will be concatenated with proper quoting before passing them to MPD."
358 "\n"))) 363 "\n")))
359 (if callback 364 (if callback
360 ;; (let ((buf (current-buffer))) 365 ;; (let ((buf (current-buffer)))
361 (process-put proc 'callback 366 (process-put proc 'callback
362 callback 367 callback
363 ;; (lambda () 368 ;; (lambda ()
364 ;; (funcall callback 369 ;; (funcall callback
365 ;; (prog1 (current-buffer) 370 ;; (prog1 (current-buffer)
366 ;; (set-buffer buf))))) 371 ;; (set-buffer buf)))))
367 ) 372 )
368 ;; If `callback' is nil, we're executing synchronously. 373 ;; If `callback' is nil, we're executing synchronously.
369 (process-put proc 'callback 'ignore) 374 (process-put proc 'callback 'ignore)
370 ;; This returns the process's buffer. 375 ;; This returns the process's buffer.
diff --git a/lisp/proced.el b/lisp/proced.el
index 94ea579ebd8..e4987bd926c 100644
--- a/lisp/proced.el
+++ b/lisp/proced.el
@@ -395,7 +395,7 @@ It is a list of lists (KEY PREDICATE REVERSE).")
395 :group 'proced-faces) 395 :group 'proced-faces)
396 396
397(defface proced-marked 397(defface proced-marked
398 '((t (:inherit font-lock-warning-face))) 398 '((t (:inherit error)))
399 "Face used for marked processes." 399 "Face used for marked processes."
400 :group 'proced-faces) 400 :group 'proced-faces)
401 401
diff --git a/lisp/view.el b/lisp/view.el
index 21479a70a72..be011d217fc 100644
--- a/lisp/view.el
+++ b/lisp/view.el
@@ -576,9 +576,9 @@ current buffer. "
576 (cond 576 (cond
577 ((or all-windows view-exits-all-viewing-windows) 577 ((or all-windows view-exits-all-viewing-windows)
578 (dolist (window (get-buffer-window-list)) 578 (dolist (window (get-buffer-window-list))
579 (quit-restore-window window))) 579 (quit-window nil window)))
580 ((eq (window-buffer) (current-buffer)) 580 ((eq (window-buffer) (current-buffer))
581 (quit-restore-window))) 581 (quit-window)))
582 582
583 (when exit-action 583 (when exit-action
584 (funcall exit-action buffer)) 584 (funcall exit-action buffer))
diff --git a/lisp/window.el b/lisp/window.el
index 75fa0b46a1c..e68af18ab8e 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -2272,7 +2272,7 @@ another frame still exists.
2272 2272
2273Functions quitting a window and consequently affected by this 2273Functions quitting a window and consequently affected by this
2274variable are `switch-to-prev-buffer', `delete-windows-on', 2274variable are `switch-to-prev-buffer', `delete-windows-on',
2275`replace-buffer-in-windows' and `quit-restore-window'." 2275`replace-buffer-in-windows' and `quit-window'."
2276 :type '(choice 2276 :type '(choice
2277 (const :tag "Never" nil) 2277 (const :tag "Never" nil)
2278 (const :tag "Automatic" automatic) 2278 (const :tag "Automatic" automatic)
@@ -2795,7 +2795,7 @@ displayed there."
2795 (let* ((buffer (window-normalize-buffer buffer-or-name))) 2795 (let* ((buffer (window-normalize-buffer buffer-or-name)))
2796 ;; If `buffer-or-name' is not on the selected frame we unrecord it 2796 ;; If `buffer-or-name' is not on the selected frame we unrecord it
2797 ;; although it's not "here" (call it a feature). 2797 ;; although it's not "here" (call it a feature).
2798 (unrecord-buffer buffer) 2798 (bury-buffer-internal buffer)
2799 ;; Handle case where `buffer-or-name' is nil and the current buffer 2799 ;; Handle case where `buffer-or-name' is nil and the current buffer
2800 ;; is shown in the selected window. 2800 ;; is shown in the selected window.
2801 (cond 2801 (cond
@@ -2907,21 +2907,17 @@ all window-local buffer lists."
2907 ;; Unrecord BUFFER in WINDOW. 2907 ;; Unrecord BUFFER in WINDOW.
2908 (unrecord-window-buffer window buffer))))) 2908 (unrecord-window-buffer window buffer)))))
2909 2909
2910(defun quit-restore-window (&optional window kill) 2910(defun quit-window (&optional kill window)
2911 "Quit WINDOW in some way. 2911 "Quit WINDOW and bury its buffer.
2912WINDOW must be a live window and defaults to the selected window. 2912WINDOW defaults to the selected window.
2913Return nil. 2913With a prefix argument, kill the buffer instead.
2914 2914
2915According to information stored in WINDOW's `quit-restore' window 2915According to information stored in WINDOW's `quit-restore' window
2916parameter either \(1) delete WINDOW and its frame, \(2) delete 2916parameter either \(1) delete WINDOW and its frame, \(2) delete
2917WINDOW, \(3) restore the buffer previously displayed in WINDOW, 2917WINDOW, \(3) restore the buffer previously displayed in WINDOW,
2918or \(4) make WINDOW display some other buffer than the present 2918or \(4) make WINDOW display some other buffer than the present
2919one. If non-nil, reset `quit-restore' parameter to nil. 2919one. If non-nil, reset `quit-restore' parameter to nil."
2920 2920 (interactive "P")
2921Optional argument KILL non-nil means in addition kill WINDOW's
2922buffer. If KILL is nil, put WINDOW's buffer at the end of the
2923buffer list. Interactively, KILL is the prefix argument."
2924 (interactive "i\nP")
2925 (setq window (window-normalize-live-window window)) 2921 (setq window (window-normalize-live-window window))
2926 (let ((buffer (window-buffer window)) 2922 (let ((buffer (window-buffer window))
2927 (quit-restore (window-parameter window 'quit-restore)) 2923 (quit-restore (window-parameter window 'quit-restore))
@@ -2932,12 +2928,9 @@ buffer list. Interactively, KILL is the prefix argument."
2932 (eq (window-buffer window) (nth 1 quit-restore))) 2928 (eq (window-buffer window) (nth 1 quit-restore)))
2933 (window-dedicated-p window)) 2929 (window-dedicated-p window))
2934 (setq deletable (window-deletable-p window))) 2930 (setq deletable (window-deletable-p window)))
2935 ;; WINDOW can be deleted. 2931 ;; Check if WINDOW's frame can be deleted.
2936 (unrecord-buffer buffer)
2937 (if (eq deletable 'frame) 2932 (if (eq deletable 'frame)
2938 ;; WINDOW's frame can be deleted.
2939 (delete-frame (window-frame window)) 2933 (delete-frame (window-frame window))
2940 ;; Just delete WINDOW.
2941 (delete-window window)) 2934 (delete-window window))
2942 ;; If the previously selected window is still alive, select it. 2935 ;; If the previously selected window is still alive, select it.
2943 (when (window-live-p (nth 2 quit-restore)) 2936 (when (window-live-p (nth 2 quit-restore))
@@ -2948,17 +2941,17 @@ buffer list. Interactively, KILL is the prefix argument."
2948 ;; in the first place. 2941 ;; in the first place.
2949 (eq (window-buffer window) (nth 3 quit-restore))) 2942 (eq (window-buffer window) (nth 3 quit-restore)))
2950 (setq resize (with-current-buffer buffer temp-buffer-resize-mode)) 2943 (setq resize (with-current-buffer buffer temp-buffer-resize-mode))
2951 ;; Unrecord buffer.
2952 (unrecord-buffer buffer)
2953 (unrecord-window-buffer window buffer) 2944 (unrecord-window-buffer window buffer)
2954 ;; Display buffer stored in the quit-restore parameter. 2945 ;; Display buffer stored in the quit-restore parameter.
2955 (set-window-dedicated-p window nil) 2946 (set-window-dedicated-p window nil)
2956 (set-window-buffer window (nth 0 quit-restore)) 2947 (set-window-buffer window (nth 0 quit-restore))
2957 (set-window-start window (nth 1 quit-restore)) 2948 (set-window-start window (nth 1 quit-restore))
2958 (set-window-point window (nth 2 quit-restore)) 2949 (set-window-point window (nth 2 quit-restore))
2959 (when (and resize (/= (nth 4 quit-restore) (window-total-size window))) 2950 (and resize
2960 (window-resize 2951 (/= (nth 4 quit-restore) (window-total-size window))
2961 window (- (nth 4 quit-restore) (window-total-size window)))) 2952 (window-resize window
2953 (- (nth 4 quit-restore)
2954 (window-total-size window))))
2962 ;; Reset the quit-restore parameter. 2955 ;; Reset the quit-restore parameter.
2963 (set-window-parameter window 'quit-restore nil) 2956 (set-window-parameter window 'quit-restore nil)
2964 (when (window-live-p (nth 5 quit-restore)) 2957 (when (window-live-p (nth 5 quit-restore))
@@ -2967,12 +2960,12 @@ buffer list. Interactively, KILL is the prefix argument."
2967 ;; Otherwise, show another buffer in WINDOW and reset the 2960 ;; Otherwise, show another buffer in WINDOW and reset the
2968 ;; quit-restore parameter. 2961 ;; quit-restore parameter.
2969 (set-window-parameter window 'quit-restore nil) 2962 (set-window-parameter window 'quit-restore nil)
2970 (unrecord-buffer buffer)
2971 (switch-to-prev-buffer window 'bury-or-kill))) 2963 (switch-to-prev-buffer window 'bury-or-kill)))
2972 2964
2973 ;; Kill WINDOW's old-buffer if requested 2965 ;; Kill WINDOW's old-buffer if requested
2974 (when kill (kill-buffer buffer)) 2966 (if kill
2975 nil)) 2967 (kill-buffer buffer)
2968 (bury-buffer-internal buffer))))
2976 2969
2977;;; Splitting windows. 2970;;; Splitting windows.
2978(defsubst window-split-min-size (&optional horizontal) 2971(defsubst window-split-min-size (&optional horizontal)
@@ -7045,39 +7038,6 @@ Return non-nil if the window was shrunk, nil otherwise."
7045 (with-current-buffer buffer-to-kill 7038 (with-current-buffer buffer-to-kill
7046 (remove-hook 'kill-buffer-hook delete-window-hook t)))))) 7039 (remove-hook 'kill-buffer-hook delete-window-hook t))))))
7047 7040
7048(defun quit-window (&optional kill window)
7049 "Quit WINDOW and bury its buffer.
7050With a prefix argument, kill the buffer instead. WINDOW defaults
7051to the selected window.
7052
7053If WINDOW is non-nil, dedicated, or a minibuffer window, delete
7054it and, if it's alone on its frame, its frame too. Otherwise, or
7055if deleting WINDOW fails in any of the preceding cases, display
7056another buffer in WINDOW using `switch-to-buffer'.
7057
7058Optional argument KILL non-nil means kill WINDOW's buffer.
7059Otherwise, bury WINDOW's buffer, see `bury-buffer'."
7060 (interactive "P")
7061 (let ((buffer (window-buffer window)))
7062 (if (or window
7063 (window-minibuffer-p window)
7064 (window-dedicated-p window))
7065 ;; WINDOW is either non-nil, a minibuffer window, or dedicated;
7066 ;; try to delete it.
7067 (let* ((window (or window (selected-window)))
7068 (frame (window-frame window)))
7069 (if (frame-root-window-p window)
7070 ;; WINDOW is alone on its frame.
7071 (delete-frame frame)
7072 ;; There are other windows on its frame, delete WINDOW.
7073 (delete-window window)))
7074 ;; Otherwise, switch to another buffer in the selected window.
7075 (switch-to-buffer nil))
7076
7077 ;; Deal with the buffer.
7078 (if kill
7079 (kill-buffer buffer)
7080 (bury-buffer buffer))))
7081 7041
7082(defvar recenter-last-op nil 7042(defvar recenter-last-op nil
7083 "Indicates the last recenter operation performed. 7043 "Indicates the last recenter operation performed.
diff --git a/src/ChangeLog b/src/ChangeLog
index 1b1a8f67e43..431a515def5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,45 @@
12011-08-25 Chong Yidong <cyd@stupidchicken.com>
2
3 * buffer.c (Fbury_buffer_internal): Rename from Funrecord_buffer.
4 Change return value to nil.
5 (Frecord_buffer): Delete unused function.
6
72011-08-24 Eli Zaretskii <eliz@gnu.org>
8
9 * xdisp.c (Fcurrent_bidi_paragraph_direction): For unibyte
10 buffers, return left-to-right.
11 (set_cursor_from_row): Consider candidate row a win if its glyph
12 represents a newline and point is on that newline. Fixes cursor
13 positioning on the newline at EOL of R2L text within L2R
14 paragraph, and vice versa.
15 (try_cursor_movement): Check continued rows, in addition to
16 continuation rows. Fixes unwarranted scroll when point enters a
17 continued line of R2L text within an L2R paragraph, or vice versa.
18 (cursor_row_p): Consider the case of point being equal to
19 MATRIX_ROW_END_CHARPOS. Prevents cursor being stuck when moving
20 from the end of a short line to the beginning of a continued line
21 of R2L text within L2R paragraph.
22 (RECORD_MAX_MIN_POS): For max_pos, use IT_CHARPOS even for
23 composed characters.
24
25 * bidi.c (bidi_check_type): Use xassert.
26 (bidi_cache_iterator_state): Update the disp_pos and disp_prop_p
27 members.
28
292011-08-23 Eli Zaretskii <eliz@gnu.org>
30
31 * bidi.c (bidi_get_type): Abort if we get zero as the bidi type of
32 a character.
33
342011-08-23 Chong Yidong <cyd@stupidchicken.com>
35
36 * nsfont.m (ns_otf_to_script): Fix typo.
37
382011-08-22 Kenichi Handa <handa@m17n.org>
39
40 * chartab.c (Fset_char_table_extra_slot): Do not inhibit setting a
41 extra slot even if the purpose is char-code-property-table.
42
12011-08-23 Eli Zaretskii <eliz@gnu.org> 432011-08-23 Eli Zaretskii <eliz@gnu.org>
2 44
3 * xdisp.c (redisplay_window): When computing centering_position, 45 * xdisp.c (redisplay_window): When computing centering_position,
diff --git a/src/bidi.c b/src/bidi.c
index 7517eca5aed..425a0be9578 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -108,8 +108,12 @@ bidi_get_type (int ch, bidi_dir_t override)
108 abort (); 108 abort ();
109 109
110 default_type = (bidi_type_t) XINT (CHAR_TABLE_REF (bidi_type_table, ch)); 110 default_type = (bidi_type_t) XINT (CHAR_TABLE_REF (bidi_type_table, ch));
111 if (default_type == 0) 111 /* Every valid character code, even those that are unassigned by the
112 default_type = STRONG_L; 112 UCD, have some bidi-class property, according to
113 DerivedBidiClass.txt file. Therefore, if we ever get UNKNOWN_BT
114 (= zero) code from CHAR_TABLE_REF, that's a bug. */
115 if (default_type == UNKNOWN_BT)
116 abort ();
113 117
114 if (override == NEUTRAL_DIR) 118 if (override == NEUTRAL_DIR)
115 return default_type; 119 return default_type;
@@ -142,11 +146,10 @@ bidi_get_type (int ch, bidi_dir_t override)
142 } 146 }
143} 147}
144 148
145static void 149static inline void
146bidi_check_type (bidi_type_t type) 150bidi_check_type (bidi_type_t type)
147{ 151{
148 if (type < UNKNOWN_BT || type > NEUTRAL_ON) 152 xassert (UNKNOWN_BT <= type && type <= NEUTRAL_ON);
149 abort ();
150} 153}
151 154
152/* Given a bidi TYPE of a character, return its category. */ 155/* Given a bidi TYPE of a character, return its category. */
@@ -536,6 +539,8 @@ bidi_cache_iterator_state (struct bidi_it *bidi_it, int resolved)
536 bidi_cache[idx].next_for_neutral = bidi_it->next_for_neutral; 539 bidi_cache[idx].next_for_neutral = bidi_it->next_for_neutral;
537 bidi_cache[idx].next_for_ws = bidi_it->next_for_ws; 540 bidi_cache[idx].next_for_ws = bidi_it->next_for_ws;
538 bidi_cache[idx].ignore_bn_limit = bidi_it->ignore_bn_limit; 541 bidi_cache[idx].ignore_bn_limit = bidi_it->ignore_bn_limit;
542 bidi_cache[idx].disp_pos = bidi_it->disp_pos;
543 bidi_cache[idx].disp_prop_p = bidi_it->disp_prop_p;
539 } 544 }
540 545
541 bidi_cache_last_idx = idx; 546 bidi_cache_last_idx = idx;
diff --git a/src/buffer.c b/src/buffer.c
index 45d6fa36d04..832044ae6f4 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1698,27 +1698,16 @@ record_buffer (Lisp_Object buffer)
1698 call1 (Vrun_hooks, Qbuffer_list_update_hook); 1698 call1 (Vrun_hooks, Qbuffer_list_update_hook);
1699} 1699}
1700 1700
1701DEFUN ("record-buffer", Frecord_buffer, Srecord_buffer, 1, 1, 0,
1702 doc: /* Move BUFFER to the front of the buffer list.
1703Return BUFFER. */)
1704 (Lisp_Object buffer)
1705{
1706 CHECK_BUFFER (buffer);
1707
1708 record_buffer (buffer);
1709
1710 return buffer;
1711}
1712 1701
1713 /* Move BUFFER to the end of the buffer (a)lists. Do nothing if the 1702/* Move BUFFER to the end of the buffer (a)lists. Do nothing if the
1714 buffer is killed. For the selected frame's buffer list this moves 1703 buffer is killed. For the selected frame's buffer list this moves
1715 BUFFER to its end even if it was never shown in that frame. If 1704 BUFFER to its end even if it was never shown in that frame. If
1716 this happens we have a feature, hence `unrecord-buffer' should be 1705 this happens we have a feature, hence `unrecord-buffer' should be
1717 called only when BUFFER was shown in the selected frame. */ 1706 called only when BUFFER was shown in the selected frame. */
1718 1707
1719DEFUN ("unrecord-buffer", Funrecord_buffer, Sunrecord_buffer, 1, 1, 0, 1708DEFUN ("bury-buffer-internal", Fbury_buffer_internal, Sbury_buffer_internal,
1720 doc: /* Move BUFFER to the end of the buffer list. 1709 1, 1, 0,
1721Return BUFFER. */) 1710 doc: /* Move BUFFER to the end of the buffer list. */)
1722 (Lisp_Object buffer) 1711 (Lisp_Object buffer)
1723{ 1712{
1724 Lisp_Object aelt, aelt_cons, tem; 1713 Lisp_Object aelt, aelt_cons, tem;
@@ -1746,7 +1735,7 @@ Return BUFFER. */)
1746 if (!NILP (Vrun_hooks)) 1735 if (!NILP (Vrun_hooks))
1747 call1 (Vrun_hooks, Qbuffer_list_update_hook); 1736 call1 (Vrun_hooks, Qbuffer_list_update_hook);
1748 1737
1749 return buffer; 1738 return Qnil;
1750} 1739}
1751 1740
1752DEFUN ("set-buffer-major-mode", Fset_buffer_major_mode, Sset_buffer_major_mode, 1, 1, 0, 1741DEFUN ("set-buffer-major-mode", Fset_buffer_major_mode, Sset_buffer_major_mode, 1, 1, 0,
@@ -6034,8 +6023,7 @@ Functions running this hook are `get-buffer-create',
6034 defsubr (&Sother_buffer); 6023 defsubr (&Sother_buffer);
6035 defsubr (&Sbuffer_enable_undo); 6024 defsubr (&Sbuffer_enable_undo);
6036 defsubr (&Skill_buffer); 6025 defsubr (&Skill_buffer);
6037 defsubr (&Srecord_buffer); 6026 defsubr (&Sbury_buffer_internal);
6038 defsubr (&Sunrecord_buffer);
6039 defsubr (&Sset_buffer_major_mode); 6027 defsubr (&Sset_buffer_major_mode);
6040 defsubr (&Scurrent_buffer); 6028 defsubr (&Scurrent_buffer);
6041 defsubr (&Sset_buffer); 6029 defsubr (&Sset_buffer);
diff --git a/src/chartab.c b/src/chartab.c
index 0cabaac4cf5..1d4ac04312a 100644
--- a/src/chartab.c
+++ b/src/chartab.c
@@ -589,8 +589,6 @@ DEFUN ("set-char-table-extra-slot", Fset_char_table_extra_slot,
589 (Lisp_Object char_table, Lisp_Object n, Lisp_Object value) 589 (Lisp_Object char_table, Lisp_Object n, Lisp_Object value)
590{ 590{
591 CHECK_CHAR_TABLE (char_table); 591 CHECK_CHAR_TABLE (char_table);
592 if (EQ (XCHAR_TABLE (char_table)->purpose, Qchar_code_property_table))
593 error ("Can't change extra-slot of char-code-property-table");
594 CHECK_NUMBER (n); 592 CHECK_NUMBER (n);
595 if (XINT (n) < 0 593 if (XINT (n) < 0
596 || XINT (n) >= CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (char_table))) 594 || XINT (n) >= CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (char_table)))
diff --git a/src/nsfont.m b/src/nsfont.m
index 60f8c5321aa..c4d9123faef 100644
--- a/src/nsfont.m
+++ b/src/nsfont.m
@@ -303,7 +303,7 @@ static NSString
303{ 303{
304 Lisp_Object script = assq_no_quit (XCAR (otf), Votf_script_alist); 304 Lisp_Object script = assq_no_quit (XCAR (otf), Votf_script_alist);
305 return CONSP (script) 305 return CONSP (script)
306 ? [NSString stringWithUTF8String: SDATA (SYMBOL_NAME XCDR ((script)))] 306 ? [NSString stringWithUTF8String: SDATA (SYMBOL_NAME (XCDR ((script))))]
307 : @""; 307 : @"";
308} 308}
309 309
diff --git a/src/process.c b/src/process.c
index 2125478907f..977cfb964e2 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5186,6 +5186,9 @@ read_process_output (Lisp_Object proc, register int channel)
5186 p->decoding_carryover = coding->carryover_bytes; 5186 p->decoding_carryover = coding->carryover_bytes;
5187 } 5187 }
5188 if (SBYTES (text) > 0) 5188 if (SBYTES (text) > 0)
5189 /* FIXME: It's wrong to wrap or not based on debug-on-error, and
5190 sometimes it's simply wrong to wrap (e.g. when called from
5191 accept-process-output). */
5189 internal_condition_case_1 (read_process_output_call, 5192 internal_condition_case_1 (read_process_output_call,
5190 Fcons (outstream, 5193 Fcons (outstream,
5191 Fcons (proc, Fcons (text, Qnil))), 5194 Fcons (proc, Fcons (text, Qnil))),
diff --git a/src/xdisp.c b/src/xdisp.c
index f38c2828b8e..580bd59908b 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -13857,7 +13857,14 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
13857 && glyph->charpos != pt_old))))) 13857 && glyph->charpos != pt_old)))))
13858 return 0; 13858 return 0;
13859 /* If this candidate gives an exact match, use that. */ 13859 /* If this candidate gives an exact match, use that. */
13860 if (!(BUFFERP (glyph->object) && glyph->charpos == pt_old) 13860 if (!((BUFFERP (glyph->object) && glyph->charpos == pt_old)
13861 /* If this candidate is a glyph created for the
13862 terminating newline of a line, and point is on that
13863 newline, it wins because it's an exact match. */
13864 || (!row->continued_p
13865 && INTEGERP (glyph->object)
13866 && glyph->charpos == 0
13867 && pt_old == MATRIX_ROW_END_CHARPOS (row) - 1))
13861 /* Otherwise, keep the candidate that comes from a row 13868 /* Otherwise, keep the candidate that comes from a row
13862 spanning less buffer positions. This may win when one or 13869 spanning less buffer positions. This may win when one or
13863 both candidate positions are on glyphs that came from 13870 both candidate positions are on glyphs that came from
@@ -14639,7 +14646,8 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste
14639 } 14646 }
14640 ++row; 14647 ++row;
14641 } 14648 }
14642 while ((MATRIX_ROW_CONTINUATION_LINE_P (row) 14649 while (((MATRIX_ROW_CONTINUATION_LINE_P (row)
14650 || row->continued_p)
14643 && MATRIX_ROW_BOTTOM_Y (row) <= last_y) 14651 && MATRIX_ROW_BOTTOM_Y (row) <= last_y)
14644 || (MATRIX_ROW_START_CHARPOS (row) == PT 14652 || (MATRIX_ROW_START_CHARPOS (row) == PT
14645 && MATRIX_ROW_BOTTOM_Y (row) < last_y)); 14653 && MATRIX_ROW_BOTTOM_Y (row) < last_y));
@@ -18114,7 +18122,8 @@ cursor_row_p (struct glyph_row *row)
18114{ 18122{
18115 int result = 1; 18123 int result = 1;
18116 18124
18117 if (PT == CHARPOS (row->end.pos)) 18125 if (PT == CHARPOS (row->end.pos)
18126 || PT == MATRIX_ROW_END_CHARPOS (row))
18118 { 18127 {
18119 /* Suppose the row ends on a string. 18128 /* Suppose the row ends on a string.
18120 Unless the row is continued, that means it ends on a newline 18129 Unless the row is continued, that means it ends on a newline
@@ -18509,10 +18518,10 @@ display_line (struct it *it)
18509 min_pos = current_pos; \ 18518 min_pos = current_pos; \
18510 min_bpos = current_bpos; \ 18519 min_bpos = current_bpos; \
18511 } \ 18520 } \
18512 if (current_pos > max_pos) \ 18521 if (IT_CHARPOS (*it) > max_pos) \
18513 { \ 18522 { \
18514 max_pos = current_pos; \ 18523 max_pos = IT_CHARPOS (*it); \
18515 max_bpos = current_bpos; \ 18524 max_bpos = IT_BYTEPOS (*it); \
18516 } \ 18525 } \
18517 } \ 18526 } \
18518 while (0) 18527 while (0)
@@ -19119,7 +19128,8 @@ See also `bidi-paragraph-direction'. */)
19119 buf = XBUFFER (buffer); 19128 buf = XBUFFER (buffer);
19120 } 19129 }
19121 19130
19122 if (NILP (BVAR (buf, bidi_display_reordering))) 19131 if (NILP (BVAR (buf, bidi_display_reordering))
19132 || NILP (BVAR (buf, enable_multibyte_characters)))
19123 return Qleft_to_right; 19133 return Qleft_to_right;
19124 else if (!NILP (BVAR (buf, bidi_paragraph_direction))) 19134 else if (!NILP (BVAR (buf, bidi_paragraph_direction)))
19125 return BVAR (buf, bidi_paragraph_direction); 19135 return BVAR (buf, bidi_paragraph_direction);