contrib/mq.el
changeset 4422 7b0d0acea6d6
parent 3370 b7fe334ff4fb
child 4423 2647f1fbc24c
equal deleted inserted replaced
4421:d0be96c694f7 4422:7b0d0acea6d6
    62 (define-key mq-global-map ">" 'mq-push-all)
    62 (define-key mq-global-map ">" 'mq-push-all)
    63 (define-key mq-global-map "," 'mq-pop)
    63 (define-key mq-global-map "," 'mq-pop)
    64 (define-key mq-global-map "<" 'mq-pop-all)
    64 (define-key mq-global-map "<" 'mq-pop-all)
    65 (define-key mq-global-map "r" 'mq-refresh)
    65 (define-key mq-global-map "r" 'mq-refresh)
    66 (define-key mq-global-map "e" 'mq-refresh-edit)
    66 (define-key mq-global-map "e" 'mq-refresh-edit)
       
    67 (define-key mq-global-map "i" 'mq-new)
    67 (define-key mq-global-map "n" 'mq-next)
    68 (define-key mq-global-map "n" 'mq-next)
    68 (define-key mq-global-map "p" 'mq-previous)
    69 (define-key mq-global-map "p" 'mq-previous)
    69 (define-key mq-global-map "t" 'mq-top)
    70 (define-key mq-global-map "t" 'mq-top)
    70 
    71 
    71 (add-minor-mode 'mq-mode 'mq-mode)
    72 (add-minor-mode 'mq-mode 'mq-mode)
    78 (define-key mq-edit-mode-map "\C-c\C-k" 'mq-edit-kill)
    79 (define-key mq-edit-mode-map "\C-c\C-k" 'mq-edit-kill)
    79 
    80 
    80 
    81 
    81 ;;; Helper functions.
    82 ;;; Helper functions.
    82 
    83 
    83 (defun mq-read-patch-name (&optional source prompt)
    84 (defun mq-read-patch-name (&optional source prompt force)
    84   "Read a patch name to use with a command.
    85   "Read a patch name to use with a command.
    85 May return nil, meaning \"use the default\"."
    86 May return nil, meaning \"use the default\"."
    86   (let ((patches (split-string
    87   (let ((patches (split-string
    87 		  (hg-chomp (hg-run0 (or source "qseries"))) "\n")))
    88 		  (hg-chomp (hg-run0 (or source "qseries"))) "\n")))
    88     (when current-prefix-arg
    89     (when force
    89       (completing-read (format "Patch%s: " (or prompt ""))
    90       (completing-read (format "Patch%s: " (or prompt ""))
    90 		       (map 'list 'cons patches patches)
    91 		       (map 'list 'cons patches patches)
    91 		       nil
    92 		       nil
    92 		       nil
    93 		       nil
    93 		       nil
    94 		       nil
   118 	line))))
   119 	line))))
   119   
   120   
   120 (defun mq-push (&optional patch)
   121 (defun mq-push (&optional patch)
   121   "Push patches until PATCH is reached.
   122   "Push patches until PATCH is reached.
   122 If PATCH is nil, push at most one patch."
   123 If PATCH is nil, push at most one patch."
   123   (interactive (list (mq-read-patch-name "qunapplied" " to push")))
   124   (interactive (list (mq-read-patch-name "qunapplied" " to push"
       
   125 					 current-prefix-arg)))
   124   (let ((root (hg-root))
   126   (let ((root (hg-root))
   125 	(prev-buf (current-buffer))
   127 	(prev-buf (current-buffer))
   126 	last-line ok)
   128 	last-line ok)
   127     (unless root
   129     (unless root
   128       (error "Cannot push outside a repository!"))
   130       (error "Cannot push outside a repository!"))
   156   (mq-push "-a"))
   158   (mq-push "-a"))
   157 
   159 
   158 (defun mq-pop (&optional patch)
   160 (defun mq-pop (&optional patch)
   159   "Pop patches until PATCH is reached.
   161   "Pop patches until PATCH is reached.
   160 If PATCH is nil, pop at most one patch."
   162 If PATCH is nil, pop at most one patch."
   161   (interactive (list (mq-read-patch-name "qapplied" " to pop to")))
   163   (interactive (list (mq-read-patch-name "qapplied" " to pop to"
       
   164 					 current-prefix-arg)))
   162   (let ((root (hg-root))
   165   (let ((root (hg-root))
   163 	last-line ok)
   166 	last-line ok)
   164     (unless root
   167     (unless root
   165       (error "Cannot pop outside a repository!"))
   168       (error "Cannot pop outside a repository!"))
   166     (hg-sync-buffers root)
   169     (hg-sync-buffers root)
   316 	(goto-char (point-min)))
   319 	(goto-char (point-min)))
   317       (mq-edit-mode)
   320       (mq-edit-mode)
   318       (cd root)))
   321       (cd root)))
   319   (message "Type `C-c C-c' to finish editing and refresh the patch."))
   322   (message "Type `C-c C-c' to finish editing and refresh the patch."))
   320 
   323 
       
   324 (defun mq-new (name)
       
   325   "Create a new empty patch named NAME.
       
   326 The patch is applied on top of the current topmost patch.
       
   327 With a prefix argument, forcibly create the patch even if the working
       
   328 directory is modified."
       
   329   (interactive (list (mq-read-patch-name "qseries" " to create" t)))
       
   330   (message "Creating patch...")
       
   331   (let ((ret (if current-prefix-arg
       
   332 		 (hg-run "qnew" "-f" name)
       
   333 	       (hg-run "qnew" name))))
       
   334     (if (equal (car ret) 0)
       
   335 	(progn
       
   336 	  (hg-update-mode-lines (buffer-file-name))
       
   337 	  (message "Creating patch... done."))
       
   338       (error "Creating patch... %s" (hg-chomp (cdr ret))))))
       
   339 
   321 
   340 
   322 (provide 'mq)
   341 (provide 'mq)
   323 
   342 
   324 
   343 
   325 ;;; Local Variables:
   344 ;;; Local Variables: