From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Kost Subject: [PATCH 3/5] emacs: Improve buffer procedures. Date: Tue, 21 Oct 2014 22:12:20 +0400 Message-ID: <87ppdl47i3.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:34846) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xgdv4-0008Sy-P8 for guix-devel@gnu.org; Tue, 21 Oct 2014 14:12:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xgduv-0004F7-NO for guix-devel@gnu.org; Tue, 21 Oct 2014 14:12:30 -0400 Received: from mail-lb0-x231.google.com ([2a00:1450:4010:c04::231]:63593) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xgduv-0004Dz-FV for guix-devel@gnu.org; Tue, 21 Oct 2014 14:12:21 -0400 Received: by mail-lb0-f177.google.com with SMTP id w7so1486012lbi.22 for ; Tue, 21 Oct 2014 11:12:20 -0700 (PDT) Received: from leviafan (128-74-164-65.broadband.corbina.ru. [128.74.164.65]) by mx.google.com with ESMTPSA id or5sm4827668lbb.42.2014.10.21.11.12.19 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Oct 2014 11:12:19 -0700 (PDT) List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel@gnu.org --=-=-= Content-Type: text/plain Some internal changes. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0003-emacs-Improve-buffer-procedures.patch >From 0973be332e0752497c831ad27d44fe6594cb1da8 Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Mon, 20 Oct 2014 21:43:33 +0400 Subject: [PATCH 3/5] emacs: Improve buffer procedures. * emacs/guix-base.el (guix-list-or-info-buffer-p): Delete. Replace with... (guix-buffer-p): ... this. New procedure. (guix-buffers): Use it. Add 'modes' argument. (guix-update-buffer): New procedure. (guix-update-buffers-maybe): Rename to ... (guix-update-buffers-maybe-after-operation): this. Use 'guix-update-buffer'. --- emacs/guix-base.el | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/emacs/guix-base.el b/emacs/guix-base.el index 5b98579..c0a06c7 100644 --- a/emacs/guix-base.el +++ b/emacs/guix-base.el @@ -283,33 +283,42 @@ See `guix-buffer-name-function' for details." '((display-buffer-reuse-window display-buffer-same-window)))) -(defun guix-list-or-info-buffer-p (&optional buffer) - "Return non-nil if BUFFER is a Guix 'list' or 'info' buffer. -If BUFFER is nil, check current buffer." +(defun guix-buffer-p (&optional buffer modes) + "Return non-nil if BUFFER mode is derived from any of the MODES. +If BUFFER is nil, check current buffer. +If MODES is nil, use `guix-list-mode' and `guix-info-mode'." (with-current-buffer (or buffer (current-buffer)) - (derived-mode-p 'guix-list-mode 'guix-info-mode))) - -(defun guix-buffers () - "Return list of all Guix 'list' and 'info' buffers." - (cl-remove-if-not #'guix-list-or-info-buffer-p + (apply #'derived-mode-p + (or modes + '(guix-list-mode guix-info-mode))))) + +(defun guix-buffers (&optional modes) + "Return list of all buffers with major modes derived from MODES. +If MODES is nil, return list of all Guix 'list' and 'info' buffers." + (cl-remove-if-not (lambda (buf) + (guix-buffer-p buf modes)) (buffer-list))) -(defun guix-update-buffers-maybe () +(defun guix-update-buffer (buffer) + "Update information in a 'list' or 'info' BUFFER." + (with-current-buffer buffer + (guix-revert-buffer nil t))) + +(defun guix-update-buffers-maybe-after-operation () "Update buffers after Guix operation if needed. See `guix-update-after-operation' for details." - (let ((to-update (and guix-operation-buffer - (cl-case guix-update-after-operation - (current (list guix-operation-buffer)) - (all (guix-buffers)))))) + (let ((to-update + (and guix-operation-buffer + (cl-case guix-update-after-operation + (current (and (buffer-live-p guix-operation-buffer) + (guix-buffer-p guix-operation-buffer) + (list guix-operation-buffer))) + (all (guix-buffers)))))) (setq guix-operation-buffer nil) - (mapc (lambda (buf) - (and (buffer-live-p buf) - (guix-list-or-info-buffer-p buf) - (with-current-buffer buf - (guix-revert-buffer nil t)))) - to-update))) - -(add-hook 'guix-after-repl-operation-hook 'guix-update-buffers-maybe) + (mapc #'guix-update-buffer to-update))) + +(add-hook 'guix-after-repl-operation-hook + 'guix-update-buffers-maybe-after-operation) ;;; Common definitions for buffer types -- 2.1.2 --=-=-=--