From: Philipp Stephani Date: Thu, 14 May 2020 17:26:43 +0000 (+0200) Subject: Fix documentation related to 'command-switch-alist'. X-Git-Tag: emacs-27.1-rc1~128 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=406fb0746c8b54869302d50b2327333769b7604b;p=emacs.git Fix documentation related to 'command-switch-alist'. While there, add a unit test to verify the behavior. * doc/lispref/os.texi (Command-Line Arguments): Fix documentation: the option string in 'command-switch-alist' does include leading hyphens. Also mention that 'command-switch-alist' parsing ignores equals signs in options. * test/lisp/startup-tests.el (startup-tests/command-switch-alist): New unit test. --- diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 92684c8993e..97b8b532fea 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -613,7 +613,7 @@ The elements of the @code{command-switch-alist} look like this: @end example The @sc{car}, @var{option}, is a string, the name of a command-line -option (not including the initial hyphen). The @var{handler-function} +option (including the initial hyphen). The @var{handler-function} is called to handle @var{option}, and receives the option name as its sole argument. @@ -623,6 +623,14 @@ remaining command-line arguments in the variable @code{command-line-args-left} (see below). (The entire list of command-line arguments is in @code{command-line-args}.) +Note that the handling of @code{command-switch-alist} doesn't treat +equals signs in @var{option} specially. That is, if there's an option +like @code{--name=value} on the command line, then only a +@code{command-switch-alist} member whose @code{car} is literally +@code{--name=value} will match this option. If you want to parse such +options, you need to use @code{command-line-functions} instead (see +below). + The command-line arguments are parsed by the @code{command-line-1} function in the @file{startup.el} file. See also @ref{Emacs Invocation, , Command Line Arguments for Emacs Invocation, emacs, The diff --git a/test/lisp/startup-tests.el b/test/lisp/startup-tests.el new file mode 100644 index 00000000000..314ffc93e4a --- /dev/null +++ b/test/lisp/startup-tests.el @@ -0,0 +1,47 @@ +;;; startup-tests.el --- unit tests for startup.el -*- lexical-binding: t; -*- + +;; Copyright (C) 2020 Free Software Foundation, Inc. + +;; Author: Philipp Stephani + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; Unit tests for startup.el. + +;;; Code: + +(ert-deftest startup-tests/command-switch-alist () + (let* ((foo-args ()) (bar-args ()) + (command-switch-alist + (list (cons "--foo" + (lambda (arg) + (ert-info ("Processing argument --foo") + (push arg foo-args) + (should (equal command-line-args-left + '("value" "--bar=value"))) + (pop command-line-args-left)))) + (cons "--bar=value" + (lambda (arg) + (ert-info ("Processing argument --bar") + (push arg bar-args) + (should-not command-line-args-left))))))) + (command-line-1 '("--foo" "value" "--bar=value")) + (should (equal foo-args '("--foo"))) + (should (equal bar-args '("--bar=value"))))) + +;;; startup-tests.el ends here