From c10521e97679c35a40926084e049445cc5053254 Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Wed, 12 Aug 2015 15:28:55 +0300 Subject: emacs: Add and use 'guix-while-search'. * emacs/guix-utils.el (guix-while-search): New macro. * emacs/guix-pcomplete.el (guix-pcomplete-run-guix-and-search): Use it. * emacs/guix-prettify.el (guix-prettify-decompose-buffer): Likewise. --- emacs/guix-pcomplete.el | 3 +-- emacs/guix-prettify.el | 16 ++++++++-------- emacs/guix-utils.el | 8 ++++++++ 3 files changed, 17 insertions(+), 10 deletions(-) (limited to 'emacs') diff --git a/emacs/guix-pcomplete.el b/emacs/guix-pcomplete.el index 9ec563cf52..0049c94d38 100644 --- a/emacs/guix-pcomplete.el +++ b/emacs/guix-pcomplete.el @@ -105,9 +105,8 @@ Return a list of strings matching REGEXP. GROUP specifies a parenthesized expression used in REGEXP." (with-temp-buffer (apply #'guix-pcomplete-run-guix args) - (goto-char (point-min)) (let (result) - (while (re-search-forward regexp nil t) + (guix-while-search regexp (push (match-string-no-properties group) result)) (nreverse result)))) diff --git a/emacs/guix-prettify.el b/emacs/guix-prettify.el index c74a393adf..24dfbb33e2 100644 --- a/emacs/guix-prettify.el +++ b/emacs/guix-prettify.el @@ -1,6 +1,6 @@ ;;; guix-prettify.el --- Prettify Guix store file names -;; Copyright © 2014 Alex Kost +;; Copyright © 2014, 2015 Alex Kost ;; This file is part of GNU Guix. @@ -47,6 +47,8 @@ ;;; Code: +(require 'guix-utils) + (defgroup guix-prettify nil "Prettify Guix store file names." :prefix "guix-prettify-" @@ -137,13 +139,11 @@ enabling/disabling `guix-prettify-mode'. If nil, do nothing.") (remove-text-properties (point-min) (point-max) '(composition nil)) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward guix-prettify-regexp nil t) - (remove-text-properties - (match-beginning guix-prettify-regexp-group) - (match-end guix-prettify-regexp-group) - '(composition nil)))))))) + (guix-while-search guix-prettify-regexp + (remove-text-properties + (match-beginning guix-prettify-regexp-group) + (match-end guix-prettify-regexp-group) + '(composition nil))))))) ;;;###autoload (define-minor-mode guix-prettify-mode diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el index dc0c58a114..8a0673a3a0 100644 --- a/emacs/guix-utils.el +++ b/emacs/guix-utils.el @@ -160,6 +160,14 @@ accessed with KEYS." (find-file file) (message "File '%s' does not exist." file))) +(defmacro guix-while-search (regexp &rest body) + "Evaluate BODY after each search for REGEXP in the current buffer." + (declare (indent 1) (debug t)) + `(save-excursion + (goto-char (point-min)) + (while (re-search-forward ,regexp nil t) + ,@body))) + ;;; Diff -- cgit v1.2.3