A time-stamp file is created by default.

Instead of the user having the option to add a time-stamp to the
init-file, a file is created for this purpose only.
This commit is contained in:
larstvei 2014-01-04 18:59:29 +01:00
parent 67d780f9af
commit b77e3c0de3
2 changed files with 55 additions and 48 deletions

23
init.el
View File

@ -37,18 +37,18 @@ PACKAGE is installed and the current version is deleted."
(defvar days-between-updates 1) (defvar days-between-updates 1)
(defvar do-package-update-on-init t) (defvar do-package-update-on-init t)
(defvar package-last-update-file
(expand-file-name (concat user-emacs-directory ".package-last-update")))
(require 'time-stamp) (require 'time-stamp)
;; Open the 'user-init-file' and write any changes. ;; Open the package-last-update-file
(with-temp-file user-init-file (with-temp-file package-last-update-file
(if (file-exists-p package-last-update-file)
(progn
;; Insert it's original content's. ;; Insert it's original content's.
(insert-file-contents user-init-file) (insert-file-contents package-last-update-file)
(forward-line time-stamp-line-limit) (let ((start (re-search-forward time-stamp-start nil t))
(let ((bound (point))) (end (re-search-forward time-stamp-end nil t)))
(goto-char (point-min))
;; We search for the time-stamp.
(let ((start (re-search-forward time-stamp-start bound t))
(end (re-search-forward time-stamp-end bound t)))
(when (and start end) (when (and start end)
;; Assuming we have found a time-stamp, we check determine if it's ;; Assuming we have found a time-stamp, we check determine if it's
;; time to update. ;; time to update.
@ -59,7 +59,10 @@ PACKAGE is installed and the current version is deleted."
(buffer-substring-no-properties start end)))) (buffer-substring-no-properties start end))))
;; Remember to update the time-stamp. ;; Remember to update the time-stamp.
(when do-package-update-on-init (when do-package-update-on-init
(time-stamp)))))) (time-stamp)))))
;; If no such file exists it is created with a time-stamp.
(insert "Time-stamp: <>")
(time-stamp)))
(when do-package-update-on-init (when do-package-update-on-init
(package-refresh-contents)) (package-refresh-contents))

View File

@ -85,34 +85,35 @@
The =package-refresh-contents= function downloads archive descriptions, The =package-refresh-contents= function downloads archive descriptions,
this is a major bottleneck in this configuration. To avoid this we can this is a major bottleneck in this configuration. To avoid this we can
try to only check for updates once every day or so. Here are to try to only check for updates once every day or so. Here are three
variables. The first specifies how often we should check for updates. The variables. The first specifies how often we should check for updates. The
second specifies wither one should update during the initialization. second specifies wither one should update during the initialization. The
third is a path to a file where a time-stamp is stored in order to check
when packages were updated last.
#+BEGIN_SRC emacs-lisp :tangle yes #+BEGIN_SRC emacs-lisp :tangle yes
(defvar days-between-updates 1) (defvar days-between-updates 1)
(defvar do-package-update-on-init t) (defvar do-package-update-on-init t)
(defvar package-last-update-file
(expand-file-name (concat user-emacs-directory ".package-last-update")))
#+END_SRC #+END_SRC
The tricky part is figuring out when the last time the Emacs was updated! The tricky part is figuring out when the last time the Emacs was updated!
Here is a hacky way of doing it, using [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Time-Stamps.html][time-stamps]]. By adding a Here is a hacky way of doing it, using [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Time-Stamps.html][time-stamps]]. By adding a
time-stamp to the init file, we can search for it and determine wither or time-stamp to the a file, we can determine wither or not to do an
not to do an update. After that we must run the =time-stamp=-function to update. After that we must run the =time-stamp=-function to update the
update the time-stamp. Note that if there is no time-stamp in the time-stamp.
init-file then packages will be updated every time you start Emacs.
#+BEGIN_SRC emacs-lisp :tangle yes #+BEGIN_SRC emacs-lisp :tangle yes
(require 'time-stamp) (require 'time-stamp)
;; Open the 'user-init-file' and write any changes. ;; Open the package-last-update-file
(with-temp-file user-init-file (with-temp-file package-last-update-file
(if (file-exists-p package-last-update-file)
(progn
;; Insert it's original content's. ;; Insert it's original content's.
(insert-file-contents user-init-file) (insert-file-contents package-last-update-file)
(forward-line time-stamp-line-limit) (let ((start (re-search-forward time-stamp-start nil t))
(let ((bound (point))) (end (re-search-forward time-stamp-end nil t)))
(goto-char (point-min))
;; We search for the time-stamp.
(let ((start (re-search-forward time-stamp-start bound t))
(end (re-search-forward time-stamp-end bound t)))
(when (and start end) (when (and start end)
;; Assuming we have found a time-stamp, we check determine if it's ;; Assuming we have found a time-stamp, we check determine if it's
;; time to update. ;; time to update.
@ -123,7 +124,10 @@
(buffer-substring-no-properties start end)))) (buffer-substring-no-properties start end))))
;; Remember to update the time-stamp. ;; Remember to update the time-stamp.
(when do-package-update-on-init (when do-package-update-on-init
(time-stamp)))))) (time-stamp)))))
;; If no such file exists it is created with a time-stamp.
(insert "Time-stamp: <>")
(time-stamp)))
#+END_SRC #+END_SRC
Now we can use the function above to make sure packages are installed and Now we can use the function above to make sure packages are installed and