Mercurial > emacs
comparison lisp/startup.el @ 10028:55f7d03ce918
(command-line-1): Handle long options --funcall, --load, --insert, --kill.
(command-line): Don't leave argval set if option not really a long one.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 19 Nov 1994 20:42:26 +0000 |
parents | 7641fc43ca94 |
children | f4c81ad44719 |
comparison
equal
deleted
inserted
replaced
10027:bb1027a75918 | 10028:55f7d03ce918 |
---|---|
320 (setq argi (substring argi 1)) | 320 (setq argi (substring argi 1)) |
321 (if (stringp completion) | 321 (if (stringp completion) |
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")) |
329 (setq init-file-user nil | 330 (setq init-file-user nil |
330 args (cdr args))) | 331 args (cdr args))) |
545 (let ((dir command-line-default-directory) | 546 (let ((dir command-line-default-directory) |
546 (file-count 0) | 547 (file-count 0) |
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) |
578 (setq line (string-to-int argi))) | 616 (setq line (string-to-int argi))) |
579 (t | 617 (t |