Change recompile-files shell script to pure Elisp
It still calls `find(1)`, but everything else is Elisp. This means it is generally faster. It still has some buffer processing overhead, though.
This commit is contained in:
parent
d380a48699
commit
ec94d552fc
26
lisp/recompile-files.el
Normal file
26
lisp/recompile-files.el
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
(defun recompile-stale-elcs ()
|
||||||
|
(interactive)
|
||||||
|
|
||||||
|
(with-temp-buffer
|
||||||
|
(setq-local default-directory user-emacs-directory)
|
||||||
|
|
||||||
|
(let ((find-command (find-cmd '(prune (name ".git"))
|
||||||
|
'(name "*.elc"))))
|
||||||
|
|
||||||
|
(shell-command find-command t t))
|
||||||
|
|
||||||
|
(goto-char (point-min))
|
||||||
|
|
||||||
|
(setq more-lines t)
|
||||||
|
|
||||||
|
(while more-lines
|
||||||
|
(let ((start (progn (beginning-of-line)
|
||||||
|
(point)))
|
||||||
|
(end (progn (end-of-line)
|
||||||
|
(point))))
|
||||||
|
(let ((el (buffer-substring start (- end 1)))
|
||||||
|
(elc (buffer-substring start end)))
|
||||||
|
|
||||||
|
(if (file-newer-than-file-p el elc)
|
||||||
|
(byte-compile-file (buffer-substring start (- end 1))))))
|
||||||
|
(setq more-lines (= 0 (forward-line 1))))))
|
@ -1,22 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
|
|
||||||
cd `dirname $0`
|
|
||||||
pwd=`pwd`
|
|
||||||
|
|
||||||
for file in `find -iname '*.elc'`
|
|
||||||
do
|
|
||||||
elc=`basename "$file"`
|
|
||||||
el="${elc%c}"
|
|
||||||
dir=`dirname "$file"`
|
|
||||||
|
|
||||||
cd "$dir"
|
|
||||||
|
|
||||||
if test "$elc" -ot "$el"
|
|
||||||
then
|
|
||||||
echo "Recompiling ${el}"
|
|
||||||
|
|
||||||
emacs --batch --eval '(byte-compile-file "'${el}'")'
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $pwd
|
|
||||||
done
|
|
Loading…
Reference in New Issue
Block a user