📄 psvn.el
字号:
By default, this is nil, which means use `browse-url-browser-function'.Any non-nil value overrides that variable, with the same syntax." ;; It would be nice to show the full list of browsers supported by ;; browse-url, but (custom-variable-type 'browse-url-browser-function) ;; returns just `function' if browse-url has not yet been loaded, ;; and there seems to be no easy way to autoload browse-url when ;; the custom-type of svn-browse-url-function is actually needed. ;; So I'll only offer enough choices to cover all supported types. :type `(choice (const :tag "Specified by `browse-url-browser-function'" nil) (function :value browse-url-default-browser ;; In XEmacs 21.4.17, the `function' widget matches ;; all objects. Constrain it here so that alists ;; fall through to the next choice. Accept either ;; a symbol (fbound or not) or a lambda expression. :match ,(lambda (widget value) (or (symbolp value) (functionp value)))) (svn-alist :tag "Regexp/function association list" :key-type regexp :value-type function :value (("." . browse-url-default-browser)))) :link '(emacs-commentary-link "browse-url") :group 'psvn);; (put 'svn-browse-url-function 'risky-local-variable t);; already implied by "-function" suffix(defcustom svn-status-window-alist '((diff "*svn-diff*") (log "*svn-log*") (info t) (blame t) (proplist t) (update t)) "An alist to specify which windows should be used for svn command outputs.The following keys are supported: diff, log, info, blame, proplist, update.The following values can be given:nil ... show in *svn-process* buffert ... show in dedicated *svn-info* bufferinvisible ... don't show the buffer (eventually useful for update)a string ... show in a buffer named string" :type '(svn-alist :key-type symbol :value-type (group (choice (const :tag "Show in *svn-process* buffer" nil) (const :tag "Show in dedicated *svn-info* buffer" t) (const :tag "Don't show the output" invisible) (string :tag "Show in a buffer named")))) :options '(diff log info blame proplist update) :group 'psvn)(defcustom svn-status-short-mod-flag-p t "*Whether the mark for out of date files is short or long.If this variable is is t, and a file is out of date (i.e., there is a newerversion in the repository than the working copy), then the file willbe marked by \"**\"If this variable is nil, and the file is out of date then the longer phrase\"(Update Available)\" is used.In either case the mark gets the face`svn-status-update-available-face', and will only be visible if`\\[svn-status-update]' is run with a prefix argument" :type '(choice (const :tag "Short \"**\"" t) (const :tag "Long \"(Update Available)\"" nil)) :group 'psvn)(defvar svn-status-debug-level 0 "The psvn.el debugging verbosity level.The higher the number, the more debug messages are shown.See `svn-status-message' for the meaning of values for that variable.")(defvar svn-status-buffer-name "*svn-status*" "Name for the svn status buffer")(defcustom svn-status-use-header-line (if (boundp 'header-line-format) t 'inline) "*Whether a header line should be used.When t: Use the emacs header lineWhen 'inline: Insert the header line in the `svn-status-buffer-name' bufferOtherwise: Don't display a header line" :type '(choice (const :tag "Show column titles as a header line" t) (const :tag "Insert column titles as text in the buffer" inline) (other :tag "No column titles" nil)) :group 'psvn);;; default arguments to pass to svn commands;; TODO: When customizing, an option menu or completion might be nice....(defcustom svn-status-default-log-arguments '() "*List of arguments to pass to svn log.\(used in `svn-status-show-svn-log'; override these by giving prefixes\)." :type '(repeat string) :group 'psvn)(put 'svn-status-default-log-arguments 'risky-local-variable t)(defcustom svn-status-default-commit-arguments '() "*List of arguments to pass to svn commit.If you don't like recursive commits, set this value to (\"-N\")or mark the directory before committing it.Do not put an empty string here, except as an argument of an option:Subversion and the operating system may treat that as a file nameequivalent to \".\", so you would commit more than you intended." :type '(repeat string) :group 'psvn)(put 'svn-status-default-commit-arguments 'risky-local-variable t)(defcustom svn-status-default-diff-arguments '() "*A list of arguments that is passed to the svn diff command.If you'd like to suppress whitespace changes use the following value:'(\"--diff-cmd\" \"diff\" \"-x\" \"-wbBu\")" :type '(repeat string) :group 'psvn)(put 'svn-status-default-diff-arguments 'risky-local-variable t)(defvar svn-trac-project-root nil "Path for an eventual existing trac issue tracker.This can be set with \\[svn-status-set-trac-project-root].")(defvar svn-status-module-name nil "*A short name for the actual project.This can be set with \\[svn-status-set-module-name].")(defvar svn-status-load-state-before-svn-status t "*Whether to automatically restore state from ++psvn.state file before running svn-status.");;; hooks(defvar svn-log-edit-mode-hook nil "Hook run when entering `svn-log-edit-mode'.")(defvar svn-log-edit-done-hook nil "Hook run after commiting files via svn.");; (put 'svn-log-edit-mode-hook 'risky-local-variable t);; (put 'svn-log-edit-done-hook 'risky-local-variable t);; already implied by "-hook" suffix(defvar svn-status-coding-system nil "A special coding system is needed for the output of svn.svn-status-coding-system is used in svn-run, if it is not nil.")(defcustom svn-status-wash-control-M-in-process-buffers (eq system-type 'windows-nt) "*Remove any trailing ^M from the *svn-process* buffer." :type 'boolean :group 'psvn);;; experimental features(defvar svn-status-track-user-input nil "Track user/password queries.This feature is implemented via a process filter.It is an experimental feature.");;; Customize group(defgroup psvn nil "Subversion interface for Emacs." :group 'tools)(defgroup psvn-faces nil "psvn faces." :group 'psvn)(eval-and-compile (require 'cl) (defconst svn-xemacsp (featurep 'xemacs)) (if svn-xemacsp (require 'overlay) (require 'overlay nil t)))(defcustom svn-status-display-full-path nil "Specifies how the filenames look like in the listing.If t, their full path name will be displayed, else only the filename." :type 'boolean :group 'psvn)(defcustom svn-status-prefix-key [(control x) (meta s)] "Prefix key for the psvn commands in the global keymap." :type '(choice (const [(control x) ?v ?S]) (const [(super s)]) (const [(hyper s)]) (const [(control x) ?v]) (const [(control x) ?V]) (sexp)) :group 'psvn :set (lambda (var value) (if (boundp var) (global-unset-key (symbol-value var))) (set var value) (global-set-key (symbol-value var) 'svn-global-keymap)));; Use the normally used mode for files ending in .~HEAD~, .~BASE~, ...(add-to-list 'auto-mode-alist '("\\.~?\\(HEAD\\|BASE\\|PREV\\)~?\\'" ignore t));;; internal variables(defvar svn-status-directory-history nil "List of visited svn working directories.")(defvar svn-process-cmd nil)(defvar svn-status-info nil)(defvar svn-status-filename-to-buffer-position-cache (make-hash-table :test 'equal :weakness t))(defvar svn-status-base-info nil)(defvar svn-status-initial-window-configuration nil)(defvar svn-status-default-column 23)(defvar svn-status-default-revision-width 4)(defvar svn-status-default-author-width 9)(defvar svn-status-line-format " %c%c%c %4s %4s %-9s")(defvar svn-start-of-file-list-line-number 0)(defvar svn-status-files-to-commit nil "List of files to commit at `svn-log-edit-done'.This is always set together with `svn-status-recursive-commit'.")(defvar svn-status-recursive-commit nil "Non-nil if the next commit should be recursive.This is always set together with `svn-status-files-to-commit'.")(defvar svn-log-edit-update-log-entry nil "Revision number whose log entry is being edited.This is nil if the log entry is for a new commit.")(defvar svn-status-pre-commit-window-configuration nil)(defvar svn-status-pre-propedit-window-configuration nil)(defvar svn-status-head-revision nil)(defvar svn-status-root-return-info nil)(defvar svn-status-property-edit-must-match-flag nil)(defvar svn-status-propedit-property-name nil)(defvar svn-status-propedit-file-list nil)(defvar svn-status-mode-line-process "")(defvar svn-status-mode-line-process-status "")(defvar svn-status-mode-line-process-edit-flag "")(defvar svn-status-edit-svn-command nil)(defvar svn-status-update-previous-process-output nil)(defvar svn-pre-run-asynch-recent-keys nil)(defvar svn-status-temp-dir (expand-file-name (or (when (boundp 'temporary-file-directory) temporary-file-directory) ;emacs ;; XEmacs 21.4.17 can return "/tmp/kalle" from (temp-directory). ;; `file-name-as-directory' adds a slash so we can append a file name. (when (fboundp 'temp-directory) (file-name-as-directory (temp-directory))) "/tmp/")) "The directory that is used to store temporary files for psvn.");; Because `temporary-file-directory' is not a risky local variable in;; GNU Emacs 22.0.51, we don't mark `svn-status-temp-dir' as such either.(defvar svn-temp-suffix (make-temp-name "."))(put 'svn-temp-suffix 'risky-local-variable t)(defvar svn-status-temp-file-to-remove nil)(put 'svn-status-temp-file-to-remove 'risky-local-variable t)(defvar svn-status-temp-arg-file (concat svn-status-temp-dir "svn.arg" svn-temp-suffix))(put 'svn-status-temp-arg-file 'risky-local-variable t)(defvar svn-status-options nil)(defvar svn-status-remote)(defvar svn-status-commit-rev-number nil)(defvar svn-status-operated-on-dot nil)(defvar svn-status-elided-list nil)(defvar svn-status-custom-hide-function nil);; (put 'svn-status-custom-hide-function 'risky-local-variable t);; already implied by "-function" suffix(defvar svn-status-get-specific-revision-file-info)(defvar svn-status-last-output-buffer-name)(defvar svn-transient-buffers)(defvar svn-ediff-windows)(defvar svn-ediff-result);; Emacs 21 defines these in ediff-init.el but it seems more robust;; to just declare the variables here than try to load that file.;; It is Ediff's job to declare these as risky-local-variable if needed.(defvar ediff-buffer-A)(defvar ediff-buffer-B)(defvar ediff-buffer-C)(defvar ediff-quit-hook);; Ditto for log-edit.el.(defvar log-edit-initial-files)(defvar log-edit-callback)(defvar log-edit-listfun);; Ediff does not use this variable in GNU Emacs 20.7, GNU Emacs 21.4,;; nor XEmacs 21.4.17. However, pcl-cvs (a.k.a. pcvs) does.;; TODO: Check if this should be moved into the "svn-" namespace.(defvar ediff-after-quit-destination-buffer);; That is an example for the svn-status-custom-hide-function:;; (setq svn-status-custom-hide-function 'svn-status-hide-pyc-files);; (defun svn-status-hide-pyc-files (info);; "Hide all pyc files in the `svn-status-buffer-name' buffer.";; (let* ((fname (svn-status-line-info->filename-nondirectory info));; (fname-len (length fname)));; (and (> fname-len 4) (string= (substring fname (- fname-len 4)) ".pyc"))));;; faces(defface svn-status-marked-face '((((type tty) (class color)) (:foreground "green" :weight light)) (((class color) (background light)) (:foreground "green3")) (((class color) (background dark)) (:foreground "palegreen2")) (t (:weight bold))) "Face to highlight the mark for user marked files in svn status buffers." :group 'psvn-faces)(defface svn-status-marked-popup-face '((((type tty) (class color)) (:foreground "green" :weight light)) (((class color) (background light)) (:foreground "green3")) (((class color) (background dark)) (:foreground "palegreen2")) (t (:weight bold))) "Face to highlight the actual file, if a popup menu is activated."
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -