1. 15 May, 2019 1 commit
  2. 09 May, 2019 1 commit
  3. 02 May, 2019 3 commits
    • Stefan Monnier's avatar
      * lisp/mail/footnote.el: Add TEXT and POINTERS together · 17a72298
      Stefan Monnier authored
      Rather than adding POINTERS and TEXT separately to footnote--markers-alist,
      add them together, so we don't need footnote--first-text-marker because
      the TEXT part is never nil.
      (footnote--insert-numbered-footnote): Return marker.
      (footnote--insert-text-marker, footnote--insert-pointer-marker):
      Delete functions.
      (footnote--insert-markers): New function to replace them.
      (footnote--insert-footnote): Adjust accordingly.
      Simplify pointless `unless`.
      (footnote--first-text-marker): Remove.  Replace all calls by
      (cadr (car footnote--markers-alist)) or just footnote--markers-alist.
    • Stefan Monnier's avatar
      * lisp/mail/footnote.el: Tweak markers convention · 3fa9c9f7
      Stefan Monnier authored
      Instead of using markers that are sometimes before and sometimes after
      the [...] and using `insert-before-markers` to make sure those that are
      are before stay before, always place them before, and make them
      "move after"so they stay with their [...] without the need for
      (footnote--current-regexp): Add arg to match previous style.
      Include the start/end "tags" in the regexp.  Adjust all callers.
      (footnote--markers-alist): Change position of POINTERS.
      (footnote--refresh-footnotes, footnote--renumber)
      (footnote--make-hole, footnote-delete-footnote)
      (footnote-back-to-message): Adjust accordingly, mostly by using
      `looking-at` instead of `looking-back`.
      (footnote--make-hole): Always return footnote nb to use.
      (footnote-add-footnote): Simplify call accordingly.
      * test/lisp/mail/footnote-tests.el: New file.
    • Stefan Monnier's avatar
      * lisp/mail/footnote.el: Use dolist and hoist regexps out of loops · 0efaae78
      Stefan Monnier authored
      (footnote--refresh-footnotes): Use pcase-dolist; compute regexp once
      outside of the loops.  Use less confusing `literal` arg to `replace-match`
      and specify `fixedcase` since footnote--index-to-string already chose
      the proper case for us.
      (footnote--renumber): Use dolist; compute regexp once
      outside of the loops; shortcircuit when number is unchanged.
      (footnote--text-under-cursor): Rewrite.
      (footnote--make-hole): Use dolist.
      (footnote-add-footnote): CSE.
      (footnote-delete-footnote): Use dolist; compute regexp once
      outside of the loop.
      (footnote-delete-footnote): Don't renumber if there's no footnote left.
      (footnote-renumber-footnotes): Use dolist.
  4. 01 May, 2019 2 commits
    • Stefan Monnier's avatar
      * lisp/mail/footnote.el: Consolidate the two marker-alists · 4299e5ef
      Stefan Monnier authored
      Consolidate footnote-text-marker-alist and footnote-pointer-marker-alist
      into a single footnote--markers-alist.
      (footnote--markers-alist): New var.
      (footnote-text-marker-alist, footnote-pointer-marker-alist): Delete vars.
      (footnote--refresh-footnotes, footnote--text-under-cursor)
      (footnote--calc-fn-alignment-column, footnote-add-footnote)
      (footnote-goto-footnote, footnote-back-to-message): Adjust accordingly.
      (footnote--make-hole, footnote-delete-footnote)
      (footnote-renumber-footnotes): Simplify accordingly.
      (footnote-cycle-style): Indicate style name in echo area.
      (footnote--renumber): Take a single `alist-elem` arg instead of
      `pointer-alist` and `text-alist`.
      (footnote--insert-text-marker, footnote--insert-pointer-marker):
      Add to footnote--markers-alist instead.
      (footnote--first-text-marker): New function.
      (footnote--get-area-point-min): Use it.
      footnote--goto-first): New function.
      (footnote--insert-footnote): Use it.
      (footnote-style-number): Use defvar-local.
    • Stefan Monnier's avatar
      * lisp/mail/footnote.el: Minor simplifications · c9b820dd
      Stefan Monnier authored
      Remove redundant :group args.
      (footnote-mode-hook): Let define-minor-mode define it.
      (footnote--style-p): Delete function.
      (footnote--index-to-string): Inline it instead, and simplify.
      (footnote-cycle-style): Use a pointer into the alist as the "index"
      instead of a number.
      (footnote-set-style): Use footnote-style-alist as the completion table.
      Prefer `assq` over `footnote--assoc-index`.
      (footnote--assoc-index): Delete function.
      (footnote--renumber): Remove first (unused) argument; Adjust all callers.
      (footnote--sort): Use car-less-than-car.
  5. 27 Mar, 2019 2 commits
    • Paul Eggert's avatar
      Use regexp-opt-charset to improve regexp tweaks · 92acab73
      Paul Eggert authored
      * lisp/emacs-lisp/regexp-opt.el (regexp-opt):
      Reword confusing sentence in doc string.
      * lisp/erc/erc.el (erc-lurker-maybe-trim):
      * lisp/mail/footnote.el (footnote-hebrew-numeric-regex):
      Improve by using regexp-opt-charset.
    • Paul Eggert's avatar
      2019-03-26 regex cleanup · 5d6a3144
      Paul Eggert authored
      Problems reported by Mattias Engdegård in:
      * lisp/align.el (align-rules-list):
      * lisp/speedbar.el (speedbar-check-read-only, speedbar-check-vc):
      * lisp/vc/diff-mode.el (diff-add-change-log-entries-other-window):
      * lisp/woman.el (woman-parse-numeric-arg):
      Put "-" at end of character alternatives, since a range was not intended.
      * lisp/erc/erc.el (font-lock):
      * lisp/mail/footnote.el (cl-seq):
      Avoid duplicate character alternatives by using cl-seq API.
      * lisp/mail/footnote.el (footnote--current-regexp):
      * lisp/textmodes/css-mode.el (css--font-lock-keywords):
      Avoid repetition of repetition.
      * lisp/net/webjump.el (webjump-url-encode):
      Add ~ to character alternatives, and rewrite confusing range.
      * lisp/progmodes/verilog-mode.el (verilog-compiler-directives)
      Remove duplicate.
      * lisp/progmodes/verilog-mode.el (verilog-preprocessor-re):
      * lisp/textmodes/css-mode.el (css--font-lock-keywords):
      Don’t escape a char that doesn’t need it.
      * lisp/textmodes/picture.el (picture-tab-chars): In docstring,
      do not say regexp characters will be quoted; merely say in
      another way that the syntax is that of character alternatives.
      (picture-set-tab-stops, picture-tab-search): Don’t attempt
      to regexp-quote picture-tab-chars.
      (picture-tab-search): Quote \ in picture-tab-chars for
      skip-chars-backwards, which treats \ differently than
      regexp character alternatives do.
  6. 01 Jan, 2019 1 commit
  7. 02 Jul, 2018 1 commit
    • John Shahid's avatar
      Optionally add argument description in minor mode DOC (bug#10754) · ee3e4323
      John Shahid authored
      Add a paragraph to minor mode's docstring documenting the mode's ARG
      usage if the supplied docstring doesn't already contain the word "ARG".
      * easy-mmode.el (easy-mmode--arg-docstring): New const.
      (easy-mmode--arg-docstring): New function.
      (define-minor-mode): Use them.
      Remove argument documentation from all minor modes.
  8. 01 Jan, 2018 1 commit
  9. 26 Dec, 2017 4 commits
    • Stefan Monnier's avatar
      Eliminate last uses of 'cl' in lisp/mail/ · da94ea92
      Stefan Monnier authored
      * lisp/mail/binhex.el: Use lexical-binding and avoid cl.
      (binhex-push-char): Remove unused arg 'count'.
      (binhex-decode-region-external): Remove unused var 'status'.
      * lisp/mail/flow-fill.el: Use lexical-binding and avoid cl.
      * lisp/mail/footnote.el: Reduce redundancy.
      (footnote-roman-lower-regexp, footnote-roman-upper-regexp)
      (footnote-roman-upper-list): Auto-generate from footnote-roman-lower-list.
      (footnote-hebrew-numeric-regex): Auto-generate from footnote-hebrew-numeric.
      (footnote--hebrew-numeric): Simplify.
      (footnote-hebrew-symbolic-regex): Generate from footnote-hebrew-symbolic.
      * lisp/mail/hashcash.el: Use lexical-binding and avoid cl.
      (hashcash-verify-payment): Use pcase.
      * lisp/mail/ietf-drums.el: Use lexical-binding and avoid cl.
      (ietf-drums-token-to-list): Remove unused var 'e'.
      * lisp/mail/rfc2231.el: Use lexical-binding and avoid cl.
      * lisp/mail/uudecode.el: Use lexical-binding and avoid cl.
      (uudecode-char-int): Remove unused 'eval-and-compile' wrapper.
      (uudecode-decode-region-external): Remove unused 'status' var.
      (uudecode-string-to-multibyte): Remove.
      (uudecode-decode-region-internal): Use decode-coding-string instead.
      * lisp/mail/yenc.el: Use lexical-binding and avoid cl.
    • Stefan Monnier's avatar
      * lisp/mail/footnote.el: Reduce redundancy in roman&hebrew defs · 23ecd63b
      Stefan Monnier authored
      (footnote-roman-lower-regexp, footnote-roman-upper-regexp)
      (footnote-roman-upper-list): Auto-generate from footnote-roman-lower-list.
      (footnote-hebrew-numeric-regex): Auto-generate from footnote-hebrew-numeric.
      (footnote--hebrew-numeric): Simplify.
      (footnote-hebrew-symbolic-regex): Generate from footnote-hebrew-symbolic.
    • Stefan Monnier's avatar
      * lisp/mail/footnote.el: Use lexical-binding · 336932aa
      Stefan Monnier authored
      (footnote--renumber): Mark arg 'from' as unused.
      (footnote-add-footnote, footnote-renumber-footnotes)
      (footnote-back-to-message): Remove unused argument 'arg'.
    • Boruch Baum's avatar
      * lisp/mail/footnote.el: Replace "Footnote-" prefix with "footnote--" · b7123e2a
      Boruch Baum authored
      (footnote-section-tag): Remove trailing space.
  10. 23 Dec, 2017 2 commits
  11. 22 Dec, 2017 2 commits
    • Boruch Baum's avatar
      Support Hebrew-style footnotes in footnote.el · f6e6f593
      Boruch Baum authored
      * lisp/mail/footnote.el (footnote-hebrew-numeric-regex)
      (footnote-hebrew-symbolic-regex): New defconsts.
      (Footnote-hebrew-numeric, Footnote-hebrew-symbolic): New functions.
      (footnote-style-alist): Add new Hebrew styles.  Doc fix.
      (footnote-style): Add new Hebrew styles.  (Bug#29759)
    • Eli Zaretskii's avatar
      Fix doc string of 'footnote-style-alist' · f7a62c2b
      Eli Zaretskii authored
      * lisp/mail/footnote.el (footnote-style-alist): Remove a reference
      to non-existing files from doc string.  (Bug#29759)
  12. 13 Sep, 2017 1 commit
    • Paul Eggert's avatar
      Prefer HTTPS to FTP and HTTP in documentation · bc511a64
      Paul Eggert authored
      Most of this change is to boilerplate commentary such as license URLs.
      This change was prompted by ftp://ftp.gnu.org's going-away party,
      planned for November.  Change these FTP URLs to https://ftp.gnu.org
      instead.  Make similar changes for URLs to other organizations moving
      away from FTP.  Also, change HTTP to HTTPS for URLs to gnu.org and
      fsf.org when this works, as this will further help defend against
      man-in-the-middle attacks (for this part I omitted the MS-DOS and
      MS-Windows sources and the test tarballs to keep the workload down).
      HTTPS is not fully working to lists.gnu.org so I left those URLs alone
      for now.
  13. 01 Jan, 2017 1 commit
  14. 31 May, 2016 1 commit
  15. 01 Jan, 2016 1 commit
  16. 28 Sep, 2015 1 commit
  17. 21 Apr, 2015 1 commit
    • Stefan Monnier's avatar
      Fix byte-compiler warnings about looking-back. · c9a75a40
      Stefan Monnier authored
      * lisp/vc/log-view.el (log-view-end-of-defun-1):
      * lisp/textmodes/tex-mode.el (latex-forward-sexp-1):
      * lisp/textmodes/reftex-ref.el (reftex-goto-label):
      * lisp/textmodes/bibtex.el (bibtex-insert-kill):
      * lisp/progmodes/sh-script.el (sh--maybe-here-document):
      * lisp/progmodes/ruby-mode.el (ruby-end-of-defun):
      * lisp/progmodes/ada-mode.el (ada-in-numeric-literal-p):
      * lisp/org/org.el (org-insert-heading, org-sort-entries):
      * lisp/org/org-mouse.el (org-mouse-end-headline)
      * lisp/org/org-clock.el (org-clock-cancel):
      * lisp/man.el (Man-default-man-entry):
      * lisp/mail/rmail.el (rmail-get-new-mail, rmail-insert-inbox-text)
      * lisp/mail/footnote.el (Footnote-delete-footnote):
      * lisp/mail/emacsbug.el (report-emacs-bug):
      * lisp/info.el (Info-follow-reference, Info-fontify-node):
      * lisp/info-look.el (info-lookup-guess-custom-symbol):
      * lisp/help-fns.el (help-fns--key-bindings):
      * lisp/files.el (hack-local-variables):
      * lisp/emulation/viper-ex.el (viper-get-ex-token, ex-cmd-complete)
      (viper-get-ex-pat, ex-expand-filsyms, viper-get-ex-file)
      * lisp/emulation/viper-cmd.el (viper-backward-indent):
      * lisp/emacs-lisp/lisp-mode.el (calculate-lisp-indent):
      * lisp/emacs-lisp/elint.el (elint-get-top-forms):
      * lisp/cus-edit.el (custom-face-edit-value-create):
      * lisp/calendar/todo-mode.el (todo-set-item-priority)
      (todo-filter-items-1, todo-convert-legacy-files)
      (todo-prefix-overlays): Add explicit second arg to looking-back.
  18. 10 Apr, 2015 1 commit
  19. 05 Apr, 2015 1 commit
    • Alan Mackenzie's avatar
      Rationalize use of c[ad]+r, expunging cl-c[ad]\{3,4\}r. · 2056db3f
      Alan Mackenzie authored
      Also expunge eudc-c[ad]+r.
      * subr.el (internal--compiler-macro-cXXr): "New" function, copied
      from cl--compiler-macro-cXXr.
      (caar, cadr, cdar, cddr): Change from defsubsts to defuns with
      the above compiler-macro.
      * net/eudc.el (eudc-cadr, eudc-cdar, eudc-caar, eudc-cdaar): Remove.
      * emacs-lisp/cl.el (Top level dolist doing defaliases): Remove
      caaar, etc., from list of new alias functions.
      * emacs-lisp/cl-lib.el (cl-caaar, etc): Rename to caaar, etc.
      (gen-cXXr--rawname, gen-cXXr-all-cl-aliases): New function/macro
      which generate obsolete cl- aliases for caaar, etc.  Invoke them.
      * desktop.el:
      * edmacro.el:
      * emacs-lisp/cl-macs.el:
      * frameset.el:
      * ibuffer.el:
      * mail/footnote.el:
      * net/dbus.el:
      * net/eudc-export.el:
      * net/eudc.el:
      * net/eudcb-ph.el:
      * net/rcirc.el:
      * net/secrets.el:
      * play/5x5.el:
      * play/decipher.el:
      * play/hanoi.el:
      * progmodes/hideif.el:
      * ses.el: Replace cl-caaar, eudc-cadr, etc. with caaar and cadr, etc.
  20. 01 Jan, 2015 2 commits
  21. 01 Jan, 2014 1 commit
  22. 28 Dec, 2013 1 commit
    • Glenn Morris's avatar
      Every defcustom should specify its type · 9c5a5c77
      Glenn Morris authored
      * apropos.el (apropos-match-face):
      * calculator.el (calculator-displayer):
      * dabbrev.el (dabbrev-search-these-buffers-only):
      * face-remap.el (buffer-face-mode-face):
      * simple.el (yank-handled-properties):
      * emacs-lisp/testcover.el (testcover-potentially-1value-functions):
      * mail/footnote.el (footnote-mode-line-string, footnote-prefix):
      * mail/hashcash.el (hashcash-accept-resources, hashcash-program)
      * progmodes/ruby-mode.el (ruby-deep-indent-paren)
      * textmodes/flyspell.el (flyspell-auto-correct-binding):
      * textmodes/rst.el (rst-toc-indent, rst-toc-insert-style)
      (rst-toc-insert-number-separator, rst-toc-insert-max-level):
      * vc/pcvs-defs.el (cvs-minor-mode-prefix):
      * erc/erc-log.el (erc-log-file-coding-system):
      * gnus/gnus-sieve.el (gnus-sieve-select-method):
      * gnus/gravatar.el (gravatar-automatic-caching, gravatar-cache-ttl)
      (gravatar-rating, gravatar-size):
      * gnus/message.el (message-minibuffer-local-map):
      * gnus/sieve-manage.el (sieve-manage-authenticators)
      Specify custom types.
      * mail/hashcash.el (hashcash-program): Rename from hashcash-path.
      Update callers.
  23. 01 Jan, 2013 1 commit
  24. 11 Jul, 2012 1 commit
    • Stefan Monnier's avatar
      More CL cleanups and reduction of use of cl.el. · a464a6c7
      Stefan Monnier authored
      * woman.el, winner.el, vc/vc-rcs.el, vc/vc-hooks.el, vc/vc-hg.el:
      * vc/vc-git.el, vc/vc-dir.el, vc/vc-bzr.el, vc/vc-annotate.el:
      * textmodes/tex-mode.el, textmodes/sgml-mode.el, tar-mode.el:
      * strokes.el, ses.el, server.el, progmodes/js.el, progmodes/gdb-mi.el:
      * progmodes/flymake.el, progmodes/ebrowse.el, progmodes/compile.el:
      * play/tetris.el, play/snake.el, play/pong.el, play/landmark.el:
      * play/hanoi.el, play/decipher.el, play/5x5.el, nxml/nxml-mode.el:
      * net/secrets.el, net/quickurl.el, midnight.el, mail/footnote.el:
      * image-dired.el, ibuffer.el, ibuf-macs.el, ibuf-ext.el, hexl.el:
      * eshell/eshell.el, eshell/esh-io.el, eshell/esh-ext.el:
      * eshell/esh-cmd.el, eshell/em-ls.el, eshell/em-hist.el:
      * eshell/em-cmpl.el, eshell/em-banner.el:
      * url/url.el, url/url-queue.el, url/url-parse.el, url/url-http.el:
      * url/url-future.el, url/url-dav.el, url/url-cookie.el:
      * calendar/parse-time.el, test/eshell.el: Use cl-lib.
      * wid-browse.el, wdired.el, vc/vc.el, vc/vc-mtn.el, vc/vc-cvs.el:
      * vc/vc-arch.el, tree-widget.el, textmodes/texinfo.el:
      * textmodes/refill.el, textmodes/css-mode.el, term/tvi970.el:
      * term/ns-win.el, term.el, shell.el, ps-samp.el:
      * progmodes/perl-mode.el, progmodes/pascal.el, progmodes/gud.el:
      * progmodes/glasses.el, progmodes/etags.el, progmodes/cwarn.el:
      * play/gamegrid.el, play/bubbles.el, novice.el, notifications.el:
      * net/zeroconf.el, net/xesam.el, net/snmp-mode.el, net/mairix.el:
      * net/ldap.el, net/eudc.el, net/browse-url.el, man.el:
      * mail/mailheader.el, mail/feedmail.el:
      * url/url-util.el, url/url-privacy.el, url/url-nfs.el, url/url-misc.el:
      * url/url-methods.el, url/url-gw.el, url/url-file.el, url/url-expand.el:
      Dont use CL.
      * ibuf-ext.el (ibuffer-mark-old-buffers): Use float-time.
      * eshell/esh-opt.el (eshell-eval-using-options): Quote code with
      `lambda' rather than with `quote'.
      (eshell-do-opt): Adjust accordingly.
      (eshell-process-option): Simplify.
      * eshell/esh-var.el:
      * eshell/em-script.el: Require `esh-opt' for eshell-eval-using-options.
      * emacs-pcase.el (pcase--dontcare-upats, pcase--let*)
      (pcase--expand, pcase--u1): Rename pcase's internal `dontcare' pattern
      to `pcase--dontcare'.
      * emacs-cl.el (labels): Mark obsolete.
      (cl--letf, letf): Move to cl-lib.
      (cl--letf*, letf*): Remove.
      * emacs-cl-lib.el (cl-nth-value): Use defalias.
      * emacs-cl-macs.el (cl-dolist, cl-dotimes): Add indent rule.
      (cl-progv): Rewrite.
      (cl--letf, cl-letf): Move from cl.el.
      (cl-letf*): New macro.
      * emacs-cl-extra.el (cl--progv-before, cl--progv-after): Remove.
  25. 04 May, 2012 1 commit
    • Chong Yidong's avatar
      Convert more defvars to defcustoms. · 78f3273a
      Chong Yidong authored
      * dos-w32.el (file-name-buffer-file-type-alist)
      * ffap.el (ffap-menu-regexp):
      * follow.el (follow-debug):
      * forms.el (forms--debug):
      * iswitchb.el (iswitchb-all-frames):
      * ido.el (ido-all-frames):
      * mail/feedmail.el (feedmail-mail-send-hook)
      * mail/footnote.el (footnote-signature-separator):
      * mail/mailabbrev.el (mail-alias-separator-string)
      * mail/rmail.el (rmail-speedbar-match-folder-regexp):
      * progmodes/idlwave.el (idlwave-libinfo-file)
      (idlwave-library-routines): Convert defvars to defcustoms.
      * mail/rmail.el (rmail-decode-mime-charset):
      * progmodes/idlw-shell.el (idlwave-shell-print-expression-function)
      * facemenu.el (facemenu-unlisted-faces): Delete obsolete vars.
      * doc/lispref/os.texi (Timers): Use defopt for timer-max-repeats.
  26. 09 Apr, 2012 1 commit
  27. 11 Jan, 2012 1 commit
  28. 05 Jan, 2012 1 commit
  29. 20 Nov, 2011 1 commit
  30. 20 Oct, 2011 1 commit
    • Chong Yidong's avatar
      Fix more minor mode docstrings. · ac6c8639
      Chong Yidong authored
      * lisp/emulation/cua-base.el (cua-mode):
      * lisp/mail/footnote.el (footnote-mode):
      * lisp/mail/mailabbrev.el (mail-abbrevs-mode):
      * lisp/net/xesam.el (xesam-minor-mode):
      * lisp/progmodes/bug-reference.el (bug-reference-mode):
      * lisp/progmodes/cap-words.el (capitalized-words-mode):
      * lisp/progmodes/compile.el (compilation-minor-mode)
      * lisp/progmodes/gud.el (gud-tooltip-mode):
      * lisp/progmodes/hideif.el (hide-ifdef-mode):
      * lisp/progmodes/idlw-shell.el (idlwave-shell-electric-debug-mode):
      * lisp/progmodes/subword.el (subword-mode):
      * lisp/progmodes/vhdl-mode.el (vhdl-electric-mode, vhdl-stutter-mode):
      * lisp/progmodes/which-func.el (which-function-mode):
      * lisp/term/tvi970.el (tvi970-set-keypad-mode):
      * lisp/term/vt100.el (vt100-wide-mode):
      * lisp/textmodes/flyspell.el (flyspell-mode):
      * lisp/textmodes/ispell.el (ispell-minor-mode):
      * lisp/textmodes/nroff-mode.el (nroff-electric-mode):
      * lisp/textmodes/paragraphs.el (use-hard-newlines):
      * lisp/textmodes/refill.el (refill-mode):
      * lisp/textmodes/reftex.el (reftex-mode):
      * lisp/textmodes/rst.el (rst-minor-mode):
      * lisp/textmodes/sgml-mode.el (html-autoview-mode)
      * lisp/textmodes/tex-mode.el (latex-electric-env-pair-mode):
      * lisp/vc/diff-mode.el (diff-auto-refine-mode, diff-minor-mode):
      * lisp/emulation/crisp.el (crisp-mode):
      * lisp/emacs-lisp/eldoc.el (eldoc-mode):
      * lisp/emacs-lisp/checkdoc.el (checkdoc-minor-mode): Doc fixes for new
      minor mode behavior.
      * lisp/erc/erc-fill.el (erc-fill-mode):
      * lisp/erc/erc-track.el (erc-track-minor-mode): Doc fix.
      * lisp/erc/erc.el (define-erc-module): Fix autogenerated docstring to
      reflect Emacs 24 minor mode changes.
      * lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Doc fix (in Emacs 24,
      calling a minor mode from Lisp with nil arg enables it, so we have to
      make the working a bit ambiguous here).