diff --git a/core/core-lib.el b/core/core-lib.el index f2dfa9546..95e8f618c 100644 --- a/core/core-lib.el +++ b/core/core-lib.el @@ -93,6 +93,7 @@ Accepts the same arguments as `message'." ARGS is a list of the last N arguments to pass to FUN. The result is a new function which does the same as FUN, except that the last N arguments are fixed at the values with which this function was called." + (declare (pure t) (side-effect-free t)) (lambda (&rest pre-args) (apply fn (append pre-args args)))) @@ -104,7 +105,7 @@ at the values with which this function was called." "Expands to (lambda () (interactive) ,@body). A factory for quickly producing interaction commands, particularly for keybinds or aliases." - (declare (doc-string 1)) + (declare (doc-string 1) (pure t) (side-effect-free t)) `(lambda () (interactive) ,@body)) (defalias 'lambda! 'λ!) @@ -112,7 +113,7 @@ or aliases." "Expands to a command that interactively calls COMMAND with prefix ARG. A factory for quickly producing interactive, prefixed commands for keybinds or aliases." - (declare (doc-string 1)) + (declare (doc-string 1) (pure t) (side-effect-free t)) (lambda () (interactive) (let ((current-prefix-arg arg)) (call-interactively command)))) @@ -419,10 +420,9 @@ DOCSTRING and BODY are as in `defun'. where-alist)) `(progn (defun ,symbol ,arglist ,docstring ,@body) - ,(when where-alist - `(dolist (targets (list ,@(nreverse where-alist))) - (dolist (target (cdr targets)) - (advice-add target (car targets) #',symbol))))))) + (dolist (targets (list ,@(nreverse where-alist))) + (dolist (target (cdr targets)) + (advice-add target (car targets) #',symbol)))))) (provide 'core-lib) ;;; core-lib.el ends here diff --git a/core/core-projects.el b/core/core-projects.el index 24e6ed33f..bdcb2cffa 100644 --- a/core/core-projects.el +++ b/core/core-projects.el @@ -44,6 +44,21 @@ Emacs.") :config (projectile-mode +1) + ;; Projectile runs four functions to determine the root (in this order): + ;; + ;; + `projectile-root-local' -> consults the `projectile-project-root' + ;; variable for an explicit path. + ;; + `projectile-root-bottom-up' -> consults + ;; `projectile-project-root-files-bottom-up'; searches from / to your + ;; current directory for certain files (including .project and .git) + ;; + `projectile-root-top-down' -> consults `projectile-project-root-files'; + ;; searches from the current directory down to / for certain project + ;; markers, like package.json, setup.py, or Cargo.toml + ;; + `projectile-root-top-down-recurring' -> consults + ;; `projectile-project-root-files-top-down-recurring'; searches from the + ;; current directory down to / for a directory that has .svn or Makefile but + ;; doesn't have a parent with one of those files. + ;; ;; In the interest of performance, we reduce the number of project root marker ;; files/directories projectile searches for when resolving the project root. (setq projectile-project-root-files-bottom-up diff --git a/core/core-ui.el b/core/core-ui.el index b8081ec24..af27e4deb 100644 --- a/core/core-ui.el +++ b/core/core-ui.el @@ -320,7 +320,8 @@ treat Emacs as a non-application window." ;; always avoid GUI (setq use-dialog-box nil) ;; Don't display floating tooltips; display their contents in the echo-area. -(if (bound-and-true-p tooltip-mode) (tooltip-mode -1)) +(when (bound-and-true-p tooltip-mode) + (tooltip-mode -1)) ;; native linux tooltips are ugly (when IS-LINUX (setq x-gtk-use-system-tooltips nil)) diff --git a/modules/config/default/autoload/default.el b/modules/config/default/autoload/default.el index 28d2caed1..e7a40b750 100644 --- a/modules/config/default/autoload/default.el +++ b/modules/config/default/autoload/default.el @@ -238,17 +238,19 @@ If prefix ARG is set, prompt for a directory to search from." "Conduct a text search in the current project root. If prefix ARG is set, prompt for a known project to search from." (interactive "P") - (let ((default-directory - (if arg - (if-let (projects (projectile-relevant-known-projects)) - (completing-read "Search project: " projects - nil t nil nil (doom-project-root)) - (user-error "There are no known projects")) - default-directory))) - (call-interactively - (cond ((featurep! :completion ivy) #'+ivy/project-search) - ((featurep! :completion helm) #'+helm/project-search) - (#'projectile-grep))))) + (let* ((disabled-command-function nil) + (default-directory + (if arg + (if-let (projects (projectile-relevant-known-projects)) + (completing-read "Search project: " projects + nil t nil nil (doom-project-root)) + (user-error "There are no known projects")) + default-directory)) + (this-command + (cond ((featurep! :completion ivy) #'+ivy/project-search) + ((featurep! :completion helm) #'+helm/project-search) + (#'projectile-ripgrep)))) + (call-interactively this-command))) ;;;###autoload (defun +default/search-other-project () diff --git a/modules/ui/popup/+hacks.el b/modules/ui/popup/+hacks.el index 08b58cb7b..1418e8dc5 100644 --- a/modules/ui/popup/+hacks.el +++ b/modules/ui/popup/+hacks.el @@ -9,7 +9,7 @@ ;; other windows just to pop up one tiny window). ;; 2. Forcing plugins to use `display-buffer' and `pop-to-buffer' instead of ;; `switch-to-buffer' (which is unaffected by `display-buffer-alist', which -;; this module heavily relies on). +;; we must rely on, heavily). ;; 3. Closing popups (temporarily) before functions that are highly destructive ;; to the illusion of popup control get run (with the use of the ;; `save-popups!' macro). @@ -206,10 +206,10 @@ the command buffer." (defadvice! +popup--helm-elisp--persistent-help-a (candidate _fun &optional _name) :before #'helm-elisp--persistent-help (let (win) - (when (and (helm-attr 'help-running-p) - (string= candidate (helm-attr 'help-current-symbol)) - (setq win (get-buffer-window (get-buffer (help-buffer))))) - (delete-window win))))) + (and (helm-attr 'help-running-p) + (string= candidate (helm-attr 'help-current-symbol)) + (setq win (get-buffer-window (get-buffer (help-buffer)))) + (delete-window win))))) ;;;###package Info