;;; Code:
+(require 'cl-lib)
(require 'subr-x)
(eval-when-compile
(require 'rx))
(one-or-more (not (any " \t\n#"))))
(one-or-more blank)
(group
- (or (and (one-or-more (not (any " \t\n#"))) "/")
+ (or (and (zero-or-more (not (any " \t\n#"))) "/")
(and (zero-or-more (not (any " \t\n#")))
(not (any " \t\n/#"))
(one-or-more blank)
(5 'apt-sources-list-components t t)))
"Faces for parts of sources.list lines.")
-(defun apt-sources-list-insert (uri &rest properties)
- "Insert a new package source at URI, with extra PROPERTIES.
+(cl-defun apt-sources-list-insert
+ (uri &key name (type "deb") options
+ (suite (car apt-sources-list-suites))
+ (components (car apt-sources-list-components)))
+ "Insert a new package source at URI.
When called interactively without a prefix argument, assume
the type is “deb” and no special options.
-When called from Lisp, optional properties include:
+When called from Lisp, optional arguments include:
-‘:name’ - a source name to include in a leading comment
-‘:type’ - “deb” or “deb-src”, defaulting to “deb”
-‘:options’ - an options string, without […] delimiters
-‘:suite’ - defaults to the first of ‘apt-sources-list-suites’
-‘:components’ - defaults to the first of ‘apt-sources-list-components’
+NAME - a source name to include in a leading comment
+TYPE - “deb” or “deb-src”, defaulting to “deb”
+OPTIONS - an options string, without […] delimiters
+SUITE - defaults to the first item of ‘apt-sources-list-suites’
+COMPONENTS - defaults to the first item of ‘apt-sources-list-components’
You should read the official APT documentation for further
explanation of the format."
:options (unless (string-blank-p options) options)
:suite suite :components components)))
- (insert (let ((name (plist-get properties :name)))
- (if name
- (concat (format apt-sources-list-name-format name) "\n")
- ""))
- (or (plist-get properties :type) "deb")
- (let ((options (plist-get properties :options)))
- (if options (format " [%s] " options) " "))
- uri
- " "
- (or (plist-get properties :suite)
- (car apt-sources-list-suites))
- (if (string-suffix-p "/" (or (plist-get properties :suite)
- (car apt-sources-list-suites)))
- ""
- (format " %s" (or (plist-get properties :components)
- (car apt-sources-list-components))))))
+ (when name
+ (insert (format apt-sources-list-name-format name) "\n"))
+ (insert type (if options (format " [%s] " options) " ") uri " "
+ suite (if (string-suffix-p "/" suite) ""
+ (format " %s" components))))
(defun apt-sources-list-forward-source (&optional n)
"Go N source lines forward (backward if N is negative)."
(setq-local comment-start-skip "#+ *")
(font-lock-add-keywords nil apt-sources-list-font-lock-keywords))
+;;;###autoload
(add-to-list
'auto-mode-alist
(cons (rx (or (and (any "./") "sources.list")