Mercurial > hg > mercurial-crew-with-dirclash
annotate contrib/mercurial.el @ 1003:6dfc9cc71f42
Emacs support: numerous changes.
Most SCM commands now work in derived buffers (e.g. diff viewing
buffers) as well as buffers backed by files.
diff and log now work properly on repositories and files.
Commit support is more solid.
Doc strings are better.
author | bos@serpentine.internal.keyresearch.com |
---|---|
date | Mon, 22 Aug 2005 15:08:20 -0700 |
parents | ab3939ccbf10 |
children | ad6fcceaf59b |
rev | line source |
---|---|
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1 ;;; mercurial.el --- Emacs support for the Mercurial distributed SCM |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
2 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
3 ;; Copyright (C) 2005 Bryan O'Sullivan |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
4 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
5 ;; Author: Bryan O'Sullivan <bos@serpentine.com> |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
6 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
7 ;; $Id$ |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
8 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
9 ;; mercurial.el is free software; you can redistribute it and/or |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
10 ;; modify it under the terms of version 2 of the GNU General Public |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
11 ;; License as published by the Free Software Foundation. |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
12 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
13 ;; mercurial.el is distributed in the hope that it will be useful, but |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
14 ;; WITHOUT ANY WARRANTY; without even the implied warranty of |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
16 ;; General Public License for more details. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
17 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
18 ;; You should have received a copy of the GNU General Public License |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
19 ;; along with mercurial.el, GNU Emacs, or XEmacs; see the file COPYING |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
20 ;; (`C-h C-l'). If not, write to the Free Software Foundation, Inc., |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
21 ;; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
22 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
23 ;;; Commentary: |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
24 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
25 ;; This mode builds upon Emacs's VC mode to provide flexible |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
26 ;; integration with the Mercurial distributed SCM tool. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
27 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
28 ;; To get going as quickly as possible, load mercurial.el into Emacs and |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
29 ;; type `C-c h h'; this runs hg-help-overview, which prints a helpful |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
30 ;; usage overview. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
31 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
32 ;; Much of the inspiration for mercurial.el comes from Rajesh |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
33 ;; Vaidheeswarran's excellent p4.el, which does an admirably thorough |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
34 ;; job for the commercial Perforce SCM product. In fact, substantial |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
35 ;; chunks of code are adapted from p4.el. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
36 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
37 ;; This code has been developed under XEmacs 21.5, and may will not |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
38 ;; work as well under GNU Emacs (albeit tested under 21.2). Patches |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
39 ;; to enhance the portability of this code, fix bugs, and add features |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
40 ;; are most welcome. You can clone a Mercurial repository for this |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
41 ;; package from http://www.serpentine.com/hg/hg-emacs |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
42 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
43 ;; Please send problem reports and suggestions to bos@serpentine.com. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
44 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
45 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
46 ;;; Code: |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
47 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
48 (require 'advice) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
49 (require 'cl) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
50 (require 'diff-mode) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
51 (require 'easymenu) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
52 (require 'vc) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
53 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
54 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
55 ;;; XEmacs has view-less, while GNU Emacs has view. Joy. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
56 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
57 (condition-case nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
58 (require 'view-less) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
59 (error nil)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
60 (condition-case nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
61 (require 'view) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
62 (error nil)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
63 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
64 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
65 ;;; Variables accessible through the custom system. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
66 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
67 (defgroup mercurial nil |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
68 "Mercurial distributed SCM." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
69 :group 'tools) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
70 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
71 (defcustom hg-binary |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
72 (dolist (path '("~/bin/hg" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
73 "/usr/bin/hg" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
74 "/usr/local/bin/hg")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
75 (when (file-executable-p path) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
76 (return path))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
77 "The path to Mercurial's hg executable." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
78 :type '(file :must-match t) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
79 :group 'mercurial) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
80 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
81 (defcustom hg-mode-hook nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
82 "Hook run when a buffer enters hg-mode." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
83 :type 'sexp |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
84 :group 'mercurial) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
85 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
86 (defcustom hg-commit-mode-hook nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
87 "Hook run when a buffer is created to prepare a commit." |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
88 :type 'sexp |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
89 :group 'mercurial) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
90 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
91 (defcustom hg-pre-commit-hook nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
92 "Hook run before a commit is performed. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
93 If you want to prevent the commit from proceeding, raise an error." |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
94 :type 'sexp |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
95 :group 'mercurial) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
96 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
97 (defcustom hg-global-prefix "\C-ch" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
98 "The global prefix for Mercurial keymap bindings." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
99 :type 'sexp |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
100 :group 'mercurial) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
101 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
102 (defcustom hg-commit-allow-empty-message nil |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
103 "Whether to allow changes to be committed with empty descriptions." |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
104 :type 'boolean |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
105 :group 'mercurial) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
106 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
107 (defcustom hg-commit-allow-empty-file-list nil |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
108 "Whether to allow changes to be committed without any modified files." |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
109 :type 'boolean |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
110 :group 'mercurial) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
111 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
112 (defcustom hg-rev-completion-limit 100 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
113 "The maximum number of revisions that hg-read-rev will offer to complete. |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
114 This affects memory usage and performance when prompting for revisions |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
115 in a repository with a lot of history." |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
116 :type 'integer |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
117 :group 'mercurial) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
118 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
119 (defcustom hg-log-limit 50 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
120 "The maximum number of revisions that hg-log will display." |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
121 :type 'integer |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
122 :group 'mercurial) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
123 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
124 (defcustom hg-update-modeline t |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
125 "Whether to update the modeline with the status of a file after every save. |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
126 Set this to nil on platforms with poor process management, such as Windows." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
127 :type 'boolean |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
128 :group 'mercurial) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
129 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
130 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
131 ;;; Other variables. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
132 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
133 (defconst hg-running-xemacs (string-match "XEmacs" emacs-version) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
134 "Is mercurial.el running under XEmacs?") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
135 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
136 (defvar hg-mode nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
137 "Is this file managed by Mercurial?") |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
138 (make-variable-buffer-local 'hg-mode) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
139 (put 'hg-mode 'permanent-local t) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
140 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
141 (defvar hg-status nil) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
142 (make-variable-buffer-local 'hg-status) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
143 (put 'hg-status 'permanent-local t) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
144 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
145 (defvar hg-prev-buffer nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
146 (make-variable-buffer-local 'hg-prev-buffer) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
147 (put 'hg-prev-buffer 'permanent-local t) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
148 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
149 (defvar hg-root nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
150 (make-variable-buffer-local 'hg-root) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
151 (put 'hg-root 'permanent-local t) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
152 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
153 (defvar hg-output-buffer-name "*Hg*" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
154 "The name to use for Mercurial output buffers.") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
155 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
156 (defvar hg-file-history nil) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
157 (defvar hg-rev-history nil) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
158 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
159 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
160 ;;; Random constants. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
161 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
162 (defconst hg-commit-message-start |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
163 "--- Enter your commit message. Type `C-c C-c' to commit. ---\n") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
164 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
165 (defconst hg-commit-message-end |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
166 "--- Files in bold will be committed. Click to toggle selection. ---\n") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
167 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
168 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
169 ;;; hg-mode keymap. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
170 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
171 (defvar hg-mode-map (make-sparse-keymap)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
172 (define-key hg-mode-map "\C-xv" 'hg-prefix-map) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
173 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
174 (defvar hg-prefix-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
175 (let ((map (copy-keymap vc-prefix-map))) |
958 | 176 (if (functionp 'set-keymap-name) |
177 (set-keymap-name map 'hg-prefix-map)); XEmacs | |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
178 map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
179 "This keymap overrides some default vc-mode bindings.") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
180 (fset 'hg-prefix-map hg-prefix-map) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
181 (define-key hg-prefix-map "=" 'hg-diff) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
182 (define-key hg-prefix-map "c" 'hg-undo) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
183 (define-key hg-prefix-map "g" 'hg-annotate) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
184 (define-key hg-prefix-map "l" 'hg-log) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
185 (define-key hg-prefix-map "n" 'hg-commit-start) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
186 ;; (define-key hg-prefix-map "r" 'hg-update) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
187 (define-key hg-prefix-map "u" 'hg-revert-buffer) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
188 (define-key hg-prefix-map "~" 'hg-version-other-window) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
189 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
190 (add-minor-mode 'hg-mode 'hg-mode hg-mode-map) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
191 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
192 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
193 ;;; Global keymap. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
194 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
195 (global-set-key "\C-xvi" 'hg-add) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
196 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
197 (defvar hg-global-map (make-sparse-keymap)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
198 (fset 'hg-global-map hg-global-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
199 (global-set-key hg-global-prefix 'hg-global-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
200 (define-key hg-global-map "," 'hg-incoming) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
201 (define-key hg-global-map "." 'hg-outgoing) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
202 (define-key hg-global-map "<" 'hg-pull) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
203 (define-key hg-global-map "=" 'hg-diff-repo) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
204 (define-key hg-global-map ">" 'hg-push) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
205 (define-key hg-global-map "?" 'hg-help-overview) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
206 (define-key hg-global-map "A" 'hg-addremove) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
207 (define-key hg-global-map "U" 'hg-revert) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
208 (define-key hg-global-map "a" 'hg-add) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
209 (define-key hg-global-map "c" 'hg-commit-start) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
210 (define-key hg-global-map "f" 'hg-forget) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
211 (define-key hg-global-map "h" 'hg-help-overview) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
212 (define-key hg-global-map "i" 'hg-init) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
213 (define-key hg-global-map "l" 'hg-log-repo) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
214 (define-key hg-global-map "r" 'hg-root) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
215 (define-key hg-global-map "s" 'hg-status) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
216 (define-key hg-global-map "u" 'hg-update) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
217 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
218 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
219 ;;; View mode keymap. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
220 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
221 (defvar hg-view-mode-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
222 (let ((map (copy-keymap (if (boundp 'view-minor-mode-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
223 view-minor-mode-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
224 view-mode-map)))) |
958 | 225 (if (functionp 'set-keymap-name) |
226 (set-keymap-name map 'hg-view-mode-map)); XEmacs | |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
227 map)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
228 (fset 'hg-view-mode-map hg-view-mode-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
229 (define-key hg-view-mode-map |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
230 (if hg-running-xemacs [button2] [mouse-2]) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
231 'hg-buffer-mouse-clicked) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
232 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
233 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
234 ;;; Commit mode keymaps. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
235 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
236 (defvar hg-commit-mode-map (make-sparse-keymap)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
237 (define-key hg-commit-mode-map "\C-c\C-c" 'hg-commit-finish) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
238 (define-key hg-commit-mode-map "\C-c\C-k" 'hg-commit-kill) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
239 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
240 (defvar hg-commit-mode-file-map (make-sparse-keymap)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
241 (define-key hg-commit-mode-file-map |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
242 (if hg-running-xemacs [button2] [mouse-2]) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
243 'hg-commit-mouse-clicked) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
244 (define-key hg-commit-mode-file-map " " 'hg-commit-toggle-file) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
245 (define-key hg-commit-mode-file-map "\r" 'hg-commit-toggle-file) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
246 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
247 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
248 ;;; Convenience functions. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
249 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
250 (defsubst hg-binary () |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
251 (if hg-binary |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
252 hg-binary |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
253 (error "No `hg' executable found!"))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
254 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
255 (defsubst hg-replace-in-string (str regexp newtext &optional literal) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
256 "Replace all matches in STR for REGEXP with NEWTEXT string. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
257 Return the new string. Optional LITERAL non-nil means do a literal |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
258 replacement. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
259 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
260 This function bridges yet another pointless impedance gap between |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
261 XEmacs and GNU Emacs." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
262 (if (fboundp 'replace-in-string) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
263 (replace-in-string str regexp newtext literal) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
264 (replace-regexp-in-string regexp newtext str nil literal))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
265 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
266 (defsubst hg-strip (str) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
267 "Strip leading and trailing white space from a string." |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
268 (hg-replace-in-string (hg-replace-in-string str "[ \t\r\n]+$" "") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
269 "^[ \t\r\n]+" "")) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
270 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
271 (defsubst hg-chomp (str) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
272 "Strip trailing newlines from a string." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
273 (hg-replace-in-string str "[\r\n]+$" "")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
274 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
275 (defun hg-run-command (command &rest args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
276 "Run the shell command COMMAND, returning (EXIT-CODE . COMMAND-OUTPUT). |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
277 The list ARGS contains a list of arguments to pass to the command." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
278 (let* (exit-code |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
279 (output |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
280 (with-output-to-string |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
281 (with-current-buffer |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
282 standard-output |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
283 (setq exit-code |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
284 (apply 'call-process command nil t nil args)))))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
285 (cons exit-code output))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
286 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
287 (defun hg-run (command &rest args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
288 "Run the Mercurial command COMMAND, returning (EXIT-CODE . COMMAND-OUTPUT)." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
289 (apply 'hg-run-command (hg-binary) command args)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
290 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
291 (defun hg-run0 (command &rest args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
292 "Run the Mercurial command COMMAND, returning its output. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
293 If the command does not exit with a zero status code, raise an error." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
294 (let ((res (apply 'hg-run-command (hg-binary) command args))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
295 (if (not (eq (car res) 0)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
296 (error "Mercurial command failed %s - exit code %s" |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
297 (cons command args) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
298 (car res)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
299 (cdr res)))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
300 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
301 (defun hg-buffer-commands (pnt) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
302 "Use the properties of a character to do something sensible." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
303 (interactive "d") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
304 (let ((rev (get-char-property pnt 'rev)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
305 (file (get-char-property pnt 'file)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
306 (date (get-char-property pnt 'date)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
307 (user (get-char-property pnt 'user)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
308 (host (get-char-property pnt 'host)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
309 (prev-buf (current-buffer))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
310 (cond |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
311 (file |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
312 (find-file-other-window file)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
313 (rev |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
314 (hg-diff hg-view-file-name rev rev prev-buf)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
315 ((message "I don't know how to do that yet"))))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
316 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
317 (defun hg-buffer-mouse-clicked (event) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
318 "Translate the mouse clicks in a HG log buffer to character events. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
319 These are then handed off to `hg-buffer-commands'. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
320 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
321 Handle frickin' frackin' gratuitous event-related incompatibilities." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
322 (interactive "e") |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
323 (if hg-running-xemacs |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
324 (progn |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
325 (select-window (event-window event)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
326 (hg-buffer-commands (event-point event))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
327 (select-window (posn-window (event-end event))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
328 (hg-buffer-commands (posn-point (event-start event))))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
329 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
330 (unless (fboundp 'view-minor-mode) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
331 (defun view-minor-mode (prev-buffer exit-func) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
332 (view-mode))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
333 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
334 (defsubst hg-abbrev-file-name (file) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
335 "Portable wrapper around abbreviate-file-name." |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
336 (if hg-running-xemacs |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
337 (abbreviate-file-name file t) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
338 (abbreviate-file-name file))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
339 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
340 (defun hg-read-file-name (&optional prompt default) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
341 "Read a file or directory name, or a pattern, to use with a command." |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
342 (save-excursion |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
343 (while hg-prev-buffer |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
344 (set-buffer hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
345 (let ((path (or default (buffer-file-name)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
346 (if (or (not path) current-prefix-arg) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
347 (expand-file-name |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
348 (read-file-name (format "File, directory or pattern%s: " |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
349 (or prompt "")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
350 (and path (file-name-directory path)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
351 nil nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
352 (and path (file-name-nondirectory path)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
353 'hg-file-history)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
354 path)))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
355 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
356 (defun hg-read-rev (&optional prompt default) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
357 "Read a revision or tag, offering completions." |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
358 (save-excursion |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
359 (while hg-prev-buffer |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
360 (set-buffer hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
361 (let ((rev (or default "tip"))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
362 (if (or (not rev) current-prefix-arg) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
363 (let ((revs (split-string (hg-chomp |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
364 (hg-run0 "-q" "log" "-r" |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
365 (format "-%d" |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
366 hg-rev-completion-limit) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
367 "-r" "tip")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
368 "[\n:]"))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
369 (dolist (line (split-string (hg-chomp (hg-run0 "tags")) "\n")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
370 (setq revs (cons (car (split-string line "\\s-")) revs))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
371 (completing-read (format "Revision%s (%s): " |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
372 (or prompt "") |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
373 (or default "tip")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
374 (map 'list 'cons revs revs) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
375 nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
376 nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
377 nil |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
378 'hg-rev-history |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
379 (or default "tip"))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
380 rev)))) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
381 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
382 (defmacro hg-do-across-repo (path &rest body) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
383 (let ((root-name (gensym "root-")) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
384 (buf-name (gensym "buf-"))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
385 `(let ((,root-name (hg-root ,path))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
386 (save-excursion |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
387 (dolist (,buf-name (buffer-list)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
388 (set-buffer ,buf-name) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
389 (when (and hg-status (equal (hg-root buffer-file-name) ,root-name)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
390 ,@body)))))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
391 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
392 (put 'hg-do-across-repo 'lisp-indent-function 1) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
393 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
394 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
395 ;;; View mode bits. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
396 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
397 (defun hg-exit-view-mode (buf) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
398 "Exit from hg-view-mode. |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
399 We delete the current window if entering hg-view-mode split the |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
400 current frame." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
401 (when (and (eq buf (current-buffer)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
402 (> (length (window-list)) 1)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
403 (delete-window)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
404 (when (buffer-live-p buf) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
405 (kill-buffer buf))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
406 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
407 (defun hg-view-mode (prev-buffer &optional file-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
408 (goto-char (point-min)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
409 (set-buffer-modified-p nil) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
410 (toggle-read-only t) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
411 (view-minor-mode prev-buffer 'hg-exit-view-mode) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
412 (use-local-map hg-view-mode-map) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
413 (setq truncate-lines t) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
414 (when file-name |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
415 (set (make-local-variable 'hg-view-file-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
416 (hg-abbrev-file-name file-name)))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
417 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
418 (defun hg-file-status (file) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
419 "Return status of FILE, or nil if FILE does not exist or is unmanaged." |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
420 (let* ((s (hg-run "status" file)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
421 (exit (car s)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
422 (output (cdr s))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
423 (if (= exit 0) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
424 (let ((state (assoc (substring output 0 (min (length output) 2)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
425 '(("M " . modified) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
426 ("A " . added) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
427 ("R " . removed) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
428 ("? " . nil))))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
429 (if state |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
430 (cdr state) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
431 'normal))))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
432 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
433 (defun hg-tip () |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
434 (split-string (hg-chomp (hg-run0 "-q" "tip")) ":")) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
435 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
436 (defmacro hg-view-output (args &rest body) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
437 "Execute BODY in a clean buffer, then quickly display that buffer. |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
438 If the buffer contains one line, its contents are displayed in the |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
439 minibuffer. Otherwise, the buffer is displayed in view-mode. |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
440 ARGS is of the form (BUFFER-NAME &optional FILE), where BUFFER-NAME is |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
441 the name of the buffer to create, and FILE is the name of the file |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
442 being viewed." |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
443 (let ((prev-buf (gensym "prev-buf-")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
444 (v-b-name (car args)) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
445 (v-m-rest (cdr args))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
446 `(let ((view-buf-name ,v-b-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
447 (,prev-buf (current-buffer))) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
448 (get-buffer-create view-buf-name) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
449 (kill-buffer view-buf-name) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
450 (get-buffer-create view-buf-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
451 (set-buffer view-buf-name) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
452 (save-excursion |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
453 ,@body) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
454 (case (count-lines (point-min) (point-max)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
455 ((0) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
456 (kill-buffer view-buf-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
457 (message "(No output)")) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
458 ((1) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
459 (let ((msg (hg-chomp (buffer-substring (point-min) (point-max))))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
460 (kill-buffer view-buf-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
461 (message "%s" msg))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
462 (t |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
463 (pop-to-buffer view-buf-name) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
464 (setq hg-prev-buffer ,prev-buf) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
465 (hg-view-mode ,prev-buf ,@v-m-rest)))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
466 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
467 (put 'hg-view-output 'lisp-indent-function 1) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
468 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
469 ;;; Context save and restore across revert. |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
470 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
471 (defun hg-position-context (pos) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
472 "Return information to help find the given position again." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
473 (let* ((end (min (point-max) (+ pos 98)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
474 (list pos |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
475 (buffer-substring (max (point-min) (- pos 2)) end) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
476 (- end pos)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
477 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
478 (defun hg-buffer-context () |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
479 "Return information to help restore a user's editing context. |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
480 This is useful across reverts and merges, where a context is likely |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
481 to have moved a little, but not really changed." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
482 (let ((point-context (hg-position-context (point))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
483 (mark-context (let ((mark (mark-marker))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
484 (and mark (hg-position-context mark))))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
485 (list point-context mark-context))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
486 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
487 (defun hg-find-context (ctx) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
488 "Attempt to find a context in the given buffer. |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
489 Always returns a valid, hopefully sane, position." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
490 (let ((pos (nth 0 ctx)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
491 (str (nth 1 ctx)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
492 (fixup (nth 2 ctx))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
493 (save-excursion |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
494 (goto-char (max (point-min) (- pos 15000))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
495 (if (and (not (equal str "")) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
496 (search-forward str nil t)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
497 (- (point) fixup) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
498 (max pos (point-min)))))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
499 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
500 (defun hg-restore-context (ctx) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
501 "Attempt to restore the user's editing context." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
502 (let ((point-context (nth 0 ctx)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
503 (mark-context (nth 1 ctx))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
504 (goto-char (hg-find-context point-context)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
505 (when mark-context |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
506 (set-mark (hg-find-context mark-context))))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
507 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
508 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
509 ;;; Hooks. |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
510 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
511 (defun hg-mode-line (&optional force) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
512 "Update the modeline with the current status of a file. |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
513 An update occurs if optional argument FORCE is non-nil, |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
514 hg-update-modeline is non-nil, or we have not yet checked the state of |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
515 the file." |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
516 (when (and (hg-root) (or force hg-update-modeline (not hg-mode))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
517 (let ((status (hg-file-status buffer-file-name))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
518 (setq hg-status status |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
519 hg-mode (and status (concat " Hg:" |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
520 (car (hg-tip)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
521 (cdr (assq status |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
522 '((normal . "") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
523 (removed . "r") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
524 (added . "a") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
525 (modified . "m"))))))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
526 status))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
527 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
528 (defun hg-mode () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
529 "Minor mode for Mercurial distributed SCM integration. |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
530 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
531 The Mercurial mode user interface is based on that of VC mode, so if |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
532 you're already familiar with VC, the same keybindings and functions |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
533 will generally work. |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
534 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
535 Below is a list of many common SCM tasks. In the list, `G/L' |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
536 indicates whether a key binding is global (G) to a repository or local |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
537 (L) to a file. Many commands take a prefix argument. |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
538 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
539 SCM Task G/L Key Binding Command Name |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
540 -------- --- ----------- ------------ |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
541 Help overview (what you are reading) G C-c h h hg-help-overview |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
542 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
543 Tell Mercurial to manage a file G C-c h a hg-add |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
544 Commit changes to current file only L C-x v n hg-commit |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
545 Undo changes to file since commit L C-x v u hg-revert-buffer |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
546 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
547 Diff file vs last checkin L C-x v = hg-diff |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
548 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
549 View file change history L C-x v l hg-log |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
550 View annotated file L C-x v a hg-annotate |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
551 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
552 Diff repo vs last checkin G C-c h = hg-diff-repo |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
553 View status of files in repo G C-c h s hg-status |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
554 Commit all changes G C-c h c hg-commit |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
555 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
556 Undo all changes since last commit G C-c h U hg-revert |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
557 View repo change history G C-c h l hg-log |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
558 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
559 See changes that can be pulled G C-c h , hg-incoming |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
560 Pull changes G C-c h < hg-pull |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
561 Update working directory after pull G C-c h u hg-update |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
562 See changes that can be pushed G C-c h . hg-outgoing |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
563 Push changes G C-c h > hg-push" |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
564 (run-hooks 'hg-mode-hook)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
565 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
566 (defun hg-find-file-hook () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
567 (when (hg-mode-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
568 (hg-mode))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
569 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
570 (add-hook 'find-file-hooks 'hg-find-file-hook) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
571 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
572 (defun hg-after-save-hook () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
573 (let ((old-status hg-status)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
574 (hg-mode-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
575 (if (and (not old-status) hg-status) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
576 (hg-mode)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
577 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
578 (add-hook 'after-save-hook 'hg-after-save-hook) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
579 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
580 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
581 ;;; User interface functions. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
582 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
583 (defun hg-help-overview () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
584 "This is an overview of the Mercurial SCM mode for Emacs. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
585 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
586 You can find the source code, license (GPL v2), and credits for this |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
587 code by typing `M-x find-library mercurial RET'." |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
588 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
589 (hg-view-output ("Mercurial Help Overview") |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
590 (insert (documentation 'hg-help-overview)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
591 (let ((pos (point))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
592 (insert (documentation 'hg-mode)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
593 (goto-char pos) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
594 (kill-line)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
595 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
596 (defun hg-add (path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
597 "Add PATH to the Mercurial repository on the next commit. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
598 With a prefix argument, prompt for the path to add." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
599 (interactive (list (hg-read-file-name " to add"))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
600 (let ((buf (current-buffer)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
601 (update (equal buffer-file-name path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
602 (hg-view-output (hg-output-buffer-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
603 (apply 'call-process (hg-binary) nil t nil (list "add" path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
604 (when update |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
605 (with-current-buffer buf |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
606 (hg-mode-line))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
607 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
608 (defun hg-addremove () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
609 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
610 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
611 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
612 (defun hg-annotate () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
613 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
614 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
615 |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
616 (defun hg-commit-toggle-file (pos) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
617 "Toggle whether or not the file at POS will be committed." |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
618 (interactive "d") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
619 (save-excursion |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
620 (goto-char pos) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
621 (let ((face (get-text-property pos 'face)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
622 bol) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
623 (beginning-of-line) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
624 (setq bol (+ (point) 4)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
625 (end-of-line) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
626 (if (eq face 'bold) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
627 (progn |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
628 (remove-text-properties bol (point) '(face nil)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
629 (message "%s will not be committed" |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
630 (buffer-substring bol (point)))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
631 (add-text-properties bol (point) '(face bold)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
632 (message "%s will be committed" |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
633 (buffer-substring bol (point))))))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
634 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
635 (defun hg-commit-mouse-clicked (event) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
636 "Toggle whether or not the file at POS will be committed." |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
637 (interactive "@e") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
638 (hg-commit-toggle-file (event-point event))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
639 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
640 (defun hg-commit-kill () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
641 "Kill the commit currently being prepared." |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
642 (interactive) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
643 (when (or (not (buffer-modified-p)) (y-or-n-p "Really kill this commit? ")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
644 (let ((buf hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
645 (kill-buffer nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
646 (switch-to-buffer buf)))) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
647 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
648 (defun hg-commit-finish () |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
649 "Finish preparing a commit, and perform the actual commit. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
650 The hook hg-pre-commit-hook is run before anything else is done. If |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
651 the commit message is empty and hg-commit-allow-empty-message is nil, |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
652 an error is raised. If the list of files to commit is empty and |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
653 hg-commit-allow-empty-file-list is nil, an error is raised." |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
654 (interactive) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
655 (let ((root hg-root)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
656 (save-excursion |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
657 (run-hooks 'hg-pre-commit-hook) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
658 (goto-char (point-min)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
659 (search-forward hg-commit-message-start) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
660 (let (message files) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
661 (let ((start (point))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
662 (goto-char (point-max)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
663 (search-backward hg-commit-message-end) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
664 (setq message (hg-strip (buffer-substring start (point))))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
665 (when (and (= (length message) 0) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
666 (not hg-commit-allow-empty-message)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
667 (error "Cannot proceed - commit message is empty")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
668 (forward-line 1) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
669 (beginning-of-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
670 (while (< (point) (point-max)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
671 (let ((pos (+ (point) 4))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
672 (end-of-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
673 (when (eq (get-text-property pos 'face) 'bold) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
674 (end-of-line) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
675 (setq files (cons (buffer-substring pos (point)) files)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
676 (forward-line 1)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
677 (when (and (= (length files) 0) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
678 (not hg-commit-allow-empty-file-list)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
679 (error "Cannot proceed - no files to commit")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
680 (setq message (concat message "\n")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
681 (apply 'hg-run0 "--cwd" hg-root "commit" "-m" message files)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
682 (let ((buf hg-prev-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
683 (kill-buffer nil) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
684 (switch-to-buffer buf)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
685 (hg-do-across-repo root |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
686 (hg-mode-line))))) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
687 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
688 (defun hg-commit-mode () |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
689 "Mode for describing a commit of changes to a Mercurial repository. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
690 This involves two actions: describing the changes with a commit |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
691 message, and choosing the files to commit. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
692 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
693 To describe the commit, simply type some text in the designated area. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
694 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
695 By default, all modified, added and removed files are selected for |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
696 committing. Files that will be committed are displayed in bold face\; |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
697 those that will not are displayed in normal face. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
698 |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
699 To toggle whether a file will be committed, move the cursor over a |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
700 particular file and hit space or return. Alternatively, middle click |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
701 on the file. |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
702 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
703 Key bindings |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
704 ------------ |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
705 \\[hg-commit-finish] proceed with commit |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
706 \\[hg-commit-kill] kill commit |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
707 |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
708 \\[hg-diff-repo] view diff of pending changes" |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
709 (interactive) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
710 (use-local-map hg-commit-mode-map) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
711 (set-syntax-table text-mode-syntax-table) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
712 (setq local-abbrev-table text-mode-abbrev-table |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
713 major-mode 'hg-commit-mode |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
714 mode-name "Hg-Commit") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
715 (set-buffer-modified-p nil) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
716 (setq buffer-undo-list nil) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
717 (run-hooks 'text-mode-hook 'hg-commit-mode-hook)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
718 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
719 (defun hg-commit-start () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
720 "Prepare a commit of changes to the repository containing the current file." |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
721 (interactive) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
722 (while hg-prev-buffer |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
723 (set-buffer hg-prev-buffer)) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
724 (let ((root (hg-root)) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
725 (prev-buffer (current-buffer)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
726 modified-files) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
727 (unless root |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
728 (error "Cannot commit outside a repository!")) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
729 (hg-do-across-repo |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
730 (vc-buffer-sync)) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
731 (setq modified-files (hg-chomp (hg-run0 "--cwd" root "status" "-arm"))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
732 (when (and (= (length modified-files) 0) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
733 (not hg-commit-allow-empty-file-list)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
734 (error "No pending changes to commit")) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
735 (let* ((buf-name (format "*Mercurial: Commit %s*" root))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
736 (pop-to-buffer (get-buffer-create buf-name)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
737 (when (= (point-min) (point-max)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
738 (set (make-local-variable 'hg-root) root) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
739 (setq hg-prev-buffer prev-buffer) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
740 (insert "\n") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
741 (let ((bol (point))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
742 (insert hg-commit-message-end) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
743 (add-text-properties bol (point) '(read-only t face bold-italic))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
744 (let ((file-area (point))) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
745 (insert modified-files) |
999
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
746 (goto-char file-area) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
747 (while (< (point) (point-max)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
748 (let ((bol (point))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
749 (forward-char 1) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
750 (insert " ") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
751 (end-of-line) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
752 (add-text-properties (+ bol 4) (point) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
753 '(face bold mouse-face highlight))) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
754 (forward-line 1)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
755 (goto-char file-area) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
756 (add-text-properties (point) (point-max) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
757 `(read-only t keymap ,hg-commit-mode-file-map)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
758 (goto-char (point-min)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
759 (insert hg-commit-message-start) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
760 (add-text-properties (point-min) (point) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
761 '(read-only t face bold-italic)) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
762 (insert "\n\n") |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
763 (forward-line -1) |
bb391518bc28
Emacs: first cut at commit support.
Bryan O'Sullivan <bos@serpentine.com>
parents:
996
diff
changeset
|
764 (hg-commit-mode)))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
765 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
766 (defun hg-diff (path &optional rev1 rev2) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
767 "Show the differences between REV1 and REV2 of PATH. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
768 When called interactively, the default behaviour is to treat REV1 as |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
769 the tip revision, REV2 as the current edited version of the file, and |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
770 PATH as the file edited in the current buffer. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
771 With a prefix argument, prompt for all of these." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
772 (interactive (list (hg-read-file-name " to diff") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
773 (hg-read-rev " to start with") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
774 (let ((rev2 (hg-read-rev " to end with" 'working-dir))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
775 (and (not (eq rev2 'working-dir)) rev2)))) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
776 (unless rev1 |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
777 (setq rev1 "-1")) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
778 (let ((a-path (hg-abbrev-file-name path)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
779 diff) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
780 (hg-view-output ((if (equal rev1 rev2) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
781 (format "Mercurial: Rev %s of %s" rev1 a-path) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
782 (format "Mercurial: Rev %s to %s of %s" |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
783 rev1 (or rev2 "Current") a-path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
784 (if rev2 |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
785 (call-process (hg-binary) nil t nil "diff" "-r" rev1 "-r" rev2 path) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
786 (call-process (hg-binary) nil t nil "diff" "-r" rev1 path)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
787 (diff-mode) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
788 (setq diff (not (= (point-min) (point-max)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
789 (font-lock-fontify-buffer)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
790 diff)) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
791 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
792 (defun hg-diff-repo () |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
793 "Show the differences between the working copy and the tip revision." |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
794 (interactive) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
795 (hg-diff (hg-root))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
796 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
797 (defun hg-forget (path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
798 "Lose track of PATH, which has been added, but not yet committed. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
799 This will prevent the file from being incorporated into the Mercurial |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
800 repository on the next commit. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
801 With a prefix argument, prompt for the path to forget." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
802 (interactive (list (hg-read-file-name " to forget"))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
803 (let ((buf (current-buffer)) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
804 (update (equal buffer-file-name path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
805 (hg-view-output (hg-output-buffer-name) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
806 (apply 'call-process (hg-binary) nil t nil (list "forget" path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
807 (when update |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
808 (with-current-buffer buf |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
809 (hg-mode-line))))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
810 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
811 (defun hg-incoming () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
812 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
813 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
814 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
815 (defun hg-init () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
816 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
817 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
818 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
819 (defun hg-log (path &optional rev1 rev2) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
820 "Display the revision history of PATH, between REV1 and REV2. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
821 REV1 defaults to the initial revision, while REV2 defaults to the tip. |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
822 With a prefix argument, prompt for each parameter. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
823 Variable hg-log-limit controls the number of log entries displayed." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
824 (interactive (list (hg-read-file-name " to log") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
825 (hg-read-rev " to start with" "-1") |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
826 (hg-read-rev " to end with" (format "-%d" hg-log-limit)))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
827 (let ((a-path (hg-abbrev-file-name path))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
828 (hg-view-output ((if (equal rev1 rev2) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
829 (format "Mercurial: Rev %s of %s" rev1 a-path) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
830 (format "Mercurial: Rev %s to %s of %s" |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
831 rev1 (or rev2 "Current") a-path))) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
832 (if (> (length path) (length (hg-root path))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
833 (call-process (hg-binary) nil t nil "log" "-r" rev1 "-r" rev2 path) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
834 (call-process (hg-binary) nil t nil "log" "-r" rev1 "-r" rev2)) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
835 (diff-mode) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
836 (font-lock-fontify-buffer)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
837 |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
838 (defun hg-log-repo (path &optional rev1 rev2) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
839 "Display the revision history of the repository containing PATH. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
840 History is displayed between REV1, which defaults to the tip, and |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
841 REV2, which defaults to the initial revision. |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
842 Variable hg-log-limit controls the number of log entries displayed." |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
843 (interactive (list (hg-read-file-name " to log") |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
844 (hg-read-rev " to start with" "tip") |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
845 (hg-read-rev " to end with" (format "-%d" hg-log-limit)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
846 (hg-log (hg-root path) rev1 rev2)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
847 |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
848 (defun hg-outgoing () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
849 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
850 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
851 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
852 (defun hg-pull () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
853 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
854 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
855 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
856 (defun hg-push () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
857 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
858 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
859 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
860 (defun hg-revert-buffer-internal () |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
861 (let ((ctx (hg-buffer-context))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
862 (message "Reverting %s..." buffer-file-name) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
863 (hg-run0 "revert" buffer-file-name) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
864 (revert-buffer t t t) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
865 (hg-restore-context ctx) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
866 (hg-mode-line) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
867 (message "Reverting %s...done" buffer-file-name))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
868 |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
869 (defun hg-revert-buffer () |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
870 "Revert current buffer's file back to the latest committed version. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
871 If the file has not changed, nothing happens. Otherwise, this |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
872 displays a diff and asks for confirmation before reverting." |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
873 (interactive) |
995
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
874 (let ((vc-suppress-confirm nil) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
875 (obuf (current-buffer)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
876 diff) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
877 (vc-buffer-sync) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
878 (unwind-protect |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
879 (setq diff (hg-diff buffer-file-name)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
880 (when diff |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
881 (unless (yes-or-no-p "Discard changes? ") |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
882 (error "Revert cancelled"))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
883 (when diff |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
884 (let ((buf (current-buffer))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
885 (delete-window (selected-window)) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
886 (kill-buffer buf)))) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
887 (set-buffer obuf) |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
888 (when diff |
1e4b009b379e
Emacs support: add hg-revert-buffer.
Bryan O'Sullivan <bos@serpentine.com>
parents:
958
diff
changeset
|
889 (hg-revert-buffer-internal)))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
890 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
891 (defun hg-root (&optional path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
892 "Return the root of the repository that contains the given path. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
893 If the path is outside a repository, return nil. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
894 When called interactively, the root is printed. A prefix argument |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
895 prompts for a path to check." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
896 (interactive (list (hg-read-file-name))) |
1003
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
897 (if (or path (not hg-root)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
898 (let ((root (do ((prev nil dir) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
899 (dir (file-name-directory (or path buffer-file-name "")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
900 (file-name-directory (directory-file-name dir)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
901 ((equal prev dir)) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
902 (when (file-directory-p (concat dir ".hg")) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
903 (return dir))))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
904 (when (interactive-p) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
905 (if root |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
906 (message "The root of this repository is `%s'." root) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
907 (message "The path `%s' is not in a Mercurial repository." |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
908 (abbreviate-file-name path t)))) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
909 root) |
6dfc9cc71f42
Emacs support: numerous changes.
bos@serpentine.internal.keyresearch.com
parents:
1001
diff
changeset
|
910 hg-root)) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
911 |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
912 (defun hg-status (path) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
913 "Print revision control status of a file or directory. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
914 With prefix argument, prompt for the path to give status for. |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
915 Names are displayed relative to the repository root." |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
916 (interactive (list (hg-read-file-name " for status" (hg-root)))) |
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
917 (let ((root (hg-root))) |
996
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
918 (hg-view-output ((format "Mercurial: Status of %s in %s" |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
919 (let ((name (substring (expand-file-name path) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
920 (length root)))) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
921 (if (> (length name) 0) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
922 name |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
923 "*")) |
5ed566574486
Emacs: document existing functions.
Bryan O'Sullivan <bos@serpentine.com>
parents:
995
diff
changeset
|
924 (hg-abbrev-file-name root))) |
947
4cabedfab66e
In-progress Emacs snapshot.
Bryan O'Sullivan <bos@serpentine.com>
parents:
945
diff
changeset
|
925 (apply 'call-process (hg-binary) nil t nil |
955 | 926 (list "--cwd" root "status" path))))) |
944
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
927 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
928 (defun hg-undo () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
929 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
930 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
931 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
932 (defun hg-version-other-window () |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
933 (interactive) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
934 (error "not implemented")) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
935 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
936 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
937 (provide 'mercurial) |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
938 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
939 |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
940 ;;; Local Variables: |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
941 ;;; prompt-to-byte-compile: nil |
41ca6bf19735
Initial skeleton for mercurial.el.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
942 ;;; end: |