summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/send-pr/send-pr-el.in
diff options
context:
space:
mode:
authorgavin <gavin@FreeBSD.org>2014-06-22 16:48:21 +0000
committergavin <gavin@FreeBSD.org>2014-06-22 16:48:21 +0000
commite44b7f112f499d2a322853f25a75b8aebc162407 (patch)
tree47d91275e445fa0e5a1d35ae379d7db623e70332 /gnu/usr.bin/send-pr/send-pr-el.in
parent08bf57727433041944d851795e4c8e34f8c54d89 (diff)
downloadFreeBSD-src-e44b7f112f499d2a322853f25a75b8aebc162407.zip
FreeBSD-src-e44b7f112f499d2a322853f25a75b8aebc162407.tar.gz
Merge r267482,r267483,r267486,r267577,r267671,r267672 from head:
Remove send-pr and fix up all references to it. Replace it with a stub send-pr directing people towards the web site.
Diffstat (limited to 'gnu/usr.bin/send-pr/send-pr-el.in')
-rw-r--r--gnu/usr.bin/send-pr/send-pr-el.in813
1 files changed, 0 insertions, 813 deletions
diff --git a/gnu/usr.bin/send-pr/send-pr-el.in b/gnu/usr.bin/send-pr/send-pr-el.in
deleted file mode 100644
index 8195ecb..0000000
--- a/gnu/usr.bin/send-pr/send-pr-el.in
+++ /dev/null
@@ -1,813 +0,0 @@
-;;;; -*-emacs-lisp-*-
-;;;;---------------------------------------------------------------------------
-;;;; EMACS interface for send-pr (by Heinz G. Seidl)
-;;;; Slightly hacked by Brendan Kehoe (brendan@cygnus.com).
-;;;;
-;;;; This file is part of the Problem Report Management System (GNATS)
-;;;; Copyright 1992, 1993, 1997 Cygnus Support
-;;;;
-;;;; This program is free software; you can redistribute it and/or
-;;;; modify it under the terms of the GNU General Public
-;;;; License as published by the Free Software Foundation; either
-;;;; version 2 of the License, or (at your option) any later version.
-;;;;
-;;;; This program is distributed in the hope that it will be useful,
-;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;;;; General Public License for more details.
-;;;;
-;;;; You should have received a copy of the GNU Library General Public
-;;;; License along with this program; if not, write to the Free
-;;;; Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-;;;;
-;;;;---------------------------------------------------------------------------
-;;;;
-;;;; This file contains the EMACS interface to the Problem Report Management
-;;;; System (GNATS):
-;;;;
-;;;; - The `send-pr' command and the `send-pr-mode' for sending
-;;;; Problem Reports (PRs).
-;;;;
-;;;; For more information about how to send a PR see send-pr(1).
-;;;;
-;;;;---------------------------------------------------------------------------
-;;;;
-;;;; Configuration: the symbol `DEFAULT-RELEASE' can be replaced by
-;;;; site/release specific strings during the configuration/installation
-;;;; process.
-;;;;
-;;;; Install this file in your EMACS library directory.
-;;;;
-;;;;---------------------------------------------------------------------------
-;;;;
-;;;; $FreeBSD$
-
-(provide 'send-pr)
-
-;;;;---------------------------------------------------------------------------
-;;;; Customization: put the following forms into your default.el file
-;;;; (or into your .emacs)
-;;;;---------------------------------------------------------------------------
-
-;(autoload 'send-pr-mode "send-pr"
-; "Major mode for sending problem reports." t)
-
-;(autoload 'send-pr "send-pr"
-; "Command to create and send a problem report." t)
-
-;;;;---------------------------------------------------------------------------
-;;;; End of Customization Section
-;;;;---------------------------------------------------------------------------
-
-(autoload 'server-buffer-done "server")
-(defvar server-buffer-clients nil)
-(defvar mail-self-blind nil)
-(defvar mail-default-reply-to nil)
-
-(defconst send-pr::version "3.113")
-
-(defvar gnats:root "/home/gnats"
- "*The top of the tree containing the GNATS database.")
-
-;;;;---------------------------------------------------------------------------
-;;;; hooks
-;;;;---------------------------------------------------------------------------
-
-(defvar text-mode-hook nil) ; we define it here in case it's not defined
-(defvar send-pr-mode-hook text-mode-hook "Called when send-pr is invoked.")
-
-;;;;---------------------------------------------------------------------------
-;;;; Domains and default values for (some of) the Problem Report fields;
-;;;; constants and definitions.
-;;;;---------------------------------------------------------------------------
-
-(defconst gnats::emacs-19p
- (not (or (and (boundp 'epoch::version) epoch::version)
- (string-lessp emacs-version "19")))
- "Is this emacs v19?")
-
-;;; This has to be here rather than at the bottom of this file with
-;;; the other utility functions because it is used by
-;;; gnats::get-config, which is called when send-pr.el is being
-;;; loaded (see the "defconst" below), before the whole file has been
-;;; loaded.
-
-(defun gnats::find-safe-default-directory (&optional buffer)
-"If the directory referred to by `default-directory' for the current
-buffer (or for optional argument BUFFER) does not exist, set it to the home
-directory of the current user if that exists, or to `/'.
-
-Returns the final value of default-directory in the buffer."
- (let ((homedir (expand-file-name "~/")))
- (save-excursion
- (if buffer (set-buffer buffer))
- (if (not (file-exists-p default-directory))
- (if (file-exists-p homedir)
- (setq default-directory homedir)
- (setq default-directory "/")))
- default-directory)))
-
-;;; These may be changed during configuration/installation or by the individual
-;;; user in his/her .emacs file.
-;;;
-(defun gnats::get-config (var)
- (let ((shell-file-name "/bin/sh")
- (buf (generate-new-buffer " *GNATS config*"))
- ret)
- (save-excursion
- (set-buffer buf)
- (shell-command-on-region
- (point-min) (point-max)
- (concat ". " gnats:root "/gnats-adm/config; echo $" var ) t)
- (goto-char (point-min))
- ; We have to use get-buffer, since shell-command-on-region will wipe
- ; out the buffer if there's no output from the command.
- (if (or (not (get-buffer "*Shell Command Output*"))
- (looking-at "^\\.:\\|/bin/sh:\\|\n"))
- (setq ret nil)
- (setq ret (buffer-substring (point-min) (- (point-max) 1)))))
- (if (and ret (string-equal ret "")) (setq ret nil))
- (kill-buffer buf)
- ret))
-
-;; const because it must match the script's value
-(defconst send-pr:datadir (or (gnats::get-config "DATADIR") "@DATADIR@")
- "*Where the `gnats' subdirectory containing category lists lives.")
-
-(defvar send-pr::sites nil
- "List of GNATS support sites; computed at runtime.")
-(defvar send-pr:default-site
- (or (gnats::get-config "GNATS_SITE") "freefall")
- "Default site to send bugs to.")
-(defvar send-pr:::site send-pr:default-site
- "The site to which a problem report is currently being submitted, or NIL
-if using the default site (buffer local).")
-
-(defvar send-pr:::categories nil
- "Buffer local list of available categories, derived at runtime from
-send-pr:::site and send-pr::category-alist.")
-(defvar send-pr::category-alist nil
- "Alist of GNATS support sites and the categories supported at each; computed
-at runtime.")
-
-;;; Ideally we would get all the following values from a central database
-;;; during runtime instead of having them here in the code.
-;;;
-(defconst send-pr::fields
- (` (("Category" send-pr::set-categories
- (, (or (gnats::get-config "DEFAULT_CATEGORY") nil)) enum)
- ("Class" (("sw-bug") ("doc-bug") ("change-request") ("update") ("maintainer-update"))
- (, (or (gnats::get-config "DEFAULT_CLASS") 0)) enum)
- ("Confidential" (("yes") ("no"))
- (, (or (gnats::get-config "DEFAULT_CONFIDENTIAL") 1)) enum)
- ("Severity" (("non-critical") ("serious") ("critical"))
- (, (or (gnats::get-config "DEFAULT_SEVERITY") 1)) enum)
- ("Priority" (("low") ("medium") ("high"))
- (, (or (gnats::get-config "DEFAULT_PRIORITY") 1)) enum)
- ("Release" nil
- (, (or (gnats::get-config "DEFAULT_RELEASE") "@DEFAULT_RELEASE@"))
- text)
- ("Submitter-Id" nil
- (, (or (gnats::get-config "DEFAULT_SUBMITTER") "unknown")) text)
- ("Synopsis" nil nil text
- (lambda (a b c) (gnats::set-mail-field "Subject" c)))))
- "AList, keyed on the name of the field, of:
-1) The field name.
-2) The list of completions. This can be a list, a function to call, or nil.
-3) The default value.
-4) The type of the field.
-5) A sub-function to call when changed.")
-
-(defvar gnats::fields nil)
-
-(defmacro gnats::push (i l)
- (` (setq (, l) (cons (,@ (list i l))))))
-
-(defun send-pr::set-categories (&optional arg)
- "Get the list of categories for the current site out of
-send-pr::category-alist if there or from send-pr if not. With arg, force
-update."
- ;;
- (let ((entry (assoc send-pr:::site send-pr::category-alist)))
- (or (and entry (null arg))
- (let ((oldpr (getenv "GNATS_ROOT")) cats)
- (send-pr::set-sites arg)
- (setenv "GNATS_ROOT" gnats:root)
- (setq cats (gnats::get-value-from-shell
- "send-pr" "-CL" send-pr:::site))
- (setenv "GNATS_ROOT" oldpr)
- (if entry (setcdr entry cats)
- (setq entry (cons send-pr:::site cats))
- (gnats::push entry send-pr::category-alist))))
- (setq send-pr:::categories (cdr entry))))
-
-(defun send-pr::set-sites (&optional arg)
- "Get the list of sites (by listing the contents of DATADIR/gnats) and assign
-it to send-pr::sites. With arg, force update."
- (or (and (null arg) send-pr::sites)
- (progn
- (setq send-pr::sites nil)
- (mapcar
- (function
- (lambda (file)
- (or (memq t (mapcar (function (lambda (x) (string= x file)))
- '("." ".." "pr-edit" "pr-addr")))
- (not (file-readable-p file))
- (gnats::push (list (file-name-nondirectory file))
- send-pr::sites))))
- (directory-files (format "%s/gnats" send-pr:datadir) t))
- (setq send-pr::sites (reverse send-pr::sites)))))
-
-(defconst send-pr::pr-buffer-name "*send-pr*"
- "Name of the temporary buffer, where the problem report gets composed.")
-
-(defconst send-pr::err-buffer-name "*send-pr-error*"
- "Name of the temporary buffer, where send-pr error messages appear.")
-
-(defvar send-pr:::err-buffer nil
- "The error buffer used by the current PR buffer.")
-
-(defvar send-pr:::spawn-to-send nil
- "Whether or not send-pr-mode should spawn a send-pr process to send the PR.")
-
-(defconst gnats::indent 17 "Indent for formatting the value.")
-
-;;;;---------------------------------------------------------------------------
-;;;; `send-pr' - command for creating and sending of problem reports
-;;;;---------------------------------------------------------------------------
-
-(fset 'send-pr 'send-pr:send-pr)
-(defun send-pr:send-pr (&optional site)
- "Create a buffer and read in the result of `send-pr -P'.
-When finished with editing the problem report use \\[send-pr:submit-pr]
-to send the PR with `send-pr -b -f -'."
- ;;
- (interactive
- (if current-prefix-arg
- (list (completing-read "Site: " (send-pr::set-sites 'recheck) nil t
- send-pr:default-site))))
- (or site (setq site send-pr:default-site))
- (let ((buf (get-buffer send-pr::pr-buffer-name)))
- (if (or (not buf)
- (progn (switch-to-buffer buf)
- (cond ((or (not (buffer-modified-p buf))
- (y-or-n-p "Erase previous problem report? "))
- (erase-buffer) t)
- (t nil))))
- (send-pr::start-up site))))
-
-(defun send-pr::start-up (site)
- (switch-to-buffer (get-buffer-create send-pr::pr-buffer-name))
- (setq default-directory (expand-file-name "~/"))
- (auto-save-mode auto-save-default)
- (let ((oldpr (getenv "GNATS_ROOT"))
- (case-fold-search nil))
- (setenv "GNATS_ROOT" gnats:root)
- (send-pr::insert-template site)
- (setenv "GNATS_ROOT" oldpr)
- (goto-char (point-min))
- (if (looking-at "send-pr:")
- (cond ((looking-at "send-pr: .* does not have a categories list")
- (setq send-pr::sites nil)
- (error "send-pr: the GNATS site %s does not have a categories list" site))
- (t (error (buffer-substring (point-min) (point-max)))))
- (save-excursion
- ;; Clear cruft inserted by bdamaged .cshrcs
- (goto-char 1)
- (re-search-forward "^SEND-PR:")
- (delete-region 1 (match-beginning 0)))))
- (set-buffer-modified-p nil)
- (send-pr:send-pr-mode)
- (setq send-pr:::site site)
- (setq send-pr:::spawn-to-send t)
- (send-pr::set-categories)
- (if (null send-pr:::categories)
- (progn
- (and send-pr:::err-buffer (kill-buffer send-pr:::err-buffer))
- (kill-buffer nil)
- (message "send-pr: no categories found"))
- (or (stringp mail-default-reply-to)
- (setq mail-default-reply-to (getenv "REPLYTO")))
- (and mail-default-reply-to
- (gnats::set-mail-field "Reply-To" mail-default-reply-to))
- (and mail-self-blind
- (gnats::set-mail-field "BCC" (user-login-name)))
- (mapcar 'send-pr::maybe-change-field send-pr::fields)
- (gnats::position-on-field "Description")
- (message (substitute-command-keys
- "To send the problem report use: \\[send-pr:submit-pr]"))))
-
-(defvar send-pr::template-alist nil
- "An alist containing the output of send-pr -P <sitename> for various sites.")
-
-(defun send-pr::insert-template (site)
- (let ((elt (assoc site send-pr::template-alist)))
- (if elt
- (save-excursion (insert (cdr elt)))
- (call-process "send-pr" nil t nil "-P" site)
- (save-excursion
- (setq send-pr::template-alist
- (cons (cons site (buffer-substring (point-min) (point-max)))
- send-pr::template-alist))))))
-
-(fset 'do-send-pr 'send-pr:submit-pr) ;backward compat
-(defun send-pr:submit-pr ()
- "Pipe the contents of the buffer *send-pr* to `send-pr -f -.' unless this
-buffer was loaded with emacsclient, in which case save the buffer and exit."
- ;;
- (interactive)
- (cond
- ((and (boundp 'server-buffer-clients)
- server-buffer-clients)
- (let ((buffer (current-buffer))
- (version-control nil) (buffer-backed-up nil))
- (save-buffer buffer)
- (kill-buffer buffer)
- (server-buffer-done buffer)))
- (send-pr:::spawn-to-send
- (if (or (buffer-modified-p)
- (not send-pr:::sent)
- (y-or-n-p "PR already sent; resend? "))
- (progn
- (or (and send-pr:::err-buffer
- (buffer-name send-pr:::err-buffer))
- (setq send-pr:::err-buffer
- (get-buffer-create send-pr::err-buffer-name)))
- (let ((err-buffer send-pr:::err-buffer) mesg ok)
- (save-excursion (set-buffer err-buffer) (erase-buffer))
- (message "running send-pr...")
- (let ((oldpr (getenv "GNATS_ROOT")))
- (setenv "GNATS_ROOT" gnats:root)
- ;; ensure that a final newline is present:
- (if (not (equal (char-after (1- (point-max))) ?\n))
- (save-excursion (goto-char (point-max))
- (insert ?\n)))
- (call-process-region (point-min) (point-max) "send-pr"
- nil err-buffer nil send-pr:::site
- "-b" "-f" "-")
- (setenv "GNATS_ROOT" oldpr))
- (message "running send-pr...done")
- ;; stupidly we cannot check the return value in EMACS 18.57,
- ;; thus we need this kluge to find out whether send-pr succeeded.
- (if (save-excursion
- (set-buffer err-buffer)
- (goto-char (point-min))
- (setq mesg (buffer-substring (point-min) (- (point-max) 1)))
- (search-forward "problem report sent" nil t))
- (progn (message mesg)
- (kill-buffer err-buffer)
- (delete-auto-save-file-if-necessary)
- (set-buffer-modified-p nil)
- (setq send-pr:::sent t)
- (bury-buffer))
- (pop-to-buffer err-buffer))
- ))))
- (t
- (save-buffer)
- (message "Exit emacs to send the PR."))))
-
-;;;;---------------------------------------------------------------------------
-;;;; send-pr:send-pr-mode mode
-;;;;---------------------------------------------------------------------------
-
-(defvar send-pr-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map "\C-c\C-c" 'send-pr:submit-pr)
- (define-key map "\C-c\C-f" 'gnats:change-field)
- (define-key map "\M-n" 'gnats:next-field)
- (define-key map "\M-p" 'gnats:previous-field)
- (define-key map "\C-\M-f" 'gnats:forward-field)
- (define-key map "\C-\M-b" 'gnats:backward-field)
- map)
- "Keymap for send-pr mode.")
-
-(defconst gnats::keyword "^>\\([-a-zA-Z]+\\):")
-(defconst gnats::before-keyword "[ \t\n\f]*[\n\f]+>\\([-a-zA-Z]+\\):")
-(defconst gnats::after-keyword "^>\\([-a-zA-Z]+\\):[ \t\n\f]+")
-
-(fset 'send-pr-mode 'send-pr:send-pr-mode)
-(defun send-pr:send-pr-mode ()
- "Major mode for submitting problem reports.
-For information about the form see gnats(1) and send-pr(1).
-Special commands: \\{send-pr-mode-map}
-Turning on send-pr-mode calls the value of the variable send-pr-mode-hook,
-if it is not nil."
- (interactive)
- (gnats::patch-exec-path)
- (put 'send-pr:send-pr-mode 'mode-class 'special)
- (kill-all-local-variables)
- (setq major-mode 'send-pr:send-pr-mode)
- (setq mode-name "send-pr")
- (use-local-map send-pr-mode-map)
- (set-syntax-table text-mode-syntax-table)
- (setq local-abbrev-table text-mode-abbrev-table)
- (setq buffer-offer-save t)
- (make-local-variable 'send-pr:::site)
- (make-local-variable 'send-pr:::categories)
- (make-local-variable 'send-pr:::err-buffer)
- (make-local-variable 'send-pr:::spawn-to-send)
- (make-local-variable 'send-pr:::sent)
- (setq send-pr:::sent nil)
- (make-local-variable 'paragraph-separate)
- (setq paragraph-separate (concat (default-value 'paragraph-separate)
- "\\|" gnats::keyword "[ \t\n\f]*$"))
- (make-local-variable 'paragraph-start)
- (setq paragraph-start (concat (default-value 'paragraph-start)
- "\\|" gnats::keyword))
- (run-hooks 'send-pr-mode-hook)
- t)
-
-;;;;---------------------------------------------------------------------------
-;;;; Functions to read and replace field values.
-;;;;---------------------------------------------------------------------------
-
-(defun gnats::position-on-field (field &optional quiet)
- (goto-char (point-min))
- (if (not (re-search-forward (concat "^>" field ":") nil t))
- (if quiet
- nil
- (error "Field `>%s:' not found." field))
- (re-search-forward "[ \t\n\f]*")
- (if (looking-at gnats::keyword)
- (backward-char 1))
- t))
-
-(defun gnats::mail-position-on-field (field)
- (let (end
- (case-fold-search t))
- (goto-char (point-min))
- (re-search-forward "^$")
- (setq end (match-beginning 0))
- (goto-char (point-min))
- (if (not (re-search-forward (concat "^" field ":") end 'go-to-end))
- (insert field ": \n")
- (re-search-forward "[ \t\n\f]*"))
- (skip-chars-backward "\n")
- t))
-
-(defun gnats::field-contents (field &optional elem move)
- (let (pos)
- (unwind-protect
- (save-excursion
- (if (not (gnats::position-on-field field t))
- nil
- (setq pos (point-marker))
- (if (or (looking-at "<.*>$") (eolp))
- t
- (looking-at ".*$") ; to set match-{beginning,end}
- (gnats::nth-word
- (buffer-substring (match-beginning 0) (match-end 0))
- elem))))
- (and move pos (goto-char pos)))))
-
-(defun gnats::functionp (thing)
- (or (and (symbolp thing) (fboundp thing))
- (and (listp thing) (eq (car thing) 'lambda))))
-
-(defun gnats::field-values (field)
- "Return the possible (known) values for field FIELD."
- (let* ((fields (if (eq major-mode 'gnats:gnats-mode) gnats::fields
- send-pr::fields))
- (thing (elt (assoc field fields) 1)))
- (cond ((gnats::functionp thing) (funcall thing))
- ((listp thing) thing)
- (t (error "ACK")))))
-
-(defun gnats::field-default (field)
- "Return the default value for field FIELD."
- (let* ((fields (if (eq major-mode 'gnats:gnats-mode) gnats::fields
- send-pr::fields))
- (thing (elt (assoc field fields) 2)))
- (cond ((stringp thing) thing)
- ((null thing) "")
- ((numberp thing) (car (elt (gnats::field-values field) thing)))
- ((gnats::functionp thing)
- (funcall thing (gnats::field-contents field)))
- ((eq thing t) (gnats::field-contents field))
- (t (error "ACK")))))
-
-(defun gnats::field-type (field)
- "Return the type of field FIELD."
- (let* ((fields (if (eq major-mode 'gnats:gnats-mode) gnats::fields
- send-pr::fields))
- (thing (elt (assoc field fields) 3)))
- thing))
-
-(defun gnats::field-action (field)
- "Return the extra handling function for field FIELD."
- (let* ((fields (if (eq major-mode 'gnats:gnats-mode) gnats::fields
- send-pr::fields))
- (thing (elt (assoc field fields) 4)))
- (cond ((null thing) 'ignore)
- ((gnats::functionp thing) thing)
- (t (error "ACK")))))
-
-;;;;---------------------------------------------------------------------------
-;;;; Point movement functions
-;;;;---------------------------------------------------------------------------
-
-(or (fboundp 'defsubst) (fset 'defsubst 'defun))
-
-(defun send-pr::maybe-change-field (field)
- (setq field (car field))
- (let ((thing (gnats::field-contents field)))
- (and thing (eq t thing)
- (not (eq 'multi-text (gnats::field-type field)))
- (gnats:change-field field))))
-
-(defun gnats:change-field (&optional field default)
- "Change the value of the field containing the cursor. With arg, ask the
-user for the field to change. From a program, the function takes optional
-arguments of the field to change and the default value to use."
- (interactive)
- (or field current-prefix-arg (setq field (gnats::current-field)))
- (or field
- (setq field
- (completing-read "Field: "
- (if (eq major-mode 'gnats:gnats-mode)
- gnats::fields
- send-pr::fields)
- nil t)))
- (gnats::position-on-field field)
- (sit-for 0)
- (let* ((old (gnats::field-contents field))
- new)
- (if (null old)
- (error "ACK")
- (if (or (interactive-p) t)
- (let ((prompt (concat ">" field ": "))
- (domain (gnats::field-values field))
- (type (gnats::field-type field)))
- (or default (setq default (gnats::field-default field)))
- (setq new
- (if (eq type 'enum)
- (completing-read prompt domain nil t
- (if gnats::emacs-19p (cons default 0)
- default))
- (read-string prompt (if gnats::emacs-19p (cons default 1)
- default)))))
- (setq new default))
- (gnats::set-field field new)
- (funcall (gnats::field-action field) field old new)
- new)))
-
-(defun gnats::set-field (field value)
- (save-excursion
- (gnats::position-on-field field)
- (delete-horizontal-space)
- (looking-at ".*$")
- (replace-match
- (concat (make-string (- gnats::indent (length field) 2) ?\40 ) value) t)))
-
-(defun gnats::set-mail-field (field value)
- (save-excursion
- (gnats::mail-position-on-field field)
- (delete-horizontal-space)
- (looking-at ".*$")
- (replace-match (concat " " value) t)))
-
-(defun gnats::before-keyword (&optional where)
- "Returns t if point is in some white space before a keyword.
-If where is nil, then point is not changed; if where is t then point is moved
-to the beginning of the keyword, otherwise it is moved to the beginning
-of the white space it was in."
- ;;
- (if (looking-at gnats::before-keyword)
- (prog1 t
- (cond ((eq where t)
- (re-search-forward "^>") (backward-char))
- ((not (eq where nil))
- (re-search-backward "[^ \t\n\f]") (forward-char))))
- nil))
-
-(defun gnats::after-keyword (&optional where)
- "Returns t if point is in some white space after a keyword.
-If where is nil, then point is not changed; if where is t then point is moved
-to the beginning of the keyword, otherwise it is moved to the end of the white
-space it was in."
- ;;
- (if (gnats::looking-after gnats::after-keyword)
- (prog1 t
- (cond ((eq where t)
- (re-search-backward "^>"))
- ((not (eq where nil))
- (re-search-forward "[^ \t\n\f]") (backward-char))))
- nil))
-
-(defun gnats::in-keyword (&optional where)
- "Returns t if point is within a keyword.
-If where is nil, then point is not changed; if where is t then point is moved
-to the beginning of the keyword."
- ;;
- (let ((old-point (point-marker)))
- (beginning-of-line)
- (cond ((and (looking-at gnats::keyword)
- (< old-point (match-end 0)))
- (prog1 t
- (if (eq where t)
- t
- (goto-char old-point))))
- (t (goto-char old-point)
- nil))))
-
-(defun gnats::forward-bofield ()
- "Moves point to the beginning of a field. Assumes that point is in the
-keyword."
- ;;
- (if (re-search-forward "[ \t\n\f]+[^ \t\n\f]" (point-max) '-)
- (backward-char)
- t))
-
-(defun gnats::backward-eofield ()
- "Moves point to the end of a field. Assumes point is in the keyword."
- ;;
- (if (re-search-backward "[^ \t\n\f][ \t\n\f]+" (point-min) '-)
- (forward-char)
- t))
-
-(defun gnats::forward-eofield ()
- "Moves point to the end of a field. Assumes that point is in the field."
- ;;
- ;; look for the next field
- (if (re-search-forward gnats::keyword (point-max) '-)
- (progn (beginning-of-line) (gnats::backward-eofield))
- (re-search-backward "[^ \t\n\f][ \t\n\f]*" (point-min) '-)
- (forward-char)))
-
-(defun gnats::backward-bofield ()
- "Moves point to the beginning of a field. Assumes that point is in the
-field."
- ;;
- ;;look for previous field
- (if (re-search-backward gnats::keyword (point-min) '-)
- (gnats::forward-bofield)
- t))
-
-
-(defun gnats:forward-field ()
- "Move point forward to the end of the field or to the beginning of the next
-field."
- ;;
- (interactive)
- (if (or (gnats::before-keyword t) (gnats::in-keyword t)
- (gnats::after-keyword t))
- (gnats::forward-bofield)
- (gnats::forward-eofield)))
-
-(defun gnats:backward-field ()
- "Move point backward to the beginning/end of a field."
- ;;
- (interactive)
- (backward-char)
- (if (or (gnats::before-keyword t) (gnats::in-keyword t)
- (gnats::after-keyword t))
- (gnats::backward-eofield)
- (gnats::backward-bofield)))
-
-(defun gnats:next-field ()
- "Move point to the beginning of the next field."
- ;;
- (interactive)
- (if (or (gnats::before-keyword t) (gnats::in-keyword t)
- (gnats::after-keyword t))
- (gnats::forward-bofield)
- (if (re-search-forward gnats::keyword (point-max) '-)
- (gnats::forward-bofield)
- t)))
-
-(defun gnats:previous-field ()
- "Move point to the beginning of the previous field."
- ;;
- (interactive)
- (backward-char)
- (if (or (gnats::after-keyword t) (gnats::in-keyword t)
- (gnats::before-keyword t))
- (progn (re-search-backward gnats::keyword (point-min) '-)
- (gnats::forward-bofield))
- (gnats::backward-bofield)))
-
-(defun gnats:beginning-of-field ()
- "Move point to the beginning of the current field."
- (interactive)
- (cond ((gnats::in-keyword t)
- (gnats::forward-bofield))
- ((gnats::after-keyword 0))
- (t
- (gnats::backward-bofield))))
-
-(defun gnats::current-field ()
- (save-excursion
- (if (cond ((or (gnats::in-keyword t) (gnats::after-keyword t))
- (looking-at gnats::keyword))
- ((re-search-backward gnats::keyword nil t)))
- (buffer-substring (match-beginning 1) (match-end 1))
- nil)))
-
-;;;;---------------------------------------------------------------------------
-;;;; Support functions
-;;;;---------------------------------------------------------------------------
-
-(defun gnats::looking-after (regex)
- "Returns t if point is after regex."
- ;;
- (let* ((old-point (point))
- (start (if (eobp)
- old-point
- (forward-char) (point))))
- (cond ((re-search-backward regex (point-min) t)
- (goto-char old-point)
- (cond ((eq (match-end 0) start)
- t))))))
-
-(defun gnats::nth-word (string &optional elem)
- "Returns the elem-th word of the string.
-If elem is nil, then the first wort is returned, if elem is 0 then
-the whole string is returned."
- ;;
- (if (integerp elem)
- (cond ((eq elem 0) string)
- ((eq elem 1) (gnats::first-word string))
- ((equal string "") "")
- ((>= elem 2)
- (let ((i 0) (value ""))
- (setq string ; strip leading blanks
- (substring string (or (string-match "[^ \t]" string) 0)))
- (while (< i elem)
- (setq value
- (substring string 0
- (string-match "[ \t]*$\\|[ \t]+" string)))
- (setq string
- (substring string (match-end 0)))
- (setq i (+ i 1)))
- value)))
- (gnats::first-word string)))
-
-(defun gnats::first-word (string)
- (setq string
- (substring string (or (string-match "[^ \t]" string) 0)))
- (substring string 0 (string-match "[ \t]*$\\|[ \t]+" string)))
-
-;;;;---------------------------------------------------------------------------
-
-(defun gnats::patch-exec-path ()
- ;;
- "Replaces `//' by `/' in `exec-path'."
- ;;
- ;(make-local-variable 'exec-path)
- (let ((err-buffer (get-buffer-create " *gnats::patch-exec-path*"))
- (ret))
- (setq exec-path (save-excursion (set-buffer err-buffer)
- (prin1 exec-path err-buffer)
- (goto-char (point-min))
- (while (search-forward "//" nil t)
- (replace-match "/" nil t))
- (goto-char (point-min))
- (setq ret (read err-buffer))
- (kill-buffer err-buffer)
- ret
- ))))
-
-(defun gnats::get-value-from-shell (&rest command)
- "Execute shell command to get a list of valid values for `variable'."
- ;;
- (let ((err-buffer (get-buffer-create " *gnats::get-value-from-shell*")))
- (save-excursion
- (set-buffer err-buffer)
- (unwind-protect
- (condition-case var
- (progn
- (apply 'call-process
- (car command) nil err-buffer nil (cdr command))
- (goto-char (point-min))
- (if (looking-at "[-a-z]+: ")
- (error (buffer-substring (point-min) (point-max))))
- (read err-buffer))
- (error nil))
- (kill-buffer err-buffer)))))
-
-(or (fboundp 'setenv)
- (defun setenv (variable &optional value)
- "Set the value of the environment variable named VARIABLE to VALUE.
-VARIABLE should be a string. VALUE is optional; if not provided or is
-`nil', the environment variable VARIABLE will be removed.
-This function works by modifying `process-environment'."
- (interactive "sSet environment variable: \nsSet %s to value: ")
- (if (string-match "=" variable)
- (error "Environment variable name `%s' contains `='" variable)
- (let ((pattern (concat "\\`" (regexp-quote (concat variable "="))))
- (case-fold-search nil)
- (scan process-environment))
- (while scan
- (cond
- ((string-match pattern (car scan))
- (if (eq nil value)
- (setq process-environment (delq (car scan)
- process-environment))
- (setcar scan (concat variable "=" value)))
- (setq scan nil))
- ((null (setq scan (cdr scan)))
- (setq process-environment
- (cons (concat variable "=" value)
- process-environment)))))))))
-
-;;;; end of send-pr.el
OpenPOWER on IntegriCloud