Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
9ffae6d0
Commit
9ffae6d0
authored
Jan 28, 2011
by
Stefan Monnier
Browse files
* progmodes/compile.el: Don't use font-lock any more.
parents
b1ea593c
55fb9013
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
718 additions
and
437 deletions
+718
-437
etc/NEWS
etc/NEWS
+3
-0
lisp/ChangeLog
lisp/ChangeLog
+84
-1
lisp/progmodes/compile.el
lisp/progmodes/compile.el
+563
-322
lisp/progmodes/grep.el
lisp/progmodes/grep.el
+7
-5
lisp/textmodes/tex-mode.el
lisp/textmodes/tex-mode.el
+61
-109
No files found.
etc/NEWS
View file @
9ffae6d0
...
...
@@ -321,6 +321,9 @@ prompts for a number to count from and for a format string.
* Changes in Specialized Modes and Packages in Emacs 24.1
** The compile.el mode can be used without font-lock-mode.
`compilation-parse-errors-function' is now obsolete.
** The Landmark game is now invoked with `landmark', not `lm'.
** Prolog mode has been completely revamped, with lots of additional
...
...
lisp/ChangeLog
View file @
9ffae6d0
...
...
@@ -13,6 +13,89 @@
2011-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/compile.el: Don't use font-lock any more.
(compilation-error-regexp-alist-alist): Change handling of makepp
so it preserves the warning/error distinction on subsequent files.
Simplify various rules.
(compilation-directory-properties): Use font-lock-face.
Add a compilation-message property.
(compilation-internal-error-properties): Use font-lock-face.
Don't set the compilation-debug property here.
(compilation--put-prop, compilation--remove-properties)
(compilation--parse-region, compilation--ensure-parse)
(compilation--ensure-parse): New functions.
(compilation-parse-errors): New function, largely inspired of
compilation-mode-font-lock-keywords. Set compilation-debug here.
(compilation--parsed): New var.
(compilation--flush-parse): Use compilation--ensure-parse.
(compilation-start): Don't call font-lock.
(compilation-turn-on-font-lock): Remove.
(compilation-setup): Don't set font-lock-extra-managed-props not change
other font-lock settings, other than keywords.
Don't activate font-lock-mode.
Set change-major-mode-hook and before-change-functions.
(compilation--unsetup): Remove properties and hooks.
(compilation-next-single-property-change): New function.
(compilation-next-error): Use it to parse when needed.
(compile-goto-error): Parse buffer as needed.
(compilation--compat-error-properties): Don't need a dummy `face'
property any more.
2011-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/compile.el: Use accessors for clarity and fix omake hack.
(compilation-process-setup-function): Fix docstring's false promises.
(compilation-error-regexp-alist-alist): Catch omake's continuous
recompilation message and avoid reuse of old markers.
(compilation-parse-errors-function): Declare obsolete.
(compilation-buffer-modtime): Remove.
(compilation--make-cdrloc, compilation--loc->col)
(compilation--loc->line, compilation--loc->file-struct)
(compilation--loc->marker, compilation--loc->visited)
(compilation--make-file-struct, compilation--file-struct->file-spec)
(compilation--file-struct->formats)
(compilation--file-struct->loc-tree): New macros. Use them.
(compilation--message): New defstruct. Use them.
(compilation-next-error-function): Don't mess with timestamps to try
and guess when to reparse.
2011-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
* textmodes/tex-mode.el: Get rid of compilation-parse-errors-function
(tex-old-error-file-name): New function,
extracted from tex-compilation-parse-errors.
(tex-compilation-parse-errors): Remove.
(tex-error-regexp-alist): New var.
(tex-shell): Use it to avoid compilation-parse-errors-function.
* progmodes/grep.el (grep-regexp-alist): Tighten regexp.
(grep-mode-font-lock-keywords): Remove regexp that seems like
a left-over from before we used compile.el.
(grep-mode-font-lock-keywords): Call syntax-ppss-flush-cache when
modifying the buffer within with-silent-modifications.
* progmodes/compile.el: Cleanup text-properties namespace by using
`compilation-message' instead of `message', `compilation-directory'
instead of `directory', and `compilation-debug' instead of `debug'.
(compilation-last-buffer, compilation-parsing-end)
(compilation-error-list, compilation-old-error-list): Move to the
compatibility part of the code.
(compilation-error-properties): If `file' is a function, let it return
a file name.
(compilation-mode-font-lock-keywords): Be more conservative with the
omake "^ *" pattern prefix, to try and minimize the risk of
pathologically slow regexp matching.
(compilation-start): Use inhibit-read-only.
(compilation--unsetup): New function.
(compilation-shell-minor-mode, compilation-minor-mode): Use it.
(compilation-filter): Minor tweaks.
(compilation-next-error-function): Try and avoid abusing variables.
(compilation--flush-file-structure): New fun.
(compilation-fake-loc): Use it to improve behavior when file is reused.
(debug-ignored-errors): Add "Moved past last ...".
(compilation--compat-error-properties)
(compilation--compat-parse-errors): Rename by doubling the "-".
Port features from the previous prolog.el to the new one.
* progmodes/prolog.el (prolog-system): Add GNU and ECLiPSe options.
(prolog-program-name, prolog-program-switches, prolog-consult-string)
...
...
@@ -27,7 +110,7 @@
(prolog-inferior-self-insert-command): New command.
(prolog-inferior-mode-map): Use it.
(prolog-inferior-error-regexp-alist): New var.
(prolog-inferior-mode): Use it,
along
with compilation-shell-minor-mode.
(prolog-inferior-mode): Use it, with compilation-shell-minor-mode.
(prolog-input-filter): Use derived-mode-p.
(prolog-inferior-guess-flavor): New function.
(prolog-ensure-process): Use it. Use make-comint-in-buffer rather than
...
...
lisp/progmodes/compile.el
View file @
9ffae6d0
This diff is collapsed.
Click to expand it.
lisp/progmodes/grep.el
View file @
9ffae6d0
...
...
@@ -341,7 +341,7 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies
;;;###autoload
(
defconst
grep-regexp-alist
'
((
"^\\(.+?\\)\\(:[ \t]*\\)\\([0-9]
+
\\)\\2"
'
((
"^\\(.+?\\)\\(:[ \t]*\\)\\([
1-9][
0-9]
*
\\)\\2"
1
3
)
;; Rule to match column numbers is commented out since no known grep
;; produces them
...
...
@@ -384,7 +384,6 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies
(
defvar
grep-mode-font-lock-keywords
'
(
;; Command output lines.
(
"^\\([A-Za-z_0-9/\.+-]+\\)[ \t]*:"
1
font-lock-function-name-face
)
(
": \\(.+\\): \\(?:Permission denied\\|No such \\(?:file or directory\\|device or address\\)\\)$"
1
grep-error-face
)
;; remove match from grep-regexp-alist before fontifying
...
...
@@ -399,7 +398,8 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies
(
1
grep-error-face
)
(
2
grep-error-face
nil
t
))
(
"^.+?-[0-9]+-.*\n"
(
0
grep-context-face
))
;; Highlight grep matches and delete markers
;; Highlight grep matches and delete markers.
;; FIXME: Modifying the buffer text from font-lock is a bad idea!
(
"\\(\033\\[01;31m\\)\\(.*?\\)\\(\033\\[[0-9]*m\\)"
;; Refontification does not work after the markers have been
;; deleted. So we use the font-lock-face property here as Font
...
...
@@ -409,12 +409,14 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies
(
progn
;; Delete markers with `replace-match' because it updates
;; the match-data, whereas `delete-region' would render it obsolete.
(
syntax-ppss-flush-cache
(
match-beginning
0
))
(
replace-match
""
t
t
nil
3
)
(
replace-match
""
t
t
nil
1
))))
(
"\
\(\
033\\[[0-9;]*[mK]
\\)
"
(
"\033\\[[0-9;]*[mK]"
;; Delete all remaining escape sequences
((
lambda
(
bound
))
(
replace-match
""
t
t
nil
1
))))
(
syntax-ppss-flush-cache
(
match-beginning
0
))
(
replace-match
""
t
t
))))
"Additional things to highlight in grep output.
This gets tacked on the end of the generated expressions."
)
...
...
lisp/textmodes/tex-mode.el
View file @
9ffae6d0
...
...
@@ -1812,11 +1812,70 @@ Mark is left at original location."
;; Why use a shell instead of running TeX directly? Because if TeX
;; gets stuck, the user can switch to the shell window and type at it.
(defvar tex-error-parse-syntax-table
(let ((st (make-syntax-table)))
(modify-syntax-entry ?\( "()" st)
(modify-syntax-entry ?\) ")(" st)
(modify-syntax-entry ?\\ "\\" st)
(modify-syntax-entry ?\{ "_" st)
(modify-syntax-entry ?\} "_" st)
(modify-syntax-entry ?\[ "_" st)
(modify-syntax-entry ?\] "_" st)
;; Single quotations may appear in errors
(modify-syntax-entry ?\" "_" st)
st)
"Syntax-table used while parsing TeX error messages.")
(defun tex-old-error-file-name ()
;; This is unreliable, partly because we don't try very hard, and
;; partly because TeX's output format is eminently ambiguous and unfriendly
;; to automation.
(save-excursion
(save-match-data
(with-syntax-table tex-error-parse-syntax-table
(beginning-of-line)
(backward-up-list 1)
(skip-syntax-forward "(_")
(while (not (let ((try-filename (thing-at-point 'filename)))
(and try-filename
(not (string= "" try-filename))
(file-readable-p try-filename))))
(skip-syntax-backward "(_")
(backward-up-list 1)
(skip-syntax-forward "(_"))
(thing-at-point 'filename)))))
(defconst tex-error-regexp-alist
;; First alternative handles the newer --file-line-error style:
;; ./test2.tex:14: Too many }'s.
'(gnu
;; Second handles the old-style, which spans two lines but doesn't include
;; any file info:
;; ! Too many }'s.
;; l.396 toto}
("^l\\.\\([1-9][0-9]*\\) \\(?:\\.\\.\\.\\)?\\(.*\\)$"
tex-old-error-file-name 1 nil nil nil
;; Since there's no filename to highlight, let's highlight the message.
(2 compilation-error-face))
;; A few common warning messages.
("^\\(?:Und\\|Ov\\
)
erfull
\\\\[hv]box
.
*
at
lines?
\\
(
\\
(
[1-9][0-9]*\\
)
\\
(
?:--\\
(
[1-9][0-9]*\\
)
\\
)
?\\
)
$
"
tex-old-error-file-name (2 . 3) nil 1 nil
(1 compilation-warning-face))
("
^
(
Font
)
*\\
(
[^
\n].*
on
input
line
\\
(
[1-9][0-9]*\\
)
\\
)
\\.$
"
tex-old-error-file-name 2 nil 1 1
(2 compilation-warning-face))
;; Included files get output as (<file> ...).
;; FIXME: there tend to be a crapload of them at the beginning of the
;; output which aren't that interesting. Maybe we should filter out
;; all the file name that start with /usr/share?
;; ("
(
\\.?/\\
(
[^
()
\n]+\\
)
" 1 nil nil 0)
))
;; The utility functions:
(define-derived-mode tex-shell shell-mode "
TeX-Shell
"
(set (make-local-variable 'compilation-
parse-errors-function
)
'
tex-
compilation-parse-errors
)
(set (make-local-variable 'compilation-
error-regexp-alist
)
tex-
error-regexp-alist
)
(compilation-shell-minor-mode t))
;;;###autoload
...
...
@@ -2314,113 +2373,6 @@ Only applies the FSPEC to the args part of FORMAT."
(tex-display-shell)
(setq tex-last-buffer-texed (current-buffer)))
(
defvar
tex-error-parse-syntax-table
(
let
((
st
(
make-syntax-table
)))
(
modify-syntax-entry
?\(
"()"
st
)
(
modify-syntax-entry
?\)
")("
st
)
(
modify-syntax-entry
?\\
"\\"
st
)
(
modify-syntax-entry
?\{
"_"
st
)
(
modify-syntax-entry
?\}
"_"
st
)
(
modify-syntax-entry
?\[
"_"
st
)
(
modify-syntax-entry
?\]
"_"
st
)
;; Single quotations may appear in errors
(
modify-syntax-entry
?\"
"_"
st
)
st
)
"Syntax-table used while parsing TeX error messages."
)
(
defun
tex-compilation-parse-errors
(
limit-search
find-at-least
)
"Parse the current buffer as TeX error messages.
See the variable `compilation-parse-errors-function' for the interface it uses.
This function parses only the last TeX compilation.
It works on TeX compilations only. It is necessary for that purpose,
since TeX does not put file names and line numbers on the same line as
for the error messages."
(
require
'thingatpt
)
(
setq
compilation-error-list
nil
)
(
let
((
default-directory
; Perhaps dir has changed meanwhile.
(
file-name-directory
(
buffer-file-name
tex-last-buffer-texed
)))
found-desired
(
num-errors-found
0
)
last-filename
last-linenum
last-position
begin-of-error
end-of-error
errfilename
)
;; Don't reparse messages already seen at last parse.
(
goto-char
compilation-parsing-end
)
;; Parse messages.
(
while
(
and
(
not
(
or
found-desired
(
eobp
)))
;; First alternative handles the newer --file-line-error style:
;; ./test2.tex:14: Too many }'s.
;; Second handles the old-style:
;; ! Too many }'s.
(
prog1
(
re-search-forward
"^\\(?:\\([^:\n]+\\):[[:digit:]]+:\\|!\\) "
nil
'move
)
(
setq
begin-of-error
(
match-beginning
0
)
end-of-error
(
match-end
0
)
errfilename
(
match-string
1
)))
(
re-search-forward
"^l\\.\\([0-9]+\\) \\(\\.\\.\\.\\)?\\(.*\\)$"
nil
'move
))
(
let*
((
this-error
(
copy-marker
begin-of-error
))
(
linenum
(
string-to-number
(
match-string
1
)))
(
error-text
(
regexp-quote
(
match-string
3
)))
try-filename
(
filename
;; Prefer --file-liner-error filename if we have it.
(
or
errfilename
(
save-excursion
(
with-syntax-table
tex-error-parse-syntax-table
(
backward-up-list
1
)
(
skip-syntax-forward
"(_"
)
(
while
(
not
(
and
(
setq
try-filename
(
thing-at-point
'filename
))
(
not
(
string=
""
try-filename
))
(
file-readable-p
try-filename
)))
(
skip-syntax-backward
"(_"
)
(
backward-up-list
1
)
(
skip-syntax-forward
"(_"
))
(
thing-at-point
'filename
)))))
(
new-file
(
or
(
null
last-filename
)
(
not
(
string-equal
last-filename
filename
))))
(
error-location
(
with-current-buffer
(
if
(
equal
filename
(
concat
tex-zap-file
".tex"
))
tex-last-buffer-texed
(
find-file-noselect
filename
))
(
save-excursion
(
if
new-file
(
progn
(
goto-char
(
point-min
))
(
forward-line
(
1-
linenum
))
(
setq
last-position
nil
))
(
goto-char
last-position
)
(
forward-line
(
-
linenum
last-linenum
)))
;; first try a forward search for the error text,
;; then a backward search limited by the last error.
(
let
((
starting-point
(
point
)))
(
or
(
re-search-forward
error-text
nil
t
)
(
re-search-backward
error-text
last-position
t
)
(
goto-char
starting-point
)))
(
point-marker
)))))
(
goto-char
this-error
)
(
if
(
and
compilation-error-list
(
or
(
and
find-at-least
(
>=
num-errors-found
find-at-least
))
(
and
limit-search
(
>=
end-of-error
limit-search
)))
new-file
)
(
setq
found-desired
t
)
(
setq
num-errors-found
(
1+
num-errors-found
)
last-filename
filename
last-linenum
linenum
last-position
error-location
compilation-error-list
; Add the new error
(
cons
(
cons
this-error
error-location
)
compilation-error-list
))
(
goto-char
end-of-error
)))))
(
set-marker
compilation-parsing-end
(
point
))
(
setq
compilation-error-list
(
nreverse
compilation-error-list
)))
;;; The commands:
(defun tex-region (beg end)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment