unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Andrea Crotti <andrea.crotti.0@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: Simple useful function
Date: Tue, 03 Aug 2010 17:11:18 +0200	[thread overview]
Message-ID: <m1y6cnhgtl.fsf@gmail.com> (raw)
In-Reply-To: 87y6ddtcrr.fsf@tux.homenetwork


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




  reply	other threads:[~2010-08-03 15:11 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-05 21:19 Simple useful function Andrea Crotti
2010-07-05 21:56 ` Deniz Dogan
2010-07-05 22:58   ` Dan Davison
2010-07-05 23:34     ` Drew Adams
2010-07-06  5:33       ` Thierry Volpiatto
2010-07-06 13:21         ` Drew Adams
2010-07-15  7:39           ` Thierry Volpiatto
2010-08-03 15:11             ` Andrea Crotti [this message]
     [not found]           ` <mailman.2.1279179720.17180.help-gnu-emacs@gnu.org>
2010-07-15  8:10             ` Andreas Politz
2010-07-06 11:03       ` Andrea Crotti
2010-07-06 11:11         ` Lennart Borgman
2010-07-06 11:49           ` Andrea Crotti
2010-07-06 12:25             ` Lennart Borgman
     [not found] <mailman.16.1278364774.11527.help-gnu-emacs@gnu.org>
2010-07-06  7:26 ` Nicolas Neuss
2010-07-06  7:36   ` Teemu Likonen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1y6cnhgtl.fsf@gmail.com \
    --to=andrea.crotti.0@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).