diff options
| author | Richard M. Stallman | 1994-11-19 20:42:26 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1994-11-19 20:42:26 +0000 |
| commit | 3f53ddd000f8fa5363fc31f30e0ce36dd9ad9adb (patch) | |
| tree | e5f0e0725beb042a05ce3c3b976c52df66b2f58f | |
| parent | e491912f6b4d7d80d7d40ab941bb59c0edb88eac (diff) | |
| download | emacs-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.el | 62 |
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) |