[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 83f7c87: New file kmb.el
From: |
Tino Calancha |
Subject: |
[elpa] master 83f7c87: New file kmb.el |
Date: |
Tue, 30 May 2017 19:38:34 -0400 (EDT) |
branch: master
commit 83f7c875f567b8827b35efb203a3d91d30d4ad3c
Author: Tino Calancha <address@hidden>
Commit: Tino Calancha <address@hidden>
New file kmb.el
See following link for details:
https://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00686.html
* kmb.el: New file.
---
packages/kmb/kmb.el | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 160 insertions(+)
diff --git a/packages/kmb/kmb.el b/packages/kmb/kmb.el
new file mode 100644
index 0000000..5798699
--- /dev/null
+++ b/packages/kmb/kmb.el
@@ -0,0 +1,160 @@
+;;; kmb.el --- Kill buffers matching a regexp w/o confirmation -*-
lexical-binding: t -*-
+
+;; Copyright (C) 2017 Free Software Foundation, Inc.
+
+;; Author: Tino Calancha <address@hidden>
+;; Keywords: lisp, convenience
+
+;; Maintainer: Tino Calancha
+;; Created: Wed May 24 13:19:18 JST 2017
+;; Version: 0.1
+;; Package-Requires: ((emacs "24.1"))
+;; Last-Updated: Fri May 26 21:17:10 JST 2017
+;; By: calancha
+;; Update #: 1
+;; Compatibility: GNU Emacs 24.x
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; This file is part of GNU Emacs.
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;; Commentary:
+;;
+;; This library provides the commands `kmb-kill-matching-buffers-no-ask'
+;; and `kmb-delete-process-and-kill-buffer-no-ask'. The former kills
+;; buffers whose name matches a regular expression. The latter,
+;; interactively kills the current buffer and if called from Lisp,
+;; then accepts a list of buffers to kill.
+;; Any of these commands ask for confirmation to kill the buffers.
+;; If one of the buffers is running a process, then the process is
+;; deleted before kill the buffer.
+;;
+;; This file also defines the commands `kmb-list-matching-buffers' and
+;; `kmb-list-buffers-matching-content' to list the buffers whose name
+;; or content match a regexp.
+;;
+;;
+;; Commands defined here:
+;;
+;; `kmb-delete-process-and-kill-buffer-no-ask',
+;; `kmb-kill-matching-buffers-no-ask', `kmb-list-buffers-matching-content',
+;; `kmb-list-matching-buffers'.
+;;
+;; Non-interactive functions defined here:
+;;
+;; `kmb--show-matches'.
+;;
+
+;;
+;;; Code:
+
+
+(defun kmb--show-matches (buffers &optional count)
+ "Show the name of BUFFERS in the echo area.
+
+BUFFERS is a list of buffers.
+If optional arg COUNT is non-nil, then it's the length
+of BUFFERS."
+ (if (null buffers)
+ (message "No buffers matching regexp")
+ (message "Found %d match%s: %s"
+ (or count (length buffers))
+ (if (cdr buffers) "es" "")
+ (mapconcat #'buffer-name buffers ", "))))
+
+(defun kmb-list-matching-buffers (regexp &optional with-process)
+ "Return list of buffers whose name matching REGEXP.
+If optional arg WITH-PROCESS is non-nil, then list just buffers
+running a process."
+ (interactive
+ (let* ((prefix current-prefix-arg)
+ (regexp
+ (if prefix
+ (read-string "List buffers running a process \
+and matching regexp: ")
+ (read-string "List buffers matching regexp: "))))
+ (list regexp prefix)))
+ (let ((buffers
+ (delq nil
+ (mapcar
+ (lambda (x)
+ (when (string-match regexp (buffer-name x))
+ (cond (with-process
+ (and (get-buffer-process x) x))
+ (t x))))
+ (buffer-list)))))
+ (kmb--show-matches buffers)
+ buffers))
+
+(defun kmb-kill-matching-buffers-no-ask (regexp)
+ "Kill all buffers whose name matching REGEXP without confirmation.
+If a buffer is running a process, then delete the process before
+kill the buffer."
+ (interactive "sKill buffers matching regexp: ")
+ (dolist (b (buffer-list))
+ (when (string-match regexp (buffer-name b))
+ (kmb-delete-process-and-kill-buffer-no-ask b))))
+
+(defalias 'kmb-kill-matching-buffers 'kmb-kill-matching-buffers-no-ask)
+
+(defun kmb-list-buffers-matching-content (regexp)
+ "Return list of buffers whose content match REGEXP."
+ (interactive "sList buffers whose content matches regexp: ")
+ (let* ((count 0)
+ (buffers
+ (delq nil
+ (mapcar
+ (lambda (b)
+ (let (str)
+ (with-current-buffer b
+ (setq str (buffer-substring-no-properties
+ (point-min) (point-max))))
+ (when (string-match regexp str)
+ (setq count (1+ count)) b)))
+ (buffer-list)))))
+ (kmb--show-matches buffers count)
+ buffers))
+
+(defun kmb-delete-process-and-kill-buffer-no-ask (&optional buffer)
+ "Delete BUFFER without confirmation.
+BUFFER is a buffer or a list of buffers.
+If the buffer is running a process, then delete the processes
+before kill the buffer.
+Interactivelly, delete the current buffer."
+ (interactive "i")
+ (let* ((def (or buffer (current-buffer)))
+ (buffers
+ (delq nil
+ (mapcar #'get-buffer (if (nlistp def) (list def) def))))
+ (processes (process-list)))
+ (dolist (buf buffers)
+ (when (get-buffer-process buf)
+ (dolist (proc processes)
+ (when (eq buf (process-buffer proc))
+ (set-process-query-on-exit-flag proc nil))))
+ (when (buffer-modified-p buf)
+ (with-current-buffer buf
+ (set-buffer-modified-p nil)))
+ (kill-buffer buf))))
+
+(defalias 'kmb-kill-buffer 'kmb-delete-process-and-kill-buffer-no-ask)
+
+(provide 'kmb)
+
+;;; kmb.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] master 83f7c87: New file kmb.el,
Tino Calancha <=