emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#14089: closed (24.3; file local variables can't ha


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#14089: closed (24.3; file local variables can't have a colon in their name)
Date: Sun, 14 Apr 2013 01:06:02 +0000

Your message dated Sat, 13 Apr 2013 21:01:21 -0400
with message-id <address@hidden>
and subject line Re: bug#14089: 24.3; file local variables can't have a colon 
in their name
has caused the debbugs.gnu.org bug report #14089,
regarding 24.3; file local variables can't have a colon in their name
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
14089: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14089
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 24.3; file local variables can't have a colon in their name Date: Fri, 29 Mar 2013 13:01:45 -0600
To reproduce this bug, try to open a file like the attached Org-mode
file.  The phrase "Malformed mode-line" will be echoed in the
mini-buffer even though this file uses legal file local variable syntax.

# -*- org-babel-default-header-args:R ((session . "R")) -*-
#+Title: Example Demonstrating a File Local Variable Bug
#+Author: Eric Schulte
#+Date: <2013-03-29 Fri>

This `hack-local-variables-prop-line' function chokes on this variable
name.  To my knowledge it is legal to have a ":" in a variable name,
and this practice is widely used in Org-mode, specifically in
variables which one would want to set in a file local manner.
This patch fixes this bug, I've signed the Emacs FSF copyright
assignment papers, but it is a tiny patch so it shouldn't matter.

Thanks!

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: http://bzr.savannah.gnu.org/r/emacs/trunk/
# testament_sha1: 969600ed8b879f2317f13e9f06968aafad4f786d
# timestamp: 2013-03-28 17:09:47 -0600
# base_revision_id: address@hidden
#   419khox8aneaoaxv
# 
# Begin patch
=== modified file 'lisp/files.el'
--- lisp/files.el       2013-03-24 06:42:25 +0000
+++ lisp/files.el       2013-03-28 23:09:26 +0000
@@ -3058,7 +3058,11 @@
               (while (and (or (not mode-only)
                               (not result))
                           (< (point) end))
-                (unless (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*")
+                 ;; The first of these next two regexs handles the
+                 ;; case when a variable name includes a ":", such as
+                 ;; the `org-babel-default-header-args:R' variable.
+                (unless (or (looking-at "[ \t]*\\([^ \t\n]?+\\)[ \t]*:[ \t]*")
+                             (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ 
\t]*"))
                   (message "Malformed mode-line")
                   (throw 'malformed-line nil))
                 (goto-char (match-end 0))

# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWUbmhKQAAan/gAAyACBQ////
0gAcD/////BQA80t1o3vPXpy93vdCSSJiMIGmJNhCT9FNMninqBiY0CDJEniaZNJ6T0oYR6gAAAA
AAyTEmSnhRmkDT1AAyDQB6hoADakmp5DRTam1DajamgA0PUAaAAAkkmkwmFPJijRkzRAAHqAGgAz
S1WEfhTwKtT3Lzh0ptUwFljq3RvPzgDg4+hi9JNFWatAiacBNp3IkDC56rp8faNALW4WJH9ce0I4
Z3GPJC6C2Mb/dxhkm8cOfdIQ66fN3VUdhn4rW+w5H6/o92st+ja2A7xflnsZ06UJhX+y7kGzooqq
7W3cVuusjwpFyfSvT2myqcZODnTyKrAEMOEEaFAZApCpsCwwBUubxmdbx0obNO9dlFeiheV1LyDX
grJNYIaa/OZTZslmmUv7NSjYTFSk0HuVurzo5oI0iIlY6e7GirGiM9qyooTyBr4gzgBdrWq+Udoe
0ELOU2gsNRtBGh50VBsck88MdLUo+pMxY1mqNkZFkcH8gVyOKsQDBAUtQV1RrZdWaaXBQEh+HE2Q
kWgqVFNjBZWqkg2pKMldeUECX3XNq1r2CtxigWqRU0OaIkCCVas9HdcHxV+nLC8RBtcVmSA7SxMZ
lwmjRRgRp2L4OsGG70jewey+edEe9QsThoPhM5SSi9uw8jxVmjPJsysa316MLrg4yithl8O1FIx2
kx7GAZzYWEYDCjyehjfA4NODyIKlnHwdst+b6fwry3abeeHKHYZrQ1gPqOmhUQTyKFRZZUcuSiqp
fIVPxXdinnCWLtFgZlnmXMvCh31Y6oR6F1mRwbL00PMnsNGv4VJfH63gBQrSAFt2TFK9pSLnQIUs
UEFLiW0xQw6o1drbk1zomZn0mlK6/l1Z1i/dpsovmyXGNUqwMRMb5wOO+4BiSsMIWzRm7CEds32t
xSnyoRc8RLKQ0YK1qmSsgqRtgjenIw0zyJ+3ZXoWrebSiyCwcsp67r24c2dGLM4pHGjGLGjH7AP9
/hT1q4JHj3qme3tF4qRBYqISdCql/Uzk+8rA3UoDaUwY2PDLU/IFNql4g1W3xQa7jkVwazlnC1Xg
bcAUimCaAIYmZiBzlVrw524UmJwhskwG4DTYolplKIXliWBxlgZsB4MzXkHiZKaaYz5CjEbRQJxB
wxlfWTlI6mdWCDgOSQMw0X7QHH/SKlmxuydL7cEQqDEdmqoZsyqoSoGVLDqORLbUOwFGCE7rGkzW
tXehClq6UIvm2YaBqeCIc0js7FE4NKr4IjM2IK2kU9OW5+kBzyGEE5o1MnSclPbVJUJUhMxGO6ak
Kb5XiWBuQ0UmBkKFYFeIWApYzQralEo0UqwMw60f/i7kinChII3NCUg=

--- End Message ---
--- Begin Message --- Subject: Re: bug#14089: 24.3; file local variables can't have a colon in their name Date: Sat, 13 Apr 2013 21:01:21 -0400 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)
I installed the patch below which should make it possible to have colons
in local variables.


        Stefan


=== modified file 'lisp/files.el'
--- lisp/files.el       2013-04-06 07:41:09 +0000
+++ lisp/files.el       2013-04-14 00:56:39 +0000
@@ -3029,6 +3029,9 @@
          (prog1 (memq char '(?! ?\s ?y))
            (quit-window t)))))))
 
+(defconst hack-local-variable-regexp
+  "[ \t]*\\([^][;\"'?()\\ \t\n]+\\)[ \t]*:[ \t]*")
+
 (defun hack-local-variables-prop-line (&optional mode-only)
   "Return local variables specified in the -*- line.
 Returns an alist of elements (VAR . VAL), where VAR is a variable
@@ -3055,11 +3058,11 @@
               ;; (last ";" is optional).
               ;; If MODE-ONLY, just check for `mode'.
               ;; Otherwise, parse the -*- line into the RESULT alist.
-              (while (and (or (not mode-only)
-                              (not result))
-                          (< (point) end))
-                (unless (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*")
-                  (message "Malformed mode-line")
+              (while (not (or (and mode-only result)
+                               (>= (point) end)))
+                (unless (looking-at hack-local-variable-regexp)
+                  (message "Malformed mode-line: %S"
+                            (buffer-substring-no-properties (point) end))
                   (throw 'malformed-line nil))
                 (goto-char (match-end 0))
                 ;; There used to be a downcase here,
@@ -3211,8 +3214,7 @@
                  (prefix
                   (concat "^" (regexp-quote
                                (buffer-substring (line-beginning-position)
-                                                 (match-beginning 0)))))
-                 beg)
+                                                 (match-beginning 0))))))
 
              (forward-line 1)
              (let ((startpos (point))
@@ -3247,18 +3249,16 @@
                    (forward-line 1))
                  (goto-char (point-min))
 
-                 (while (and (not (eobp))
-                             (or (not mode-only)
-                                 (not result)))
-                   ;; Find the variable name; strip whitespace.
-                   (skip-chars-forward " \t")
-                   (setq beg (point))
-                   (skip-chars-forward "^:\n")
-                   (if (eolp) (error "Missing colon in local variables entry"))
-                   (skip-chars-backward " \t")
-                   (let* ((str (buffer-substring beg (point)))
-                          (var (let ((read-circle nil))
-                                 (read str)))
+                 (while (not (or (eobp)
+                                  (and mode-only result)))
+                   ;; Find the variable name;
+                   (unless (looking-at hack-local-variable-regexp)
+                      (error "Malformed local variable line: %S"
+                             (buffer-substring-no-properties
+                              (point) (line-end-position))))
+                    (goto-char (match-end 1))
+                   (let* ((str (match-string 1))
+                          (var (intern str))
                           val val2)
                      (and (equal (downcase (symbol-name var)) "mode")
                           (setq var 'mode))



--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]