2015-06-15 09:05:52 +02:00
|
|
|
;;; defuns-buffers.el
|
|
|
|
|
2016-10-05 12:48:12 +02:00
|
|
|
(defvar doom-buffer)
|
2016-10-04 22:53:49 +02:00
|
|
|
(defvar-local doom--narrowed-origin nil)
|
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
;;;###autoload (autoload 'doom:narrow "defuns-buffers" nil t)
|
|
|
|
(evil-define-operator doom:narrow (&optional beg end bang)
|
2015-09-28 14:41:37 -04:00
|
|
|
"Restrict editing in this buffer to the current region, indirectly. With BANG,
|
2016-09-30 14:37:25 +02:00
|
|
|
clone the buffer and hard-narrow the selection. If mark isn't active, then widen
|
|
|
|
the buffer (if narrowed).
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
Inspired from http://demonastery.org/2013/04/emacs-evil-narrow-region/"
|
2015-09-28 14:41:37 -04:00
|
|
|
(interactive "<r><!>")
|
|
|
|
(if (region-active-p)
|
2015-12-09 02:00:15 -05:00
|
|
|
(progn
|
|
|
|
(deactivate-mark)
|
2016-10-04 22:53:49 +02:00
|
|
|
(when bang
|
|
|
|
(let ((old-buf (current-buffer)))
|
|
|
|
(switch-to-buffer (clone-indirect-buffer nil nil))
|
|
|
|
(setq doom--narrowed-origin old-buf)))
|
|
|
|
(narrow-to-region beg end))
|
|
|
|
(if doom--narrowed-origin
|
|
|
|
(progn
|
|
|
|
(kill-this-buffer)
|
|
|
|
(switch-to-buffer doom--narrowed-origin)
|
|
|
|
(setq doom--narrowed-origin nil))
|
|
|
|
(widen))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/set-read-only-region (begin end)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Mark a region as read-only (http://stackoverflow.com/questions/7410125)"
|
2015-06-15 09:05:52 +02:00
|
|
|
(let ((modified (buffer-modified-p)))
|
|
|
|
(add-text-properties begin end '(read-only t))
|
|
|
|
(set-buffer-modified-p modified)))
|
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/set-region-writeable (begin end)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Undoes `doom/set-read-only-region' (http://stackoverflow.com/questions/7410125)"
|
2015-06-15 09:05:52 +02:00
|
|
|
(let ((modified (buffer-modified-p))
|
|
|
|
(inhibit-read-only t))
|
|
|
|
(remove-text-properties begin end '(read-only t))
|
|
|
|
(set-buffer-modified-p modified)))
|
|
|
|
|
|
|
|
|
2015-07-30 02:35:40 +02:00
|
|
|
;; Buffer Life and Death ;;;;;;;;;;;;;;;
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2015-07-19 00:44:50 +02:00
|
|
|
;;;###autoload
|
2016-06-17 20:07:05 -04:00
|
|
|
(defun doom/get-buffers (&optional all-p)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get all buffers in the current project, in the current workgroup.
|
2015-12-21 05:44:44 -05:00
|
|
|
|
2016-09-30 14:37:25 +02:00
|
|
|
If ALL-P is non-nil, get all buffers across all projects in current
|
|
|
|
workgroup."
|
2016-06-17 20:07:05 -04:00
|
|
|
(let ((buffers (if (wg-current-workgroup t)
|
|
|
|
(doom/get-buffers-in-workgroup)
|
|
|
|
(buffer-list)))
|
2016-10-02 23:28:02 +02:00
|
|
|
(project-root (and (not all-p) (doom/project-root t))))
|
|
|
|
(append (if project-root
|
2016-06-17 20:07:05 -04:00
|
|
|
(funcall (if (eq all-p 'not) '-remove '-filter)
|
2016-10-02 23:28:02 +02:00
|
|
|
(lambda (b) (projectile-project-buffer-p b project-root))
|
2016-05-23 17:12:18 -04:00
|
|
|
buffers)
|
2016-06-17 20:07:05 -04:00
|
|
|
buffers)
|
|
|
|
(list doom-buffer))))
|
2015-07-19 00:44:50 +02:00
|
|
|
|
2016-03-03 01:38:13 -05:00
|
|
|
;;;###autoload
|
2016-06-17 20:07:05 -04:00
|
|
|
(defun doom/get-buffers-in-workgroup ()
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of buffers in current workgroup. Returns nil if workgroups2 isn't
|
|
|
|
loaded."
|
|
|
|
(when (featurep 'workgroups2)
|
|
|
|
(let ((assoc-bufs (wg-workgroup-associated-buffers nil)))
|
|
|
|
(--filter (memq it assoc-bufs) (buffer-list)))))
|
2016-03-03 01:38:13 -05:00
|
|
|
|
2015-12-12 01:28:04 -05:00
|
|
|
;;;###autoload
|
2016-06-17 20:07:05 -04:00
|
|
|
(defun doom/get-buffer-names (&optional buffer-list)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of names of buffers in the current workgroup, OR return the names
|
|
|
|
of the buffers in BUFFER-LIST."
|
2016-06-17 20:07:05 -04:00
|
|
|
(mapcar #'buffer-name (or buffer-list (doom/get-buffers))))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun doom/get-visible-windows (&optional window-list)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of the visible windows in the current frame (that aren't popups),
|
|
|
|
OR return only the visible windows in WINDOW-LIST."
|
2016-06-17 20:07:05 -04:00
|
|
|
(-remove #'doom/popup-p (or window-list (window-list))))
|
2015-12-12 01:28:04 -05:00
|
|
|
|
2015-06-15 09:05:52 +02:00
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/get-visible-buffers (&optional buffer-list)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of unburied buffers in the current project and workgroup, OR
|
|
|
|
return only the unburied buffers in BUFFER-LIST (a list of BUFFER-OR-NAMEs)."
|
2016-05-20 22:37:30 -04:00
|
|
|
(-filter #'get-buffer-window (or buffer-list (doom/get-buffers))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/get-buried-buffers (&optional buffer-list)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of buried buffers in the current project and workgroup, OR return
|
|
|
|
only the buried buffers in BUFFER-LIST (a list of BUFFER-OR-NAMEs)."
|
2016-06-17 20:07:05 -04:00
|
|
|
(-remove 'get-buffer-window (or buffer-list (doom/get-buffers))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/get-matching-buffers (pattern &optional buffer-list)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of all buffers (in the current workgroup OR in BUFFER-LIST) that
|
|
|
|
match the regex PATTERN."
|
2015-07-19 00:44:50 +02:00
|
|
|
(--filter (string-match-p pattern (buffer-name it))
|
2016-05-20 22:37:30 -04:00
|
|
|
(or buffer-list (doom/get-buffers))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2016-01-29 02:05:16 -05:00
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/get-buffers-in-modes (modes &optional buffer-list)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of all buffers (in the current workgroup OR in BUFFER-LIST) whose
|
|
|
|
`major-mode' is one of MODES."
|
2016-06-17 16:01:07 -04:00
|
|
|
(--filter (memq (buffer-local-value 'major-mode it) modes)
|
2016-05-20 22:37:30 -04:00
|
|
|
(or buffer-list (doom/get-buffers))))
|
2016-01-29 02:05:16 -05:00
|
|
|
|
2015-06-15 09:05:52 +02:00
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/get-real-buffers (&optional buffer-list)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Get a list of all buffers (in the current workgroup OR in BUFFER-LIST) that
|
|
|
|
`doom/real-buffer-p' returns non-nil for."
|
2016-05-20 22:37:30 -04:00
|
|
|
(-filter #'doom/real-buffer-p (or buffer-list (doom/get-buffers))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2015-10-03 19:39:58 -04:00
|
|
|
;;;###autoload
|
2016-05-23 17:12:18 -04:00
|
|
|
(defun doom/kill-real-buffer (&optional arg)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Kill buffer then switch to a real buffer. Only buries the buffer if it is
|
|
|
|
being displayed in another window.
|
|
|
|
|
|
|
|
NOTE: only buries scratch buffer.
|
|
|
|
|
|
|
|
See `doom/real-buffer-p' for what 'real' means."
|
2016-05-23 17:12:18 -04:00
|
|
|
(interactive (list t))
|
2016-10-05 12:48:12 +02:00
|
|
|
(let* ((scratch-p (eq (current-buffer) doom-buffer))
|
|
|
|
(old-project (doom/project-root))
|
|
|
|
(buffer (current-buffer))
|
|
|
|
(only-buffer-window-p (= (length (get-buffer-window-list buffer nil t)) 1)))
|
|
|
|
(unless scratch-p
|
|
|
|
(when (and only-buffer-window-p buffer-file-name (buffer-modified-p))
|
|
|
|
(if (yes-or-no-p "Buffer is unsaved, save it?")
|
|
|
|
(save-buffer)
|
|
|
|
(set-buffer-modified-p nil)))
|
|
|
|
(when arg
|
|
|
|
(doom/previous-real-buffer)
|
|
|
|
(when (eq buffer (current-buffer))
|
|
|
|
(switch-to-buffer doom-buffer t t))
|
|
|
|
(when only-buffer-window-p
|
|
|
|
(kill-buffer buffer))))
|
|
|
|
(when (eq (current-buffer) doom-buffer)
|
|
|
|
(doom-reload-scratch-buffer old-project)))
|
2016-06-08 14:38:30 -04:00
|
|
|
t)
|
2015-10-03 19:39:58 -04:00
|
|
|
|
2015-06-15 09:05:52 +02:00
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/kill-unreal-buffers ()
|
2016-09-30 14:37:25 +02:00
|
|
|
"Kill all buried buffers in current frame that match any of the rules in
|
|
|
|
`doom-unreal-buffers'."
|
2015-06-15 09:05:52 +02:00
|
|
|
(interactive)
|
2016-06-17 20:07:05 -04:00
|
|
|
(let ((kill-list (-remove 'doom/real-buffer-p
|
|
|
|
(doom/get-buried-buffers (buffer-list)))))
|
2015-06-15 09:05:52 +02:00
|
|
|
(mapc 'kill-buffer kill-list)
|
2016-05-20 22:37:30 -04:00
|
|
|
(doom/kill-process-buffers)
|
2015-11-17 02:12:39 -05:00
|
|
|
(message "Cleaned up %s buffers" (length kill-list))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/kill-process-buffers ()
|
2016-09-30 14:37:25 +02:00
|
|
|
"Kill all buried buffers that represent running processes."
|
2015-06-15 09:05:52 +02:00
|
|
|
(interactive)
|
2016-06-17 20:07:05 -04:00
|
|
|
(let ((buffer-list (buffer-list))
|
2015-11-17 02:12:39 -05:00
|
|
|
(killed-processes 0))
|
2015-06-15 09:05:52 +02:00
|
|
|
(dolist (p (process-list))
|
|
|
|
(let* ((process-name (process-name p))
|
2016-05-20 22:37:30 -04:00
|
|
|
(assoc (assoc process-name doom-cleanup-processes-alist)))
|
2015-06-15 09:05:52 +02:00
|
|
|
(when (and assoc
|
|
|
|
(not (string= process-name "server"))
|
|
|
|
(process-live-p p)
|
|
|
|
(not (--any? (let ((mode (buffer-local-value 'major-mode it)))
|
|
|
|
(eq mode (cdr assoc)))
|
|
|
|
buffer-list)))
|
2015-11-17 02:12:39 -05:00
|
|
|
(delete-process p)
|
|
|
|
(incf killed-processes))))
|
|
|
|
(message "Cleaned up %s processes" killed-processes)))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-09-30 14:37:25 +02:00
|
|
|
(defun doom/kill-matching-buffers (pattern &optional buffer-list)
|
|
|
|
"Kill all buffers (in current workgroup OR in BUFFER-LIST) that match the
|
|
|
|
regex PATTERN."
|
2015-06-15 09:05:52 +02:00
|
|
|
(interactive)
|
2015-07-30 02:35:40 +02:00
|
|
|
(let ((i 0))
|
|
|
|
(mapc (lambda (b)
|
2016-09-30 14:37:25 +02:00
|
|
|
(when (string-match-p pattern (buffer-name b))
|
2015-07-30 02:35:40 +02:00
|
|
|
(kill-buffer b)
|
|
|
|
(setq i (1+ i))))
|
2016-05-20 22:37:30 -04:00
|
|
|
(if buffer-list buffer-list (doom/get-buffers)))
|
2015-07-30 02:35:40 +02:00
|
|
|
(message "Killed %s matches" i)))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/cycle-real-buffers (&optional n)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Switch to the previous buffer, skipping over special buffers. If there's
|
|
|
|
nothing left, create a scratch buffer."
|
2015-10-03 19:39:58 -04:00
|
|
|
(let* ((start-buffer (current-buffer))
|
2016-06-08 14:38:30 -04:00
|
|
|
(move-func (if (> n 0) 'switch-to-next-buffer 'switch-to-prev-buffer))
|
2015-10-03 19:39:58 -04:00
|
|
|
(max 25)
|
|
|
|
(i 0)
|
2016-06-08 14:38:30 -04:00
|
|
|
(continue t)
|
2016-06-17 20:07:05 -04:00
|
|
|
(buffers (doom/get-real-buffers (doom/get-buffers t)))
|
2016-06-08 14:38:30 -04:00
|
|
|
destbuf)
|
|
|
|
(setq destbuf
|
|
|
|
(catch 'goto
|
2016-06-17 20:07:05 -04:00
|
|
|
(if (or (not buffers)
|
|
|
|
(= (length buffers) 1))
|
|
|
|
(progn (message "No other buffers in workgroup")
|
|
|
|
(throw 'goto (current-buffer)))
|
2016-06-08 14:38:30 -04:00
|
|
|
(funcall move-func)
|
2016-06-17 20:07:05 -04:00
|
|
|
(while (not (memq (current-buffer) buffers))
|
2016-06-08 14:38:30 -04:00
|
|
|
(if (or (eq (current-buffer) start-buffer)
|
|
|
|
(>= i max))
|
|
|
|
(throw 'goto doom-buffer)
|
|
|
|
(funcall move-func))
|
|
|
|
(cl-incf i))
|
|
|
|
(current-buffer))))
|
|
|
|
(when (eq destbuf doom-buffer)
|
2016-10-05 12:48:12 +02:00
|
|
|
(doom-reload-scratch-buffer)
|
2016-06-08 14:38:30 -04:00
|
|
|
(message "Nowhere to go"))
|
|
|
|
(switch-to-buffer destbuf)))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-23 17:12:18 -04:00
|
|
|
(defun doom/real-buffer-p (&optional buffer)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Returns whether BUFFER a 'real' buffer or not. Real means: a) it isn't a
|
|
|
|
popup (or temporary) window and b) it isn't a special buffer (e.g. scratch or
|
|
|
|
*messages* buffer)."
|
2016-06-08 14:38:30 -04:00
|
|
|
(setq buffer (or (and (bufferp buffer) buffer)
|
|
|
|
(and (stringp buffer) (get-buffer buffer))
|
|
|
|
(current-buffer)))
|
2016-06-17 20:07:05 -04:00
|
|
|
(or (eq buffer doom-buffer)
|
|
|
|
(when (buffer-live-p buffer)
|
|
|
|
(with-current-buffer buffer
|
|
|
|
(not (or (apply #'derived-mode-p (-filter 'symbolp doom-unreal-buffers))
|
|
|
|
(--any? (string-match-p it (buffer-name buffer))
|
|
|
|
(-filter 'stringp doom-unreal-buffers))))))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/next-real-buffer ()
|
2016-09-30 14:37:25 +02:00
|
|
|
"Switch to the next real buffer, skipping special buffers. See
|
|
|
|
`doom/real-buffer-p'."
|
2015-06-15 09:05:52 +02:00
|
|
|
(interactive)
|
2016-05-20 22:37:30 -04:00
|
|
|
(doom/cycle-real-buffers +1))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom/previous-real-buffer ()
|
2016-09-30 14:37:25 +02:00
|
|
|
"Switch to the previous real buffer, skipping special buffers. See
|
|
|
|
`doom/real-buffer-p'."
|
2015-06-15 09:05:52 +02:00
|
|
|
(interactive)
|
2016-05-20 22:37:30 -04:00
|
|
|
(doom/cycle-real-buffers -1))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
(defun doom--kill-buffers (buffers &optional filter-func)
|
2016-03-29 23:48:22 -04:00
|
|
|
(let ((buffers (if filter-func (-filter filter-func buffers) buffers))
|
2015-11-17 02:12:39 -05:00
|
|
|
(affected 0))
|
|
|
|
(mapc (lambda (b) (when (kill-buffer b) (incf affected))) buffers)
|
2016-05-20 22:37:30 -04:00
|
|
|
(unless (doom/real-buffer-p)
|
|
|
|
(doom/previous-real-buffer))
|
2015-12-21 05:44:44 -05:00
|
|
|
(message "Killed %s buffers" affected)))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
;;;###autoload (autoload 'doom:kill-all-buffers "defuns-buffers" nil t)
|
|
|
|
(evil-define-command doom:kill-all-buffers (&optional bang)
|
2015-12-21 05:44:44 -05:00
|
|
|
"Kill all project buffers. If BANG, kill *all* buffers (in workgroup)."
|
|
|
|
(interactive "<!>")
|
2016-06-05 00:51:41 -04:00
|
|
|
(doom--kill-buffers (--filter (not (eq it doom-buffer)) (doom/get-buffers (not bang))))
|
2016-05-20 22:37:30 -04:00
|
|
|
(mapc (lambda (w) (when (eq (window-buffer w) doom-buffer)
|
2016-05-02 15:59:30 -04:00
|
|
|
(delete-window w)))
|
2016-05-20 22:37:30 -04:00
|
|
|
(doom/get-visible-windows)))
|
2015-12-21 05:44:44 -05:00
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
;;;###autoload (autoload 'doom:kill-other-buffers "defuns-buffers" nil t)
|
|
|
|
(evil-define-command doom:kill-other-buffers (&optional bang)
|
2016-03-29 23:48:22 -04:00
|
|
|
"Kill all other project buffers. If BANG, kill *all* other buffers (in workgroup)."
|
|
|
|
(interactive "<!>")
|
2016-05-20 22:37:30 -04:00
|
|
|
(doom--kill-buffers (doom/get-buffers (not bang))
|
2016-03-29 23:48:22 -04:00
|
|
|
(lambda (b) (not (eq b (current-buffer)))))
|
|
|
|
(when bang
|
|
|
|
(delete-other-windows)))
|
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
;;;###autoload (autoload 'doom:kill-buried-buffers "defuns-buffers" nil t)
|
|
|
|
(evil-define-command doom:kill-buried-buffers (&optional bang)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Kill buried project buffers in current workgroup and report how many it
|
|
|
|
found. If BANG, then include buffers that aren't part of the current project."
|
2015-06-15 09:05:52 +02:00
|
|
|
(interactive "<!>")
|
2016-05-20 22:37:30 -04:00
|
|
|
(doom--kill-buffers (doom/get-buried-buffers (doom/get-buffers (not bang)))))
|
2015-12-21 05:44:44 -05:00
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
;;;###autoload (autoload 'doom:kill-buried-buffers "defuns-buffers" nil t)
|
|
|
|
(evil-define-command doom:kill-matching-buffers (&optional bang pattern)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Kill project buffers in current workgroup that match regex PATTERN. If BANG,
|
|
|
|
then include buffers that aren't part of the current project."
|
2015-12-21 05:44:44 -05:00
|
|
|
:repeat nil
|
|
|
|
(interactive "<!><a>")
|
2016-05-20 22:37:30 -04:00
|
|
|
(doom-kill-buffers (doom/get-matching-buffers pattern (doom/get-buffers (not bang)))))
|
2015-12-21 05:44:44 -05:00
|
|
|
|
2016-06-18 00:53:01 -04:00
|
|
|
;;;###autoload (autoload 'doom:scratch-buffer "defuns-buffers" nil t)
|
|
|
|
(evil-define-operator doom:scratch-buffer (&optional beg end bang)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Send a region to and pop up the scratch buffer. If BANG, don't use a popup
|
|
|
|
(use the current window)."
|
2015-06-15 09:05:52 +02:00
|
|
|
:move-point nil
|
|
|
|
:type inclusive
|
|
|
|
(interactive "<r><!>")
|
2016-06-17 23:51:38 -04:00
|
|
|
(let ((text (when (and (evil-visual-state-p) beg end)
|
2016-06-18 00:53:01 -04:00
|
|
|
(buffer-substring beg end)))
|
|
|
|
(mode major-mode)
|
|
|
|
(old-project (doom/project-root))
|
|
|
|
(new-buf (get-buffer-create "*doom:scratch*")))
|
|
|
|
(with-current-buffer new-buf
|
|
|
|
(setq default-directory old-project)
|
2016-10-05 21:50:34 +02:00
|
|
|
(setq mode-line-format (doom-modeline))
|
2016-06-18 00:53:01 -04:00
|
|
|
(when (and (not (eq major-mode mode))
|
|
|
|
(functionp mode))
|
|
|
|
(funcall mode))
|
|
|
|
(if text (insert text)))
|
|
|
|
(if bang (switch-to-buffer new-buf) (doom/popup-buffer new-buf))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2016-05-20 22:37:30 -04:00
|
|
|
;;;###autoload (autoload 'doom:cd "defuns-buffers" nil t)
|
|
|
|
(evil-define-command doom:cd (dir)
|
2016-09-30 14:37:25 +02:00
|
|
|
"Change the `default-directory' to DIR (alias for `cd')"
|
2015-06-15 09:05:52 +02:00
|
|
|
:repeat nil
|
|
|
|
(interactive "<f>")
|
|
|
|
(cd (if (zerop (length dir)) "~" dir)))
|
|
|
|
|
2015-06-19 16:08:39 +02:00
|
|
|
;;;###autoload
|
2016-09-30 14:37:25 +02:00
|
|
|
(defun doom/kill-workgroup-and-quit ()
|
|
|
|
"Wipe the current workgroup session and save the blank slate."
|
2015-06-19 16:08:39 +02:00
|
|
|
(interactive)
|
2016-05-21 23:12:50 -04:00
|
|
|
(let (confirm-kill-emacs)
|
2016-06-17 20:07:05 -04:00
|
|
|
(mapc 'kill-buffer (doom/get-buffers t))
|
2015-06-19 16:08:39 +02:00
|
|
|
(kill-this-buffer)
|
|
|
|
(delete-other-windows)
|
|
|
|
(wg-save-session t)
|
|
|
|
(save-buffers-kill-terminal)))
|
|
|
|
|
2015-06-15 09:05:52 +02:00
|
|
|
(provide 'defuns-buffers)
|
|
|
|
;;; defuns-buffers.el ends here
|