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