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