changeset 40: | 2d74d85d7031 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Wed, 05 Jun 2024 23:31:48 +0000 |
permissions: | -rw-r--r-- |
description: | add back official mercurial emacs packages |
40
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
1 | ;;; mq.el --- Emacs support for Mercurial Queues |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
2 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
3 | ;; Copyright (C) 2006 Bryan O'Sullivan |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
4 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
5 | ;; Author: Bryan O'Sullivan <bos@serpentine.com> |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
6 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
7 | ;; mq.el is free software; you can redistribute it and/or modify it |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
8 | ;; under the terms of the GNU General Public License version 2 or any |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
9 | ;; later version. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
10 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
11 | ;; mq.el is distributed in the hope that it will be useful, but |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
12 | ;; WITHOUT ANY WARRANTY; without even the implied warranty of |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
13 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
14 | ;; General Public License for more details. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
15 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
16 | ;; You should have received a copy of the GNU General Public License |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
17 | ;; along with mq.el, GNU Emacs, or XEmacs; see the file COPYING (`C-h |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
18 | ;; C-l'). If not, see <http://www.gnu.org/licenses/>. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
19 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
20 | (eval-when-compile (require 'cl)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
21 | (require 'mercurial) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
22 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
23 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
24 | (defcustom mq-mode-hook nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
25 | "Hook run when a buffer enters mq-mode." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
26 | :type 'sexp |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
27 | :group 'mercurial) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
28 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
29 | (defcustom mq-global-prefix "\C-cq" |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
30 | "The global prefix for Mercurial Queues keymap bindings." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
31 | :type 'sexp |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
32 | :group 'mercurial) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
33 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
34 | (defcustom mq-edit-mode-hook nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
35 | "Hook run after a buffer is populated to edit a patch description." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
36 | :type 'sexp |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
37 | :group 'mercurial) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
38 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
39 | (defcustom mq-edit-finish-hook nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
40 | "Hook run before a patch description is finished up with." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
41 | :type 'sexp |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
42 | :group 'mercurial) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
43 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
44 | (defcustom mq-signoff-address nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
45 | "Address with which to sign off on a patch." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
46 | :type 'string |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
47 | :group 'mercurial) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
48 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
49 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
50 | ;;; Internal variables. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
51 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
52 | (defvar mq-mode nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
53 | "Is this file managed by MQ?") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
54 | (make-variable-buffer-local 'mq-mode) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
55 | (put 'mq-mode 'permanent-local t) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
56 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
57 | (defvar mq-patch-history nil) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
58 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
59 | (defvar mq-top-patch '(nil)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
60 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
61 | (defvar mq-prev-buffer nil) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
62 | (make-variable-buffer-local 'mq-prev-buffer) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
63 | (put 'mq-prev-buffer 'permanent-local t) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
64 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
65 | (defvar mq-top nil) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
66 | (make-variable-buffer-local 'mq-top) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
67 | (put 'mq-top 'permanent-local t) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
68 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
69 | ;;; Global keymap. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
70 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
71 | (defvar mq-global-map |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
72 | (let ((map (make-sparse-keymap))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
73 | (define-key map "." 'mq-push) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
74 | (define-key map ">" 'mq-push-all) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
75 | (define-key map "," 'mq-pop) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
76 | (define-key map "<" 'mq-pop-all) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
77 | (define-key map "=" 'mq-diff) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
78 | (define-key map "r" 'mq-refresh) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
79 | (define-key map "e" 'mq-refresh-edit) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
80 | (define-key map "i" 'mq-new) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
81 | (define-key map "n" 'mq-next) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
82 | (define-key map "o" 'mq-signoff) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
83 | (define-key map "p" 'mq-previous) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
84 | (define-key map "s" 'mq-edit-series) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
85 | (define-key map "t" 'mq-top) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
86 | map)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
87 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
88 | (global-set-key mq-global-prefix mq-global-map) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
89 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
90 | (add-minor-mode 'mq-mode 'mq-mode) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
91 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
92 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
93 | ;;; Refresh edit mode keymap. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
94 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
95 | (defvar mq-edit-mode-map |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
96 | (let ((map (make-sparse-keymap))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
97 | (define-key map "\C-c\C-c" 'mq-edit-finish) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
98 | (define-key map "\C-c\C-k" 'mq-edit-kill) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
99 | (define-key map "\C-c\C-s" 'mq-signoff) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
100 | map)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
101 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
102 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
103 | ;;; Helper functions. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
104 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
105 | (defun mq-read-patch-name (&optional source prompt force) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
106 | "Read a patch name to use with a command. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
107 | May return nil, meaning \"use the default\"." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
108 | (let ((patches (split-string |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
109 | (hg-chomp (hg-run0 (or source "qseries"))) "\n"))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
110 | (when force |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
111 | (completing-read (format "Patch%s: " (or prompt "")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
112 | (mapcar (lambda (x) (cons x x)) patches) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
113 | nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
114 | nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
115 | nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
116 | 'mq-patch-history)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
117 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
118 | (defun mq-refresh-buffers (root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
119 | (save-excursion |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
120 | (dolist (buf (hg-buffers-visiting-repo root)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
121 | (when (not (verify-visited-file-modtime buf)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
122 | (set-buffer buf) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
123 | (let ((ctx (hg-buffer-context))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
124 | (message "Refreshing %s..." (buffer-name)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
125 | (revert-buffer t t t) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
126 | (hg-restore-context ctx) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
127 | (message "Refreshing %s...done" (buffer-name)))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
128 | (hg-update-mode-lines root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
129 | (mq-update-mode-lines root)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
130 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
131 | (defun mq-last-line () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
132 | (goto-char (point-max)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
133 | (beginning-of-line) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
134 | (when (looking-at "^$") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
135 | (forward-line -1)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
136 | (let ((bol (point))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
137 | (end-of-line) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
138 | (let ((line (buffer-substring bol (point)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
139 | (when (> (length line) 0) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
140 | line)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
141 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
142 | (defun mq-push (&optional patch) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
143 | "Push patches until PATCH is reached. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
144 | If PATCH is nil, push at most one patch." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
145 | (interactive (list (mq-read-patch-name "qunapplied" " to push" |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
146 | current-prefix-arg))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
147 | (let ((root (hg-root)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
148 | (prev-buf (current-buffer)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
149 | last-line ok) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
150 | (unless root |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
151 | (error "Cannot push outside a repository!")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
152 | (hg-sync-buffers root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
153 | (let ((buf-name (format "MQ: Push %s" (or patch "next patch")))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
154 | (kill-buffer (get-buffer-create buf-name)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
155 | (split-window-vertically) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
156 | (other-window 1) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
157 | (switch-to-buffer (get-buffer-create buf-name)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
158 | (cd root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
159 | (message "Pushing...") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
160 | (setq ok (= 0 (apply 'call-process (hg-binary) nil t t "qpush" |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
161 | (if patch (list patch)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
162 | last-line (mq-last-line)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
163 | (let ((lines (count-lines (point-min) (point-max)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
164 | (if (or (<= lines 1) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
165 | (and (equal lines 2) (string-match "Now at:" last-line))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
166 | (progn |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
167 | (kill-buffer (current-buffer)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
168 | (delete-window)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
169 | (hg-view-mode prev-buf)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
170 | (mq-refresh-buffers root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
171 | (sit-for 0) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
172 | (when last-line |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
173 | (if ok |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
174 | (message "Pushing... %s" last-line) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
175 | (error "Pushing... %s" last-line))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
176 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
177 | (defun mq-push-all () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
178 | "Push patches until all are applied." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
179 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
180 | (mq-push "-a")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
181 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
182 | (defun mq-pop (&optional patch) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
183 | "Pop patches until PATCH is reached. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
184 | If PATCH is nil, pop at most one patch." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
185 | (interactive (list (mq-read-patch-name "qapplied" " to pop to" |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
186 | current-prefix-arg))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
187 | (let ((root (hg-root)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
188 | last-line ok) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
189 | (unless root |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
190 | (error "Cannot pop outside a repository!")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
191 | (hg-sync-buffers root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
192 | (set-buffer (generate-new-buffer "qpop")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
193 | (cd root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
194 | (message "Popping...") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
195 | (setq ok (= 0 (apply 'call-process (hg-binary) nil t t "qpop" |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
196 | (if patch (list patch)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
197 | last-line (mq-last-line)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
198 | (kill-buffer (current-buffer)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
199 | (mq-refresh-buffers root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
200 | (sit-for 0) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
201 | (when last-line |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
202 | (if ok |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
203 | (message "Popping... %s" last-line) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
204 | (error "Popping... %s" last-line))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
205 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
206 | (defun mq-pop-all () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
207 | "Push patches until none are applied." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
208 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
209 | (mq-pop "-a")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
210 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
211 | (defun mq-refresh-internal (root &rest args) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
212 | (hg-sync-buffers root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
213 | (let ((patch (mq-patch-info "qtop"))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
214 | (message "Refreshing %s..." patch) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
215 | (let ((ret (apply 'hg-run "qrefresh" args))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
216 | (if (equal (car ret) 0) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
217 | (message "Refreshing %s... done." patch) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
218 | (error "Refreshing %s... %s" patch (hg-chomp (cdr ret))))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
219 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
220 | (defun mq-refresh (&optional git) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
221 | "Refresh the topmost applied patch. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
222 | With a prefix argument, generate a git-compatible patch." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
223 | (interactive "P") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
224 | (let ((root (hg-root))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
225 | (unless root |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
226 | (error "Cannot refresh outside of a repository!")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
227 | (apply 'mq-refresh-internal root (if git '("--git"))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
228 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
229 | (defun mq-patch-info (cmd &optional msg) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
230 | (let* ((ret (hg-run cmd)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
231 | (info (hg-chomp (cdr ret)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
232 | (if (equal (car ret) 0) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
233 | (if msg |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
234 | (message "%s patch: %s" msg info) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
235 | info) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
236 | (error "%s" info)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
237 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
238 | (defun mq-top () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
239 | "Print the name of the topmost applied patch." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
240 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
241 | (mq-patch-info "qtop" "Top")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
242 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
243 | (defun mq-next () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
244 | "Print the name of the next patch to be pushed." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
245 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
246 | (mq-patch-info "qnext" "Next")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
247 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
248 | (defun mq-previous () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
249 | "Print the name of the first patch below the topmost applied patch. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
250 | This would become the active patch if popped to." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
251 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
252 | (mq-patch-info "qprev" "Previous")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
253 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
254 | (defun mq-edit-finish () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
255 | "Finish editing the description of this patch, and refresh the patch." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
256 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
257 | (unless (equal (mq-patch-info "qtop") mq-top) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
258 | (error "Topmost patch has changed!")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
259 | (hg-sync-buffers hg-root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
260 | (run-hooks 'mq-edit-finish-hook) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
261 | (mq-refresh-internal hg-root "-m" (buffer-substring (point-min) (point-max))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
262 | (let ((buf mq-prev-buffer)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
263 | (kill-buffer nil) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
264 | (switch-to-buffer buf))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
265 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
266 | (defun mq-edit-kill () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
267 | "Kill the edit currently being prepared." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
268 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
269 | (when (or (not (buffer-modified-p)) (y-or-n-p "Really kill this edit? ")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
270 | (let ((buf mq-prev-buffer)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
271 | (kill-buffer nil) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
272 | (switch-to-buffer buf)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
273 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
274 | (defun mq-get-top (root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
275 | (let ((entry (assoc root mq-top-patch))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
276 | (if entry |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
277 | (cdr entry)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
278 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
279 | (defun mq-set-top (root patch) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
280 | (let ((entry (assoc root mq-top-patch))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
281 | (if entry |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
282 | (if patch |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
283 | (setcdr entry patch) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
284 | (setq mq-top-patch (delq entry mq-top-patch))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
285 | (setq mq-top-patch (cons (cons root patch) mq-top-patch))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
286 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
287 | (defun mq-update-mode-lines (root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
288 | (let ((cwd default-directory)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
289 | (cd root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
290 | (condition-case nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
291 | (mq-set-top root (mq-patch-info "qtop")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
292 | (error (mq-set-top root nil))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
293 | (cd cwd)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
294 | (let ((patch (mq-get-top root))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
295 | (save-excursion |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
296 | (dolist (buf (hg-buffers-visiting-repo root)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
297 | (set-buffer buf) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
298 | (if mq-mode |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
299 | (setq mq-mode (or (and patch (concat " MQ:" patch)) " MQ"))))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
300 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
301 | (defun mq-mode (&optional arg) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
302 | "Minor mode for Mercurial repositories with an MQ patch queue" |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
303 | (interactive "i") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
304 | (cond ((hg-root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
305 | (setq mq-mode (if (null arg) (not mq-mode) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
306 | arg)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
307 | (mq-update-mode-lines (hg-root)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
308 | (run-hooks 'mq-mode-hook)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
309 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
310 | (defun mq-edit-mode () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
311 | "Mode for editing the description of a patch. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
312 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
313 | Key bindings |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
314 | ------------ |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
315 | \\[mq-edit-finish] use this description |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
316 | \\[mq-edit-kill] abandon this description" |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
317 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
318 | (use-local-map mq-edit-mode-map) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
319 | (set-syntax-table text-mode-syntax-table) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
320 | (setq local-abbrev-table text-mode-abbrev-table |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
321 | major-mode 'mq-edit-mode |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
322 | mode-name "MQ-Edit") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
323 | (set-buffer-modified-p nil) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
324 | (setq buffer-undo-list nil) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
325 | (run-hooks 'text-mode-hook 'mq-edit-mode-hook)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
326 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
327 | (defun mq-refresh-edit () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
328 | "Refresh the topmost applied patch, editing the patch description." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
329 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
330 | (while mq-prev-buffer |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
331 | (set-buffer mq-prev-buffer)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
332 | (let ((root (hg-root)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
333 | (prev-buffer (current-buffer)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
334 | (patch (mq-patch-info "qtop"))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
335 | (hg-sync-buffers root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
336 | (let ((buf-name (format "*MQ: Edit description of %s*" patch))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
337 | (switch-to-buffer (get-buffer-create buf-name)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
338 | (when (= (point-min) (point-max)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
339 | (set (make-local-variable 'hg-root) root) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
340 | (set (make-local-variable 'mq-top) patch) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
341 | (setq mq-prev-buffer prev-buffer) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
342 | (insert (hg-run0 "qheader")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
343 | (goto-char (point-min))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
344 | (mq-edit-mode) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
345 | (cd root))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
346 | (message "Type `C-c C-c' to finish editing and refresh the patch.")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
347 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
348 | (defun mq-new (name) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
349 | "Create a new empty patch named NAME. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
350 | The patch is applied on top of the current topmost patch. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
351 | With a prefix argument, forcibly create the patch even if the working |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
352 | directory is modified." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
353 | (interactive (list (mq-read-patch-name "qseries" " to create" t))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
354 | (message "Creating patch...") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
355 | (let ((ret (if current-prefix-arg |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
356 | (hg-run "qnew" "-f" name) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
357 | (hg-run "qnew" name)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
358 | (if (equal (car ret) 0) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
359 | (progn |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
360 | (hg-update-mode-lines (buffer-file-name)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
361 | (message "Creating patch... done.")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
362 | (error "Creating patch... %s" (hg-chomp (cdr ret)))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
363 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
364 | (defun mq-edit-series () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
365 | "Edit the MQ series file directly." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
366 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
367 | (let ((root (hg-root))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
368 | (unless root |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
369 | (error "Not in an MQ repository!")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
370 | (find-file (concat root ".hg/patches/series")))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
371 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
372 | (defun mq-diff (&optional git) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
373 | "Display a diff of the topmost applied patch. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
374 | With a prefix argument, display a git-compatible diff." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
375 | (interactive "P") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
376 | (hg-view-output ((format "MQ: Diff of %s" (mq-patch-info "qtop"))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
377 | (if git |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
378 | (call-process (hg-binary) nil t nil "qdiff" "--git") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
379 | (call-process (hg-binary) nil t nil "qdiff")) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
380 | (diff-mode) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
381 | (font-lock-fontify-buffer))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
382 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
383 | (defun mq-signoff () |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
384 | "Sign off on the current patch, in the style used by the Linux kernel. |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
385 | If the variable mq-signoff-address is non-nil, it will be used, otherwise |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
386 | the value of the ui.username item from your hgrc will be used." |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
387 | (interactive) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
388 | (let ((was-editing (eq major-mode 'mq-edit-mode)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
389 | signed) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
390 | (unless was-editing |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
391 | (mq-refresh-edit)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
392 | (save-excursion |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
393 | (let* ((user (or mq-signoff-address |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
394 | (hg-run0 "debugconfig" "ui.username"))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
395 | (signoff (concat "Signed-off-by: " user))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
396 | (if (search-forward signoff nil t) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
397 | (message "You have already signed off on this patch.") |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
398 | (goto-char (point-max)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
399 | (let ((case-fold-search t)) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
400 | (if (re-search-backward "^Signed-off-by: " nil t) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
401 | (forward-line 1) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
402 | (insert "\n"))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
403 | (insert signoff) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
404 | (message "%s" signoff) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
405 | (setq signed t)))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
406 | (unless was-editing |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
407 | (if signed |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
408 | (mq-edit-finish) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
409 | (mq-edit-kill))))) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
410 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
411 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
412 | (provide 'mq) |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
413 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
414 | |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
415 | ;;; Local Variables: |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
416 | ;;; prompt-to-byte-compile: nil |
2d74d85d7031
add back official mercurial emacs packages
Richard Westhaver <ellis@rwest.io>
parents:
diff
changeset
|
417 | ;;; end: |