comparison contrib/mq.el @ 3370:b7fe334ff4fb

mq.el: add mode-line hook
author Brendan Cully <brendan@kublai.com>
date Thu, 12 Oct 2006 12:15:56 -0700
parents 06696f9c30c0
children 7b0d0acea6d6
comparison
equal deleted inserted replaced
3369:4bad632913d8 3370:b7fe334ff4fb
37 :group 'mercurial) 37 :group 'mercurial)
38 38
39 39
40 ;;; Internal variables. 40 ;;; Internal variables.
41 41
42 (defvar mq-mode nil
43 "Is this file managed by MQ?")
44 (make-variable-buffer-local 'mq-mode)
45 (put 'mq-mode 'permanent-local t)
46
42 (defvar mq-patch-history nil) 47 (defvar mq-patch-history nil)
48
49 (defvar mq-top-patch '(nil))
43 50
44 (defvar mq-prev-buffer nil) 51 (defvar mq-prev-buffer nil)
45 (make-variable-buffer-local 'mq-prev-buffer) 52 (make-variable-buffer-local 'mq-prev-buffer)
46 (put 'mq-prev-buffer 'permanent-local t) 53 (put 'mq-prev-buffer 'permanent-local t)
47 54
59 (define-key mq-global-map "e" 'mq-refresh-edit) 66 (define-key mq-global-map "e" 'mq-refresh-edit)
60 (define-key mq-global-map "n" 'mq-next) 67 (define-key mq-global-map "n" 'mq-next)
61 (define-key mq-global-map "p" 'mq-previous) 68 (define-key mq-global-map "p" 'mq-previous)
62 (define-key mq-global-map "t" 'mq-top) 69 (define-key mq-global-map "t" 'mq-top)
63 70
71 (add-minor-mode 'mq-mode 'mq-mode)
72
64 73
65 ;;; Refresh edit mode keymap. 74 ;;; Refresh edit mode keymap.
66 75
67 (defvar mq-edit-mode-map (make-sparse-keymap)) 76 (defvar mq-edit-mode-map (make-sparse-keymap))
68 (define-key mq-edit-mode-map "\C-c\C-c" 'mq-edit-finish) 77 (define-key mq-edit-mode-map "\C-c\C-c" 'mq-edit-finish)
92 (let ((ctx (hg-buffer-context))) 101 (let ((ctx (hg-buffer-context)))
93 (message "Refreshing %s..." (buffer-name)) 102 (message "Refreshing %s..." (buffer-name))
94 (revert-buffer t t t) 103 (revert-buffer t t t)
95 (hg-restore-context ctx) 104 (hg-restore-context ctx)
96 (message "Refreshing %s...done" (buffer-name)))))) 105 (message "Refreshing %s...done" (buffer-name))))))
97 (hg-update-mode-lines root)) 106 (hg-update-mode-lines root)
107 (mq-update-mode-lines root))
98 108
99 (defun mq-last-line () 109 (defun mq-last-line ()
100 (goto-char (point-max)) 110 (goto-char (point-max))
101 (beginning-of-line) 111 (beginning-of-line)
102 (when (looking-at "^$") 112 (when (looking-at "^$")
232 (when (or (not (buffer-modified-p)) (y-or-n-p "Really kill this edit? ")) 242 (when (or (not (buffer-modified-p)) (y-or-n-p "Really kill this edit? "))
233 (let ((buf mq-prev-buffer)) 243 (let ((buf mq-prev-buffer))
234 (kill-buffer nil) 244 (kill-buffer nil)
235 (switch-to-buffer buf)))) 245 (switch-to-buffer buf))))
236 246
247 (defun mq-get-top (root)
248 (let ((entry (assoc root mq-top-patch)))
249 (if entry
250 (cdr entry))))
251
252 (defun mq-set-top (root patch)
253 (let ((entry (assoc root mq-top-patch)))
254 (if entry
255 (if patch
256 (setcdr entry patch)
257 (setq mq-top-patch (delq entry mq-top-patch)))
258 (setq mq-top-patch (cons (cons root patch) mq-top-patch)))))
259
260 (defun mq-update-mode-lines (root)
261 (let ((cwd default-directory))
262 (cd root)
263 (condition-case nil
264 (mq-set-top root (mq-patch-info "qtop"))
265 (error (mq-set-top root nil)))
266 (cd cwd))
267 (let ((patch (mq-get-top root)))
268 (save-excursion
269 (dolist (buf (hg-buffers-visiting-repo root))
270 (set-buffer buf)
271 (if mq-mode
272 (setq mq-mode (or (and patch (concat " MQ:" patch)) " MQ")))))))
273
274 (defun mq-mode (&optional arg)
275 "Minor mode for Mercurial repositories with an MQ patch queue"
276 (interactive "i")
277 (cond ((hg-root)
278 (setq mq-mode (if (null arg) (not mq-mode)
279 arg))
280 (mq-update-mode-lines (hg-root))))
281 (run-hooks 'mq-mode-hook))
282
237 (defun mq-edit-mode () 283 (defun mq-edit-mode ()
238 "Mode for editing the description of a patch. 284 "Mode for editing the description of a patch.
239 285
240 Key bindings 286 Key bindings
241 ------------ 287 ------------