Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;; etags-kill.el --- kill useless buffers when browsing tags
- ;; Copyright (C) 2009 Free Software Foundation, Inc.
- ;; Author: Yann Hodique <yhodique@vmware.com>
- ;; Keywords:
- ;; This file 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 2, or (at your option)
- ;; any later version.
- ;; This file 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 GNU Emacs; see the file COPYING. If not, write to
- ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- ;; Boston, MA 02111-1307, USA.
- ;;; Commentary:
- ;; This code will kill buffers that:
- ;; - have been opened by `find-tag' (was not open before)
- ;; - are not living anymore in the tag stack (you just M-* from it)
- ;; An exception is if user uses C-u M-* instead. In this case they will be
- ;; considered as already open for any future `pop-tag-mark'
- ;; Limitation: this will work only if `pop-tag-mark' is run from the
- ;; buffer. This is how I browse, so I don't see it as a major limitation.
- ;;; Code:
- (defvar yh/destroy-buffer-when-pop nil)
- (make-variable-buffer-local 'yh/destroy-buffer-when-pop)
- (defvar yh/orig-find-file-noselect (symbol-function 'find-file-noselect))
- (defun yh/find-file-noselect-and-record (file &optional nowarn rawfile wildcards)
- (let ((buffer (funcall yh/orig-find-file-noselect file nowarn rawfile wildcards)))
- (with-current-buffer buffer
- (setq yh/destroy-buffer-when-pop t))
- buffer))
- (defadvice tag-find-file-of-tag-noselect (around yh/tag-ff-around (file) act)
- (flet ((find-file-noselect (file &optional nowarn rawfile wildcards)
- (yh/find-file-noselect-and-record file nowarn rawfile wildcards)))
- ad-do-it))
- (defadvice pop-tag-mark (around yh/tag-pop-around () act)
- (let* ((yh/buffer (current-buffer))
- (yh/pop-destroy-buffer (buffer-local-value 'yh/destroy-buffer-when-pop yh/buffer)))
- (when current-prefix-arg
- (setq yh/pop-destroy-buffer nil)
- (with-current-buffer yh/buffer
- (setq yh/destroy-buffer-when-pop nil)))
- ad-do-it
- (if (and yh/pop-destroy-buffer (not (eq yh/buffer (current-buffer))))
- (kill-buffer yh/buffer))))
- ;; need for an advice here since it can be called from `tag-find-file-of-tag-noselect'
- (defadvice visit-tags-table-buffer (around yh/visit-tags-around (&optional cont) act)
- (flet ((find-file-noselect (file &optional nowarn rawfile wildcards)
- (funcall yh/orig-find-file-noselect file nowarn rawfile wildcards)))
- ad-do-it))
- (provide 'etags-kill)
- ;;; etags-kill.el ends here
Add Comment
Please, Sign In to add comment