[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/load-dir 5b00991 01/12: Give every package its own dire
From: |
Stefan Monnier |
Subject: |
[elpa] externals/load-dir 5b00991 01/12: Give every package its own directory in packages/ |
Date: |
Sun, 29 Nov 2020 14:31:16 -0500 (EST) |
branch: externals/load-dir
commit 5b00991106ffdc820f5fab1218971762ea532cd4
Author: Chong Yidong <cyd@stupidchicken.com>
Commit: Chong Yidong <cyd@stupidchicken.com>
Give every package its own directory in packages/
including single-file packages.
---
load-dir.el | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 136 insertions(+)
diff --git a/load-dir.el b/load-dir.el
new file mode 100644
index 0000000..1d4e0b6
--- /dev/null
+++ b/load-dir.el
@@ -0,0 +1,136 @@
+;;; load-dir.el --- load all Emacs Lisp files in given directories
+
+;; Copyright (C) 2011 Free Software Foundation, Inc
+
+;; Authors: Teodor Zlatanov <tzz@lifelogs.com>,
+;; Ben Key <bkey76@gmail.com>
+;; With-Help-From: Evans Winner <ego111@gmail.com>, PJ Weisberg
<pj@irregularexpressions.net>
+;; Version: 0.0.2
+;; Keywords: lisp, files, convenience
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package provides a way to load all Emacs Lisp snippets (they
+;; don't have to be libraries) in a directory on startup or when Emacs is
+;; already running. It won't reload snippets unless the user requests
+;; it, so for instance adding a lambda to a hook is usually safe.
+;;
+;; You can specify ~/.emacs.d/load.d, a single directory, or a list of
+;; directories. The file search can be recursive.
+;;
+;; The intent with ~/.emacs.d/load.d is to give package installers like
+;; el-get.el (see https://github.com/dimitri/el-get) and other tools a
+;; way to easily bootstrap themselves without necessarily modifying your
+;; .emacs or custom files directly.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+(defgroup load-dir nil
+ "Automatically load all Emacs Lisp files in given directories."
+ :group 'initialization)
+
+(defcustom load-dir-debug t
+ "Debugging messages toggle, default to t."
+ :group 'load-dir
+ :type 'boolean)
+
+(defcustom load-dir-recursive nil
+ "Whether subdirectories should be loaded too."
+ :group 'load-dir
+ :type 'boolean)
+
+(defcustom load-dir-ignore-errors nil
+ "Whether errors in the loaded files should be ignored."
+ :group 'load-dir
+ :type 'boolean)
+
+(defcustom load-dirs nil
+ "This variable allows you to define which directories should be loaded.
+
+If nil, no directories are loaded. This is the default behavior.
+If t, only files in ~/.emacs.d/load.d will be loaded.
+If a single directory name, only files in that directory will be loaded.
+If a list of directory names, all files found in all the
+directories will be loaded."
+ :group 'load-dir
+ :tag "What directories to load"
+ :type '(choice (const :tag "Load all from ~/.emacs.d/load.d" t)
+ (const :tag "Don't load anything" nil)
+ directory
+ (repeat :tag "Directories" directory)))
+
+;;;###autoload
+(defun load-dirs ()
+ "Load all Emacs Lisp files in `load-dirs'.
+Will not load a file twice (use `load-dir-reload' for that).
+Recurses into subdirectories if `load-dir-recursive' is t."
+ (interactive)
+ ;; avoid the case where users inadvertently set `load-dirs' to a string
+ (mapc 'load-dir-one (cond
+ ((eq load-dirs t)
+ (list (expand-file-name "~/.emacs.d/load.d")))
+ ((stringp load-dirs)
+ (list load-dirs))
+ (t load-dirs))))
+
+(defvar load-dir-loaded nil
+ "List of already loaded files.")
+
+;;;###autoload
+(defun load-dirs-reload ()
+ "Load all Emacs Lisp files in `load-dirs'.
+Clears the list of loaded files and just calls `load-dir-load'."
+ (interactive)
+ (setq load-dir-loaded nil)
+ (load-dirs))
+
+(defun load-dir-one (dir)
+ "Load all Emacs Lisp files in DIR.
+Recurses into subdirectories if `load-dir-recursive' is t."
+ (load-dir-debug "Loading Emacs Lisp code from %s" dir)
+ (let ((suffixes (get-load-suffixes)))
+ (dolist (f (and (file-exists-p dir)
+ (file-directory-p dir)
+ (directory-files dir t)))
+ (when (and (not (file-directory-p f))
+ (member (file-name-extension f t) suffixes))
+ (setq f (file-name-sans-extension f))
+ (if (member f load-dir-loaded)
+ (load-dir-debug "Skipping %s, it's already loaded." f)
+ (if load-dir-ignore-errors
+ (with-demoted-errors (load f))
+ (load f))
+ (add-to-list 'load-dir-loaded f))))
+
+ (when load-dir-recursive
+ (dolist (f (directory-files dir t))
+ (when (file-directory-p f)
+ (load-dir-one f))))))
+
+(defun load-dir-debug (&rest args)
+ "Print a debug message like `message' if `load-dir-debug' is set."
+ (when load-dir-debug
+ (apply 'message args)))
+
+;;;###autoload
+(add-hook 'after-init-hook 'load-dirs)
+
+(provide 'load-dir)
+;;; load-dir.el ends here
- [elpa] branch externals/load-dir created (now 0e05b47), Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 843b83a 02/12: epoch-view.el, load-dir.el: Capitalize package description string., Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 4214b44 03/12: * packages/load-dir/load-dir.el (load-dir-one): Avoid infinite recursion., Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 3699a38 04/12: Bump load-dir version number to 0.0.3., Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 30f9f1b 05/12: load-dir: allow ignoring some files, Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir f765d85 11/12: * copyright_exceptions: Update for new uni-confusables/gen-confusables.el, Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 95c37de 08/12: load-dir: no need for let f, Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir fbc39dc 09/12: * load-dir.el: Add `Maintainer:`., Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 5b00991 01/12: Give every package its own directory in packages/,
Stefan Monnier <=
- [elpa] externals/load-dir 3e0c117 06/12: * load-dir/load-dir.el (load-dir-one): Don't set global `f`., Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 4c43bae 07/12: load-dir: fix CL and free variable warnings, Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir cbad1ca 10/12: * packages/load-dir/load-dir.el: require just cl-lib 0.5, Stefan Monnier, 2020/11/29
- [elpa] externals/load-dir 0e05b47 12/12: * .gitignore: New file, Stefan Monnier, 2020/11/29