contrib/mq.el
changeset 3370 b7fe334ff4fb
parent 2996 06696f9c30c0
child 4422 7b0d0acea6d6
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 ------------