diff --git a/core/core-lib.el b/core/core-lib.el index af6408b36..0e764aede 100644 --- a/core/core-lib.el +++ b/core/core-lib.el @@ -10,24 +10,7 @@ ;; if-let and when-let are deprecated in Emacs 26+ in favor of their ;; if-let* variants, so we alias them for 25 users. (defalias 'if-let* #'if-let) - (defalias 'when-let* #'when-let) - - ;; `alist-get' doesn't have its 5th argument before Emacs 26 - (defun doom*alist-get (key alist &optional default remove testfn) - "Return the value associated with KEY in ALIST. -If KEY is not found in ALIST, return DEFAULT. -Use TESTFN to lookup in the alist if non-nil. Otherwise, use `assq'. - -This is a generalized variable suitable for use with `setf'. -When using it to set a value, optional argument REMOVE non-nil -means to remove KEY from ALIST if the new value is `eql' to DEFAULT." - (ignore remove) ;;Silence byte-compiler. - (let ((x (cond ((null testfn) (assq key alist)) - ((eq testfn #'equal) (assoc key alist)) - ((cl-find key alist :key #'car :test testfn))))) - (if x (cdr x) default))) - (advice-add #'alist-get :override #'doom*alist-get)))) - + (defalias 'when-let* #'when-let)))) ;; ;; Helpers diff --git a/modules/emacs/eshell/autoload/settings.el b/modules/emacs/eshell/autoload/settings.el index 39a838517..276f44b02 100644 --- a/modules/emacs/eshell/autoload/settings.el +++ b/modules/emacs/eshell/autoload/settings.el @@ -7,8 +7,11 @@ (signal 'wrong-number-of-arguments (list 'even (length aliases)))) (after! eshell (while aliases - (setf (alist-get (pop aliases) +eshell-aliases nil nil #'equal) - (list (pop aliases)))) + (let ((alias (pop aliases)) + (command (pop aliases))) + (if-let* ((oldval (assoc alias +eshell-aliases))) + (setcdr oldval (list command)) + (push (list alias command) +eshell-aliases)))) (when (boundp 'eshell-command-aliases-list) (if +eshell--default-aliases (setq eshell-command-aliases-list diff --git a/modules/feature/eval/autoload/repl.el b/modules/feature/eval/autoload/repl.el index dcd8df1a1..dd1cf1039 100644 --- a/modules/feature/eval/autoload/repl.el +++ b/modules/feature/eval/autoload/repl.el @@ -1,20 +1,21 @@ ;;; feature/eval/autoload/repl.el -*- lexical-binding: t; -*- -(defvar +eval-repl-buffers-alist () +(defvar +eval-repl-buffers (make-hash-table :test 'equal) "The buffer of the last open repl.") (define-minor-mode +eval-repl-mode "A minor mode for REPL buffers.") (defun +eval--ensure-in-repl-buffer (&optional command same-window-p) - (setq +eval-repl-buffers-alist - (cl-remove-if-not #'buffer-live-p +eval-repl-buffers-alist - :key #'cdr)) + (maphash (lambda (key buffer) + (unless (buffer-live-p buffer) + (remhash key +eval-repl-buffers))) + +eval-repl-buffers) (let* ((project-root (doom-project-root 'nocache)) (key (cons major-mode project-root)) - (buffer (cdr (assoc key +eval-repl-buffers-alist)))) - (unless (and (bufferp buffer) - (eq buffer (current-buffer))) + (buffer (gethash key +eval-repl-buffers))) + (cl-check-type buffer (or buffer null)) + (unless (eq buffer (current-buffer)) (funcall (if same-window-p #'switch-to-buffer #'pop-to-buffer) (if (buffer-live-p buffer) buffer @@ -26,8 +27,7 @@ (unless (bufferp buffer) (error "REPL command didn't return a buffer")) (with-current-buffer buffer (+eval-repl-mode +1)) - (setf (alist-get key +eval-repl-buffers-alist nil nil #'equal) - buffer) + (puthash key buffer +eval-repl-buffers) buffer))) (with-current-buffer buffer (goto-char (if (and (derived-mode-p 'comint-mode)