emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/setup 4afcae9 1/4: Extract example to Emacs Wiki


From: ELPA Syncer
Subject: [elpa] externals/setup 4afcae9 1/4: Extract example to Emacs Wiki
Date: Thu, 19 Aug 2021 13:57:24 -0400 (EDT)

branch: externals/setup
commit 4afcae9430fe1bb877e2c4b522b8f070ef8d77ff
Author: Philip Kaludercic <philipk@posteo.net>
Commit: Philip Kaludercic <philipk@posteo.net>

    Extract example to Emacs Wiki
---
 README.md | 188 +-------------------------------------------------------------
 1 file changed, 2 insertions(+), 186 deletions(-)

diff --git a/README.md b/README.md
index ad3df52..d09680e 100644
--- a/README.md
+++ b/README.md
@@ -4,51 +4,7 @@
 The `setup` macro simplifies repetitive configuration patterns, by
 providing context-sensitive local macros in `setup` bodies.
 
-For example, these macros:
-
-~~~elisp
-(setup shell
-  (let ((key (kbd "C-c s")))
-    (:global key shell)
-    (:bind key bury-buffer)))
-
-(setup dired
-  (:also-load dired-x)
-  (:option (prepend dired-guess-shell-alist-user) '("" "xdg-open")
-           dired-dwim-target t)
-  (:hook auto-revert-mode))
-
-(setup (:package paredit)
-  (:hide-mode)
-  (:hook-into scheme-mode lisp-mode))
-~~~
-
-will be replaced with the functional equivalent of
-
-~~~elisp
-(global-set-key (kbd "C-c s") #'shell)
-(with-eval-after-load 'shell
-  (define-key shell-mode-map (kbd "C-c s") #'bury-buffer))
-
-(with-eval-after-load 'dired
-  (require 'dired-x))
-(customize-set-variable 'dired-guess-shell-alist-user
-                        (cons '("" "xdg-open")
-                             dired-guess-shell-alist-user))
-(customize-set-variable 'dired-dwim-target t)
-(add-hook 'dired-mode-hook #'auto-revert-mode)
-
-(unless (package-install-p 'paredit)
-  (package-install 'paredit))
-(setq minor-mode-alist
-      (delq (assq 'paredit-mode minor-mode-alist)
-            minor-mode-alist))
-(add-hook 'scheme-mode-hook #'paredit-mode)
-(add-hook 'lisp-mode-hook #'paredit-mode)
-~~~
-
-Additional "keywords" can be defined using `setup-define`. All known
-keywords are documented in the docstring for `setup`.
+See [SetupEl][ewiki] on Emacs Wiki for more details and examples.
 
 Installation
 ------------
@@ -63,144 +19,6 @@ The `setup` macro is autoloaded, and can be used directly.  
The code
 generated by `setup` does not depend on `setup.el`, meaning that your
 initialization file can be byte-compiled more efficiently.
 
-Tips
-----
-
-1. The first element of a `setup` body can but does not have to be a
-   name. That can be exploited to use `setup` in your own macros. I have
-   this macro in my personal configuration, when I'm only interested in
-   modifying user options:
-
-   ~~~elisp
-   (defmacro setc (&rest args)
-     "Customize user options using ARGS like `setq'."
-     (declare (debug setq))
-     `(setup (:option ,@args)))
-   ~~~
-
-2. If you wish to define you own macros, use `setup-define`. In case the
-   syntax is too cumbersome, you can use a macro like this:
-
-   ~~~elisp
-   (defmacro defsetup (name signature &rest body)
-     "Shorthand for `setup-define'.
-   NAME is the name of the local macro.  SIGNATURE is used as the
-   argument list for FN.  If BODY starts with a string, use this as
-   the value for :documentation.  Any following keywords are passed
-   as OPTS to `setup-define'."
-     (declare (debug defun))
-     (let (opts)
-       (when (stringp (car body))
-         (setq opts (nconc (list :documentation (pop body))
-                           opts)))
-       (while (keywordp (car body))
-         (let* ((prop (pop body))
-                (val `',(pop body)))
-           (setq opts (nconc (list prop val) opts))))
-       `(setup-define ,name
-          (cl-function (lambda ,signature ,@body))
-          ,@opts)))
-   ~~~
-
-   To declare local macros more like `defun` or `defmacro`. Here is how
-   the definition for `:package` could be rewritten:
-
-   ~~~elisp
-   (defsetup :package (package)
-     "Install PACKAGE if it hasn't been installed yet."
-     :repeatable t
-     :shorthand #'cadr
-     `(unless (package-installed-p ',package)
-          (package-install ',package)))
-   ~~~
-
-Comparison to `use-package`
----------------------------
-
-The most popular configuration macro for Emacs is
-[`use-package`][use-package], by John Wiegley. The intention is
-similar, but usage is noticeably different.  While `use-package` to
-specifies information about package and it's usage, `setup` is less
-declarative and just provides a set of context-sensitive local macros,
-that are simply substituted.
-
-The higher level of abstraction allows `use-package` to hide some of
-the complexity, by transparently reordering everything into the right
-order. The downside is that it is easy to get lost or forget what
-use-package is doing. Each `setup` macro on the other hand intends to
-encapsulate one common configuration action, and simplify the
-syntax. Here a few examples:
-
-~~~elisp
-(setup flymake
-  (:bind "M-n" #'flymake-goto-next-error
-         "M-p" #'flymake-goto-prev-error)
-  (:hook-into prog-mode))
-~~~
-
-is expanded to
-
-~~~elisp
-(progn
-  (eval-after-load 'flymake
-    (function
-     (lambda nil
-       (progn
-         (define-key flymake-mode-map
-           [134217838]
-           (function flymake-goto-next-error))
-         (define-key flymake-mode-map
-           [134217840]
-           (function flymake-goto-prev-error))))))
-  (add-hook 'prog-mode-hook
-            (function flymake-mode)))
-~~~
-
-The macro `:bind` wraps `define-key` calls in a `eval-after-load`
-block, and automatically parses multiple arguments in a `setq`-like
-fashion. Likewise, `:hook-into` knows to deuce that `flymake-mode`
-should be added to `prog-mode`'s hook (`prog-mode-hook`).
-
-Furthermore `use-package` might be said to be less flexible, because
-the macro assumes a certain kind of usage. Each expression _should_
-define one package. This is not assumed for `setup`: Each body can
-just as easily configure no to as many packages as one wants.
-
-~~~elisp
-(setup (:package company company-math)
-  (:bind "TAB" company-complete))
-~~~
-
-would install both `company` and `company-math`. The context is set to
-`company`, because the `:package` call is the first element of the
-list, and `company` is it's first argument. One might also write
-
-~~~elisp
-(setup
-  (:with-feature company
-    (:package company company-math)
-    (:bind "TAB" company-complete)))
-~~~
-
-that explicit sets the context to the feature `company`.
-
-Similarly, non-context sensitive macros might be used even if `setup`
-cannot deduce what is being configured automatically.  The `setc`
-macro above, is one simple example.
-
-An attempt is also made by `setup.el` to ease extensibility. Each
-macro is defined using the `setup-define` function. Combined with
-further attributes, it allows for the simple definition of local and
-context sensitive macros, that are debug-able, can be composed and
-deferred. While `use-package` is [also extensible][extend-up] the
-process is more difficult because of the more complex syntax and
-higher level of abstraction (at least in the eyes of the `setup`
-author).
-
-Another alternative to `setup` is [`leaf.el`][leaf], that is also
-available on ELPA. It shares the same idea as `use-package` and has a
-richer set of keywords.
-
 Bugs
 ----
 
@@ -217,10 +35,8 @@ Copying
 
 `setup.el` is distributed under the [GPL v3][gpl3] license.
 
+[ewiki]: https://www.emacswiki.org/emacs/SetupEl
 [elpa]: http://elpa.gnu.org/packages/setup.html
-[use-package]: https://github.com/jwiegley/use-package
-[extend-up]: https://github.com/jwiegley/use-package#how-to-create-an-extension
-[leaf]: https://github.com/conao3/leaf.el
 [mail]: https://lists.sr.ht/~pkal/public-inbox
 [github]: https://github.com/phikal/setup.el
 [ca]: 
https://www.gnu.org/software/emacs/manual/html_node/emacs/Copyright-Assignment.html#Copyright-Assignment



reply via email to

[Prev in Thread] Current Thread [Next in Thread]