From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Andrea Crotti Newsgroups: gmane.emacs.help Subject: Re: Simple useful function Date: Tue, 03 Aug 2010 17:11:18 +0200 Message-ID: References: <87vd8tk026.fsf@stats.ox.ac.uk> <871vbhmax5.fsf@tux.homenetwork> <2BF771964D024B70944D84615A4468F4@us.oracle.com> <87y6ddtcrr.fsf@tux.homenetwork> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: dough.gmane.org 1280848326 7614 80.91.229.12 (3 Aug 2010 15:12:06 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 3 Aug 2010 15:12:06 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue Aug 03 17:12:04 2010 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1OgJ9v-0003su-5P for geh-help-gnu-emacs@m.gmane.org; Tue, 03 Aug 2010 17:12:03 +0200 Original-Received: from localhost ([127.0.0.1]:37567 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OgJ9u-0007Ek-FR for geh-help-gnu-emacs@m.gmane.org; Tue, 03 Aug 2010 11:12:02 -0400 Original-Received: from [140.186.70.92] (port=48816 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OgJ9V-0007DK-0a for help-gnu-emacs@gnu.org; Tue, 03 Aug 2010 11:11:38 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OgJ9T-000187-TO for help-gnu-emacs@gnu.org; Tue, 03 Aug 2010 11:11:36 -0400 Original-Received: from lo.gmane.org ([80.91.229.12]:53725) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OgJ9T-00017s-Gk for help-gnu-emacs@gnu.org; Tue, 03 Aug 2010 11:11:35 -0400 Original-Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1OgJ9P-0003XX-Eb for help-gnu-emacs@gnu.org; Tue, 03 Aug 2010 17:11:31 +0200 Original-Received: from xdsl-89-0-32-156.netcologne.de ([89.0.32.156]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 03 Aug 2010 17:11:31 +0200 Original-Received: from andrea.crotti.0 by xdsl-89-0-32-156.netcologne.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 03 Aug 2010 17:11:31 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 51 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: xdsl-89-0-32-156.netcologne.de User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.2 (darwin) Cancel-Lock: sha1:Dy5IG6ItTbfIt6yTBIkMgTC3SCg= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:74398 Archived-At: If someone is interested now my "git" related functions are a bit smarter --8<---------------cut here---------------start------------->8--- (defun open-git-files () "Visit all the files in the current git project" (interactive) (dolist (file (ls-git-files)) (message "Opening %s" file) ;; we have to keep the original position (save-excursion (find-file file)))) (defun dired-git-files (directory) "Open a dired buffer containing the local git files" (interactive "D") (cd directory) (let ((files (ls-git-files))) (if (or (< (length files) 200) (yes-or-no-p (format "%d files, are you sure?" (length files)))) ;; rename the buffer to something with a sense (progn (dired (ls-git-files)) (rename-buffer (concat "git-" (before-last (split-string directory "/")))))))) ;; TODO: take the return code instead (defun ls-git-files () (let ((result (shell-command-to-string (concat "git ls-files")))) (if (string-match "fatal" result) nil (split-string result)))) --8<---------------cut here---------------end--------------->8--- But this is probably even more cool --8<---------------cut here---------------start------------->8--- (defun query-replace-in-git (from to) "query replace regexp on the files given" (interactive "sFrom: \nsTo: ") (dired-git-files (pwd)) (dired-mark-files-regexp ".[ch]") (dired-do-query-replace-regexp from to)) --8<---------------cut here---------------end--------------->8--- I use the above function and marking with git to replace in the whole project in only one shot. I should add maybe some other options for example for the files to mark