commit 9f771f6440a61433d34f14aee4046cf2fa6ba391 (HEAD, refs/remotes/origin/master) Author: Paul Eggert Date: Thu Mar 16 23:50:37 2017 -0700 Emacs 'movemail' is now a configure-time option The new configure option --with-mailutils lets the builder say that Emacs should assume that GNU Mailutils is installed, instead of continuing to build and install its own limited and insecure substitute for 'movemail'. * INSTALL, etc/NEWS, etc/PROBLEMS: Mention --with-mailutils. * configure.ac: Add --with-mailutils option. (with_mailutils): New variable. Do not bother configuring 'movemail' when not building it. Warn about issues relating to --with-mailutils. * doc/emacs/rmail.texi (Movemail): Mention --with-mailutils. (Movemail, Remote Mailboxes): Document port numbers in POP and IMAP URLs. * lib-src/Makefile.in (with_mailutils): New macro. (UTILITIES): Use it. diff --git a/INSTALL b/INSTALL index 10b1756003..a99f107804 100644 --- a/INSTALL +++ b/INSTALL @@ -259,12 +259,23 @@ inconvenient for Emacs when running as daemon or running via a remote ssh connection. In order to completely prevent the use of D-Bus, configure Emacs with the options '--without-dbus --without-gconf --without-gsettings'. +To read email via a network protocol like IMAP or POP, you can +configure Emacs with the option '--with-mailutils', so that it always +uses the GNU Mailutils 'movemail' program to retrieve mail. Otherwise +the Emacs build procedure builds and installs an auxiliary 'movemail' +program, a limited and insecure substitute that Emacs can use when +Mailutils is not installed; when this happens, there are several +configure options such as --without-pop that provide fine-grained +control over Emacs 'movemail' construction. + The Emacs mail reader RMAIL is configured to be able to read mail from a POP3 server by default. Versions of the POP protocol older than -POP3 are not supported. For Kerberos-authenticated POP add -'--with-kerberos', for Hesiod support add '--with-hesiod'. While POP3 -is always enabled, whether Emacs actually uses POP is controlled by -individual users--see the Rmail chapter of the Emacs manual. +POP3 are not supported. While POP3 support is typically enabled, +whether Emacs actually uses POP3 is controlled by individual users; +see the Rmail chapter of the Emacs manual. Unless you configure +--with-mailutils, it is a good idea to configure --without-pop so that +users are less likely to inadvertently read email via insecure +channels. For image support you may have to download, build, and install the appropriate image support libraries for image types other than XBM and @@ -538,7 +549,8 @@ information on this. Emacs info files. 8) If your system uses lock files to interlock access to mailer inbox files, -then you might need to make the movemail program setuid or setgid +and if you did not configure --with-mailutils, then you might need to +make the Emacs-specific 'movemail' program setuid or setgid in order to enable it to write the lock files. We believe this is safe. 9) You are done! You can remove executables and object files from diff --git a/configure.ac b/configure.ac index 4d9ba9636d..47d0e5cd19 100644 --- a/configure.ac +++ b/configure.ac @@ -240,6 +240,18 @@ AC_DEFUN([OPTION_DEFAULT_ON], [dnl m4_bpatsubst([with_$1], [[^0-9a-z]], [_])=$with_features])dnl ])dnl +# FIXME: The default options '--without-mailutils --with-pop' result +# in a movemail implementation that supports only unencrypted POP3 +# connections. Encrypted connections should be the default. + +OPTION_DEFAULT_OFF([mailutils], + [rely on GNU Mailutils being installed; this makes the options + --without-pop through --with-mailhost irrelevant)]) +if test "$with_mailutils" = no; then + with_mailutils= +fi +AC_SUBST([with_mailutils]) + OPTION_DEFAULT_ON([pop],[don't support POP mail retrieval with movemail]) if test "$with_pop" = yes; then AC_DEFINE(MAIL_USE_POP) @@ -3789,87 +3801,91 @@ fi AC_SUBST(LIBXML2_LIBS) AC_SUBST(LIBXML2_CFLAGS) -# Check for mail-locking functions in a "mail" library. Probably this should -# have the same check as for liblockfile below. -AC_CHECK_LIB(mail, maillock, have_mail=yes, have_mail=no) -if test $have_mail = yes; then - LIBS_MAIL=-lmail - AC_DEFINE(HAVE_LIBMAIL, 1, [Define to 1 if you have the 'mail' library (-lmail).]) - - OLD_LIBS=$LIBS - LIBS="$LIBS_MAIL $LIBS" - AC_CHECK_FUNCS(touchlock) - LIBS=$OLD_LIBS -else - LIBS_MAIL= -fi -dnl Debian, at least: -AC_CHECK_LIB(lockfile, maillock, have_lockfile=yes, have_lockfile=no) -if test $have_lockfile = yes; then - LIBS_MAIL=-llockfile - AC_DEFINE(HAVE_LIBLOCKFILE, 1, [Define to 1 if you have the 'lockfile' library (-llockfile).]) -else -# If we have the shared liblockfile, assume we must use it for mail -# locking (e.g. Debian). If we couldn't link against liblockfile -# (no liblockfile.a installed), ensure that we don't need to. - dnl This works for files generally, not just executables. - dnl Should we look elsewhere for it? Maybe examine /etc/ld.so.conf? - AC_CHECK_PROG(liblockfile, liblockfile.so, yes, no, - /usr/lib:/lib:/usr/local/lib:$LD_LIBRARY_PATH) - if test $ac_cv_prog_liblockfile = yes; then - AC_MSG_ERROR([Shared liblockfile found but can't link against it. +BLESSMAIL_TARGET= +LIBS_MAIL= +if test ! "$with_mailutils"; then + # Check for mail-locking functions in a "mail" library. Probably this should + # have the same check as for liblockfile below. + AC_CHECK_LIB([mail], [maillock], [have_mail=yes], [have_mail=no]) + if test $have_mail = yes; then + LIBS_MAIL=-lmail + AC_DEFINE([HAVE_LIBMAIL], [1], + [Define to 1 if you have the 'mail' library (-lmail).]) + + OLD_LIBS=$LIBS + LIBS="$LIBS_MAIL $LIBS" + AC_CHECK_FUNCS([touchlock]) + LIBS=$OLD_LIBS + fi + dnl Debian, at least: + AC_CHECK_LIB([lockfile], [maillock], [have_lockfile=yes], [have_lockfile=no]) + if test $have_lockfile = yes; then + LIBS_MAIL=-llockfile + AC_DEFINE([HAVE_LIBLOCKFILE], [1], + [Define to 1 if you have the 'lockfile' library (-llockfile).]) + else + # If we have the shared liblockfile, assume we must use it for mail + # locking (e.g. Debian). If we couldn't link against liblockfile + # (no liblockfile.a installed), ensure that we don't need to. + dnl This works for files generally, not just executables. + dnl Should we look elsewhere for it? Maybe examine /etc/ld.so.conf? + AC_CHECK_PROG([liblockfile], [liblockfile.so], [yes], [no], + [/usr/lib:/lib:/usr/local/lib:$LD_LIBRARY_PATH]) + if test "$ac_cv_prog_liblockfile" = yes; then + AC_MSG_ERROR([Shared liblockfile found but can't link against it. This probably means that movemail could lose mail. There may be a 'development' package to install containing liblockfile.]) + fi fi -fi -AC_CHECK_HEADERS_ONCE(maillock.h) -AC_SUBST(LIBS_MAIL) + AC_CHECK_HEADERS([maillock.h]) -## Define MAIL_USE_FLOCK (or LOCKF) if the mailer uses flock (or lockf) to -## interlock access to the mail spool. The alternative is a lock file named -## /usr/spool/mail/$USER.lock. -mail_lock=no -case "$opsys" in - aix4-2) mail_lock="lockf" ;; - - gnu|freebsd|dragonfly|netbsd|openbsd|darwin) mail_lock="flock" ;; - - ## On GNU/Linux systems, both methods are used by various mail programs. - ## I assume most people are using newer mailers that have heard of flock. - ## Change this if you need to. - ## Debian contains a patch which says: "On Debian/GNU/Linux systems, - ## configure gets the right answers, and that means *NOT* using flock. - ## Using flock is guaranteed to be the wrong thing. See Debian Policy - ## for details." and then uses '#ifdef DEBIAN'. Unfortunately the - ## Debian maintainer hasn't provided a clean fix for Emacs. - ## movemail.c will use 'maillock' when MAILDIR, HAVE_LIBMAIL and - ## HAVE_MAILLOCK_H are defined, so the following appears to be the - ## correct logic. -- fx - ## We must check for HAVE_LIBLOCKFILE too, as movemail does. - ## liblockfile is a Free Software replacement for libmail, used on - ## Debian systems and elsewhere. -rfr. - gnu-*) - mail_lock="flock" - if test $have_mail = yes || test $have_lockfile = yes; then - test $ac_cv_header_maillock_h = yes && mail_lock=no - fi - ;; + ## Define MAIL_USE_FLOCK (or LOCKF) if the mailer uses flock (or lockf) to + ## interlock access to the mail spool. The alternative is a lock file named + ## /usr/spool/mail/$USER.lock. + mail_lock=no + case $opsys in + aix4-2) mail_lock="lockf" ;; + + gnu|freebsd|dragonfly|netbsd|openbsd|darwin) mail_lock="flock" ;; + + ## On GNU/Linux systems, both methods are used by various mail programs. + ## I assume most people are using newer mailers that have heard of flock. + ## Change this if you need to. + ## Debian contains a patch which says: "On Debian/GNU/Linux systems, + ## configure gets the right answers, and that means *NOT* using flock. + ## Using flock is guaranteed to be the wrong thing. See Debian Policy + ## for details." and then uses '#ifdef DEBIAN'. Unfortunately the + ## Debian maintainer hasn't provided a clean fix for Emacs. + ## movemail.c will use 'maillock' when MAILDIR, HAVE_LIBMAIL and + ## HAVE_MAILLOCK_H are defined, so the following appears to be the + ## correct logic. -- fx + ## We must check for HAVE_LIBLOCKFILE too, as movemail does. + ## liblockfile is a Free Software replacement for libmail, used on + ## Debian systems and elsewhere. -rfr. + gnu-*) + mail_lock="flock" + if test $have_mail = yes || test $have_lockfile = yes; then + test $ac_cv_header_maillock_h = yes && mail_lock=no + fi ;; - mingw32) - mail_lock="none-needed" ;; -esac + mingw32) + mail_lock="none-needed" ;; + esac -BLESSMAIL_TARGET= -case "$mail_lock" in - flock) AC_DEFINE(MAIL_USE_FLOCK, 1, [Define if the mailer uses flock to interlock the mail spool.]) ;; + case $mail_lock in + flock) AC_DEFINE([MAIL_USE_FLOCK], [1], + [Define if the mailer uses flock to interlock the mail spool.]);; - lockf) AC_DEFINE(MAIL_USE_LOCKF, 1, [Define if the mailer uses lockf to interlock the mail spool.]) ;; + lockf) AC_DEFINE([MAIL_USE_LOCKF], [1], + [Define if the mailer uses lockf to interlock the mail spool.]);; - none-needed) ;; + none-needed) ;; - *) BLESSMAIL_TARGET="need-blessmail" ;; -esac -AC_SUBST(BLESSMAIL_TARGET) + *) BLESSMAIL_TARGET="need-blessmail" ;; + esac +fi +AC_SUBST([BLESSMAIL_TARGET]) +AC_SUBST([LIBS_MAIL]) OLD_LIBS=$LIBS LIBS="$LIB_PTHREAD $LIB_MATH $LIBS" @@ -5469,4 +5485,21 @@ AC_MSG_ERROR(['etc/refcards/emacsver.tex' could not be made.]) AC_OUTPUT +if test ! "$with_mailutils"; then + emacs_use_mailutils="use '$0 --with-mailutils'" + case `(movemail --version) 2>/dev/null` in + *Mailutils*) ;; + *) emacs_use_mailutils="install GNU Mailutils + and $emacs_use_mailutils";; + esac + if test "$with_pop" = yes; then + AC_MSG_WARN([This configuration installs a 'movemail' program +that retrieves POP3 email via only insecure channels. +To fix this you can $emacs_use_mailutils.]) + else + AC_MSG_NOTICE([This configuration installs a 'movemail' program that cannot +retrieve POP3 email. You might want to $emacs_use_mailutils.]) + fi +fi + test "$MAKE" = make || AC_MSG_NOTICE([Now you can run '$MAKE'.]) diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi index d46398281f..b64ec223be 100644 --- a/doc/emacs/rmail.texi +++ b/doc/emacs/rmail.texi @@ -1380,15 +1380,17 @@ which applies the code when displaying the text. your Rmail file (@pxref{Rmail Inbox}). When loaded for the first time, Rmail attempts to locate the @code{movemail} program and determine its version. There are two versions of the @code{movemail} program: the -native one, shipped with GNU Emacs (the Emacs version) and the one -included in GNU mailutils (the mailutils version, -@pxref{movemail,,,mailutils,GNU mailutils}). They support the same +GNU Mailutils version (@pxref{movemail,,,mailutils,GNU mailutils}), +and an Emacs-specific version that is built and installed unless Emacs +was configured using the @option{--with-mailutils} option. +The two @command{mailtool} versions support the same command line syntax and the same basic subset of options. However, the Mailutils version offers additional features. - The Emacs version of @code{movemail} is able to retrieve mail from -the usual Unix mailbox formats and from remote mailboxes using the -POP3 protocol. + The Emacs version of @command{movemail} can retrieve mail from the +usual Unix mailbox formats. Although it can also use the POP3 +protocol, this is not recommended because it does not support POP3 via +encrypted TLS channels. The Mailutils version is able to handle a wide set of mailbox formats, such as plain Unix mailboxes, @code{maildir} and @code{MH} @@ -1401,7 +1403,7 @@ in @ref{URL,,,mailutils,Mailbox URL Formats}. In short, a @acronym{URL} is: @smallexample -@var{proto}://[@var{user}[:@var{password}]@@]@var{host-or-file-name} +@var{proto}://[@var{user}[:@var{password}]@@]@var{host-or-file-name}[:@var{port}] @end smallexample @noindent @@ -1422,6 +1424,9 @@ User password to access the remote mailbox. @item host-or-file-name Hostname of the remote server for remote mailboxes or file name of a local mailbox. + +@item port +Optional port number, if not the default for that protocal. @end table @noindent @@ -1429,19 +1434,20 @@ local mailbox. @table @code @item mbox -Usual Unix mailbox format. In this case, neither @var{user} nor -@var{pass} are used, and @var{host-or-file-name} denotes the file name -of the mailbox file, e.g., @code{mbox://var/spool/mail/smith}. +Usual Unix mailbox format. In this case, @var{user}, @var{pass} and +@var{port} are not used, and @var{host-or-file-name} denotes the file +name of the mailbox file, e.g., @code{mbox://var/spool/mail/smith}. @item mh -A local mailbox in the @acronym{MH} format. @var{user} and -@var{pass} are not used. @var{host-or-file-name} denotes the name of -@acronym{MH} folder, e.g., @code{mh://Mail/inbox}. +A local mailbox in the @acronym{MH} format. @var{user}, @var{pass} +and @var{port} are not used. @var{host-or-file-name} denotes the name +of @acronym{MH} folder, e.g., @code{mh://Mail/inbox}. @item maildir -A local mailbox in the @acronym{maildir} format. @var{user} and -@var{pass} are not used, and @var{host-or-file-name} denotes the name of -@code{maildir} mailbox, e.g., @code{maildir://mail/inbox}. +A local mailbox in the @acronym{maildir} format. @var{user}, +@var{pass} and @var{port} are not used, and @var{host-or-file-name} +denotes the name of @code{maildir} mailbox, e.g., +@code{maildir://mail/inbox}. @item file Any local mailbox format. Its actual format is detected automatically @@ -1451,15 +1457,15 @@ by @code{movemail}. A remote mailbox to be accessed via POP3 protocol. @var{user} specifies the remote user name to use, @var{pass} may be used to specify the user password, @var{host-or-file-name} is the name or IP -address of the remote mail server to connect to; e.g., -@code{pop://smith:guessme@@remote.server.net}. +address of the remote mail server to connect to, and @var{port} is the +port number; e.g., @code{pop://smith:guessme@@remote.server.net:995}. @item imap A remote mailbox to be accessed via IMAP4 protocol. @var{user} specifies the remote user name to use, @var{pass} may be used to specify the user password, @var{host-or-file-name} is the name or IP -address of the remote mail server to connect to; -e.g., @code{imap://smith:guessme@@remote.server.net}. +address of the remote mail server to connect to, and @var{port} is the +port number; e.g., @code{imap://smith:guessme@@remote.server.net:993}. @end table Alternatively, you can specify the file name of the mailbox to use. @@ -1483,44 +1489,40 @@ listed in @code{rmail-movemail-search-path}, then in @code{exec-path} @pindex movemail Some sites use a method called POP for accessing users' inbox data -instead of storing the data in inbox files. By default, the @code{Emacs -movemail} can work with POP (unless the Emacs @code{configure} script -was run with the option @samp{--without-pop}). - -Similarly, the Mailutils @code{movemail} by default supports POP, unless -it was configured with the @samp{--disable-pop} option. - -Both versions of @code{movemail} only work with POP3, not with older -versions of POP. +instead of storing the data in inbox files. The Mailutils +@command{movemail} by default supports POP with TLS encryption. +Although the @command{Emacs movemail} supports unencrypted POP, this +is not recommended due to the lack of encryption. Both versions of +@command{movemail} work only with POP3, not with older versions of +POP. @cindex @env{MAILHOST} environment variable @cindex POP mailboxes - No matter which flavor of @code{movemail} you use, you can specify + You can specify a POP inbox by using a POP @dfn{URL} (@pxref{Movemail}). A POP @acronym{URL} is of the form -@samp{pop://@var{username}@@@var{hostname}}, where -@var{hostname} is the host name or IP address of the remote mail +@samp{pop://@var{username}@@@var{hostname}:@var{port}}, where +@var{hostname} and @var{port} are the host name (or IP address) +and port number of the remote mail server and @var{username} is the user name on that server. Additionally, you may specify the password in the mailbox @acronym{URL}: -@samp{pop://@var{username}:@var{password}@@@var{hostname}}. In this +@samp{pop://@var{username}:@var{password}@@@var{hostname}:@var{port}}. In this case, @var{password} takes preference over the one set by @code{rmail-remote-password} (see below). This is especially useful if you have several remote mailboxes with different passwords. For backward compatibility, Rmail also supports an alternative way of specifying remote POP mailboxes. Specifying an inbox name in the form -@samp{po:@var{username}:@var{hostname}} is equivalent to -@samp{pop://@var{username}@@@var{hostname}}. If you omit the +@samp{po:@var{username}:@var{hostname}:@var{port}} is equivalent to +@samp{pop://@var{username}@@@var{hostname}:@var{port}}. If you omit the @var{:hostname} part, the @env{MAILHOST} environment variable specifies the machine on which to look for the POP server. -@c FIXME mention --with-hesiod "support Hesiod to get the POP server host"? - @cindex IMAP mailboxes Another method for accessing remote mailboxes is IMAP@. This method is supported only by the Mailutils @code{movemail}. To specify an IMAP mailbox in the inbox list, use the following mailbox @acronym{URL}: -@samp{imap://@var{username}[:@var{password}]@@@var{hostname}}. The +@samp{imap://@var{username}[:@var{password}]@@@var{hostname}:@var{port}}. The @var{password} part is optional, as described above. @vindex rmail-remote-password @@ -1550,9 +1552,7 @@ preserve your inbox contents; use @code{rmail-preserve-inbox} instead. @cindex Kerberos POP authentication The @code{movemail} program installed at your site may support -Kerberos authentication (the Emacs @code{movemail} does so if Emacs was -configured with the option @code{--with-kerberos} or -@code{--with-kerberos5}). If it is supported, it is used by default +Kerberos authentication. If it is supported, it is used by default whenever you attempt to retrieve POP mail when @code{rmail-remote-password} and @code{rmail-remote-password-required} are unset. diff --git a/etc/NEWS b/etc/NEWS index 88ae7cf1f5..f047aa86f9 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -37,6 +37,12 @@ Use 'configure --with-gnutls=no' to build even when GnuTLS is missing. ** GnuTLS version 2.12.2 or later is now required, instead of merely version 2.6.6 or later. +** The new option 'configure --with-mailutils' causes Emacs to rely on +GNU Mailutils 'movemail' to retrieve email. By default, the Emacs +build procedure continues to build and install a limited and insecure +'movemail' substitute. Although --with-mailutils is recommended, it +is not yet the default due to backward-compatibility concerns. + ** The new option 'configure --enable-gcc-warnings=warn-only' causes GCC to issue warnings without stopping the build. This behavior is now the default in developer builds. As before, use diff --git a/etc/PROBLEMS b/etc/PROBLEMS index b892320101..eddae12a70 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -323,6 +323,7 @@ or set the variable 'cannot-suspend' to a non-nil value. *** movemail compiled with POP support can't connect to the POP server. +This problem can occur if you do not configure --with-mailutils. Make sure that the 'pop' entry in /etc/services, or in the services NIS map if your machine uses NIS, has the same port number as the entry on the POP server. A common error is for the POP server to be diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index d0aa9cc7c2..b2cd66c049 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -100,6 +100,9 @@ bindir=@bindir@ # --libexecdir option to '../configure'. libexecdir=@libexecdir@ +# Nonempty if Emacs can assume Mailutils is installed. +with_mailutils=@with_mailutils@ + # Directory for local state files for all programs. localstatedir=@localstatedir@ @@ -160,7 +163,8 @@ INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} $(CLIENTW) \ # Things that Emacs runs internally, or during the build process, # which should not be installed in bindir. -UTILITIES = profile${EXEEXT} movemail${EXEEXT} hexl${EXEEXT} \ +UTILITIES = profile${EXEEXT} hexl${EXEEXT} \ + $(if $(with_mailutils), , movemail${EXEEXT}) \ $(and $(use_gamedir), update-game-score${EXEEXT}) DONT_INSTALL= make-docfile${EXEEXT} commit ffbb46849990bf4bf952e01b78c9a1a0ca0d4432 Author: Stefan Monnier Date: Thu Mar 16 12:31:07 2017 -0400 Add obarray-size and fix tests accordingly. Use obarrayp in cedet. * lisp/obarray.el (obarray-size): New function. * lisp/cedet/semantic/lex-spp.el (semantic-lex-spp-symbol) (semantic-lex-spp-save-table, semantic-lex-spp-macros): * lisp/cedet/semantic/bovine/c.el (semantic-c-describe-environment): Use obarrayp. * test/lisp/obarray-tests.el (obarray-make-default-test) (obarray-make-with-size-test): Use it. diff --git a/lisp/cedet/semantic/bovine/c.el b/lisp/cedet/semantic/bovine/c.el index bef4b179b2..3200a5c143 100644 --- a/lisp/cedet/semantic/bovine/c.el +++ b/lisp/cedet/semantic/bovine/c.el @@ -2253,7 +2253,7 @@ actually in their parent which is not accessible.") (princ " Your project symbol map is also derived from the EDE object:\n ") (princ (object-print ede-object))) (princ "\n\n") - (if (arrayp semantic-lex-spp-project-macro-symbol-obarray) + (if (obarrayp semantic-lex-spp-project-macro-symbol-obarray) (let ((macros nil)) (mapatoms #'(lambda (symbol) diff --git a/lisp/cedet/semantic/lex-spp.el b/lisp/cedet/semantic/lex-spp.el index 8d6467e5ed..cb33e483a6 100644 --- a/lisp/cedet/semantic/lex-spp.el +++ b/lisp/cedet/semantic/lex-spp.el @@ -147,13 +147,13 @@ The search priority is: ;; Do the check of the various tables. (or ;; DYNAMIC - (and (arrayp semantic-lex-spp-dynamic-macro-symbol-obarray) + (and (obarrayp semantic-lex-spp-dynamic-macro-symbol-obarray) (intern-soft name semantic-lex-spp-dynamic-macro-symbol-obarray)) ;; PROJECT - (and (arrayp semantic-lex-spp-project-macro-symbol-obarray) + (and (obarrayp semantic-lex-spp-project-macro-symbol-obarray) (intern-soft name semantic-lex-spp-project-macro-symbol-obarray)) ;; SYSTEM - (and (arrayp semantic-lex-spp-macro-symbol-obarray) + (and (obarrayp semantic-lex-spp-macro-symbol-obarray) (intern-soft name semantic-lex-spp-macro-symbol-obarray)) ;; ... ))) @@ -291,7 +291,7 @@ REPLACEMENT a string that would be substituted in for NAME." "Return a list of spp macros and values. The return list is meant to be saved in a semanticdb table." (let (macros) - (when (arrayp semantic-lex-spp-dynamic-macro-symbol-obarray) + (when (obarrayp semantic-lex-spp-dynamic-macro-symbol-obarray) (mapatoms #'(lambda (symbol) (setq macros (cons (cons (symbol-name symbol) @@ -304,17 +304,17 @@ The return list is meant to be saved in a semanticdb table." "Return a list of spp macros as Lisp symbols. The value of each symbol is the replacement stream." (let (macros) - (when (arrayp semantic-lex-spp-macro-symbol-obarray) + (when (obarrayp semantic-lex-spp-macro-symbol-obarray) (mapatoms #'(lambda (symbol) (setq macros (cons symbol macros))) semantic-lex-spp-macro-symbol-obarray)) - (when (arrayp semantic-lex-spp-project-macro-symbol-obarray) + (when (obarrayp semantic-lex-spp-project-macro-symbol-obarray) (mapatoms #'(lambda (symbol) (setq macros (cons symbol macros))) semantic-lex-spp-project-macro-symbol-obarray)) - (when (arrayp semantic-lex-spp-dynamic-macro-symbol-obarray) + (when (obarrayp semantic-lex-spp-dynamic-macro-symbol-obarray) (mapatoms #'(lambda (symbol) (setq macros (cons symbol macros))) diff --git a/lisp/obarray.el b/lisp/obarray.el index aaffe00a07..a463185992 100644 --- a/lisp/obarray.el +++ b/lisp/obarray.el @@ -37,6 +37,10 @@ (make-vector size 0) (signal 'wrong-type-argument '(size 0))))) +(defun obarray-size (obarray) + "Return the number of slots of OBARRAY." + (length obarray)) + (defun obarrayp (object) "Return t if OBJECT is an obarray." (and (vectorp object) diff --git a/test/lisp/obarray-tests.el b/test/lisp/obarray-tests.el index 9a2d65d8b4..4908b88324 100644 --- a/test/lisp/obarray-tests.el +++ b/test/lisp/obarray-tests.el @@ -43,14 +43,16 @@ (ert-deftest obarray-make-default-test () (let ((table (obarray-make))) (should (obarrayp table)) - (should (equal (make-vector 59 0) table)))) + (should (eq (obarray-size table) obarray-default-size)))) (ert-deftest obarray-make-with-size-test () + ;; FIXME: Actually, `wrong-type-argument' is not the right error to signal, + ;; so we shouldn't enforce this misbehavior in tests! (should-error (obarray-make -1) :type 'wrong-type-argument) (should-error (obarray-make 0) :type 'wrong-type-argument) (let ((table (obarray-make 1))) (should (obarrayp table)) - (should (equal (make-vector 1 0) table)))) + (should (eq (obarray-size table) 1)))) (ert-deftest obarray-get-test () (let ((table (obarray-make 3))) commit 265a5d9791bf42da0bab7bdbef4352e8d734ef31 Author: Michael Albinus Date: Thu Mar 16 16:23:07 2017 +0100 Document remote file name syntax change * doc/emacs/files.texi (Remote Files, Quoted File Names): * doc/misc/org.texi (dir): Change examples to use a method. * doc/misc/tramp.texi (Top) [trampf]: Remove macro. Add `Testing' menu entry. (History): Fix typos. Mention syntax change. (Configuration, Default Host, File name Syntax) (File name completion, Frequently Asked Questions): Change examples to use a method. (External methods, Default Host, Multi-hops, Remote processes): Fix typos. (Default Method): Mention pseudo method "-". (External packages): Rewrite intention of `non-essential'. * etc/NEWS: Mark recent Tramp entries as documented. diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 2b09c69945..1a85f96df4 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1777,9 +1777,7 @@ syntax: @example @group -/@var{host}:@var{filename} -/@var{user}@@@var{host}:@var{filename} -/@var{user}@@@var{host}#@var{port}:@var{filename} +/@var{method}:@var{host}:@var{filename} /@var{method}:@var{user}@@@var{host}:@var{filename} /@var{method}:@var{user}@@@var{host}#@var{port}:@var{filename} @end group @@ -1788,11 +1786,11 @@ syntax: @noindent To carry out this request, Emacs uses a remote-login program such as @command{ftp}, @command{ssh}, @command{rlogin}, or @command{telnet}. -You can always specify in the file name which method to use---for +You must always specify in the file name which method to use---for example, @file{/ftp:@var{user}@@@var{host}:@var{filename}} uses FTP, whereas @file{/ssh:@var{user}@@@var{host}:@var{filename}} uses -@command{ssh}. When you don't specify a method in the file name, -Emacs chooses the method as follows: +@command{ssh}. When you specify the pseudo method @var{-} in the file +name, Emacs chooses the method as follows: @enumerate @item @@ -1884,7 +1882,7 @@ can refer to that file in Emacs as @samp{/:/foo:/bar}. If you want to quote only special characters in the local part of a remote file name, you can quote just the local part. -@samp{/baz:/:/foo:/bar} refers to the file @file{bar} of directory +@samp{/ssh:baz:/:/foo:/bar} refers to the file @file{bar} of directory @file{/foo:} on the host @file{baz}. @samp{/:} can also prevent @samp{~} from being treated as a special diff --git a/doc/misc/org.texi b/doc/misc/org.texi index 596300e5ed..21c8758b80 100644 --- a/doc/misc/org.texi +++ b/doc/misc/org.texi @@ -15090,7 +15090,7 @@ A directory on a remote machine can be specified using tramp file syntax, in which case the code will be evaluated on the remote machine. An example is @example -#+BEGIN_SRC R :file plot.png :dir /dand@@yakuba.princeton.edu: +#+BEGIN_SRC R :file plot.png :dir /scp:dand@@yakuba.princeton.edu: plot(1:10, main=system("hostname", intern=TRUE)) #+END_SRC @end example diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 9c295a49a6..26b0915c0d 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -24,13 +24,6 @@ \userhost\@value{postfix}\localname\ @end macro -@c Similar, but without a method prefix. - -@macro trampf {userhost, localname} -@value{prefix}@c -\userhost\@value{postfix}\localname\ -@end macro - @copying Copyright @copyright{} 1999--2017 Free Software Foundation, Inc. @@ -133,8 +126,8 @@ For the developer: Installing @value{tramp} with your Emacs * Installation parameters:: Parameters in order to control installation. +* Testing:: A test suite for @value{tramp}. * Load paths:: How to plug-in @value{tramp} into your environment. - @end ifset Configuring @value{tramp} for use @@ -398,12 +391,12 @@ Run @command{autoconf} as follows to generate an up-to-date @value{tramp} development started at the end of November 1998 as @file{rssh.el}. It provided only one method of access. It used @command{ssh} for login and @command{scp} to transfer file contents. -The name was changed to @file{rcp.el} before it got its preset name +The name was changed to @file{rcp.el} before it got its present name @value{tramp}. New methods of remote access were added, so was support for version control. April 2000 was the first time when multi-hop methods were added. In -July 2002, @value{tramp} unified file names with Ange-FTP@. In July +July 2002, @value{tramp} unified file names with Ange FTP@. In July 2004, proxy hosts replaced multi-hop methods. Running commands on remote hosts was introduced in December 2005. Support for gateways since April 2007 (and removed in December 2016). GVFS integration @@ -412,7 +405,8 @@ September 2011. Ad-hoc multi-hop methods (with a changed syntax) re-enabled in November 2011. In November 2012, added Juergen Hoetzel's @file{tramp-adb.el}. -XEmacs support has been stopped in January 2016. +XEmacs support has been stopped in January 2016. Since March 2017, +@value{tramp} syntax requires a method mandatorily. @c Installation chapter is necessary only in case of standalone @c installation. Text taken from trampinst.texi. @@ -428,7 +422,7 @@ XEmacs support has been stopped in January 2016. @value{tramp} is initially configured to use the @command{scp} program to connect to the remote host. Just type @kbd{C-x C-f} and then enter -file name @file{@trampf{user@@host,/path/to/file}}. For details, +file name @file{@trampfn{scp,user@@host,/path/to/file}}. For details, @xref{Default Method}, @xref{Default User}, @xref{Default Host}. For problems related to the behavior of the remote shell, @xref{Remote @@ -819,9 +813,9 @@ Using @command{smbclient} requires a few tweaks when working with The first directory in the localname must be a share name on the remote host. -Since SMB shares end in the @code{$} character, @value{tramp} must use -@code{$$} when specifying those shares to avoid environment variable -substitutions. +Since some SMB share names end in the @code{$} character, +@value{tramp} must use @code{$$} when specifying those shares to avoid +environment variable substitutions. When @value{tramp} is not specific about the share name or uses the generic remote directory @file{/}, @command{smbclient} returns all @@ -834,7 +828,7 @@ handling}. To accommodate user name/domain name syntax required by MS Windows authorization, @value{tramp} provides for an extended syntax in -@code{user%domain} format (where user is username, @code{%} is the +@code{user%domain} format (where user is user name, @code{%} is the percent symbol, and domain is the windows domain name). An example: @example @@ -1002,6 +996,9 @@ Other methods to include are: @option{ftp} and @option{smb}. @section Selecting a default method @cindex default method +In a remote file name, the use of a default method is indicated by the +pseudo method @option{-}, @ref{File name Syntax}. + @defopt tramp-default-method Default method is for transferring files. The user option @option{tramp-default-method} sets it. @value{tramp} uses this user @@ -1145,25 +1142,21 @@ for catch-all or most often used login. @defopt tramp-default-host When host name is omitted, @value{tramp} substitutes the value from the @option{tramp-default-host} user option. It is initially -populated with the local hostname where Emacs is running. Both the -default user and default host can be overridden as follows: +populated with the local host name where Emacs is running. The +default method, default user and default host can be overridden as +follows: @lisp @group (custom-set-variables + '(tramp-default-method "ssh" nil (tramp)) '(tramp-default-user "john" nil (tramp)) '(tramp-default-host "target" nil (tramp))) @end group @end lisp -With both defaults set, @samp{@trampfn{ssh,,}} will connect -@value{tramp} to John's home directory on @code{target}. - -@strong{Note} @samp{/::} won't work, because @samp{/:} is the prefix -for quoted file names. -@ifinfo -@pxref{Quoted File Names, , , emacs}. -@end ifinfo +With all defaults set, @samp{@trampfn{-,,}} will connect @value{tramp} +to John's home directory on @code{target} via @code{ssh}. @end defopt @defopt tramp-default-host-alist @@ -1248,7 +1241,7 @@ access, then use this alist entry: Opening @file{@trampfn{sudo,randomhost.your.domain,}} first connects to @samp{randomhost.your.domain} via @code{ssh} under your account -name, and then perform @code{sudo -u root} on that host. +name, and then performs @code{sudo -u root} on that host. It is key for the sudo method in the above example to be applied on the host after reaching it and not on the local host. @@ -2151,35 +2144,34 @@ is a feature of Emacs that may cause missed prompts when using @cindex file name syntax @cindex file name examples -@file{@trampf{host,localfilename}} opens file @var{localfilename} on -the remote host @var{host}, using the default method. @xref{Default -Method}. +@file{@trampfn{method,host,/path/to/file}} opens file @var{/path/to/file} +on the remote host @var{host}, using the method @var{method}. @table @file -@item @value{prefix}melancholia@value{postfix}.emacs +@item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}.emacs For the file @file{.emacs} located in the home directory, on the host -@code{melancholia}. +@code{melancholia}, using method @code{ssh}. -@item @value{prefix}melancholia.danann.net@value{postfix}.emacs +@item @value{prefix}ssh@value{postfixhop}melancholia.danann.net@value{postfix}.emacs For the file @file{.emacs} specified using the fully qualified domain name of the host. -@item @value{prefix}melancholia@value{postfix}~/.emacs +@item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}~/.emacs For the file @file{.emacs} specified using the @file{~}, which is expanded. -@item @value{prefix}melancholia@value{postfix}~daniel/.emacs +@item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}~daniel/.emacs For the file @file{.emacs} located in @code{daniel}'s home directory on the host, @code{melancholia}. The @file{~} construct is expanded to the home directory of that user on the remote host. -@item @value{prefix}melancholia@value{postfix}/etc/squid.conf +@item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}/etc/squid.conf For the file @file{/etc/squid.conf} on the host @code{melancholia}. @end table @var{host} can take IPv4 or IPv6 address, as in -@file{@trampf{127.0.0.1,.emacs}} or -@file{@trampf{@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}. +@file{@trampfn{ssh,127.0.0.1,.emacs}} or +@file{@trampfn{ssh,@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}. @ifset unified For syntactical reasons, IPv6 addresses must be embedded in square brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}. @@ -2190,31 +2182,23 @@ remote user name for log in to the remote host. Specifying a different name using the proper syntax will override this default behavior: @example -@trampf{user@@host,path/to/file} +@trampfn{method,user@@host,path/to/file} @end example -@file{@trampf{daniel@@melancholia,.emacs}} is for file @file{.emacs} -in @code{daniel}'s home directory on the host, @code{melancholia}. - -Specify other file access methods (@pxref{Inline methods}, -@pxref{External methods}) as part of the file name. - -Method name comes before user name, as in -@file{@value{prefix}@var{method}@value{postfixhop}} (Note the trailing -colon). The syntax specifications for user, host, and file do not -change. - -To connect to the host @code{melancholia} as @code{daniel}, using -@option{ssh} method for @file{.emacs} in @code{daniel}'s home -directory, the full specification is: -@file{@trampfn{ssh,daniel@@melancholia,.emacs}}. - -A remote file name containing a host name, which is the same string as -a method name, is not allowed. +@file{@trampfn{ssh,daniel@@melancholia,.emacs}} is for file +@file{.emacs} in @code{daniel}'s home directory on the host, +@code{melancholia}, accessing via method @code{ssh}. For specifying port numbers, affix @file{#} to the host name. For example: @file{@trampfn{ssh,daniel@@melancholia#42,.emacs}}. +All method, user name, host name, port number and local name parts are +optional, @xref{Default Method}, @xref{Default User}, @xref{Default Host}. +@ifset unified +For syntactical reasons, the default method must be indicated by the +pseudo method @file{-}. +@end ifset + @node File name completion @section File name completion @@ -2228,38 +2212,52 @@ in @file{.emacs}. @xref{Completion Options, , , emacs}. @end ifinfo -For example, type @kbd{C-x C-f @value{prefix}t @key{TAB}}, +For example, type @kbd{C-x C-f @value{prefix}s @key{TAB}}, @value{tramp} completion choices show up as @example @group -@c @multitable {@trampfn{telnet,melancholia.danann.net,}} {@trampfn{telnet,192.168.0.1,}} -@multitable @columnfractions .5 .5 -@item @value{prefixhop}telnet@value{postfixhop} @tab tmp/ -@item @value{prefixhop}toto@value{postfix} @tab +@multitable @columnfractions .2 .2 .2 .2 .2 +@item @c + sbin/ @tab @c + @value{prefixhop}scp@value{postfix} @tab @c + @value{prefixhop}scpx@value{postfix} @tab @c + @value{prefixhop}sftp@value{postfix} @tab @c + @value{prefixhop}sg@value{postfix} +@item @c + @value{prefixhop}smb@value{postfix} @tab @c + srv/ @tab @c + @value{prefixhop}ssh@value{postfix} @tab @c + @value{prefixhop}sshx@value{postfix} @tab @c + @value{prefixhop}su@value{postfix} +@item @c + @value{prefixhop}sudo@value{postfix} @tab @c + sys/ @end multitable @end group @end example -@samp{@value{prefixhop}telnet@value{postfixhop}} is a possible -completion for the respective method, @samp{tmp/} stands for the -directory @file{/tmp} on your local host, and -@samp{@value{prefixhop}toto@value{postfix}} might be a host -@value{tramp} has detected in your @file{~/.ssh/known_hosts} file -(when using @option{ssh} as default method). +@samp{@value{prefixhop}ssh@value{postfixhop}} is a possible +completion for the respective method, and @samp{sbin/} stands for the +directory @file{/sbin} on your local host. -Type @kbd{e @key{TAB}} for the minibuffer completion to -@samp{@value{prefix}telnet@value{postfixhop}}. Typing @kbd{@key{TAB}} -shows host names @value{tramp} from @file{/etc/hosts} file, for example. +Type @kbd{s h @value{postfixhop}} for the minibuffer completion to +@samp{@value{prefix}ssh@value{postfixhop}}. Typing @kbd{@key{TAB}} +shows host names @value{tramp} extracts from @file{~/.ssh/config} +file, for example. @example @group @multitable @columnfractions .5 .5 -@c @multitable {@trampfn{telnet,melancholia.danann.net,}} {@trampfn{telnet,192.168.0.1,}} -@item @trampfn{telnet,127.0.0.1,} @tab @trampfn{telnet,192.168.0.1,} -@c @item @trampfn{telnet,@value{ipv6prefix}::1@value{ipv6postfix},} @tab @trampfn{telnet,localhost,} -@item @value{prefix}telnet@value{postfixhop}@value{ipv6prefix}::1@value{ipv6postfix}@value{postfix} @tab @trampfn{telnet,localhost,} -@item @trampfn{telnet,melancholia.danann.net,} @tab @trampfn{telnet,melancholia,} +@item @c + @value{prefixhop}ssh@value{postfixhop}127.0.0.1@value{postfix} @tab @c + @value{prefixhop}ssh@value{postfixhop}192.168.0.1@value{postfix} +@item @c + @value{prefixhop}ssh@value{postfixhop}@value{ipv6prefix}::1@value{ipv6postfix}@value{postfix} @tab @c + @value{prefixhop}ssh@value{postfixhop}localhost@value{postfix} +@item @c + @value{prefixhop}ssh@value{postfixhop}melancholia.danann.net@value{postfix} @tab @c + @value{prefixhop}ssh@value{postfixhop}melancholia@value{postfix} @end multitable @end group @end example @@ -2288,13 +2286,13 @@ Example: @example @group -@kbd{C-x C-f @trampfn{telnet,melancholia,/usr/local/bin//etc} @key{TAB}} - @print{} @trampfn{telnet,melancholia,/etc} +@kbd{C-x C-f @trampfn{ssh,melancholia,/usr/local/bin//etc} @key{TAB}} + @print{} @trampfn{ssh,melancholia,/etc} -@kbd{C-x C-f @trampfn{telnet,melancholia,//etc} @key{TAB}} +@kbd{C-x C-f @trampfn{ssh,melancholia,//etc} @key{TAB}} @print{} /etc -@kbd{C-x C-f @trampfn{telnet,melancholia,/usr/local/bin///etc} @key{TAB}} +@kbd{C-x C-f @trampfn{ssh,melancholia,/usr/local/bin///etc} @key{TAB}} @print{} /etc @end group @end example @@ -2527,9 +2525,9 @@ host. Example: @value{tramp} is integrated into @file{eshell.el}, which enables interactive eshell sessions on remote hosts at the command prompt. -You must add the module @code{eshell-tramp} to -@code{eshell-modules-list}. Here's a sample interaction after opening -@kbd{M-x eshell} on a remote host: +You must add the module @code{em-tramp} to @code{eshell-modules-list}. +Here's a sample interaction after opening @kbd{M-x eshell} on a remote +host: @example @group @@ -3113,7 +3111,7 @@ You can define default methods and user names for hosts, @end group @end lisp -The reduced typing: @kbd{C-x C-f @trampf{news.my.domain,/opt/news/etc}}. +The reduced typing: @kbd{C-x C-f @trampfn{-,news.my.domain,/opt/news/etc}}. @strong{Note} that there are some useful shortcuts already. Accessing your local host as @samp{root} user, is possible just by @kbd{C-x C-f @@ -3472,18 +3470,12 @@ handlers. @section Integrating with external Lisp packages @subsection File name completion. -For name completions in the minibuffer, @value{tramp} depends on the -last input character to decide whether to look for method name -completion or host name completion. For example, @kbd{C-x C-f -@value{prefix}ssh@value{postfixhop} @key{TAB}} is not entirely clear -if @option{ssh} is a method or a host name. But if the last input -character was either @key{TAB}, @key{SPACE} or @kbd{?}, then -@value{tramp} favors file name completion over host name completion. - -What about external packages using other characters to trigger file -name completions? They must somehow signal this to @value{tramp}. Use -the variable @code{non-essential} temporarily and bind it to -non-@code{nil} value. +Sometimes, it is not convenient to open a new connection to a remote +host, including entering the password and alike. For example, this is +nasty for packages providing file name completion. Such a package +could signal to @value{tramp}, that they don't want it to establish a +new connection. Use the variable @code{non-essential} temporarily and +bind it to non-@code{nil} value. @lisp @group diff --git a/etc/NEWS b/etc/NEWS index e1b6249d47..88ae7cf1f5 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -634,10 +634,12 @@ header's value. ** Tramp ++++ *** The method part of remote file names is mandatory now. A valid remote file name starts with "/method:host:" or "/method:user@host:". -*** The new virtual method "-" is a marker for the default method. ++++ +*** The new pseudo method "-" is a marker for the default method. "/-::" is the shortest remote file name then. +++ commit f6b995ef4ec50455f8dbf174b91de6b5887d014e Author: Stefan Monnier Date: Thu Mar 16 09:44:56 2017 -0400 (semantic-lex-type-invalid): Fix nested backquote. * lisp/cedet/semantic/lex.el: Use lexical-binding. (semantic-lex-type-invalid): Fix nested backquote. (semantic-lex-map-symbols, semantic-lex-type-symbol) (semantic-lex-keyword-symbol): Use obarrayp. diff --git a/lisp/cedet/semantic/lex.el b/lisp/cedet/semantic/lex.el index 2e8817e13a..b2a63cdcc3 100644 --- a/lisp/cedet/semantic/lex.el +++ b/lisp/cedet/semantic/lex.el @@ -1,4 +1,4 @@ -;;; semantic/lex.el --- Lexical Analyzer builder +;;; semantic/lex.el --- Lexical Analyzer builder -*- lexical-binding:t -*- ;; Copyright (C) 1999-2017 Free Software Foundation, Inc. @@ -190,7 +190,7 @@ "Call function FUN on every symbol in TABLE. If optional PROPERTY is non-nil, call FUN only on every symbol which as a PROPERTY value. FUN receives a symbol as argument." - (if (arrayp table) + (if (obarrayp table) (mapatoms #'(lambda (symbol) (if (or (null property) (get symbol property)) @@ -213,7 +213,7 @@ These keywords are matched explicitly, and converted into special symbols.") (defsubst semantic-lex-keyword-symbol (name) "Return keyword symbol with NAME or nil if not found." - (and (arrayp semantic-flex-keywords-obarray) + (and (obarrayp semantic-flex-keywords-obarray) (stringp name) (intern-soft name semantic-flex-keywords-obarray))) @@ -337,13 +337,13 @@ so that analysis can continue, if possible." "Buffer local types obarray for the lexical analyzer.") (make-variable-buffer-local 'semantic-lex-types-obarray) -(defmacro semantic-lex-type-invalid (type) +(defun semantic-lex-type-invalid (type) "Signal that TYPE is an invalid lexical type name." - `(signal 'wrong-type-argument '(semantic-lex-type-p ,type))) + (signal 'wrong-type-argument `(semantic-lex-type-p ,type))) (defsubst semantic-lex-type-symbol (type) "Return symbol with TYPE or nil if not found." - (and (arrayp semantic-lex-types-obarray) + (and (obarrayp semantic-lex-types-obarray) (stringp type) (intern-soft type semantic-lex-types-obarray))) @@ -635,7 +635,7 @@ This specifies how many lists to create tokens in.") (make-variable-buffer-local 'semantic-lex-depth) (defvar semantic-lex-unterminated-syntax-end-function - (lambda (syntax syntax-start lex-end) lex-end) + (lambda (_syntax _syntax-start lex-end) lex-end) "Function called when unterminated syntax is encountered. This should be set to one function. That function should take three parameters. The SYNTAX, or type of syntax which is unterminated. @@ -1779,7 +1779,7 @@ If there is no error, then the last value of FORMS is returned." See variable `semantic-lex-tokens'.") (defvar semantic-flex-unterminated-syntax-end-function - (lambda (syntax syntax-start flex-end) flex-end) + (lambda (_syntax _syntax-start flex-end) flex-end) "Function called when unterminated syntax is encountered. This should be set to one function. That function should take three parameters. The SYNTAX, or type of syntax which is unterminated.