aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1994-11-19 20:42:26 +0000
committerRichard M. Stallman1994-11-19 20:42:26 +0000
commit3f53ddd000f8fa5363fc31f30e0ce36dd9ad9adb (patch)
treee5f0e0725beb042a05ce3c3b976c52df66b2f58f
parente491912f6b4d7d80d7d40ab941bb59c0edb88eac (diff)
downloademacs-3f53ddd000f8fa5363fc31f30e0ce36dd9ad9adb.tar.gz
emacs-3f53ddd000f8fa5363fc31f30e0ce36dd9ad9adb.zip
(command-line-1): Handle long options --funcall, --load, --insert, --kill.
(command-line): Don't leave argval set if option not really a long one.
-rw-r--r--lisp/startup.el62
1 files changed, 50 insertions, 12 deletions
diff --git a/lisp/startup.el b/lisp/startup.el
index b2b87c94754..0b34117a00f 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -322,7 +322,8 @@ specified by the LC_ALL, LC_CTYPE and LANG environment variables.")
322 (let ((elt (assoc completion longopts))) 322 (let ((elt (assoc completion longopts)))
323 (or elt 323 (or elt
324 (error "Option `%s' is ambiguous" argi)) 324 (error "Option `%s' is ambiguous" argi))
325 (setq argi (substring (car elt) 1)))))) 325 (setq argi (substring (car elt) 1)))
326 (setq argval nil))))
326 (cond 327 (cond
327 ((or (string-equal argi "-q") 328 ((or (string-equal argi "-q")
328 (string-equal argi "-no-init-file")) 329 (string-equal argi "-no-init-file"))
@@ -547,31 +548,68 @@ Type \\[describe-distribution] for information on getting the latest version."))
547 first-file-buffer 548 first-file-buffer
548 (line 0)) 549 (line 0))
549 (while command-line-args-left 550 (while command-line-args-left
550 (let ((argi (car command-line-args-left)) 551 (let* ((argi (car command-line-args-left))
551 tem) 552 (orig-argi argi)
553 ;; This includes our standard options' long versions
554 ;; and long versions of what's on command-switch-alist.
555 (longopts
556 (append '(("--funcall") ("--load") ("--insert") ("--kill"))
557 (mapcar '(lambda (elt)
558 (list (concat "-" (car elt))))
559 command-switch-alist)))
560 tem argval completion)
552 (setq command-line-args-left (cdr command-line-args-left)) 561 (setq command-line-args-left (cdr command-line-args-left))
562
563 ;; Convert long options to ordinary options
564 ;; and separate out an attached option argument into argval.
565 (if (string-match "^--[^=]*=" argi)
566 (setq argval (substring argi (match-end 0))
567 argi (substring argi 0 (1- (match-end 0)))))
568 (setq completion (try-completion argi longopts))
569 (if (eq completion t)
570 (setq argi (substring argi 1))
571 (if (stringp completion)
572 (let ((elt (assoc completion longopts)))
573 (or elt
574 (error "Option `%s' is ambiguous" argi))
575 (setq argi (substring (car elt) 1)))
576 (setq argval nil argi orig-argi)))
577
578 ;; Execute the option.
553 (cond ((setq tem (assoc argi command-switch-alist)) 579 (cond ((setq tem (assoc argi command-switch-alist))
554 (funcall (cdr tem) argi)) 580 (if argval
581 (let ((command-line-args-left
582 (cons argval command-line-args-left)))
583 (funcall (cdr tem) argi))
584 (funcall (cdr tem) argi)))
555 ((or (string-equal argi "-f") ;what the manual claims 585 ((or (string-equal argi "-f") ;what the manual claims
556 (string-equal argi "-funcall") 586 (string-equal argi "-funcall")
557 (string-equal argi "-e")) ; what the source used to say 587 (string-equal argi "-e")) ; what the source used to say
558 (setq tem (intern (car command-line-args-left))) 588 (if argval
559 (setq command-line-args-left (cdr command-line-args-left)) 589 (setq tem (intern argval))
590 (setq tem (intern (car command-line-args-left)))
591 (setq command-line-args-left (cdr command-line-args-left)))
560 (funcall tem)) 592 (funcall tem))
561 ((or (string-equal argi "-l") 593 ((or (string-equal argi "-l")
562 (string-equal argi "-load")) 594 (string-equal argi "-load"))
563 (let ((file (car command-line-args-left))) 595 (if argval
596 (setq tem argval)
597 (setq tem (car command-line-args-left)
598 command-line-args-left (cdr command-line-args-left)))
599 (let ((file tem))
564 ;; Take file from default dir if it exists there; 600 ;; Take file from default dir if it exists there;
565 ;; otherwise let `load' search for it. 601 ;; otherwise let `load' search for it.
566 (if (file-exists-p (expand-file-name file)) 602 (if (file-exists-p (expand-file-name file))
567 (setq file (expand-file-name file))) 603 (setq file (expand-file-name file)))
568 (load file nil t)) 604 (load file nil t)))
569 (setq command-line-args-left (cdr command-line-args-left)))
570 ((string-equal argi "-insert") 605 ((string-equal argi "-insert")
571 (or (stringp (car command-line-args-left)) 606 (or (stringp (car command-line-args-left))
572 (error "filename omitted from `-insert' option")) 607 (error "File name omitted from `-insert' option"))
573 (insert-file-contents (car command-line-args-left)) 608 (if argval
574 (setq command-line-args-left (cdr command-line-args-left))) 609 (setq tem argval)
610 (setq tem (car command-line-args-left)
611 command-line-args-left (cdr command-line-args-left)))
612 (insert-file-contents tem))
575 ((string-equal argi "-kill") 613 ((string-equal argi "-kill")
576 (kill-emacs t)) 614 (kill-emacs t))
577 ((string-match "^\\+[0-9]+\\'" argi) 615 ((string-match "^\\+[0-9]+\\'" argi)