Mercurial > emacs
changeset 16745:1975baf7f996
(command-line-1): Handle --visit and --find.
Handle -- as an option; treat what follows as a file name.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 26 Dec 1996 20:47:49 +0000 |
parents | b91256aecd79 |
children | 9d2a854bac89 |
files | lisp/startup.el |
diffstat | 1 files changed, 63 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/startup.el Thu Dec 26 20:46:51 1996 +0000 +++ b/lisp/startup.el Thu Dec 26 20:47:49 1996 +0000 @@ -791,49 +791,56 @@ (let ((dir command-line-default-directory) (file-count 0) first-file-buffer - done + tem + just-files ;; t if this follows the magic -- option. + ;; This includes our standard options' long versions + ;; and long versions of what's on command-switch-alist. + (longopts + (append '(("--funcall") ("--load") ("--insert") ("--kill") + ("--directory") ("--eval") ("--find-file") ("--visit")) + (mapcar '(lambda (elt) + (list (concat "-" (car elt)))) + command-switch-alist))) (line 0)) - (while (and command-line-args-left (not done)) + + ;; Add the long X options to longopts. + (setq tem command-line-x-option-alist) + (while tem + (if (string-match "^--" (car (car tem))) + (setq longopts (cons (list (car (car tem))) longopts))) + (setq tem (cdr tem))) + + ;; Loop, processing options. + (while (and command-line-args-left) (let* ((argi (car command-line-args-left)) (orig-argi argi) - ;; This includes our standard options' long versions - ;; and long versions of what's on command-switch-alist. - (longopts - (append '(("--funcall") ("--load") ("--insert") ("--kill") - ("--directory") ("--eval")) - (mapcar '(lambda (elt) - (list (concat "-" (car elt)))) - command-switch-alist))) - tem argval completion + argval completion ;; List of directories specified in -L/--directory, ;; in reverse of the order specified. extra-load-path (initial-load-path load-path)) (setq command-line-args-left (cdr command-line-args-left)) - ;; Add the long X options to longopts. - (setq tem command-line-x-option-alist) - (while tem - (if (string-match "^--" (car (car tem))) - (setq longopts (cons (list (car (car tem))) longopts))) - (setq tem (cdr tem))) - - ;; Convert long options to ordinary options - ;; and separate out an attached option argument into argval. - (if (string-match "^--[^=]*=" argi) - (setq argval (substring argi (match-end 0)) - argi (substring argi 0 (1- (match-end 0))))) - (if (equal argi "--") - (setq completion nil) - (setq completion (try-completion argi longopts))) - (if (eq completion t) - (setq argi (substring argi 1)) - (if (stringp completion) - (let ((elt (assoc completion longopts))) - (or elt - (error "Option `%s' is ambiguous" argi)) - (setq argi (substring (car elt) 1))) - (setq argval nil argi orig-argi))) + ;; Do preliminary decoding of the option. + (if just-files + ;; After --, don't look for options; treat all args as files. + (setq argi "") + ;; Convert long options to ordinary options + ;; and separate out an attached option argument into argval. + (if (string-match "^--[^=]*=" argi) + (setq argval (substring argi (match-end 0)) + argi (substring argi 0 (1- (match-end 0))))) + (if (equal argi "--") + (setq completion nil) + (setq completion (try-completion argi longopts))) + (if (eq completion t) + (setq argi (substring argi 1)) + (if (stringp completion) + (let ((elt (assoc completion longopts))) + (or elt + (error "Option `%s' is ambiguous" argi)) + (setq argi (substring (car elt) 1))) + (setq argval nil argi orig-argi)))) ;; Execute the option. (cond ((setq tem (assoc argi command-switch-alist)) @@ -898,8 +905,22 @@ ;; Ignore X-windows options and their args if not using X. (setq command-line-args-left (nthcdr (nth 1 tem) command-line-args-left))) + ((or (string-equal argi "-find-file") + (string-equal argi "-visit")) + ;; An explicit option to specify visiting a file. + (setq file-count (1+ file-count)) + (let ((file + (expand-file-name + (command-line-normalize-file-name orig-argi) + dir))) + (if (= file-count 1) + (setq first-file-buffer (find-file file)) + (find-file-other-window file))) + (or (zerop line) + (goto-line line)) + (setq line 0)) ((equal argi "--") - (setq done t)) + (setq just-files t)) (t ;; We have almost exhausted our options. See if the ;; user has made any other command-line options available @@ -914,12 +935,13 @@ (if (string-match "\\`-" argi) (error "Unknown option `%s'" argi)) (setq file-count (1+ file-count)) - (setq argi (command-line-normalize-file-name argi)) - (cond ((= file-count 1) - (setq first-file-buffer - (find-file (expand-file-name argi dir)))) - (t - (find-file-other-window (expand-file-name argi dir)))) + (let ((file + (expand-file-name + (command-line-normalize-file-name orig-argi) + dir))) + (if (= file-count 1) + (setq first-file-buffer (find-file file)) + (find-file-other-window file))) (or (zerop line) (goto-line line)) (setq line 0))))))))