Commit | Line | Data |
---|---|---|
5b467bf4 SM |
1 | ;;; pcvs-defs.el --- variable definitions for PCL-CVS |
2 | ||
acaf905b | 3 | ;; Copyright (C) 1991-2012 Free Software Foundation, Inc. |
5b467bf4 | 4 | |
cc1eecfd | 5 | ;; Author: Stefan Monnier <monnier@iro.umontreal.ca> |
5b467bf4 | 6 | ;; Keywords: pcl-cvs |
bd78fa1d | 7 | ;; Package: pcvs |
5b467bf4 SM |
8 | |
9 | ;; This file is part of GNU Emacs. | |
10 | ||
eb3fa2cf | 11 | ;; GNU Emacs is free software: you can redistribute it and/or modify |
5b467bf4 | 12 | ;; it under the terms of the GNU General Public License as published by |
eb3fa2cf GM |
13 | ;; the Free Software Foundation, either version 3 of the License, or |
14 | ;; (at your option) any later version. | |
5b467bf4 SM |
15 | |
16 | ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | ;; GNU General Public License for more details. | |
20 | ||
21 | ;; You should have received a copy of the GNU General Public License | |
eb3fa2cf | 22 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
5b467bf4 SM |
23 | |
24 | ;;; Commentary: | |
25 | ||
26 | ||
27 | ;;; Code: | |
28 | ||
5b467bf4 SM |
29 | (require 'pcvs-util) |
30 | ||
31 | ;;;; ------------------------------------------------------- | |
32 | ;;;; START OF THINGS TO CHECK WHEN INSTALLING | |
33 | ||
34 | (defvar cvs-program "cvs" | |
fb7ada5f | 35 | "Name or full path of the cvs executable.") |
5b467bf4 SM |
36 | |
37 | (defvar cvs-version | |
c6ea7612 SM |
38 | ;; With the divergence of the CVSNT codebase and version numbers, this is |
39 | ;; not really good any more. | |
5b467bf4 SM |
40 | (ignore-errors |
41 | (with-temp-buffer | |
6cfbaf46 | 42 | (call-process cvs-program nil t nil "-v") |
5b467bf4 | 43 | (goto-char (point-min)) |
c6ea7612 SM |
44 | (when (re-search-forward "(CVS\\(NT\\)?) \\([0-9]+\\)\\.\\([0-9]+\\)" |
45 | nil t) | |
5b467bf4 SM |
46 | (cons (string-to-number (match-string 1)) |
47 | (string-to-number (match-string 2)))))) | |
fb7ada5f | 48 | "Version of `cvs' installed on your system. |
5b467bf4 SM |
49 | It must be in the (MAJOR . MINOR) format.") |
50 | ||
51 | ;; FIXME: this is only used by cvs-mode-diff-backup | |
52 | (defvar cvs-diff-program (or (and (boundp 'diff-command) diff-command) "diff") | |
fb7ada5f | 53 | "Name or full path of the best diff program you've got. |
5b467bf4 SM |
54 | NOTE: there are some nasty bugs in the context diff variants of some vendor |
55 | versions, such as the one in SunOS-4.") | |
56 | ||
57 | ;;;; END OF THINGS TO CHECK WHEN INSTALLING | |
58 | ;;;; -------------------------------------------------------- | |
59 | ||
60 | ;;;; | |
61 | ;;;; User configuration variables: | |
62 | ;;;; | |
63 | ;;;; NOTE: these should be set in your ~/.emacs (or site-lisp/default.el) file. | |
64 | ;;;; | |
65 | ||
66 | (defgroup pcl-cvs nil | |
67 | "Special support for the CVS versioning system." | |
f4fbc2ff | 68 | :version "21.1" |
5b467bf4 SM |
69 | :group 'tools |
70 | :prefix "cvs-") | |
71 | ||
72 | ;; | |
73 | ;; cvsrc options | |
74 | ;; | |
75 | ||
44597808 | 76 | (defcustom cvs-cvsrc-file (convert-standard-filename "~/.cvsrc") |
5b467bf4 SM |
77 | "Path to your cvsrc file." |
78 | :group 'pcl-cvs | |
79 | :type '(file)) | |
80 | ||
81 | (defvar cvs-shared-start 4 | |
82 | "Index of the first shared flag. | |
83 | If set to 4, for instance, a numeric argument smaller than 4 will | |
84 | select a non-shared flag, while a numeric argument greater than 3 | |
85 | will select a shared-flag.") | |
86 | ||
87 | (defvar cvs-shared-flags (make-list cvs-shared-start nil) | |
88 | "List of flags whose settings is shared among several commands.") | |
89 | ||
90 | (defvar cvs-cvsroot nil | |
fb7ada5f | 91 | "Specifies where the (current) cvs master repository is. |
5b467bf4 SM |
92 | Overrides the environment variable $CVSROOT by sending \" -d dir\" to |
93 | all CVS commands. This switch is useful if you have multiple CVS | |
94 | repositories. It can be set interactively with \\[cvs-change-cvsroot.] | |
95 | There is no need to set this if $CVSROOT is set to a correct value.") | |
96 | ||
97 | (defcustom cvs-auto-remove-handled nil | |
afc05254 | 98 | "If up-to-date files should be acknowledged automatically. |
5b467bf4 SM |
99 | If T, they will be removed from the *cvs* buffer after every command. |
100 | If DELAYED, they will be removed from the *cvs* buffer before every command. | |
101 | If STATUS, they will only be removed after a `cvs-mode-status' command. | |
102 | Else, they will never be automatically removed from the *cvs* buffer." | |
103 | :group 'pcl-cvs | |
104 | :type '(choice (const nil) (const status) (const delayed) (const t))) | |
105 | ||
106 | (defcustom cvs-auto-remove-directories 'handled | |
afc05254 | 107 | "If ALL, directory entries will never be shown. |
7980ab49 | 108 | If HANDLED, only non-handled directories will be shown. |
5b467bf4 SM |
109 | If EMPTY, only non-empty directories will be shown." |
110 | :group 'pcl-cvs | |
111 | :type '(choice (const :tag "No" nil) (const all) (const handled) (const empty))) | |
112 | ||
113 | (defcustom cvs-auto-revert t | |
afc05254 | 114 | "Non-nil if changed files should automatically be reverted." |
5b467bf4 SM |
115 | :group 'pcl-cvs |
116 | :type '(boolean)) | |
117 | ||
118 | (defcustom cvs-sort-ignore-file t | |
afc05254 | 119 | "Non-nil if `cvs-mode-ignore' should sort the .cvsignore automatically." |
5b467bf4 SM |
120 | :group 'pcl-cvs |
121 | :type '(boolean)) | |
122 | ||
123 | (defcustom cvs-force-dir-tag t | |
afc05254 | 124 | "If non-nil, tagging can only be applied to directories. |
5b467bf4 SM |
125 | Tagging should generally be applied a directory at a time, but sometimes it is |
126 | useful to be able to tag a single file. The normal way to do that is to use | |
127 | `cvs-mode-force-command' so as to temporarily override the restrictions," | |
128 | :group 'pcl-cvs | |
129 | :type '(boolean)) | |
130 | ||
131 | (defcustom cvs-default-ignore-marks nil | |
afc05254 | 132 | "Non-nil if cvs mode commands should ignore any marked files. |
5b467bf4 SM |
133 | Normally they run on the files that are marked (with `cvs-mode-mark'), |
134 | or the file under the cursor if no files are marked. If this variable | |
135 | is set to a non-nil value they will by default run on the file on the | |
2c0ec709 | 136 | current line. See also `cvs-invert-ignore-marks'" |
5b467bf4 SM |
137 | :group 'pcl-cvs |
138 | :type '(boolean)) | |
139 | ||
17874c4e JB |
140 | (defvar cvs-diff-ignore-marks t) |
141 | (make-obsolete-variable 'cvs-diff-ignore-marks | |
d9bb547b JB |
142 | 'cvs-invert-ignore-marks |
143 | "21.1") | |
5b467bf4 SM |
144 | |
145 | (defcustom cvs-invert-ignore-marks | |
146 | (let ((l ())) | |
147 | (unless (equal cvs-diff-ignore-marks cvs-default-ignore-marks) | |
148 | (push "diff" l)) | |
149 | (when (and cvs-force-dir-tag (not cvs-default-ignore-marks)) | |
150 | (push "tag" l)) | |
151 | l) | |
afc05254 | 152 | "List of cvs commands that invert the default ignore-mark behavior. |
5b467bf4 SM |
153 | Commands in this set will use the opposite default from the one set |
154 | in `cvs-default-ignore-marks'." | |
155 | :group 'pcl-cvs | |
156 | :type '(set (const "diff") | |
157 | (const "tag") | |
158 | (const "ignore"))) | |
159 | ||
160 | (defcustom cvs-confirm-removals t | |
afc05254 | 161 | "Ask for confirmation before removing files. |
5b467bf4 SM |
162 | Non-nil means that PCL-CVS will ask confirmation before removing files |
163 | except for files whose content can readily be recovered from the repository. | |
138e1bd0 | 164 | A value of `list' means that the list of files to be deleted will be |
5b467bf4 SM |
165 | displayed when asking for confirmation." |
166 | :group 'pcl-cvs | |
167 | :type '(choice (const list) | |
168 | (const t) | |
169 | (const nil))) | |
170 | ||
171 | (defcustom cvs-add-default-message nil | |
afc05254 | 172 | "Default message to use when adding files. |
0ff9b955 | 173 | If set to nil, `cvs-mode-add' will always prompt for a message." |
5b467bf4 SM |
174 | :group 'pcl-cvs |
175 | :type '(choice (const :tag "Prompt" nil) | |
176 | (string))) | |
177 | ||
17874c4e JB |
178 | (defvar cvs-diff-buffer-name "*cvs-diff*") |
179 | (make-obsolete-variable 'cvs-diff-buffer-name | |
d9bb547b JB |
180 | 'cvs-buffer-name-alist |
181 | "21.1") | |
5b467bf4 | 182 | |
2c0ec709 | 183 | (defcustom cvs-find-file-and-jump nil |
5b467bf4 | 184 | "Jump to the modified area when finding a file. |
5664fa7b | 185 | If non-nil, `cvs-mode-find-file' will place the cursor at the beginning of |
5b467bf4 SM |
186 | the modified area. If the file is not locally modified, this will obviously |
187 | have no effect." | |
188 | :group 'pcl-cvs | |
189 | :type '(boolean)) | |
190 | ||
191 | (defcustom cvs-buffer-name-alist | |
192 | '(("diff" cvs-diff-buffer-name diff-mode) | |
193 | ("status" "*cvs-info*" cvs-status-mode) | |
619d6bfc | 194 | ("tree" "*cvs-info*" cvs-status-mode) |
5b467bf4 SM |
195 | ("message" "*cvs-commit*" nil log-edit) |
196 | ("log" "*cvs-info*" log-view-mode)) | |
afc05254 | 197 | "Buffer name and mode to be used for each command. |
5b467bf4 SM |
198 | This is a list of elements of the form |
199 | ||
200 | (CMD BUFNAME MODE &optional POSTPROC) | |
201 | ||
202 | CMD is the name of the command. | |
203 | BUFNAME is an expression that should evaluate to a string used as | |
204 | a buffer name. It can use the variable CMD if it wants to. | |
205 | MODE is the command to use to setup the buffer. | |
206 | POSTPROC is a function that should be executed when the command terminates | |
207 | ||
208 | The CMD used for `cvs-mode-commit' is \"message\". For that special | |
209 | case, POSTPROC is called just after MODE with special arguments." | |
210 | :group 'pcl-cvs | |
211 | :type '(repeat | |
212 | (list (choice (const "diff") | |
213 | (const "status") | |
214 | (const "tree") | |
215 | (const "message") | |
216 | (const "log") | |
217 | (string)) | |
218 | (choice (const "*vc-diff*") | |
219 | (const "*cvs-info*") | |
220 | (const "*cvs-commit*") | |
221 | (const (expand-file-name "*cvs-commit*")) | |
222 | (const (format "*cvs-%s*" cmd)) | |
223 | (const (expand-file-name (format "*cvs-%s*" cmd))) | |
224 | (sexp :value "my-cvs-info-buffer") | |
225 | (const nil)) | |
226 | (choice (function-item diff-mode) | |
227 | (function-item cvs-edit-mode) | |
228 | (function-item cvs-status-mode) | |
229 | function | |
230 | (const nil)) | |
231 | (set :inline t | |
232 | (choice (function-item cvs-status-cvstrees) | |
233 | (function-item cvs-status-trees) | |
234 | function))))) | |
235 | ||
236 | (defvar cvs-buffer-name '(expand-file-name "*cvs*" dir) ;; "*cvs*" | |
237 | "Name of the cvs buffer. | |
238 | This expression will be evaluated in an environment where DIR is set to | |
239 | the directory name of the cvs buffer.") | |
240 | ||
e5a099ec SM |
241 | (defvar cvs-temp-buffer-name |
242 | ;; Was '(expand-file-name " *cvs-tmp*" dir), but that causes them to | |
243 | ;; become non-hidden if uniquification is done `forward'. | |
244 | " *cvs-tmp*" | |
fb7ada5f | 245 | "Name of the cvs temporary buffer. |
5b467bf4 SM |
246 | Output from cvs is placed here for asynchronous commands.") |
247 | ||
248 | (defcustom cvs-idiff-imerge-handlers | |
249 | (if (fboundp 'ediff) | |
250 | '(cvs-ediff-diff . cvs-ediff-merge) | |
251 | '(cvs-emerge-diff . cvs-emerge-merge)) | |
afc05254 | 252 | "Pair of functions to be used for resp. diff'ing and merg'ing interactively." |
5b467bf4 SM |
253 | :group 'pcl-cvs |
254 | :type '(choice (const :tag "Ediff" (cvs-ediff-diff . cvs-ediff-merge)) | |
255 | (const :tag "Emerge" (cvs-emerge-diff . cvs-emerge-merge)))) | |
256 | ||
5b467bf4 SM |
257 | (defvar cvs-mode-hook nil |
258 | "Run after `cvs-mode' was setup.") | |
259 | ||
260 | \f | |
261 | ;;;; | |
262 | ;;;; Internal variables, used in the process buffer. | |
263 | ;;;; | |
264 | ||
265 | (defvar cvs-postprocess nil | |
266 | "(Buffer local) what to do once the process exits.") | |
267 | ||
268 | ;;;; | |
269 | ;;;; Internal variables for the *cvs* buffer. | |
270 | ;;;; | |
271 | ||
272 | (defcustom cvs-reuse-cvs-buffer 'subdir | |
273 | "When to reuse an existing cvs buffer. | |
274 | Alternatives are: | |
275 | CURRENT: just reuse the current buffer if it is a cvs buffer | |
276 | SAMEDIR: reuse any cvs buffer displaying the same directory | |
277 | SUBDIR: or reuse any cvs buffer displaying any sub- or super- directory | |
278 | ALWAYS: reuse any cvs buffer." | |
279 | :group 'pcl-cvs | |
280 | :type '(choice (const always) (const subdir) (const samedir) (const current))) | |
281 | ||
282 | (defvar cvs-temp-buffer nil | |
283 | "(Buffer local) The temporary buffer associated with this *cvs* buffer.") | |
284 | ||
285 | (defvar cvs-lock-file nil | |
286 | "Full path to a lock file that CVS is waiting for (or was waiting for). | |
287 | This variable is buffer local and only used in the *cvs* buffer.") | |
288 | ||
289 | (defvar cvs-lock-file-regexp "^#cvs\\.\\([trw]fl\\.[-.a-z0-9]+\\|lock\\)\\'" | |
290 | "Regexp matching the possible names of locks in the CVS repository.") | |
291 | ||
292 | (defconst cvs-cursor-column 22 | |
293 | "Column to position cursor in in `cvs-mode'.") | |
294 | ||
295 | ;;;; | |
296 | ;;;; Global internal variables | |
297 | ;;;; | |
298 | ||
5b467bf4 SM |
299 | (defconst cvs-vendor-branch "1.1.1" |
300 | "The default branch used by CVS for vendor code.") | |
301 | ||
5b467bf4 | 302 | (easy-mmode-defmap cvs-mode-diff-map |
4f5a9d2b SM |
303 | '(("E" "imerge" . cvs-mode-imerge) |
304 | ("=" . cvs-mode-diff) | |
305 | ("e" "idiff" . cvs-mode-idiff) | |
306 | ("2" "other" . cvs-mode-idiff-other) | |
307 | ("d" "diff" . cvs-mode-diff) | |
308 | ("b" "backup" . cvs-mode-diff-backup) | |
309 | ("h" "head" . cvs-mode-diff-head) | |
a4bdfaf9 | 310 | ("r" "repository" . cvs-mode-diff-repository) |
34ffe043 | 311 | ("y" "yesterday" . cvs-mode-diff-yesterday) |
4f5a9d2b SM |
312 | ("v" "vendor" . cvs-mode-diff-vendor)) |
313 | "Keymap for diff-related operations in `cvs-mode'." | |
314 | :name "Diff") | |
ef55aa6c | 315 | ;; This is necessary to allow correct handling of \\[cvs-mode-diff-map] |
2c0ec709 SM |
316 | ;; in substitute-command-keys. |
317 | (fset 'cvs-mode-diff-map cvs-mode-diff-map) | |
5b467bf4 SM |
318 | |
319 | (easy-mmode-defmap cvs-mode-map | |
320 | ;;(define-prefix-command 'cvs-mode-map-diff-prefix) | |
321 | ;;(define-prefix-command 'cvs-mode-map-control-c-prefix) | |
5caeb2a5 | 322 | '(;; various |
fa443ddf | 323 | ;; (undo . cvs-mode-undo) |
5b467bf4 SM |
324 | ("?" . cvs-help) |
325 | ("h" . cvs-help) | |
326 | ("q" . cvs-bury-buffer) | |
ef55aa6c | 327 | ("z" . kill-this-buffer) |
5b467bf4 | 328 | ("F" . cvs-mode-set-flags) |
213a58ae | 329 | ;; ("\M-f" . cvs-mode-force-command) |
7980ab49 | 330 | ("!" . cvs-mode-force-command) |
5b467bf4 SM |
331 | ("\C-c\C-c" . cvs-mode-kill-process) |
332 | ;; marking | |
333 | ("m" . cvs-mode-mark) | |
334 | ("M" . cvs-mode-mark-all-files) | |
28037ecf | 335 | ("S" . cvs-mode-mark-on-state) |
5b467bf4 SM |
336 | ("u" . cvs-mode-unmark) |
337 | ("\C-?". cvs-mode-unmark-up) | |
338 | ("%" . cvs-mode-mark-matching-files) | |
339 | ("T" . cvs-mode-toggle-marks) | |
340 | ("\M-\C-?" . cvs-mode-unmark-all-files) | |
341 | ;; navigation keys | |
342 | (" " . cvs-mode-next-line) | |
343 | ("n" . cvs-mode-next-line) | |
344 | ("p" . cvs-mode-previous-line) | |
25edda53 DN |
345 | ("\t" . cvs-mode-next-line) |
346 | ([backtab] . cvs-mode-previous-line) | |
5b467bf4 SM |
347 | ;; M- keys are usually those that operate on modules |
348 | ;;("\M-C". cvs-mode-rcs2log) ; i.e. "Create a ChangeLog" | |
349 | ;;("\M-t". cvs-rtag) | |
350 | ;;("\M-l". cvs-rlog) | |
351 | ("\M-c". cvs-checkout) | |
352 | ("\M-e". cvs-examine) | |
353 | ("g" . cvs-mode-revert-buffer) | |
354 | ("\M-u". cvs-update) | |
355 | ("\M-s". cvs-status) | |
356 | ;; diff commands | |
357 | ("=" . cvs-mode-diff) | |
2c0ec709 | 358 | ("d" . cvs-mode-diff-map) |
5b467bf4 | 359 | ;; keys that operate on individual files |
02f7be41 | 360 | ("\C-k" . cvs-mode-acknowledge) |
5b467bf4 SM |
361 | ("A" . cvs-mode-add-change-log-entry-other-window) |
362 | ;;("B" . cvs-mode-byte-compile-files) | |
363 | ("C" . cvs-mode-commit-setup) | |
364 | ("O" . cvs-mode-update) | |
365 | ("U" . cvs-mode-undo) | |
366 | ("I" . cvs-mode-insert) | |
367 | ("a" . cvs-mode-add) | |
368 | ("b" . cvs-set-branch-prefix) | |
369 | ("B" . cvs-set-secondary-branch-prefix) | |
370 | ("c" . cvs-mode-commit) | |
371 | ("e" . cvs-mode-examine) | |
372 | ("f" . cvs-mode-find-file) | |
02f7be41 | 373 | ("\C-m" . cvs-mode-find-file) |
5b467bf4 SM |
374 | ("i" . cvs-mode-ignore) |
375 | ("l" . cvs-mode-log) | |
376 | ("o" . cvs-mode-find-file-other-window) | |
377 | ("r" . cvs-mode-remove) | |
378 | ("s" . cvs-mode-status) | |
379 | ("t" . cvs-mode-tag) | |
9d2475ef | 380 | ("v" . cvs-mode-view-file) |
5b467bf4 SM |
381 | ("x" . cvs-mode-remove-handled) |
382 | ;; cvstree bindings | |
383 | ("+" . cvs-mode-tree) | |
384 | ;; mouse bindings | |
2c0ec709 | 385 | ([mouse-2] . cvs-mode-find-file) |
d086b1a2 | 386 | ([follow-link] . (lambda (pos) |
94d5c876 | 387 | (if (eq (get-char-property pos 'face) 'cvs-filename) t))) |
5b467bf4 | 388 | ([(down-mouse-3)] . cvs-menu) |
28037ecf SM |
389 | ;; dired-like bindings |
390 | ("\C-o" . cvs-mode-display-file) | |
5b467bf4 SM |
391 | ;; Emacs-21 toolbar |
392 | ;;([tool-bar item1] . (menu-item "Examine" cvs-examine :image (image :file "/usr/share/icons/xpaint.xpm" :type xpm))) | |
393 | ;;([tool-bar item2] . (menu-item "Update" cvs-update :image (image :file "/usr/share/icons/mail1.xpm" :type xpm))) | |
394 | ) | |
395 | "Keymap for `cvs-mode'." | |
5caeb2a5 GM |
396 | :dense t |
397 | :suppress t) | |
5b467bf4 SM |
398 | |
399 | (fset 'cvs-mode-map cvs-mode-map) | |
400 | ||
8e41e2e5 SM |
401 | (easy-menu-define cvs-menu cvs-mode-map "Menu used in `cvs-mode'." |
402 | '("CVS" | |
10edbb1a RS |
403 | ["Open file" cvs-mode-find-file t] |
404 | ["Open in other window" cvs-mode-find-file-other-window t] | |
28037ecf | 405 | ["Display in other window" cvs-mode-display-file t] |
8e41e2e5 SM |
406 | ["Interactive merge" cvs-mode-imerge t] |
407 | ("View diff" | |
408 | ["Interactive diff" cvs-mode-idiff t] | |
409 | ["Current diff" cvs-mode-diff t] | |
410 | ["Diff with head" cvs-mode-diff-head t] | |
411 | ["Diff with vendor" cvs-mode-diff-vendor t] | |
10edbb1a | 412 | ["Diff against yesterday" cvs-mode-diff-yesterday t] |
8e41e2e5 SM |
413 | ["Diff with backup" cvs-mode-diff-backup t]) |
414 | ["View log" cvs-mode-log t] | |
415 | ["View status" cvs-mode-status t] | |
416 | ["View tag tree" cvs-mode-tree t] | |
417 | "----" | |
418 | ["Insert" cvs-mode-insert] | |
419 | ["Update" cvs-mode-update (cvs-enabledp 'update)] | |
420 | ["Re-examine" cvs-mode-examine t] | |
421 | ["Commit" cvs-mode-commit-setup (cvs-enabledp 'commit)] | |
5fe50228 | 422 | ["Tag" cvs-mode-tag (cvs-enabledp (when cvs-force-dir-tag 'tag))] |
8e41e2e5 SM |
423 | ["Undo changes" cvs-mode-undo (cvs-enabledp 'undo)] |
424 | ["Add" cvs-mode-add (cvs-enabledp 'add)] | |
425 | ["Remove" cvs-mode-remove (cvs-enabledp 'remove)] | |
426 | ["Ignore" cvs-mode-ignore (cvs-enabledp 'ignore)] | |
427 | ["Add ChangeLog" cvs-mode-add-change-log-entry-other-window t] | |
428 | "----" | |
c224c19a | 429 | ["Mark" cvs-mode-mark t] |
8e41e2e5 | 430 | ["Mark all" cvs-mode-mark-all-files t] |
28037ecf SM |
431 | ["Mark by regexp..." cvs-mode-mark-matching-files t] |
432 | ["Mark by state..." cvs-mode-mark-on-state t] | |
c224c19a | 433 | ["Unmark" cvs-mode-unmark t] |
8e41e2e5 SM |
434 | ["Unmark all" cvs-mode-unmark-all-files t] |
435 | ["Hide handled" cvs-mode-remove-handled t] | |
436 | "----" | |
10edbb1a RS |
437 | ["PCL-CVS Manual" (lambda () (interactive) |
438 | (info "(pcl-cvs)Top")) t] | |
439 | "----" | |
8e41e2e5 | 440 | ["Quit" cvs-mode-quit t])) |
5b467bf4 | 441 | |
ef55aa6c | 442 | ;;;; |
5b467bf4 | 443 | ;;;; CVS-Minor mode |
ef55aa6c | 444 | ;;;; |
5b467bf4 SM |
445 | |
446 | (defcustom cvs-minor-mode-prefix "\C-xc" | |
447 | "Prefix key for the `cvs-mode' bindings in `cvs-minor-mode'." | |
448 | :group 'pcl-cvs) | |
449 | ||
450 | (easy-mmode-defmap cvs-minor-mode-map | |
213a58ae SM |
451 | `((,cvs-minor-mode-prefix . cvs-mode-map) |
452 | ("e" . (menu-item nil cvs-mode-edit-log | |
453 | :filter (lambda (x) (if (derived-mode-p 'log-view-mode) x))))) | |
4f5a9d2b | 454 | "Keymap for `cvs-minor-mode', used in buffers related to PCL-CVS.") |
5b467bf4 SM |
455 | |
456 | (defvar cvs-buffer nil | |
457 | "(Buffer local) The *cvs* buffer associated with this buffer.") | |
458 | (put 'cvs-buffer 'permanent-local t) | |
459 | ;;(make-variable-buffer-local 'cvs-buffer) | |
460 | ||
461 | (defvar cvs-minor-wrap-function nil | |
462 | "Function to call when switching to the *cvs* buffer. | |
463 | Takes two arguments: | |
464 | - a *cvs* buffer. | |
465 | - a zero-arg function which is guaranteed not to switch buffer. | |
466 | It is expected to call the function.") | |
467 | ;;(make-variable-buffer-local 'cvs-minor-wrap-function) | |
468 | ||
469 | (defvar cvs-minor-current-files) | |
470 | ;;"Current files in a `cvs-minor-mode' buffer." | |
471 | ;; This should stay `void' because we want to be able to tell the difference | |
472 | ;; between an empty list and no list at all. | |
473 | ||
474 | (defconst cvs-pcl-cvs-dirchange-re "^pcl-cvs: descending directory \\(.*\\)$") | |
475 | ||
ef55aa6c | 476 | ;;;; |
cb3430a1 | 477 | ;;;; autoload the global menu |
ef55aa6c | 478 | ;;;; |
5b467bf4 | 479 | |
cb3430a1 SM |
480 | ;;;###autoload |
481 | (defvar cvs-global-menu | |
482 | (let ((m (make-sparse-keymap "PCL-CVS"))) | |
483 | (define-key m [status] | |
8f43cbf3 DN |
484 | `(menu-item ,(purecopy "Directory Status") cvs-status |
485 | :help ,(purecopy "A more verbose status of a workarea"))) | |
cb3430a1 | 486 | (define-key m [checkout] |
8f43cbf3 DN |
487 | `(menu-item ,(purecopy "Checkout Module") cvs-checkout |
488 | :help ,(purecopy "Check out a module from the repository"))) | |
cb3430a1 | 489 | (define-key m [update] |
8f43cbf3 DN |
490 | `(menu-item ,(purecopy "Update Directory") cvs-update |
491 | :help ,(purecopy "Fetch updates from the repository"))) | |
cb3430a1 | 492 | (define-key m [examine] |
8f43cbf3 DN |
493 | `(menu-item ,(purecopy "Examine Directory") cvs-examine |
494 | :help ,(purecopy "Examine the current state of a workarea"))) | |
3adbe224 GM |
495 | (fset 'cvs-global-menu m)) |
496 | "Global menu used by PCL-CVS.") | |
5b467bf4 SM |
497 | |
498 | ||
499 | ;; cvs-1.10 and above can take file arguments in other directories | |
500 | ;; while others need to be executed once per directory | |
501 | (defvar cvs-execute-single-dir | |
c6ea7612 SM |
502 | (if (or (null cvs-version) |
503 | (or (>= (cdr cvs-version) 10) (> (car cvs-version) 1))) | |
504 | ;; Supposedly some recent versions of CVS output some directory info | |
4c36be58 | 505 | ;; as they recurse down the tree, but it's not good enough in the case |
c6ea7612 | 506 | ;; where we run "cvs status foo bar/foo". |
5b467bf4 SM |
507 | '("status") |
508 | t) | |
509 | "Whether cvs commands should be executed a directory at a time. | |
510 | If a list, specifies for which commands the single-dir mode should be used. | |
511 | If T, single-dir mode should be used for all operations. | |
512 | ||
513 | CVS versions before 1.10 did not allow passing them arguments in different | |
514 | directories, so pcl-cvs checks what version you're using to determine | |
515 | whether to use the new feature or not. | |
516 | Sadly, even with a new cvs executable, if you connect to an older cvs server | |
517 | \(typically a cvs-1.9 on the server), the old restriction applies. In such | |
518 | a case the sanity check made by pcl-cvs fails and you will have to manually | |
0ff9b955 | 519 | set this variable to t (until the cvs server is upgraded). |
5b467bf4 | 520 | When the above problem occurs, pcl-cvs should (hopefully) catch cvs' error |
c6ea7612 | 521 | message and replace it with a message telling you to change this variable.") |
5b467bf4 SM |
522 | |
523 | ;; | |
524 | (provide 'pcvs-defs) | |
525 | ||
3afbc435 | 526 | ;;; pcvs-defs.el ends here |