From b377a885159d12e2354cd4a223aa300ecc918706 Mon Sep 17 00:00:00 2001 From: Petr Hracek Date: Wed, 8 Apr 2015 09:53:20 +0200 Subject: [PATCH] Cannot enter umlaut in TeX input mode (#1145526) Signed-off-by: Petr Hracek --- emacs-umlaut-tex-mode.patch | 287 ++++++++++++++++++++++++++++++++++++ emacs.spec | 7 +- 2 files changed, 293 insertions(+), 1 deletion(-) create mode 100644 emacs-umlaut-tex-mode.patch 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 - 1:24.3-26 +- Cannot enter umlaut in TeX input mode (#1145526) + * Tue Sep 30 2014 jchaloup - 1:24.3-25 - resolves: #1147912 Service dont start. Must be replace: "Type=Forking" > "Type=forking".