Function: term-arguments
term-arguments is a byte-compiled function defined in term.el.gz.
Signature
(term-arguments STRING NTH MTH)
Documentation
Return from STRING the NTH to MTH arguments.
NTH and/or MTH can be nil, which means the last argument.
Returned arguments are separated by single spaces.
We assume whitespace separates arguments, except within quotes.
Also, a run of one or more of a single character
in term-delimiter-argument-list is a separate argument.
Argument 0 is the command name.
Source Code
;; Defined in /usr/src/emacs/lisp/term.el.gz
(defun term-arguments (string nth mth)
"Return from STRING the NTH to MTH arguments.
NTH and/or MTH can be nil, which means the last argument.
Returned arguments are separated by single spaces.
We assume whitespace separates arguments, except within quotes.
Also, a run of one or more of a single character
in `term-delimiter-argument-list' is a separate argument.
Argument 0 is the command name."
(let ((argpart "[^ \n\t\"'`]+\\|\\(\"[^\"]*\"\\|'[^']*'\\|`[^`]*`\\)")
(args ()) (pos 0)
(count 0)
beg str quotes)
;; Build a list of all the args until we have as many as we want.
(while (and (or (null mth) (<= count mth))
(string-match argpart string pos))
(if (and beg (= pos (match-beginning 0)))
;; It's contiguous, part of the same arg.
(setq pos (match-end 0)
quotes (or quotes (match-beginning 1)))
;; It's a new separate arg.
(if beg
;; Put the previous arg, if there was one, onto ARGS.
(setq str (substring string beg pos)
args (if quotes (cons str args)
(nconc (term-delim-arg str) args))
count (1+ count)))
(setq quotes (match-beginning 1))
(setq beg (match-beginning 0))
(setq pos (match-end 0))))
(if beg
(setq str (substring string beg pos)
args (if quotes (cons str args)
(nconc (term-delim-arg str) args))
count (1+ count)))
(let ((n (or nth (1- count)))
(m (if mth (1- (- count mth)) 0)))
(mapconcat
#'identity (nthcdr n (nreverse (nthcdr m args))) " "))))