GNU bug report logs - #63733
28.3; error ("Unknown option ‘--batch’")

Previous Next

Package: emacs;

Reported by: Ulrich Müller <ulm <at> gentoo.org>

Date: Fri, 26 May 2023 07:45:01 UTC

Severity: minor

Found in version 28.3

To reply to this bug, email your comments to 63733 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#63733; Package emacs. (Fri, 26 May 2023 07:45:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ulrich Müller <ulm <at> gentoo.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 26 May 2023 07:45:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ulrich Müller <ulm <at> gentoo.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 28.3; error ("Unknown option ‘--batch’")
Date: Fri, 26 May 2023 09:43:40 +0200
Something is strange with option parsing:

$ emacs -Q -batch -batch --eval '(message "hello, world")'
hello, world
$ emacs -Q --batch --batch --eval '(message "hello, world")'
hello, world
$ emacs -Q -batch --batch --eval '(message "hello, world")'
Debugger entered--Lisp error: (error "Unknown option ‘--batch’")
  signal(error ("Unknown option ‘--batch’"))
  error("Unknown option `%s'" "--batch")
  command-line-1(("--batch" "-Q" "--eval" "(message \"hello, world\")"))
  command-line()
  normal-top-level()

$ emacs -Q --batch -batch --eval '(message "hello, world")'
Debugger entered--Lisp error: (error "Unknown option ‘-batch’")
  signal(error ("Unknown option ‘-batch’"))
  error("Unknown option `%s'" "-batch")
  command-line-1(("-batch" "-Q" "--eval" "(message \"hello, world\")"))
  command-line()
  normal-top-level()


I would expect -batch/--batch to be idempotent in all four combinations
above. (I noticed the problem with a Gentoo package, where we add -batch
to Emacs options, and upstream's Makefile adds another --batch.)


In GNU Emacs 28.3 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.17.8)
 of 2023-05-14 built on localhost
Windowing system distributor 'The X.Org Foundation', version 11.0.12101008
System Description: Gentoo Linux

Configured using:
 'configure --prefix=/usr --build=x86_64-pc-linux-gnu
 --host=x86_64-pc-linux-gnu --mandir=/usr/share/man
 --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
 --localstatedir=/var/lib --datarootdir=/usr/share
 --disable-silent-rules --docdir=/usr/share/doc/emacs-28.3_rc1-r2
 --htmldir=/usr/share/doc/emacs-28.3_rc1-r2/html --libdir=/usr/lib64
 --program-suffix=-emacs-28 --includedir=/usr/include/emacs-28
 --infodir=/usr/share/info/emacs-28 --localstatedir=/var
 --enable-locallisppath=/etc/emacs:/usr/share/emacs/site-lisp
 --without-compress-install --without-hesiod --without-pop
 --with-file-notification=inotify --with-pdumper --enable-acl
 --with-dbus --with-modules --with-gameuser=:gamestat --with-libgmp
 --with-gpm --without-native-compilation --without-json
 --without-kerberos --without-kerberos5 --with-lcms2 --with-xml2
 --without-mailutils --without-selinux --with-gnutls
 --without-libsystemd --with-threads --without-wide-int
 --with-sound=alsa --with-zlib --with-x --without-ns --without-gconf
 --with-gsettings --without-toolkit-scroll-bars --with-gif --with-jpeg
 --with-png --with-rsvg --with-tiff --with-xpm --with-imagemagick
 --with-xft --with-cairo --with-harfbuzz --with-libotf --with-m17n-flt
 --with-x-toolkit=lucid --with-xaw3d --with-dumping=pdumper
 'CFLAGS=-march=native -ggdb -O2 -pipe' 'LDFLAGS=-Wl,-O1
 -Wl,--as-needed''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ
IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY
PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF X11 XAW3D XDBE XIM XPM LUCID
ZLIB

Important settings:
  value of $LC_CTYPE: en_GB.UTF-8
  value of $LANG: POSIX
  locale-coding-system: utf-8-unix

Major mode: LaTeX/P

Minor modes in effect:
  global-edit-server-edit-mode: t
  TeX-PDF-mode: t
  shell-dirtrack-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  auto-fill-function: do-auto-fill
  transient-mark-mode: (only . t)

Load-path shadows:
/usr/share/emacs/site-lisp/cmake-mode hides /usr/share/emacs/site-lisp/cmake/cmake-mode
/usr/share/emacs/site-lisp/desktop-entry-mode hides /usr/share/emacs/site-lisp/desktop-file-utils/desktop-entry-mode
/usr/share/emacs/site-lisp/transient/transient hides /usr/share/emacs/28.3/lisp/transient
~ulm/lib/emacs/type-break hides /usr/share/emacs/28.3/lisp/type-break
/usr/share/emacs/site-lisp/org-mode/org-num hides /usr/share/emacs/28.3/lisp/org/org-num
/usr/share/emacs/site-lisp/org-mode/org-src hides /usr/share/emacs/28.3/lisp/org/org-src
/usr/share/emacs/site-lisp/org-mode/ol hides /usr/share/emacs/28.3/lisp/org/ol
/usr/share/emacs/site-lisp/org-mode/ob-maxima hides /usr/share/emacs/28.3/lisp/org/ob-maxima
/usr/share/emacs/site-lisp/org-mode/ol-eshell hides /usr/share/emacs/28.3/lisp/org/ol-eshell
/usr/share/emacs/site-lisp/org-mode/org-loaddefs hides /usr/share/emacs/28.3/lisp/org/org-loaddefs
/usr/share/emacs/site-lisp/org-mode/org-attach-git hides /usr/share/emacs/28.3/lisp/org/org-attach-git
/usr/share/emacs/site-lisp/org-mode/oc-natbib hides /usr/share/emacs/28.3/lisp/org/oc-natbib
/usr/share/emacs/site-lisp/org-mode/org-archive hides /usr/share/emacs/28.3/lisp/org/org-archive
/usr/share/emacs/site-lisp/org-mode/org-plot hides /usr/share/emacs/28.3/lisp/org/org-plot
/usr/share/emacs/site-lisp/org-mode/oc hides /usr/share/emacs/28.3/lisp/org/oc
/usr/share/emacs/site-lisp/org-mode/ob-org hides /usr/share/emacs/28.3/lisp/org/ob-org
/usr/share/emacs/site-lisp/org-mode/org-habit hides /usr/share/emacs/28.3/lisp/org/org-habit
/usr/share/emacs/site-lisp/org-mode/ob hides /usr/share/emacs/28.3/lisp/org/ob
/usr/share/emacs/site-lisp/org-mode/ox-latex hides /usr/share/emacs/28.3/lisp/org/ox-latex
/usr/share/emacs/site-lisp/org-mode/ob-haskell hides /usr/share/emacs/28.3/lisp/org/ob-haskell
/usr/share/emacs/site-lisp/org-mode/org-crypt hides /usr/share/emacs/28.3/lisp/org/org-crypt
/usr/share/emacs/site-lisp/org-mode/ob-gnuplot hides /usr/share/emacs/28.3/lisp/org/ob-gnuplot
/usr/share/emacs/site-lisp/org-mode/ob-eval hides /usr/share/emacs/28.3/lisp/org/ob-eval
/usr/share/emacs/site-lisp/org-mode/ob-julia hides /usr/share/emacs/28.3/lisp/org/ob-julia
/usr/share/emacs/site-lisp/org-mode/ob-fortran hides /usr/share/emacs/28.3/lisp/org/ob-fortran
/usr/share/emacs/site-lisp/org-mode/ob-latex hides /usr/share/emacs/28.3/lisp/org/ob-latex
/usr/share/emacs/site-lisp/org-mode/ob-scheme hides /usr/share/emacs/28.3/lisp/org/ob-scheme
/usr/share/emacs/site-lisp/org-mode/ox-publish hides /usr/share/emacs/28.3/lisp/org/ox-publish
/usr/share/emacs/site-lisp/org-mode/org-colview hides /usr/share/emacs/28.3/lisp/org/org-colview
/usr/share/emacs/site-lisp/org-mode/ob-css hides /usr/share/emacs/28.3/lisp/org/ob-css
/usr/share/emacs/site-lisp/org-mode/org-ctags hides /usr/share/emacs/28.3/lisp/org/org-ctags
/usr/share/emacs/site-lisp/org-mode/ol-mhe hides /usr/share/emacs/28.3/lisp/org/ol-mhe
/usr/share/emacs/site-lisp/org-mode/ob-octave hides /usr/share/emacs/28.3/lisp/org/ob-octave
/usr/share/emacs/site-lisp/org-mode/org-table hides /usr/share/emacs/28.3/lisp/org/org-table
/usr/share/emacs/site-lisp/org-mode/org-attach hides /usr/share/emacs/28.3/lisp/org/org-attach
/usr/share/emacs/site-lisp/org-mode/ob-core hides /usr/share/emacs/28.3/lisp/org/ob-core
/usr/share/emacs/site-lisp/org-mode/org-inlinetask hides /usr/share/emacs/28.3/lisp/org/org-inlinetask
/usr/share/emacs/site-lisp/org-mode/org-pcomplete hides /usr/share/emacs/28.3/lisp/org/org-pcomplete
/usr/share/emacs/site-lisp/org-mode/org-lint hides /usr/share/emacs/28.3/lisp/org/org-lint
/usr/share/emacs/site-lisp/org-mode/org-timer hides /usr/share/emacs/28.3/lisp/org/org-timer
/usr/share/emacs/site-lisp/org-mode/ob-eshell hides /usr/share/emacs/28.3/lisp/org/ob-eshell
/usr/share/emacs/site-lisp/org-mode/org-id hides /usr/share/emacs/28.3/lisp/org/org-id
/usr/share/emacs/site-lisp/org-mode/org-datetree hides /usr/share/emacs/28.3/lisp/org/org-datetree
/usr/share/emacs/site-lisp/org-mode/ob-sql hides /usr/share/emacs/28.3/lisp/org/ob-sql
/usr/share/emacs/site-lisp/org-mode/org-capture hides /usr/share/emacs/28.3/lisp/org/org-capture
/usr/share/emacs/site-lisp/org-mode/ox-html hides /usr/share/emacs/28.3/lisp/org/ox-html
/usr/share/emacs/site-lisp/org-mode/ob-forth hides /usr/share/emacs/28.3/lisp/org/ob-forth
/usr/share/emacs/site-lisp/org-mode/ob-sass hides /usr/share/emacs/28.3/lisp/org/ob-sass
/usr/share/emacs/site-lisp/org-mode/ob-emacs-lisp hides /usr/share/emacs/28.3/lisp/org/ob-emacs-lisp
/usr/share/emacs/site-lisp/org-mode/ol-w3m hides /usr/share/emacs/28.3/lisp/org/ol-w3m
/usr/share/emacs/site-lisp/org-mode/org-mobile hides /usr/share/emacs/28.3/lisp/org/org-mobile
/usr/share/emacs/site-lisp/org-mode/ox-ascii hides /usr/share/emacs/28.3/lisp/org/ox-ascii
/usr/share/emacs/site-lisp/org-mode/ob-sqlite hides /usr/share/emacs/28.3/lisp/org/ob-sqlite
/usr/share/emacs/site-lisp/org-mode/org-mouse hides /usr/share/emacs/28.3/lisp/org/org-mouse
/usr/share/emacs/site-lisp/org-mode/org-agenda hides /usr/share/emacs/28.3/lisp/org/org-agenda
/usr/share/emacs/site-lisp/org-mode/ob-calc hides /usr/share/emacs/28.3/lisp/org/ob-calc
/usr/share/emacs/site-lisp/org-mode/ob-lilypond hides /usr/share/emacs/28.3/lisp/org/ob-lilypond
/usr/share/emacs/site-lisp/org-mode/ob-comint hides /usr/share/emacs/28.3/lisp/org/ob-comint
/usr/share/emacs/site-lisp/org-mode/ob-ruby hides /usr/share/emacs/28.3/lisp/org/ob-ruby
/usr/share/emacs/site-lisp/org-mode/org-feed hides /usr/share/emacs/28.3/lisp/org/org-feed
/usr/share/emacs/site-lisp/org-mode/ob-dot hides /usr/share/emacs/28.3/lisp/org/ob-dot
/usr/share/emacs/site-lisp/org-mode/ob-tangle hides /usr/share/emacs/28.3/lisp/org/ob-tangle
/usr/share/emacs/site-lisp/org-mode/ob-awk hides /usr/share/emacs/28.3/lisp/org/ob-awk
/usr/share/emacs/site-lisp/org-mode/org-entities hides /usr/share/emacs/28.3/lisp/org/org-entities
/usr/share/emacs/site-lisp/org-mode/ob-plantuml hides /usr/share/emacs/28.3/lisp/org/ob-plantuml
/usr/share/emacs/site-lisp/org-mode/ob-lob hides /usr/share/emacs/28.3/lisp/org/ob-lob
/usr/share/emacs/site-lisp/org-mode/org-element hides /usr/share/emacs/28.3/lisp/org/org-element
/usr/share/emacs/site-lisp/org-mode/ox-icalendar hides /usr/share/emacs/28.3/lisp/org/ox-icalendar
/usr/share/emacs/site-lisp/org-mode/org-duration hides /usr/share/emacs/28.3/lisp/org/org-duration
/usr/share/emacs/site-lisp/org-mode/ob-R hides /usr/share/emacs/28.3/lisp/org/ob-R
/usr/share/emacs/site-lisp/org-mode/org-faces hides /usr/share/emacs/28.3/lisp/org/org-faces
/usr/share/emacs/site-lisp/org-mode/org-tempo hides /usr/share/emacs/28.3/lisp/org/org-tempo
/usr/share/emacs/site-lisp/org-mode/ol-man hides /usr/share/emacs/28.3/lisp/org/ol-man
/usr/share/emacs/site-lisp/org-mode/ob-matlab hides /usr/share/emacs/28.3/lisp/org/ob-matlab
/usr/share/emacs/site-lisp/org-mode/ox-texinfo hides /usr/share/emacs/28.3/lisp/org/ox-texinfo
/usr/share/emacs/site-lisp/org-mode/ox-man hides /usr/share/emacs/28.3/lisp/org/ox-man
/usr/share/emacs/site-lisp/org-mode/org-clock hides /usr/share/emacs/28.3/lisp/org/org-clock
/usr/share/emacs/site-lisp/org-mode/org-refile hides /usr/share/emacs/28.3/lisp/org/org-refile
/usr/share/emacs/site-lisp/org-mode/ox-koma-letter hides /usr/share/emacs/28.3/lisp/org/ox-koma-letter
/usr/share/emacs/site-lisp/org-mode/ob-sed hides /usr/share/emacs/28.3/lisp/org/ob-sed
/usr/share/emacs/site-lisp/org-mode/ob-python hides /usr/share/emacs/28.3/lisp/org/ob-python
/usr/share/emacs/site-lisp/org-mode/oc-biblatex hides /usr/share/emacs/28.3/lisp/org/oc-biblatex
/usr/share/emacs/site-lisp/org-mode/ob-ocaml hides /usr/share/emacs/28.3/lisp/org/ob-ocaml
/usr/share/emacs/site-lisp/org-mode/org-protocol hides /usr/share/emacs/28.3/lisp/org/org-protocol
/usr/share/emacs/site-lisp/org-mode/org hides /usr/share/emacs/28.3/lisp/org/org
/usr/share/emacs/site-lisp/org-mode/oc-basic hides /usr/share/emacs/28.3/lisp/org/oc-basic
/usr/share/emacs/site-lisp/org-mode/ox-odt hides /usr/share/emacs/28.3/lisp/org/ox-odt
/usr/share/emacs/site-lisp/org-mode/ob-screen hides /usr/share/emacs/28.3/lisp/org/ob-screen
/usr/share/emacs/site-lisp/org-mode/ob-lua hides /usr/share/emacs/28.3/lisp/org/ob-lua
/usr/share/emacs/site-lisp/org-mode/org-keys hides /usr/share/emacs/28.3/lisp/org/org-keys
/usr/share/emacs/site-lisp/org-mode/ob-processing hides /usr/share/emacs/28.3/lisp/org/ob-processing
/usr/share/emacs/site-lisp/org-mode/ol-docview hides /usr/share/emacs/28.3/lisp/org/ol-docview
/usr/share/emacs/site-lisp/org-mode/ol-bbdb hides /usr/share/emacs/28.3/lisp/org/ol-bbdb
/usr/share/emacs/site-lisp/org-mode/ob-shell hides /usr/share/emacs/28.3/lisp/org/ob-shell
/usr/share/emacs/site-lisp/org-mode/ol-gnus hides /usr/share/emacs/28.3/lisp/org/ol-gnus
/usr/share/emacs/site-lisp/org-mode/org-compat hides /usr/share/emacs/28.3/lisp/org/org-compat
/usr/share/emacs/site-lisp/org-mode/ob-lisp hides /usr/share/emacs/28.3/lisp/org/ob-lisp
/usr/share/emacs/site-lisp/org-mode/ol-doi hides /usr/share/emacs/28.3/lisp/org/ol-doi
/usr/share/emacs/site-lisp/org-mode/ob-C hides /usr/share/emacs/28.3/lisp/org/ob-C
/usr/share/emacs/site-lisp/org-mode/ox-org hides /usr/share/emacs/28.3/lisp/org/ox-org
/usr/share/emacs/site-lisp/org-mode/ol-eww hides /usr/share/emacs/28.3/lisp/org/ol-eww
/usr/share/emacs/site-lisp/org-mode/ob-ditaa hides /usr/share/emacs/28.3/lisp/org/ob-ditaa
/usr/share/emacs/site-lisp/org-mode/ox-beamer hides /usr/share/emacs/28.3/lisp/org/ox-beamer
/usr/share/emacs/site-lisp/org-mode/org-footnote hides /usr/share/emacs/28.3/lisp/org/org-footnote
/usr/share/emacs/site-lisp/org-mode/oc-csl hides /usr/share/emacs/28.3/lisp/org/oc-csl
/usr/share/emacs/site-lisp/org-mode/ol-bibtex hides /usr/share/emacs/28.3/lisp/org/ol-bibtex
/usr/share/emacs/site-lisp/org-mode/ox-md hides /usr/share/emacs/28.3/lisp/org/ox-md
/usr/share/emacs/site-lisp/org-mode/org-indent hides /usr/share/emacs/28.3/lisp/org/org-indent
/usr/share/emacs/site-lisp/org-mode/ob-makefile hides /usr/share/emacs/28.3/lisp/org/ob-makefile
/usr/share/emacs/site-lisp/org-mode/ox hides /usr/share/emacs/28.3/lisp/org/ox
/usr/share/emacs/site-lisp/org-mode/ob-groovy hides /usr/share/emacs/28.3/lisp/org/ob-groovy
/usr/share/emacs/site-lisp/org-mode/ob-clojure hides /usr/share/emacs/28.3/lisp/org/ob-clojure
/usr/share/emacs/site-lisp/org-mode/ol-rmail hides /usr/share/emacs/28.3/lisp/org/ol-rmail
/usr/share/emacs/site-lisp/org-mode/ol-irc hides /usr/share/emacs/28.3/lisp/org/ol-irc
/usr/share/emacs/site-lisp/org-mode/org-goto hides /usr/share/emacs/28.3/lisp/org/org-goto
/usr/share/emacs/site-lisp/org-mode/ob-js hides /usr/share/emacs/28.3/lisp/org/ob-js
/usr/share/emacs/site-lisp/org-mode/ob-perl hides /usr/share/emacs/28.3/lisp/org/ob-perl
/usr/share/emacs/site-lisp/org-mode/org-version hides /usr/share/emacs/28.3/lisp/org/org-version
/usr/share/emacs/site-lisp/org-mode/org-list hides /usr/share/emacs/28.3/lisp/org/org-list
/usr/share/emacs/site-lisp/org-mode/org-macro hides /usr/share/emacs/28.3/lisp/org/org-macro
/usr/share/emacs/site-lisp/org-mode/org-macs hides /usr/share/emacs/28.3/lisp/org/org-macs
/usr/share/emacs/site-lisp/org-mode/ob-table hides /usr/share/emacs/28.3/lisp/org/ob-table
/usr/share/emacs/site-lisp/org-mode/ol-info hides /usr/share/emacs/28.3/lisp/org/ol-info
/usr/share/emacs/site-lisp/org-mode/ob-ref hides /usr/share/emacs/28.3/lisp/org/ob-ref
/usr/share/emacs/site-lisp/org-mode/ob-java hides /usr/share/emacs/28.3/lisp/org/ob-java
/usr/share/emacs/site-lisp/org-mode/ob-exp hides /usr/share/emacs/28.3/lisp/org/ob-exp
/usr/share/emacs/site-lisp/flim/sasl hides /usr/share/emacs/28.3/lisp/net/sasl
~ulm/lib/emacs/todo-mode hides /usr/share/emacs/28.3/lisp/calendar/todo-mode

Features:
(shadow emacsbug tmm markdown-mode cc-mode cc-fonts cc-guess cc-menus
cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs vc-hg vc-bzr
tramp-cache calc-yank make-mode time-stamp autoconf-mode cmake-mode rst
ispell edit-server rng-xsd xsd-regexp rng-cmpct rng-nxml rng-valid
rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util rng-pttrn
nxml-ns nxml-mode nxml-outln nxml-rap sgml-mode facemenu nxml-util
nxml-enc xmltok python tramp-sh tramp tramp-loaddefs trampver
tramp-integration files-x tramp-compat ls-lisp cus-edit pp cus-start
cus-load gnus-draft solar cal-dst holidays hol-loaddefs cal-move
gnus-fun tar-mode arc-mode archive-mode gnus-icalendar org-capture
org-refile org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-src ob-comint org-pcomplete org-list org-footnote org-faces
org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table ol rx
org-fold org-fold-core org-keys oc org-loaddefs find-func org-version
org-compat org-macs format-spec icalendar diary-lib diary-loaddefs
cal-menu calendar cal-loaddefs info preview tex-buf noutline outline
font-latex latex edmacro kmacro latex-flymake flymake-proc flymake
project warnings tex-ispell tex-style tex texmathp tex-mode compile
latexenc calc-comb shr-color color vc smerge-mode diff calc-undo
calc-misc calccomp calc-aent calc-arith calc-alg calc-ext calc-menu calc
calc-loaddefs rect calc-macs mailalias thingatpt supercite regi
bbdb-message sort gnus-cite flow-fill cl-extra help-mode mm-archive
mail-extr gnus-async gnus-bcklg qp gnus-ml utf-7 nndraft nnmh nndoc
epa-file gnutls network-stream nsm nnfolder bbdb-gnus bbdb-mua bbdb-com
crm nnnil gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-msg
gnus-art mm-uu mml2015 mm-view mml-smime smime dig nntp gnus-cache
gnus-sum shr kinsoku svg dom browse-url url url-proxy url-privacy
url-expand url-methods url-history url-cookie url-domsuf url-util
url-parse url-vars mailcap gnus-group gnus-undo gnus-start gnus-dbus
dbus xml gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo parse-time
iso8601 gnus-spec gnus-int gnus-range gnus-win gnus nnheader wid-edit
mule-util dired-aux disp-table whitespace conf-mode misearch
multi-isearch vc-git diff-mode easy-mmode vc-dispatcher ebuild-mode
skeleton sh-script smie executable quilt yaml-mode shell pcomplete
comint ansi-color ring tango-dark-theme bbdb bbdb-site timezone message
rmc puny dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068
epg-config gnus-util rmail rmail-loaddefs text-property-search time-date
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader smtpmail auth-source eieio eieio-core eieio-loaddefs
password-cache json subr-x map seq byte-opt bytecomp byte-compile cconv
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils fff
jka-compr server mic-paren site-gentoo w3m-load ecb-autoloads mime-setup
mail-mime-setup semi-setup advice semi-def alist path-util apel-ver
product preview-latex vm-autoloads vm-version vm-vars mmm-auto mmm-vars
mmm-utils mmm-compat cl-macs gv cl-seq cl-loaddefs cl-lib bbdb-loaddefs
auto-loads tex-site iso-transl tooltip eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo x-toolkit
x multi-tty make-network-process emacs)

Memory information:
((conses 16 668596 207352)
 (symbols 48 42264 36)
 (strings 32 169335 13441)
 (string-bytes 1 5584176)
 (vectors 16 84122)
 (vector-slots 8 1911782 101724)
 (floats 8 799 364)
 (intervals 56 27042 2468)
 (buffers 992 77))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#63733; Package emacs. (Fri, 26 May 2023 09:10:02 GMT) Full text and rfc822 format available.

Message #8 received at 63733 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Ulrich Müller <ulm <at> gentoo.org>
Cc: 63733 <at> debbugs.gnu.org
Subject: Re: bug#63733: 28.3;
 error ("Unknown option ‘--batch’")
Date: Fri, 26 May 2023 12:10:21 +0300
> From: Ulrich Müller <ulm <at> gentoo.org>
> Date: Fri, 26 May 2023 09:43:40 +0200
> 
> Something is strange with option parsing:
> 
> $ emacs -Q -batch -batch --eval '(message "hello, world")'
> hello, world
> $ emacs -Q --batch --batch --eval '(message "hello, world")'
> hello, world
> $ emacs -Q -batch --batch --eval '(message "hello, world")'
> Debugger entered--Lisp error: (error "Unknown option ‘--batch’")
>   signal(error ("Unknown option ‘--batch’"))
>   error("Unknown option `%s'" "--batch")
>   command-line-1(("--batch" "-Q" "--eval" "(message \"hello, world\")"))
>   command-line()
>   normal-top-level()
> 
> $ emacs -Q --batch -batch --eval '(message "hello, world")'
> Debugger entered--Lisp error: (error "Unknown option ‘-batch’")
>   signal(error ("Unknown option ‘-batch’"))
>   error("Unknown option `%s'" "-batch")
>   command-line-1(("-batch" "-Q" "--eval" "(message \"hello, world\")"))
>   command-line()
>   normal-top-level()
> 
> 
> I would expect -batch/--batch to be idempotent in all four combinations
> above.

They are not idempotent.  Emacs doesn't use getopt, it uses its own
custom code for parsing the command-line options, because our
situation is complex: we only process part of the command-line options
in C, the rest are processed in Lisp.

What happens here is that, when you use identical "-batch" or
"--batch" options several times, the code in sort_args removes the
identical copies, and we are left with a single option to process.
But if you use both "-batch" and "--batch", the extra option is not
removed, and they both appear in the sorted argv[].  Then one of them
is processed by 'main', the other is left for command-line-1, which
doesn't know what to do with it.

I'm not sure we want to support this use case.  It certainly doesn't
make sense to complicate our command-line parsing for its sake.
Perhaps if a simple and safe solution can be found for removing such
"duplicates" in sort_args, we could install such a change, but
definitely not on the emacs-29 release branch.

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#63733; Package emacs. (Fri, 26 May 2023 09:34:02 GMT) Full text and rfc822 format available.

Message #11 received at 63733 <at> debbugs.gnu.org (full text, mbox):

From: Ulrich Mueller <ulm <at> gentoo.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 63733 <at> debbugs.gnu.org
Subject: Re: bug#63733: 28.3; error ("Unknown option ‘--batch’")
Date: Fri, 26 May 2023 11:33:33 +0200
>>>>> On Fri, 26 May 2023, Eli Zaretskii wrote:

>> I would expect -batch/--batch to be idempotent in all four combinations
>> above.

> They are not idempotent.

I figured that. IMHO they should be, because it is surprising when
"-batch -batch" works but "-batch --batch" doesn't.

> Emacs doesn't use getopt, it uses its own custom code for parsing the
> command-line options, because our situation is complex: we only
> process part of the command-line options in C, the rest are processed
> in Lisp.

> What happens here is that, when you use identical "-batch" or
> "--batch" options several times, the code in sort_args removes the
> identical copies, and we are left with a single option to process.
> But if you use both "-batch" and "--batch", the extra option is not
> removed, and they both appear in the sorted argv[].  Then one of them
> is processed by 'main', the other is left for command-line-1, which
> doesn't know what to do with it.

"emacs -quick --quick" or even "emacs -Q -quick --quick" works as
expected, though.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#63733; Package emacs. (Fri, 26 May 2023 10:33:02 GMT) Full text and rfc822 format available.

Message #14 received at 63733 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Ulrich Mueller <ulm <at> gentoo.org>
Cc: 63733 <at> debbugs.gnu.org
Subject: Re: bug#63733: 28.3; error ("Unknown option ‘--batch’")
Date: Fri, 26 May 2023 13:33:00 +0300
> From: Ulrich Mueller <ulm <at> gentoo.org>
> Cc: 63733 <at> debbugs.gnu.org
> Date: Fri, 26 May 2023 11:33:33 +0200
> 
> >>>>> On Fri, 26 May 2023, Eli Zaretskii wrote:
> 
> > What happens here is that, when you use identical "-batch" or
> > "--batch" options several times, the code in sort_args removes the
> > identical copies, and we are left with a single option to process.
> > But if you use both "-batch" and "--batch", the extra option is not
> > removed, and they both appear in the sorted argv[].  Then one of them
> > is processed by 'main', the other is left for command-line-1, which
> > doesn't know what to do with it.
> 
> "emacs -quick --quick" or even "emacs -Q -quick --quick" works as
> expected, though.

Because startup.el knows about it.




Severity set to 'minor' from 'normal' Request was from Stefan Kangas <stefankangas <at> gmail.com> to control <at> debbugs.gnu.org. (Mon, 11 Sep 2023 23:08:02 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 276 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.