From: "David Kågedal" <davidk@lysator.liu.se>
To: catalin.marinas@gmail.com, git@vger.kernel.org
Subject: [StGit PATCH 16/17] Emacs mode: Add mark command
Date: Fri, 14 Dec 2007 11:59:32 +0100 [thread overview]
Message-ID: <20071214105928.18066.94814.stgit@krank> (raw)
In-Reply-To: <20071214105238.18066.23281.stgit@krank>
Signed-off-by: David Kågedal <davidk@lysator.liu.se>
---
contrib/stgit.el | 76 +++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 57 insertions(+), 19 deletions(-)
diff --git a/contrib/stgit.el b/contrib/stgit.el
index 1cb4dd2..dfbf4a0 100644
--- a/contrib/stgit.el
+++ b/contrib/stgit.el
@@ -70,7 +70,7 @@ Argument DIR is the repository path."
(insert "Branch: ")
(stgit-run "branch")
(stgit-run "series" "--description")
- (stgit-rehighlight (point-min) (point-max))
+ (stgit-rescan)
(if curpatch
(stgit-goto-patch curpatch)
(goto-line curline))))
@@ -98,23 +98,30 @@ Argument DIR is the repository path."
(t ()))
"The face used for unapplied patch names")
-(defun stgit-rehighlight (start end)
- "Refresh fontification of region between START and END."
+(defun stgit-rescan ()
+ "Rescan the status buffer."
(save-excursion
- (goto-char start)
- (while (< (point) end)
- (cond ((looking-at "Branch: \\(.*\\)")
- (put-text-property (match-beginning 1) (match-end 1) 'face 'bold))
- ((looking-at "\\([>+-]\\) \\([^ ]+\\) *| \\(.*\\)")
- (let ((state (match-string 1)))
- (put-text-property
- (match-beginning 2) (match-end 2)
- 'face (cond ((string= state ">") 'stgit-top-patch-face)
- ((string= state "+") 'stgit-applied-patch-face)
- ((string= state "-") 'stgit-unapplied-patch-face)))
- (put-text-property (match-beginning 3) (match-end 3)
- 'face 'stgit-description-face))))
- (forward-line 1))))
+ (let ((marked ()))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (cond ((looking-at "Branch: \\(.*\\)")
+ (put-text-property (match-beginning 1) (match-end 1)
+ 'face 'bold))
+ ((looking-at "\\([>+-]\\)\\( \\)\\([^ ]+\\) *| \\(.*\\)")
+ (let ((state (match-string 1))
+ (patchsym (intern (match-string 3))))
+ (put-text-property
+ (match-beginning 3) (match-end 3) 'face
+ (cond ((string= state ">") 'stgit-top-patch-face)
+ ((string= state "+") 'stgit-applied-patch-face)
+ ((string= state "-") 'stgit-unapplied-patch-face)))
+ (put-text-property (match-beginning 4) (match-end 4)
+ 'face 'stgit-description-face)
+ (when (memq patchsym stgit-marked-patches)
+ (replace-match "*" nil nil nil 2)
+ (setq marked (cons patchsym marked))))))
+ (forward-line 1))
+ (setq stgit-marked-patches (nreverse marked)))))
(defvar stgit-mode-hook nil
"Run after `stgit-mode' is setup.")
@@ -125,6 +132,8 @@ Argument DIR is the repository path."
(unless stgit-mode-map
(setq stgit-mode-map (make-keymap))
(suppress-keymap stgit-mode-map)
+ (define-key stgit-mode-map " " 'stgit-mark)
+ (define-key stgit-mode-map "\d" 'stgit-unmark)
(define-key stgit-mode-map "?" 'stgit-help)
(define-key stgit-mode-map "h" 'stgit-help)
(define-key stgit-mode-map "p" 'previous-line)
@@ -153,14 +162,27 @@ Commands:
goal-column 2)
(use-local-map stgit-mode-map)
(set (make-local-variable 'list-buffers-directory) default-directory)
+ (set (make-local-variable 'stgit-marked-patches) nil)
(set-variable 'truncate-lines 't)
(run-hooks 'stgit-mode-hook))
+(defun stgit-add-mark (patch)
+ (let ((patchsym (intern patch)))
+ (setq stgit-marked-patches (cons patchsym stgit-marked-patches))))
+
+(defun stgit-remove-mark (patch)
+ (let ((patchsym (intern patch)))
+ (setq stgit-marked-patches (delq patchsym stgit-marked-patches))))
+
+(defun stgit-marked-patches ()
+ "Return the names of the marked patches."
+ (mapcar 'symbol-name stgit-marked-patches))
+
(defun stgit-patch-at-point ()
"Return the patch name on the current line"
(save-excursion
(beginning-of-line)
- (if (looking-at "[>+-] \\([^ ]*\\)")
+ (if (looking-at "[>+-][ *]\\([^ ]*\\)")
(match-string-no-properties 1)
nil)))
@@ -168,12 +190,28 @@ Commands:
"Move point to the line containing PATCH"
(let ((p (point)))
(goto-char (point-min))
- (if (re-search-forward (concat "[>+-] " (regexp-quote patch) " ") nil t)
+ (if (re-search-forward (concat "^[>+-][ *]" (regexp-quote patch) " ") nil t)
(progn (move-to-column goal-column)
t)
(goto-char p)
nil)))
+(defun stgit-mark ()
+ "Mark the patch under point"
+ (interactive)
+ (let ((patch (stgit-patch-at-point)))
+ (stgit-add-mark patch)
+ (stgit-refresh))
+ (next-line))
+
+(defun stgit-unmark ()
+ "Mark the patch on the previous line"
+ (interactive)
+ (forward-line -1)
+ (let ((patch (stgit-patch-at-point)))
+ (stgit-remove-mark patch)
+ (stgit-refresh)))
+
(defun stgit-rename (name)
"Rename the patch under point"
(interactive (list (read-string "Patch name: " (stgit-patch-at-point))))
next prev parent reply other threads:[~2007-12-14 11:00 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-14 10:55 [StGit PATCH 00/17] Series short description David Kågedal
2007-12-14 10:55 ` [StGit PATCH 01/17] Add an StGit mode for emacs David Kågedal
2007-12-14 10:56 ` [StGit PATCH 02/17] Emacs mode: Show keybindings when user presses "h" or "?" David Kågedal
2007-12-14 10:56 ` [StGit PATCH 03/17] Emacs mode: Add an explanatory header David Kågedal
2007-12-14 10:57 ` [StGit PATCH 04/17] Emacs mode: Makefile for building stgit.el David Kågedal
2007-12-14 10:57 ` [StGit PATCH 05/17] Emacs mode: push/pop next patch, not patch at point David Kågedal
2007-12-14 10:57 ` [StGit PATCH 06/17] Emacs mode: Let "P" push or pop " David Kågedal
2007-12-14 10:57 ` [StGit PATCH 07/17] Emacs mode: Bind "G" to "stg goto" David Kågedal
2007-12-14 10:57 ` [StGit PATCH 08/17] Emacs mode: show patches' short description David Kågedal
2007-12-14 10:58 ` [StGit PATCH 09/17] Emacs mode: Improve the output buffer state David Kågedal
2007-12-14 10:58 ` [StGit PATCH 10/17] Emacs mode: Bind n and p David Kågedal
2007-12-14 10:58 ` [StGit PATCH 11/17] Emacs mode: add stgit-repair David Kågedal
2007-12-14 10:58 ` [StGit PATCH 12/17] Emacs mode: added stgit-commit and stgit-uncommit David Kågedal
2007-12-14 10:59 ` [StGit PATCH 13/17] Emacs mode: Add stgit-edit command David Kågedal
2007-12-14 10:59 ` [StGit PATCH 14/17] Emacs mode: added fontification David Kågedal
2007-12-14 10:59 ` [StGit PATCH 15/17] Emacs mode: Added stgit-new David Kågedal
2007-12-14 10:59 ` David Kågedal [this message]
2007-12-14 10:59 ` [StGit PATCH 17/17] Emacs mode: coalesce command David Kågedal
2007-12-17 11:09 ` [StGit PATCH 00/17] Series short description Catalin Marinas
2007-12-17 22:48 ` Karl Hasselström
2007-12-18 5:21 ` kha/safe and kha/experimental updated Karl Hasselström
2007-12-18 16:09 ` Catalin Marinas
2007-12-18 16:39 ` Jakub Narebski
2007-12-18 16:52 ` Catalin Marinas
2007-12-19 9:41 ` David Kågedal
2007-12-19 9:50 ` David Kågedal
2007-12-19 10:19 ` Catalin Marinas
2007-12-19 9:38 ` Karl Hasselström
2007-12-19 10:44 ` Jakub Narebski
2007-12-19 11:40 ` Karl Hasselström
2007-12-19 11:47 ` Catalin Marinas
2007-12-19 16:23 ` Jakub Narebski
2007-12-19 17:02 ` Catalin Marinas
2007-12-19 17:14 ` David Kågedal
2007-12-19 17:14 ` Karl Hasselström
2007-12-19 9:34 ` Karl Hasselström
2007-12-19 10:09 ` Catalin Marinas
2007-12-19 11:20 ` Karl Hasselström
2007-12-19 11:40 ` Catalin Marinas
2007-12-19 12:10 ` Karl Hasselström
2007-12-19 15:38 ` Catalin Marinas
2007-12-19 14:59 ` Catalin Marinas
2007-12-19 15:39 ` David Kågedal
2007-12-18 9:11 ` [StGit PATCH 00/17] Series short description Catalin Marinas
2007-12-18 9:20 ` David Kågedal
2007-12-18 9:24 ` Karl Hasselström
2007-12-19 22:19 ` [StGit PATCH 0/2] Make new infrastructure subdirectory safe Karl Hasselström
2007-12-19 22:19 ` [StGit PATCH 1/2] Test that "stg goto" can be called from a subdirectory Karl Hasselström
2007-12-19 22:24 ` [StGit PATCH 2/2] Make "stg goto" subdirectory safe Karl Hasselström
2007-12-19 22:46 ` kha/safe updated Karl Hasselström
2007-12-19 23:17 ` Catalin Marinas
2007-12-19 23:26 ` Karl Hasselström
2007-12-19 23:29 ` Catalin Marinas
2007-12-20 6:39 ` Karl Hasselström
2007-12-19 23:24 ` David Kågedal
2007-12-20 6:38 ` Karl Hasselström
2007-12-19 22:28 ` [StGit PATCH 0/2] Make new infrastructure subdirectory safe Karl Hasselström
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071214105928.18066.94814.stgit@krank \
--to=davidk@lysator.liu.se \
--cc=catalin.marinas@gmail.com \
--cc=git@vger.kernel.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 NNTP newsgroup(s).