1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-26 07:33:47 +00:00

* lisp/emacs-lisp/lisp-mnt.el (lm-section-end): Always end before the

following non-comment text.
(lm-header-multiline): Continuation lines need to be indented more than
the first line.
(lm-homepage): New function.
(lm-with-file): Don't be confused if narrowing is in effect.
* doc/lispref/tips.texi (Library Headers): New header keyword `Homepage'.
Make continuation lines syntax more precise.

Fixes: debbugs:13207
This commit is contained in:
Jonas Bernoulli 2012-12-19 14:51:40 -05:00 committed by Stefan Monnier
parent f4d79bd021
commit ee3c0aeca4
4 changed files with 48 additions and 21 deletions

View File

@ -1,3 +1,8 @@
2012-12-19 Jonas Bernoulli <jonas@bernoul.li>
* tips.texi (Library Headers): New header keyword `Homepage'.
Make continuation lines syntax more precise.
2012-12-17 Eli Zaretskii <eliz@gnu.org>
* files.texi (File Attributes, Changing Files): Update to include

View File

@ -942,6 +942,7 @@ explains these conventions, starting with an example:
;; Created: 14 Jul 2010
@group
;; Keywords: languages
;; Homepage: http://example.com/foo
;; This file is not part of GNU Emacs.
@ -980,8 +981,7 @@ the conventional possibilities for @var{header-name}:
@item Author
This line states the name and email address of at least the principal
author of the library. If there are multiple authors, list them on
continuation lines led by @code{;;} and whitespace (this is easier
for tools to parse than having more than one author on one line).
continuation lines led by @code{;;} and a tab or at least two spaces.
We recommend including a contact email address, of the form
@samp{<@dots{}>}. For example:
@ -1028,6 +1028,9 @@ The name of this field is unfortunate, since people often assume it is
the place to write arbitrary keywords that describe their package,
rather than just the relevant Finder keywords.
@item Homepage
This line states the homepage of the library.
@item Package-Version
If @samp{Version} is not suitable for use by the package manager, then
a package can define @samp{Package-Version}; it will be used instead.

View File

@ -1,4 +1,11 @@
2012-12-19 Stefan Monnier <monnier@iro.umontreal.ca>
2012-12-19 Jonas Bernoulli <jonas@bernoul.li>
* emacs-lisp/lisp-mnt.el (lm-section-end): Always end before the
following non-comment text (bug#13207).
(lm-header-multiline): Continuation lines need to be indented more than
the first line.
(lm-homepage): New function.
(lm-with-file): Don't be confused if narrowing is in effect.
* vc/diff-mode.el (diff-post-command-hook): Don't ignore changes at the
very beginning of a hunk (e.g. killing the first line).

View File

@ -208,10 +208,10 @@ If the given section does not exist, return nil."
The HEADER is the section string marking the beginning of the
section. If the given section does not exist, return nil.
The end of the section is defined as the beginning of the next
section of the same level or lower. The function
`lisp-outline-level' is used to compute the level of a section.
If no such section exists, return the end of the buffer."
The section ends before the first non-comment text or the next
section of the same level or lower; whatever comes first. The
function `lisp-outline-level' is used to compute the level of
a section."
(require 'outline) ;; for outline-regexp.
(let ((start (lm-section-start header)))
(when start
@ -229,9 +229,15 @@ If no such section exists, return the end of the buffer."
(beginning-of-line)
(lisp-outline-level))
level)))
(if next-section-found
(line-beginning-position)
(point-max)))))))
(min (if next-section-found
(progn (beginning-of-line 0)
(unless (looking-at " ")
(beginning-of-line 2))
(point))
(point-max))
(progn (goto-char start)
(while (forward-comment 1))
(point))))))))
(defsubst lm-code-start ()
"Return the buffer location of the `Code' start marker."
@ -282,13 +288,8 @@ The returned value is a list of strings, one per line."
(when res
(setq res (list res))
(forward-line 1)
(while (and (or (looking-at (concat lm-header-prefix "[\t ]+"))
(and (not (looking-at
(lm-get-header-re "\\sw\\(\\sw\\|\\s_\\)*")))
(looking-at lm-header-prefix)))
(goto-char (match-end 0))
(looking-at ".+"))
(setq res (cons (match-string-no-properties 0) res))
(while (looking-at "^;+\\(\t\\|[\t\s]\\{2,\\}\\)\\(.+\\)")
(push (match-string-no-properties 2) res)
(forward-line 1)))
(nreverse res))))
@ -306,10 +307,13 @@ If FILE is nil, execute BODY in the current buffer."
(emacs-lisp-mode)
,@body)
(save-excursion
;; Switching major modes is too drastic, so just switch
;; temporarily to the Emacs Lisp mode syntax table.
(with-syntax-table emacs-lisp-mode-syntax-table
,@body))))))
(save-restriction
(widen)
(goto-char (point-min))
;; Switching major modes is too drastic, so just switch
;; temporarily to the Emacs Lisp mode syntax table.
(with-syntax-table emacs-lisp-mode-syntax-table
,@body)))))))
;; Fixme: Probably this should be amalgamated with copyright.el; also
;; we need a check for ranges in copyright years.
@ -489,6 +493,14 @@ absent, return nil."
(when start
(buffer-substring-no-properties start (lm-commentary-end))))))
(defun lm-homepage (&optional file)
"Return the homepage in file FILE, or current buffer if FILE is nil."
(let ((page (lm-with-file file
(lm-header "\\(?:x-\\)?\\(?:homepage\\|url\\)"))))
(if (and page (string-match "^<.+>$" page))
(substring page 1 -1)
page)))
;;; Verification and synopses
(defun lm-insert-at-column (col &rest strings)