phracek pushed to emacs (f20). "Cannot enter umlaut in TeX input mode (#1145526) (..more)"

notifications at fedoraproject.org notifications at fedoraproject.org
Wed Apr 8 07:54:00 UTC 2015


>From b377a885159d12e2354cd4a223aa300ecc918706 Mon Sep 17 00:00:00 2001
From: Petr Hracek <phracek at redhat.com>
Date: Wed, 8 Apr 2015 09:53:20 +0200
Subject: Cannot enter umlaut in TeX input mode (#1145526)

Signed-off-by: Petr Hracek <phracek at redhat.com>

diff --git a/emacs-umlaut-tex-mode.patch b/emacs-umlaut-tex-mode.patch
new file mode 100644
index 0000000..0b85d6a
--- /dev/null
+++ b/emacs-umlaut-tex-mode.patch
@@ -0,0 +1,287 @@
+diff --git a/leim/quail/latin-ltx.el b/leim/quail/latin-ltx.el
+index 024bb62..1e2466a 100644
+--- a/leim/quail/latin-ltx.el
++++ b/leim/quail/latin-ltx.el
+@@ -43,6 +43,26 @@ system, including many technical ones.  Examples:
+  t t nil nil nil nil nil nil nil t)
+ 
+ (eval-when-compile
++  (require 'cl-lib)
++
++  (defconst latin-ltx--mark-map
++    '(("DOT BELOW" . "d")
++      ("DOT ABOVE" . ".")
++      ("OGONEK" . "k")
++      ("CEDILLA" . "c")
++      ("CARON" . "v")
++      ;; ("HOOK ABOVE" . ??)
++      ("MACRON" . "=")
++      ("BREVE" . "u")
++      ("TILDE" . "~")
++      ("GRAVE" . "`")
++      ("CIRCUMFLEX" . "^")
++      ("DIAERESIS" . "\"")
++      ("DOUBLE ACUTE" . "H")
++      ("ACUTE" . "'")))
++
++  (defconst latin-ltx--mark-re (regexp-opt (mapcar #'car latin-ltx--mark-map)))
++
+   (defun latin-ltx--ascii-p (char)
+     (and (characterp char) (< char 128)))
+ 
+@@ -53,7 +73,8 @@ system, including many technical ones.  Examples:
+         (pcase rule
+           (`(,_ ,(pred characterp)) (push rule newrules)) ;; Normal quail rule.
+           (`(,seq ,re)
+-           (let ((count 0))
++           (let ((count 0)
++		 (re (eval re t)))
+              (dolist (pair (ucs-names))
+                (let ((name (car pair))
+                      (char (cdr pair)))
+@@ -68,9 +89,27 @@ system, including many technical ones.  Examples:
+                            (push (list x char) newrules))
+                        (setq count (1+ count))
+                        (push (list keys char) newrules))))))
+-             ;(message "latin-ltx: %d mapping for %S" count re)
++             ;; (message "latin-ltx: %d mapping for %S" count re)
+ 	     ))))
+-      `(quail-define-rules ,@(nreverse (delete-dups newrules))))))
++      (setq newrules (delete-dups newrules))
++      (let ((rules (copy-sequence newrules)))
++        (while rules
++          (let ((rule (pop rules)))
++            (when (assoc (car rule) rules)
++              (let ((conflicts (list (cadr rule)))
++                    (tail rules)
++                    c)
++                (while (setq c (assoc (car rule) tail))
++                  (push (cadr c) conflicts)
++                  (setq tail (cdr (memq c tail)))
++                  (setq rules (delq c rules)))
++                (message "Conflict for %S: %S"
++                         (car rule) (apply #'string conflicts)))))))
++      (let ((inputs (mapcar #'car newrules)))
++        (setq inputs (delete-dups inputs))
++        (message "latin-ltx: %d rules (+ %d conflicts)!"
++                 (length inputs) (- (length newrules) (length inputs))))
++      `(quail-define-rules ,@(nreverse newrules)))))
+ 
+ (latin-ltx--define-rules
+  ("!`" ?¡)
+@@ -89,69 +128,35 @@ system, including many technical ones.  Examples:
+  ("$^o$" ?º)
+  ("?`" ?¿)
+ 
+- ("\\`" ?̀)
+- ("\\`{}" ?`)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\`{%s}" c) (format "\\`%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH GRAVE")
+-
+- ("\\'" ?́)
+- ("\\'{}" ?´)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\'{%s}" c) (format "\\'%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH ACUTE")
+-
+- ("\\^" ?̂)
+- ("\\^{}" ?^)
+  ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\^{%s}" c) (format "\\^%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH CIRCUMFLEX")
+-
+- ("\\~" ?̃)
+- ("\\~{}" ?˜)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\~{%s}" c) (format "\\~%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH TILDE")
+-
+- ("\\\"" ?̈)
+- ("\\\"{}" ?¨)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\\"{%s}" c) (format "\\\"%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DIAERESIS")
+-
+- ("\\k" ?̨)
+- ("\\k{}" ?˛)
++    (let* ((c (if (match-end 1)
++                  (downcase (match-string 2 name))
++                (match-string 2 name)))
++           (mark1 (cdr (assoc (match-string 3 name) latin-ltx--mark-map)))
++           (mark2 (if (match-end 4)
++                      (cdr (assoc (match-string 4 name) latin-ltx--mark-map))))
++           (marks (if mark2 (concat mark1 "\\" mark2) mark1)))
++      (cl-assert mark1)
++      (cons (format "\\%s{%s}" marks c)
++            ;; Exclude "d" because we use "\\dh" for something else.
++            (unless (member (or mark2 mark1) '("d"));; "k"
++              (list (format "\\%s%s" marks c))))))
++  (concat "\\`LATIN \\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH \\("
++          latin-ltx--mark-re "\\)\\(?: AND \\("
++          latin-ltx--mark-re "\\)\\)?\\'"))
++
+  ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\k{%s}" c) ;; (format "\\k%s" c)
+-            )))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH OGONEK")
+-
+- ("\\c" ?̧)
+- ("\\c{}" ?¸)
++    (let* ((mark (cdr (assoc (match-string 1 name) latin-ltx--mark-map))))
++      (cl-assert mark)
++      (list (format "\\%s" mark))))
++  (concat "\\`COMBINING \\(" latin-ltx--mark-re "\\)\\(?: ACCENT\\)?\\'"))
++
+  ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\c{%s}" c) (format "\\c%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH CEDILLA")
++    (unless (latin-ltx--ascii-p char)
++      (let* ((mark (cdr (assoc (match-string 1 name) latin-ltx--mark-map))))
++        (cl-assert mark)
++        (list (format "\\%s{}" mark)))))
++  (concat "\\`\\(?:SPACING \\)?\\(" latin-ltx--mark-re "\\)\\(?: ACCENT\\)?\\'"))
+ 
+  ("\\AA" ?Å) ;; ("{\\AA}" ?Å)
+  ("\\AE" ?Æ) ;; ("{\\AE}" ?Æ)
+@@ -166,42 +171,6 @@ system, including many technical ones.  Examples:
+  ("$\\div$" ?÷) ("\\div" ?÷)
+  ("\\o" ?ø) ;; ("{\\o}" ?ø)
+ 
+- ("\\=" ?̄)
+- ("\\={}" ?¯)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\={%s}" c) (format "\\=%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH MACRON")
+-
+- ("\\u" ?̆)
+- ("\\u{}" ?˘)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\u{%s}" c) (format "\\u%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH BREVE")
+-
+- ("\\." ?̇)
+- ("\\.{}" ?˙)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\.{%s}" c) (format "\\.%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DOT ABOVE")
+-
+- ("\\v" ?̌)
+- ("\\v{}" ?ˇ)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\v{%s}" c) (format "\\v%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH CARON")
+-
+  ("\\~{\\i}" ?ĩ)
+  ("\\={\\i}" ?ī)
+  ("\\u{\\i}" ?ĭ)
+@@ -214,12 +183,6 @@ system, including many technical ones.  Examples:
+ 
+  ("\\H" ?̋)
+  ("\\H{}" ?˝)
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\H{%s}" c) (format "\\H%s" c))))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DOUBLE ACUTE")
+  ("\\U{o}" ?ő) ("\\Uo" ?ő) ;; FIXME: Was it just a typo?
+  
+  ("\\OE" ?Œ) ;; ("{\\OE}" ?Œ)
+@@ -248,16 +211,12 @@ system, including many technical ones.  Examples:
+         (string (if (match-end 2) ?^ ?_) basechar))))
+   "\\(.*\\)SU\\(?:B\\|\\(PER\\)\\)SCRIPT \\(.*\\)")
+ 
+- ("^\\gamma" ?ˠ)
++ ((lambda (name _char)
++    (let* ((basename (match-string 2 name))
++           (name (if (match-end 1) (capitalize basename) (downcase basename))))
++      (concat "^" (if (> (length name) 1) "\\") name)))
++  "\\`MODIFIER LETTER \\(?:SMALL\\|CAPITA\\(L\\)\\) \\([[:ascii:]]+\\)\\'")
+ 
+- ((lambda (name char)
+-    (let* ((base (format "LATIN %s LETTER %s"
+-                         (match-string 1 name) (match-string 2 name)))
+-           (basechar (cdr (assoc base (ucs-names)))))
+-      (when (latin-ltx--ascii-p basechar)
+-        (string ?^ basechar))))
+-  "MODIFIER LETTER \\(SMALL\\|CAPITAL\\) \\(.*\\)")
+- 
+  ;; ((lambda (name char) (format "^%s" (downcase (match-string 1 name))))
+  ;;  "\\`MODIFIER LETTER SMALL \\(.\\)\\'")
+  ;; ("^\\1" "\\`MODIFIER LETTER CAPITAL \\(.\\)\\'")
+@@ -268,22 +227,14 @@ system, including many technical ones.  Examples:
+ 
+  ("\\b" ?̱)
+ 
+- ("\\d" ?̣)
+- ;; ("\\d{}" ?) ;; FIXME: can't find the DOT BELOW character.
+- ((lambda (name char)
+-    (let ((c (if (match-end 1)
+-                 (downcase (match-string 2 name))
+-               (match-string 2 name))))
+-      (list (format "\\d{%s}" c) ;; (format "\\d%s" c)
+-            )))
+-  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DOT BELOW")
+-
+  ("\\rq" ?’)
+ 
+  ;; FIXME: Provides some useful entries (yen, euro, copyright, registered,
+  ;; currency, minus, micro), but also a lot of dubious ones.
+  ((lambda (name char)
+-    (unless (latin-ltx--ascii-p char)
++    (unless (or (latin-ltx--ascii-p char)
++                ;; We prefer COMBINING LONG SOLIDUS OVERLAY for \not.
++                (member name '("NOT SIGN")))
+       (concat "\\" (downcase (match-string 1 name)))))
+   "\\`\\([^- ]+\\) SIGN\\'")
+ 
+@@ -373,7 +324,6 @@ system, including many technical ones.  Examples:
+  ("\\circledcirc" ?⊚)
+  ("\\circleddash" ?⊝)
+  ("\\clubsuit" ?♣)
+- ("\\colon" ?:)                         ;FIXME: Conflict with "COLON SIGN" ₡.
+  ("\\coloneq" ?≔)
+  ("\\complement" ?∁)
+  ("\\cong" ?≅)
+@@ -396,7 +346,6 @@ system, including many technical ones.  Examples:
+  ("\\ddots" ?⋱)
+  ("\\diamond" ?⋄)
+  ("\\diamondsuit" ?♢)
+- ("\\digamma" ?Ϝ)
+  ("\\divideontimes" ?⋇)
+  ("\\doteq" ?≐)
+  ("\\doteqdot" ?≑)
diff --git a/emacs.spec b/emacs.spec
index e4ae126..c534fb8 100644
--- a/emacs.spec
+++ b/emacs.spec
@@ -3,7 +3,7 @@ Summary: GNU Emacs text editor
 Name: emacs
 Epoch: 1
 Version: 24.3
-Release: 25%{?dist}
+Release: 26%{?dist}
 License: GPLv3+
 URL: http://www.gnu.org/software/emacs/
 Group: Applications/Editors
@@ -44,6 +44,7 @@ Patch21: emacs-CVE-2014-3424.patch
 Patch22: emacs-compiled-timestamps.patch
 # BZ1104012, initialize kbd_macro_ptr and kbd_macro_end
 Patch23: emacs-24.3-macro.patch
+Patch24: emacs-umlaut-tex-mode.patch
 
 BuildRequires: atk-devel cairo-devel freetype-devel fontconfig-devel dbus-devel giflib-devel glibc-devel libpng-devel
 BuildRequires: libjpeg-devel libtiff-devel libX11-devel libXau-devel libXdmcp-devel libXrender-devel libXt-devel
@@ -195,6 +196,7 @@ packages that add functionality to Emacs.
 %patch21 -p1 -b .CVE-2014-3424.patch
 %patch22 -p1 -b .compiled-timestamps
 %patch23 -p1
+%patch24 -p1 -b .umlaut-tex-mode
 
 # We prefer our emacs.desktop file
 cp %SOURCE1 etc/emacs.desktop
@@ -485,6 +487,9 @@ update-desktop-database &> /dev/null || :
 %dir %{_datadir}/emacs/site-lisp/site-start.d
 
 %changelog
+* Wed Apr  8 2015 Petr Hracek <phracek at redhat.com> - 1:24.3-26
+- Cannot enter umlaut in TeX input mode (#1145526)
+
 * Tue Sep 30 2014 jchaloup <jchaloup at redhat.com> - 1:24.3-25
 - resolves: #1147912
   Service dont start. Must be replace: "Type=Forking" > "Type=forking".
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/emacs.git/commit/?h=f20&id=b377a885159d12e2354cd4a223aa300ecc918706


More information about the scm-commits mailing list