diff --git a/core/autoload/editor.el b/core/autoload/editor.el index ae86b38de..a365a647d 100644 --- a/core/autoload/editor.el +++ b/core/autoload/editor.el @@ -225,32 +225,57 @@ for function signatures or notes. Run again to clear the header line." content))))) ;;;###autoload -(defun doom/scratch-buffer (&optional arg) - "Opens the scratch buffer in a popup window. +(defun doom|enable-delete-trailing-whitespace () + (add-hook 'before-save-hook #'delete-trailing-whitespace nil t)) -If ARG (universal argument) is non-nil, open it in the current window instead of -a popup. -If a region is active, copy it into the scratch buffer." - (interactive "P") +;; -- scratch buffer ---------------------- + +(defvar doom-scratch-files-dir (concat doom-etc-dir "scratch/") + "Where to store project scratch files, created by +`doom/open-project-scratch-buffer'.") + +(defvar doom-scratch-buffer-hook () + "The hooks to run after a scratch buffer is made.") + +(defun doom--create-scratch-buffer (&optional project-p) (let ((text (and (region-active-p) (buffer-substring-no-properties (region-beginning) (region-end)))) (mode major-mode) (derived-p (derived-mode-p 'prog-mode 'text-mode)) - (old-project (doom-project-root)) - (new-buf (get-buffer-create "*doom:scratch*"))) - (if arg - (switch-to-buffer new-buf) - (doom-popup-buffer new-buf)) - (with-current-buffer new-buf + (old-project (doom-project-root))) + (unless (file-directory-p doom-scratch-files-dir) + (mkdir doom-scratch-files-dir t)) + (with-current-buffer + (if project-p + (find-file-noselect (expand-file-name (replace-regexp-in-string "\\." "_" (projectile-project-name) t t) + doom-scratch-files-dir) + nil t) + (get-buffer-create "*doom:scratch*")) + (when project-p + (rename-buffer (format "*doom:scratch (%s)*" (projectile-project-name)))) (setq default-directory old-project) (when (and (not (eq major-mode mode)) derived-p (functionp mode)) (funcall mode)) - (if text (insert text))))) + (if text (insert text)) + (run-hooks 'doom-scratch-buffer-hook) + (current-buffer)))) ;;;###autoload -(defun doom|enable-delete-trailing-whitespace () - (add-hook 'before-save-hook #'delete-trailing-whitespace nil t)) +(defun doom/open-scratch-buffer (arg) + "Opens a temporary scratch buffer in a popup window. It is discarded once it +is closed. If a region is active, copy it to the scratch buffer." + (interactive) + (doom-popup-buffer (doom--create-scratch-buffer) + '(:size 10 :autokill t :noesc nil) t)) + +;;;###autoload +(defun doom/open-project-scratch-buffer () + "Opens a (persistent) scratch buffer associated with the current project in a +popup window. Scratch buffers are stored in `doom-scratch-files-dir'. If a +region is active, copy it to the scratch buffer." + (interactive) + (doom-popup-buffer (doom--create-scratch-buffer t))) diff --git a/modules/private/hlissner/+commands.el b/modules/private/hlissner/+commands.el index 35c3b628b..70125e680 100644 --- a/modules/private/hlissner/+commands.el +++ b/modules/private/hlissner/+commands.el @@ -28,9 +28,7 @@ (ex! "sh[ell]" #'+eshell:run) (ex! "t[mux]" #'+tmux:run) ; send to tmux (ex! "tcd" #'+tmux:cd-here) ; cd to default-directory in tmux - -(evil-set-command-properties #'doom/scratch-buffer :ex-bang t) -(ex! "x" #'doom/scratch-buffer) +(ex! "x" #'doom/open-project-scratch-buffer) ;; GIT (ex! "gist" #'+gist:send) ; send current buffer/region to gist