branch: externals/ivy-avy
commit 04c3d743cb5a859e19bd2190b1695a3e0802229f
Merge: 87ab368c3a 847ba97f6b
Author: Basil L. Contovounesios <ba...@contovou.net>
Commit: Basil L. Contovounesios <ba...@contovou.net>

    Merge branch 'master' into externals/ivy-avy
---
 .dir-locals.el  |  13 +++---
 ivy-avy.el      |   2 +-
 targets/elpa.el | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 131 insertions(+), 9 deletions(-)

diff --git a/.dir-locals.el b/.dir-locals.el
index f18455c3a6..9920229883 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -2,17 +2,14 @@
 ;;; For more information see (info "(emacs) Directory Variables")
 
 ((nil
-  ;; Emacs 28+ automatically sets up these `bug-reference-mode' variables
-  ;; in a more general way, so setting them here is not future-proof.  If
-  ;; you still need these settings in older Emacs versions, you can add
-  ;; them to your personal `.dir-locals-2.el' file in the meantime.
-  ;; (bug-reference-bug-regexp . "\\(#\\([[:digit:]]+\\)\\)")
-  ;; (bug-reference-url-format . "https://github.com/abo-abo/swiper/issues/%s";)
   (copyright-names-regexp . "Free Software Foundation, Inc\\.")
   (sentence-end-double-space . t))
  (emacs-lisp-mode
   (indent-tabs-mode . nil)
-  (outline-regexp . ";;\\([;*]+ [^\s\t\n]\\|###autoload\\)\\|(")
   ;; extra config here: 
https://github.com/abo-abo/oremacs/blob/github/modes/ora-elisp-style-guide.el
   ;; (lisp-indent-function . common-lisp-indent-function)
-  ))
+  )
+ (markdown-mode
+  (fill-column . 70))
+ (org-mode
+  (fill-column . 70)))
diff --git a/ivy-avy.el b/ivy-avy.el
index 8f0d275ef6..355305f359 100644
--- a/ivy-avy.el
+++ b/ivy-avy.el
@@ -107,7 +107,7 @@
       (when res
         (ivy-avy--action res)))))
 
-(put 'ivy-avy 'no-counsel-M-x t)
+(function-put #'ivy-avy 'no-counsel-M-x t)
 (unless (lookup-key ivy-minibuffer-map (kbd "C-'"))
   (define-key ivy-minibuffer-map (kbd "C-'") 'ivy-avy))
 (add-to-list 'avy-styles-alist `(ivy-avy . ,ivy-avy-style))
diff --git a/targets/elpa.el b/targets/elpa.el
new file mode 100644
index 0000000000..e80dc6a981
--- /dev/null
+++ b/targets/elpa.el
@@ -0,0 +1,125 @@
+;;; targets/elpa.el --- Optional Ivy dependencies -*- lexical-binding: t -*-
+
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+
+;; This program 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.
+
+;; This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'package)
+
+(defvar ivy--elpa-stable
+  (or (getenv "ELPA_STABLE")
+      (getenv "MELPA_STABLE"))
+  "Non-nil if GNU ELPA should be used instead of GNU-devel ELPA.")
+
+(defvar ivy--elpa-dir "~/.elpa"
+  "Parent directory for installing optional dependencies.")
+
+(defvar ivy--elpa-user-dir
+  (expand-file-name
+   (format "%s%s/elpa" emacs-version (if ivy--elpa-stable "-stable" ""))
+   ivy--elpa-dir)
+  "Instance-specific value for `package-user-dir'.")
+
+;; FIXME: Switch to `gnu' once https://bugs.gnu.org/76264 is resolved.
+(defvar ivy--elpa-archive 'melpa
+  "Preferred ELPA archive; keys `ivy--elpa-archives'.")
+
+(defvar ivy--elpa-archives
+  ;; Check default value rather than `gnutls-available-p': even when
+  ;; the latter is non-nil my Emacs 24.5 fails with https://.
+  (let ((s (if (string-prefix-p "https" (cdar package-archives)) "s" "")))
+    `((gnu
+       ("gnu" . ,(format "http%s://elpa.gnu.org/%s/"
+                         s (if ivy--elpa-stable "packages" "devel")))
+       ;; For `wgrep'.
+       ("nongnu" . ,(format "http%s://elpa.nongnu.org/nongnu%s/"
+                            s (if ivy--elpa-stable "" "-devel"))))
+      (melpa
+       ("melpa" . ,(format "https://%smelpa.org/packages/";
+                           (if ivy--elpa-stable "stable." ""))))))
+  "Map ELPA archive symbols to their `package-archives'.")
+
+(defvar ivy--elpa-pkgs
+  '(avy
+    hydra
+    wgrep)
+  "List of optional (or development) package dependencies.")
+
+(defvar ivy--elpa-activated nil
+  "Non-nil if `ivy--elpa-activate' succeeded.")
+
+(defvar ivy--elpa-refreshed nil
+  "Non-nil if `ivy--elpa-refresh' succeeded.")
+
+(defun ivy--elpa-activate ()
+  "Ensure packages under `ivy--elpa-dir' are activated."
+  (unless ivy--elpa-activated
+    (setq package-user-dir ivy--elpa-user-dir)
+    (let ((msg (format "Activating packages in %s" package-user-dir)))
+      (message "%s..." msg)
+      (package-initialize)
+      (message "%s...done" msg))
+    (setq ivy--elpa-activated t)))
+
+(defun ivy--elpa-refresh ()
+  "Ensure archive contents are refreshed."
+  (defvar gnutls-algorithm-priority)
+  (unless ivy--elpa-refreshed
+    (let ((archive ivy--elpa-archive))
+      (setq package-archives (cdr (assq archive ivy--elpa-archives)))
+      (and (eq archive 'melpa)
+           (version< emacs-version "26.3")
+           ;; See https://melpa.org/#/getting-started.
+           (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")))
+    (package-refresh-contents)
+    (setq ivy--elpa-refreshed (and package-archive-contents t))))
+
+(defun ivy--elpa-install-pkg (pkg)
+  "Compatibility shim for Emacs 25 `package-install'."
+  (condition-case nil
+      (package-install pkg t)
+    (wrong-number-of-arguments
+     (package-install pkg))))
+
+(defun ivy--elpa-install ()
+  "Install any missing `ivy--elpa-pkgs' with demoted errors."
+  (ivy--elpa-activate)
+  (ivy--elpa-refresh)
+  (let ((msg-all (format "Installing in %s" package-user-dir))
+        any-ok any-err)
+    (message "%s..." msg-all)
+    (dolist (pkg ivy--elpa-pkgs)
+      (unless (package-installed-p pkg)
+        (let ((msg (format "Installing %s" pkg))
+              err)
+          (message "%s..." msg)
+          (condition-case-unless-debug e
+              (ivy--elpa-install-pkg pkg)
+            (error (message "Error: %s" (error-message-string e))
+                   (message "%s...INCOMPLETE" msg)
+                   (setq any-err t)
+                   (setq err e)))
+          (unless err
+            (message "%s...done" msg)
+            (setq any-ok t)))))
+    (message "%s...%s" msg-all
+             (cond (any-err "INCOMPLETE")
+                   (any-ok "done")
+                   (t "already present")))))
+
+;; TODO: upgrade-deps target?
+
+(provide 'targets/elpa)

Reply via email to