Combine doom/open-scratch-buffer & doom/open-project-scratch-buffer
These two are now doom/open-scratch-buffer. If you're in a project, a (persistent) scratch buffer is opened. Otherwise, a non-persistent, transient scratch buffer is opened. If ARG (universal argument) is non-nil, then use the current window instead of a new window (or popup, if feature/popup is enabled). Also, the ex command :x[!] is improved. The BANG = open in current window.
This commit is contained in:
parent
d0fa95f9a0
commit
bbb969fa59
2 changed files with 32 additions and 25 deletions
|
@ -7,27 +7,31 @@
|
||||||
(defvar doom-scratch-buffer-hook ()
|
(defvar doom-scratch-buffer-hook ()
|
||||||
"The hooks to run after a scratch buffer is made.")
|
"The hooks to run after a scratch buffer is made.")
|
||||||
|
|
||||||
(defun doom--create-scratch-buffer (&optional project-p)
|
(defun doom--create-scratch-buffer ()
|
||||||
(let ((text (and (region-active-p)
|
(let* ((project-p (doom-project-p 'nocache))
|
||||||
(buffer-substring-no-properties
|
(text (and (region-active-p)
|
||||||
(region-beginning) (region-end))))
|
(buffer-substring-no-properties
|
||||||
(mode major-mode)
|
(region-beginning) (region-end))))
|
||||||
(derived-p (derived-mode-p 'prog-mode 'text-mode))
|
(mode major-mode)
|
||||||
(old-project (doom-project-root)))
|
(derived-p (derived-mode-p 'prog-mode 'text-mode))
|
||||||
|
(project-root (if project-p (doom-project-root 'nocache)))
|
||||||
|
(id (projectile-project-name)))
|
||||||
|
(when (and id (string-empty-p id))
|
||||||
|
(user-error "Invalid id for a scratch buffer (%s)" id))
|
||||||
(unless (file-directory-p doom-scratch-files-dir)
|
(unless (file-directory-p doom-scratch-files-dir)
|
||||||
(mkdir doom-scratch-files-dir t))
|
(make-directory doom-scratch-files-dir t))
|
||||||
(with-current-buffer
|
(with-current-buffer
|
||||||
(if project-p
|
(if project-p
|
||||||
(find-file-noselect
|
(find-file-noselect
|
||||||
(expand-file-name (replace-regexp-in-string
|
(expand-file-name (replace-regexp-in-string
|
||||||
"\\." "_" (projectile-project-name)
|
"\\." "_" id
|
||||||
t t)
|
t t)
|
||||||
doom-scratch-files-dir)
|
doom-scratch-files-dir)
|
||||||
nil t)
|
nil t)
|
||||||
(get-buffer-create "*doom:scratch*"))
|
(get-buffer-create "*doom:scratch*"))
|
||||||
(when project-p
|
(when project-p
|
||||||
(rename-buffer (format "*doom:scratch (%s)*" (projectile-project-name))))
|
(rename-buffer (format "*doom:scratch (%s)*" id))
|
||||||
(setq default-directory old-project)
|
(setq default-directory project-root))
|
||||||
(when (and (not (eq major-mode mode))
|
(when (and (not (eq major-mode mode))
|
||||||
derived-p
|
derived-p
|
||||||
(functionp mode))
|
(functionp mode))
|
||||||
|
@ -37,17 +41,16 @@
|
||||||
(current-buffer))))
|
(current-buffer))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun doom/open-scratch-buffer (&optional in-project-p)
|
(defun doom/open-scratch-buffer (&optional arg)
|
||||||
"Opens a temporary scratch buffer. It is discarded once it is closed. If a
|
"Opens a persistent scratch buffer in the same major-mode, at the current
|
||||||
region is active, copy it to the scratch buffer."
|
project root. If no project is found, scratch buffer will not be persistent. If
|
||||||
|
a selection is active, copy it to the scratch buffer.
|
||||||
|
|
||||||
|
If ARG (universal argument) is non-nil, display the buffer in the current
|
||||||
|
window. Otherwise, display it in a pop up window.
|
||||||
|
|
||||||
|
Persistent scratch buffers are stored in `doom-scratch-files-dir'."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(pop-to-buffer (doom--create-scratch-buffer in-project-p)))
|
(funcall (if arg #'switch-to-buffer #'display-buffer)
|
||||||
|
(doom--create-scratch-buffer)))
|
||||||
;;;###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/open-scratch-buffer 'in-project))
|
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
(defalias 'ex! 'evil-ex-define-cmd)
|
(defalias 'ex! 'evil-ex-define-cmd)
|
||||||
|
|
||||||
(evil-define-command doom:cleanup-session (&optional bang)
|
(evil-define-command doom:cleanup-session (bang)
|
||||||
(interactive "<!>")
|
(interactive "<!>")
|
||||||
(doom/cleanup-session bang))
|
(doom/cleanup-session bang))
|
||||||
|
|
||||||
|
(evil-define-operator doom:open-scratch-buffer (bang)
|
||||||
|
(interactive "<!>")
|
||||||
|
(doom/open-scratch-buffer bang))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Commands
|
;; Commands
|
||||||
|
@ -38,7 +42,7 @@
|
||||||
(ex! "sh[ell]" #'+eshell:run)
|
(ex! "sh[ell]" #'+eshell:run)
|
||||||
(ex! "t[mux]" #'+tmux:run) ; send to tmux
|
(ex! "t[mux]" #'+tmux:run) ; send to tmux
|
||||||
(ex! "tcd" #'+tmux:cd-here) ; cd to default-directory in tmux
|
(ex! "tcd" #'+tmux:cd-here) ; cd to default-directory in tmux
|
||||||
(ex! "x" #'doom/open-project-scratch-buffer)
|
(ex! "x" #'doom:open-scratch-buffer)
|
||||||
;; GIT
|
;; GIT
|
||||||
(ex! "gist" #'+gist:send) ; send current buffer/region to gist
|
(ex! "gist" #'+gist:send) ; send current buffer/region to gist
|
||||||
(ex! "gistl" #'+gist:list) ; list gists by user
|
(ex! "gistl" #'+gist:list) ; list gists by user
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue