--- /dev/null
+commit 8c1f10db4fcec820afc234f1630878f14f4d9d91
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri May 6 18:30:51 2016 +1000
+
+ SXEmacs v22.1.16 is released!
+
+ What can I say, I got tired of waiting and just, well, released.
+
+ * info/sxemacs/sxemacs.texi (Top): Update version.
+
+ * info/sppm.texi: Update versioning macros.
+
+ * autogen.sh (EXPECTED_TREE_VERSION): 22.1.16
+ (sxemacs_codename): "Hillman Hunter"
+
+ * etc/NEWS: Add the news for v22.1.16
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ autogen.sh | 4 +--
+ etc/NEWS | 68 +++++++++++++++++++++++++++++++++++++++++++++++
+ info/sppm.texi | 6 ++---
+ info/sxemacs/sxemacs.texi | 2 +-
+ 4 files changed, 74 insertions(+), 6 deletions(-)
+
+commit cf7aad99bd531e127bedd06cdf11bd43756a2c1a
+Merge: 5a1f1d8 f44c1b5
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Mar 15 10:41:53 2016 +1000
+
+ Fix the fix to really close 181
+
+ * merges:
+ Fix MPFR Flog implementation
+
+commit f44c1b5697e1bb9a20437099a28c843b90af8d15
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Mon Mar 14 19:05:46 2016 -0400
+
+ Fix MPFR Flog implementation
+
+ * src/ent/floatfns.c (Flog10): Use RETURN_WHEN_INDEF to check
+ before dividing by log 10.
+ (Flog2): Use RETURN_WHEN_INDEF to check before dividing by log 2.
+ (Flog): Properly add parameters to Flog. Use
+ the common RETURN_WHEN_INDEF when Flog return indefinite.
+ Plus some whitespace fixes.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ent/floatfns.c | 109 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 54 insertions(+), 55 deletions(-)
+
+commit 5a1f1d89c541ad0189f0a878f43fe4c2badad0ac
+Merge: 68ee3b0 74a0382
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Mar 14 17:58:53 2016 +1000
+
+ Close 181
+
+ * merges:
+ Fix bug 181: log does not take base into account without mpfr
+
+commit 74a038200aac89b5c4b2591600da306ed8f749b0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Mar 12 12:33:46 2016 -0500
+
+ Fix bug 181: log does not take base into account without mpfr
+
+ * src/ent/floatfns.c (RETURN_WHEN_INDEF): New macro for the common
+ handling of indefinites in logarithmic functions.
+ (Flog10): Always define, but throw invalid operation if no
+ logarithmic primitive is available.
+ (Flog2): Ditto.
+ (Flog): Try to use Flog10 or Flog2 if the bases match. In case of
+ float operation try to use Flog2 since it is usually more
+ efficient.
+
+ * configure.ac: Check for availability of all the logarithmic
+ functions.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 2 +-
+ src/ent/floatfns.c | 195 ++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 111 insertions(+), 86 deletions(-)
+
+commit 68ee3b0ca3ed9c74d0a7455c6c65422458845926
+Merge: ddf559a d6cb8fa
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 17 09:16:54 2016 +1000
+
+ Error instead of crashing on OGG/MP3 streams
+
+ * merges:
+ Debug message fix
+ Fix crash when using ffmpeg to play mp3 and ogg
+
+commit d6cb8fad24fdb64c5c6b7f1b0cfa09853b93c973
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 16 17:18:36 2016 -0500
+
+ Debug message fix
+
+ * src/media/media.c (sxe_msf_DBL_down): Minor fix on debug
+ message, it is DBL not FLT.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 55a8171804431552de01a8e98c585c276e32c054
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 16 17:14:03 2016 -0500
+
+ Fix crash when using ffmpeg to play mp3 and ogg
+
+ * src/media/media-ffmpeg.c (media_ffmpeg_analyse_audio): Refactor
+ detection of sample size using av_get_bytes_per_sample. Error when
+ format is not supported instead of silently go ahead and possibly
+ crash later.
+
+ * src/media/media.c (sxe_msf_DBL_up): Implement conversion to
+ internal format from double.
+ (sxe_msf_DBL_down): Implement from internal format to double.
+
+ * src/media/media.h: Declare double encoded samples.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_LIBS): Detect
+ av_get_bytes_per_sample and av_get_sample_fmt_string.
+ (SXE_MM_CHECK_FFMPEG): Enforce presenc of av_get_bytes_per_sample
+ and av_get_sample_fmt_string.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4 | 4 ++++
+ src/media/media-ffmpeg.c | 40 ++++++++++++++++++++++++----------------
+ src/media/media.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ src/media/media.h | 1 +
+ 4 files changed, 70 insertions(+), 16 deletions(-)
+
+commit ddf559af39db00c49ae1adcc85996cf0e78ae2af
+Merge: 910698c 6502bd0
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 10 16:57:31 2016 +1000
+
+ Ffile_basename(), Ffile_dirname() updates, POSIX compliance
+
+ * merges:
+ Properly determine the name of preceeding directory
+ Expand file name before dirname
+ Use xrealpath
+ Make basename and dirname POSIX compliant
+ Add tests for file-name-directory, etc
+ Add file name joiner
+ Improve documentation
+
+commit 6502bd0abcb90289b58fb1b21ad5a912f15acfd9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 9 17:54:36 2016 -0500
+
+ Properly determine the name of preceeding directory
+
+ * lisp/build-autoloads.el (find-emod-directories): Use basename of
+ dirname to determine name of preceeding directory. Now that
+ basename and dirname are POSIX compliant this works and is much
+ more bullet proof than the split of dirname by /.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/build-autoloads.el | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8c1dd60e3a0279869dae0b4a79f6347344fc060d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 9 17:52:44 2016 -0500
+
+ Expand file name before dirname
+
+ * lisp/packages.el (package-suppress): Expand file name before
+ call to file-dirname
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/packages.el | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 6201a9ee8b2970903de1f53c0294c5be504a9961
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 9 17:51:27 2016 -0500
+
+ Use xrealpath
+
+ * src/dired.c (dired_realpath): Use xrealpath for safety
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/dired.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 673e629352845d8aded6fe98cc368ad738b0d53d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 9 17:49:05 2016 -0500
+
+ Make basename and dirname POSIX compliant
+
+ * src/fileio.c (Ffile_basename): Improve documentation and make
+ POSIX compliant by returning full string when there is no slashes.
+
+ * src/fileio.c (Ffile_dirname): Improve documentation and make
+ POSIX compliant by using xdirname.
+
+ src/fileio.c | 85 +++++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 56 insertions(+), 29 deletions(-)
+
+commit fd17e50cb86d263fe8aaffffb931726c697731dd
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 9 15:18:26 2016 -0500
+
+ Add tests for file-name-directory, etc
+
+ * tests/automated/lisp-tests.el: Add tests for
+ file-name-directory, file-name-nondirectory, file-dirname,
+ file-basename, file-name-join.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ tests/automated/lisp-tests.el | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+commit 67b63594e02e901e28f0730259297acc629dcbe0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 9 15:16:59 2016 -0500
+
+ Add file name joiner
+
+ * lisp/files.el (file-name-join): Add file-name-join to safely
+ join directory and filename components.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/files.el | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+commit fbcdf082dfcbcfcf368088b4e5e990488cffc940
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 3 17:19:34 2016 -0500
+
+ Improve documentation
+
+ * src/fileio.c (Ffile_name_directory): Add samples to
+ documentation, so it is clearer what the outcome would be.
+ (Ffile_name_nondirectory): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/fileio.c | 34 ++++++++++++++++++++++++++++++++++
+ 1 file changed, 34 insertions(+)
+
+commit 910698ce395ac200b44238477e5278918dcf9782
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 3 16:02:01 2016 -0500
+
+ Document text corruption issue with Xorg ATI driver
+
+ * PROBLEMS: Document text corruption issue with Xorg ATI driver
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ PROBLEMS | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+commit 0e87679e6dc85cdadb5bd3dd0e6e273a2646c150
+Merge: 281b409 32e915e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jan 1 10:19:46 2016 +1000
+
+ Ladies and Gentlement, FFmpeg is back!
+
+ * merges:
+ Final set of changes for a working ffmpeg.
+ More update to newer ffmpeg API
+ Use new virtual IO api
+ Cleanup global video state.
+ Additional usage of the new api
+ Update ffmpeg codec and media constants
+ Fix metadata usage
+ Sync up FFmpeg -- autoconf
+
+commit 32e915e5dc4fea21550f0f97a3d526229182f374
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Dec 31 14:39:54 2015 -0500
+
+ Final set of changes for a working ffmpeg.
+
+ There are a couple of edges to polish but "works for me" now.
+
+ * src/media/media-ffmpeg.c (media_ffmpeg_read): Use
+ avcodec_decode_audio3 if available. More work is needed to use
+ avcodec_decod_audio4 because it uses frames which would need to
+ then be copied to the output buffer.
+ (my_get_buffer): Use avcodec_default_get_buffer2.
+ (my_release_buffer): No longer needed.
+ (stream_component_open): Properly set the thread count and use
+ avcodec_open2. Set get_buffer2 to my_get_buffer since we
+ are using the new interface.
+ (media_ffmpeg_available_formats): Use av_iformat_next.
+ (stream_open): Defer setting codec options to a later better
+ understanding of ffmpeg (keep #if 0 the old).
+ (new_media_ffmpeg_open): Use only the most recent AVIOContext access
+ method to set eof_reached. If we get issues reported we'll
+ revisit.
+ (new_media_ffmpeg_read): Use avio_eof and the most error field of
+ AVIOContext instead of furl_feof. Do not unset the interrupt
+ callback for now. We may need to revisit the reset of the
+ callback later.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_LIBS): Properly check for the
+ avcodec_decode_audio* and define corresponding
+ HAVE_AVCODEC_AUDIO*. Also check for av_iformat_next.
+ (SXE_MM_CHECK_FFMPEG): Check at least one avcodec_decode_audio is
+ available and av_iformat_next.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4 | 25 ++++++++++++++++-
+ src/media/media-ffmpeg.c | 72 +++++++++++++++++++-----------------------------
+ 2 files changed, 53 insertions(+), 44 deletions(-)
+
+commit c30ddaeba57c7cb8d3ae7c470b80733b1f68b448
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Dec 31 14:15:14 2015 -0500
+
+ More update to newer ffmpeg API
+
+ * src/media/media-ffmpeg.h: Add include of avutil/time.h
+
+ * src/media/media-ffmpeg.c (AVCODEC_MAX_AUDIO_FRAME_SIZE): Add
+ define if missing to last known legacy value.
+ (media_ffmpeg_open): Properly use avcodec_open2
+ (media_ffmpeg_read): Fix warnings.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_HEADERS): Check also avutil/time.h.
+ (SXE_CHECK_FFMPEG_LIBS): Check for avformat_free_context and avio_feof.
+ (SXE_MM_CHECK_FFMPEG): Refactor header check for ease of adding
+ additional ones. Verify avformat_free_context and avio_feof are
+ available.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4 | 52 ++++++++++++++++++++++++++++++++++++------------
+ src/media/media-ffmpeg.c | 11 ++++++++--
+ src/media/media-ffmpeg.h | 6 ++++++
+ 3 files changed, 54 insertions(+), 15 deletions(-)
+
+commit b1c8382d301218200f40e9ed7529ed0da098e398
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Dec 31 11:58:19 2015 -0500
+
+ Use new virtual IO api
+
+ * src/media/media-ffmpeg.c: Remove the no-longer used
+ media_ffmpeg_vio_open, media_ffmpeg_vio_close,
+ media_ffmpeg_vio_write.
+ (media_ffmpeg_vio_read): Use the new opaque pointer interface of
+ AVIOContext, which points to our media_data struct directly.
+ (media_ffmpeg_vio_seek): Ditto.
+ (media_ffmpeg_open_data): Use the new AVIOContext and allocate one
+ pointing to media_ffmpeg_vio_read, media_ffmpeg_vio_seek and with
+ opaque data as our media_data. Use the context to open the input.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 147 ++++++++++++++++-------------------------------
+ 1 file changed, 49 insertions(+), 98 deletions(-)
+
+commit c3994e1fd3538431675c60a8ce53528062ee0911
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Dec 31 11:39:44 2015 -0500
+
+ Cleanup global video state.
+
+ * src/media/media-ffmpeg.c: Remove global video state since it is
+ not used, except to set to NULL.
+ (new_media_ffmpeg_read): No need to reset global_video_state, as it is not used.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 746ff6507e46a840ccfb2373e81b4a5be3021947
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Dec 31 11:37:06 2015 -0500
+
+ Additional usage of the new api
+
+ * src/media/media-ffmpeg.c (media_ffmpeg_open_file): Use
+ avformat_open_input and avformat_find_stream_info,
+ avformat_close_input.
+ (stream_open): Use avformat_open_input.
+ (media_ffmpeg_close): Use avformat_close_input.
+ (media_ffmpeg_open): Use avio_size, avformat_find_stream_info,
+ av_dump_format and avoid warning.
+ (new_media_ffmpeg_read): Use avformat_close_input.
+
+ * src/media/media-ffmpeg.h: Include avcodec.h
+
+ * m4/sxe-mm.m4 (SXE_MM_CHECK_FFMPEG): Verify availability of all
+ the included ffmpeg headers. And additional functions,
+ avio_alloc_context, avio_size, av_dump_format.
+ (SXE_CHECK_FFMPEG_HEADERS): Check also for avcodec.h
+ (SXE_CHECK_FFMPEG_LIBS): Check for av_dump_format,
+ avio_alloc_context, avio_size.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4 | 22 +++++++++++++++++++---
+ src/media/media-ffmpeg.c | 35 +++++++++++++----------------------
+ src/media/media-ffmpeg.h | 8 ++++++++
+ 3 files changed, 40 insertions(+), 25 deletions(-)
+
+commit 168dcabde2e534b7561492b4a3c2f028c76b6005
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 27 17:44:04 2015 -0500
+
+ Update ffmpeg codec and media constants
+
+ * src/media/media-ffmpeg.c (media_ffmpeg_analyse_audio): Use
+ AV_SAMPLE_* instead of SAMPLE_*.
+ (media_ffmpeg_open): Use AVMEDIA_TYPE_* instead of CODEC_TYPE_*.
+ (stream_component_open): Ditto.
+ (stream_component_close): Ditto.
+ (new_media_ffmpeg_open): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 46 +++++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+commit cd6a53c341ec2a70c48073d53be60396de0a14cf
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 27 17:33:42 2015 -0500
+
+ Fix metadata usage
+
+ * src/media/media-ffmpeg.h: Add include for dict.h
+
+ * src/media/media-ffmpeg.c (media_ffmpeg_streaminfo): Use
+ AVDictionary.
+ (dump_stream_info): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 112 +++++++++++++++++++++++++++++------------------
+ src/media/media-ffmpeg.h | 7 +++
+ 2 files changed, 77 insertions(+), 42 deletions(-)
+
+commit ebc75b9137ffe75cd6b7fa481eaf850593161b3a
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jul 3 00:05:57 2012 +1000
+
+ Sync up FFmpeg -- autoconf
+
+ This changeset is the first in a series to sync up our FFmpeg code with a
+ much more modern and up to date FFmpeg. This one takes care of the
+ autoconf side of things. It is cherry-picked from an earlier ffmpeg-fix
+ branch, squashing all the configuration related changes.
+
+ This changeset also introduces new minimum versions of libavformat and
+ libavcodec required by SXEmacs:
+
+ libavformat -- 55.12.100
+ libavcodec -- 55.18.102
+
+ * configure.ac: Need libs for avcodec as well as avformat. Add
+ in libavutil libs.
+
+ * m4/sxe-mm.m4 (SXE_MM_CHECK_FFMPEG): Rework it for modern
+ ffmpeg. Check for av_dict_get() in libavutil.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_HEADERS): Check for avcodec.h
+ and dict.h as well.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_LIBS): Check for libavutil.
+
+ * m4/sxe-mm.m4 (SXE_MM_CHECK_FFMPEG):
+
+ configure.ac | 4 +-
+ m4/sxe-mm.m4 | 164 ++++++++++-------------------------------------------------
+ 2 files changed, 30 insertions(+), 138 deletions(-)
+
+commit 281b40928f88db782e9e67ca3d4dede7de1536b8
+Merge: 528ced5 c263f68
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Dec 26 12:12:26 2015 +1000
+
+ A place to keep aliases to built-in constants when needed
+
+ * merges:
+ Add logged, but missing change from previous commit.
+ Segregate aliases to DEFVAR_CONST
+ Revert "Fix the fix, make pi a normal lisp var (Closes bug #176)"
+
+commit c263f680269e8f4efe8999785fdf8786b072b788
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Dec 26 12:04:53 2015 +1000
+
+ Add logged, but missing change from previous commit.
+
+ * lisp/Makefile.am (corelispels): Add const-aliases.el.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/Makefile.am | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit 7ffe58c3287caeb19c08ea91c7a2076a1a0f98e5
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Fri Dec 25 16:40:24 2015 -0500
+
+ Segregate aliases to DEFVAR_CONST
+
+ * lisp/float-sup.el: Remove alias for pi and e when bigfr is
+ available. These should now be defined in const-aliases, loaded
+ by startup.
+
+ * lisp/const-aliases.el (pi): Define const as bigfr-pi when bigfr
+ is available.
+ (e): Define as euler when bigfr is available.
+
+ * lisp/Makefile.am (corelispels): Add const-aliases.el to list of
+ files.
+
+ * lisp/startup.el (load-init-file): Require new const-aliases to
+ load the consts that cannot be dumped.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/const-aliases.el | 40 ++++++++++++++++++++++++++++++++++++++++
+ lisp/float-sup.el | 5 +----
+ lisp/startup.el | 3 +++
+ 3 files changed, 44 insertions(+), 4 deletions(-)
+
+commit d7ffc361167a55f4f608f69f4597072c361daf75
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Fri Dec 25 16:34:17 2015 -0500
+
+ Revert "Fix the fix, make pi a normal lisp var (Closes bug #176)"
+
+ This reverts commit 528ced5b22b7681234d5228d0a2a02d9a2305312.
+
+ lisp/float-sup.el | 5 ++++-
+ src/ent/ent-mpfr.c | 14 +++++---------
+ src/ent/ent-mpfr.h | 2 +-
+ 3 files changed, 10 insertions(+), 11 deletions(-)
+
+commit 528ced5b22b7681234d5228d0a2a02d9a2305312
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Dec 23 18:20:22 2015 +1000
+
+ Fix the fix, make pi a normal lisp var (Closes bug #176)
+
+ This change reverts the previous one, and then goes about closing bug 176
+ in a different way. Namely, by changing Vpi from being a
+ DEFVAR_CONST_LISP to a DEFVAR_LISP. IOW, a plain ordinary variable.
+
+ * src/ent/ent-mpfr.c (vars_of_ent_mpfr): Set Vpi to be a normal
+ lisp variable instead of a constant so packages like Calc can
+ let-bind them for their own evil and misguided purposes. :-)
+ Vbigfr_pi -> Vpi
+
+ * src/ent/ent-mpfr.h: Vbigfr_pi -> Vpi
+
+ * lisp/float-sup.el: Revert previous change.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/float-sup.el | 5 +----
+ src/ent/ent-mpfr.c | 14 +++++++++-----
+ src/ent/ent-mpfr.h | 2 +-
+ 3 files changed, 11 insertions(+), 10 deletions(-)
+
+commit 73dac82e98e87f568519ac37d591661063db3f54
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Dec 22 09:35:21 2015 +1000
+
+ Define `pi' in elisp, even with bigfr. (Closes bug #176)
+
+ An elisp constant defined with #'defconst can be let-bound, or otherwise
+ altered. But one that is defined in C cannot be. SXEmacs' pi is
+ sometimes defined in elisp, and sometimes in C, depending on whether it
+ has bigfr or not. The Calc XEmacs package let-binds pi in a couple of
+ places, resulting in errors when (featurep 'bigfr) => t.
+
+ With this change, pi is defined in elisp regardless of bigfr. But it will
+ still use bigfr to obtain the value if it is available.
+
+ * lisp/float-sup.el: Define pi in elisp, even if we have bigfr,
+ and in that case set it to what mpfr gives us.
+ Same for e.
+
+ * src/ent/ent-mpfr.c (init_ent_mpfr): Vpi -> Vbigfr_pi
+ (vars_of_ent_mpfr): Vpi -> Vbigfr_pi, pi -> bigfr-pi
+
+ * src/ent/ent-mpfr.h: Vpi -> Vbigfr_pi
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/float-sup.el | 5 ++++-
+ src/ent/ent-mpfr.c | 10 +++++-----
+ src/ent/ent-mpfr.h | 2 +-
+ 3 files changed, 10 insertions(+), 7 deletions(-)
+
+commit 9c176f58aa755c41e57153bf0ff69a5fbe0e3f8e
+Merge: 28b6c19 61fbf61
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Dec 21 17:04:30 2015 +1000
+
+ More warning fixes from Nelson
+
+ * merges:
+ Fixing more TTY/term warning/prototype craziness.
+ More term crazyness warnings fixing.
+
+commit 61fbf61544e71021154d47be583f492656dcd430
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 20 16:56:10 2015 -0500
+
+ Fixing more TTY/term warning/prototype craziness.
+
+ * src/ui/TTY/redisplay-tty.c: Include term.h if available.
+ Define prototypes for tgetent, tgetflag, tgetnum, tgetstr, tputs
+ if not available.
+
+ * configure.ac (CURSES_H_FILE): No default in variable expansion.
+ (TERMCAP_H_FILE): Ditto.
+ (TERM_H_FILE): Ditto.
+ (HAVE_TPARM_PROTOTYPE): Add 'checking' message.
+ (HAVE_TGETENT_PROTOTYPE): Check if tgetent prototype is available.
+ (HAVE_TGETFLAG_PROTOTYPE): Check if tgetflag prototype is available.
+ (HAVE_TGETNUM_PROTOTYPE): Check if tgetnum prototype is available.
+ (HAVE_TGETSTR_PROTOTYPE): Check if tgetstr prototype is available.
+ (HAVE_TPUTS_PROTOTYPE): Check if tputs prototype is available
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 108 ++++++++++++++++++++++++++++++++++++++++++---
+ src/ui/TTY/redisplay-tty.c | 28 +++++++-----
+ 2 files changed, 119 insertions(+), 17 deletions(-)
+
+commit 1b59d1cfe7ed5c2742559c44ae8a39d4d5d847af
+Merge: 3594867 28b6c19
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 20 15:06:32 2015 -0500
+
+ Merge branch 'master' into for-steve
+
+commit 35948676b7390a6061db87f0c4d4d27a6bc6d951
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 20 15:04:34 2015 -0500
+
+ More term crazyness warnings fixing.
+
+ * configure.ac (CURSES_H_FILE): Only define if we have one.
+ (TERMCAP_H_FILE): Ditto.
+ (TERM_H_FILE): Ditto.
+ (HAVE_TPARM_PROTOTYPE): Detect we tparm prototype is available.
+
+ * src/ui/TTY/terminfo.c: Only include TERM_H_FILE is we have it.
+ Properly decide when to define a tparm prototype, based on when
+ configure detected it.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 32 ++++++++++++++++++++++++++------
+ src/ui/TTY/terminfo.c | 9 ++++++++-
+ 2 files changed, 34 insertions(+), 7 deletions(-)
+
+commit 28b6c19b50a1ca8ae2529e76a18d00fc173398c3
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Dec 15 22:08:00 2015 +1000
+
+ Ego Patch -- Tweak my info a little.
+
+ * lisp/about.el (sxemacs-hackers): Add Aidan from XEmacs'
+ about.el.
+ (about-current-release-maintainers): Sort.
+ (about-url-alist): Add a couple of my URLs
+ (about-personal-info): Update me a little, use updated URLs
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/about.el | 34 ++++++++++++++++++++--------------
+ 1 file changed, 20 insertions(+), 14 deletions(-)
+
+commit fc9b048cf54e7566adf3e7dc73e5f123b3b9ef97
+Merge: 0f6f536 f7e5f0c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Dec 13 14:58:01 2015 +1000
+
+ Compiler warning fixes from Nelson
+
+ * merges:
+ Add missing declaration for make_bigz
+ More eliminate silly warnings
+ Eliminate silly warnings
+
+commit f7e5f0c2935452194ac6bceb527cc329f7f230f8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Dec 12 17:29:30 2015 -0500
+
+ Add missing declaration for make_bigz
+
+ * src/ent/ent-int.h: Add prototype for make_bigz
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ent/ent-int.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 69c63e4c742c7fc7dc742ec65074c02d3eb21e60
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Dec 12 16:45:27 2015 -0500
+
+ More eliminate silly warnings
+
+ * src/search.c (fast_string_match): Use a temporary to avoid
+ warning about constness.
+
+ * src/openssl.c (Fossl_digest_file): Mark set unused but unused
+ variable.
+ (Fossl_pem_write_public_key): Ditto.
+ (Fossl_pem_write_key): Ditto.
+ (Fossl_ssl_read): Ditto.
+ (Fossl_ssl_write): Ditto.
+ (ossl_ssl_prepare_cmeth): Ignore drop of const qualifier. The
+ alternative of using const for SSL methods everywhere is not
+ workable if we are to support older OpenSSL versions.
+ (ossl_ssl_prepare_smeth): Ditto.
+
+ * src/alloc.c (make_string_nocopy): Remove unnecessary cast.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/alloc.c | 2 +-
+ src/openssl.c | 26 +++++++++++++++++++++++++-
+ src/search.c | 7 +++++--
+ src/symbols.c | 4 ++--
+ 4 files changed, 33 insertions(+), 6 deletions(-)
+
+commit 62616191297ad80082837079694503ec7d65052d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Dec 12 15:56:06 2015 -0500
+
+ Eliminate silly warnings
+
+ * src/ui/TTY/terminfo.c (emacs_tparam): We don't control tparm
+ prototype where some have const qualifiers others don't. Turning
+ the warning off is the sensible choice.
+
+ * src/ui/glyphs-eimage.c (gif_instantiate): Small cosmetic change.
+
+ * src/ui/X11/event-Xt.c (init_event_Xt_late): We don't control the
+ prototype for XtAppSetTypeConverter where some have const others don't
+ so turning the warning off is the sensible option...
+
+ * src/ui/X11/device-x.c (Fx_get_font_path): Const all around keeps
+ compilers happy.
+
+ * src/events/event-stream.c (asyneq_handle_non_command_event): Use
+ a void* temporary to sidestep warning.
+
+ * src/regex.c (POP_FAILURE_POINT): Don't cast unnecessarily.
+ (re_match_2_internal): Turn off const cast warning since the code
+ will always need it one macro expansion or another. Can't win here
+ without cheating :)
+
+ * src/buffer.c (directory_is_current_directory): Cast
+ to target type, when conversion fails.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/buffer.c | 2 +-
+ src/events/event-stream.c | 3 ++-
+ src/regex.c | 14 ++++++++++++--
+ src/ui/TTY/terminfo.c | 12 +++++++++---
+ src/ui/X11/device-x.c | 4 ++--
+ src/ui/X11/event-Xt.c | 3 +++
+ src/ui/glyphs-eimage.c | 2 +-
+ 7 files changed, 30 insertions(+), 10 deletions(-)
+
+commit 0f6f5360b6de6ddbe9cf6febeb132372c2e113c4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Dec 12 13:32:24 2015 -0500
+
+ Fix openssl support
+
+ Let's detect needed features in configure instead of relying on
+ defines coming from openssl headers since they have proven not
+ to be reliable
+
+ * m4/sxe-crypto.m4 (SXE_OPENSSL_VERSION): Update versions of
+ openssl supported.
+ (SXE_TRY_OPENSSL_BIN_PREFIX): Update headers checked.
+ (SXE_CHECK_OPENSSL_LOCS): Ditto.
+ (SXE_CHECK_OPENSSL_FEATURES): Check for types and make openssl not
+ available if missing.
+
+ * src/openssl.h: Update guards on includes
+ (Lisp_SSL_CONN): Assume types are available as
+ configure should not include openssl for compilation if they
+ are not available.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-crypto.m4 | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/openssl.h | 25 +++++++++++++--
+ 2 files changed, 111 insertions(+), 7 deletions(-)
+
+commit fd2c93018b11b5bcb0aea8fa783f3c58046989bf
+Merge: 6ea51f3 763caa9
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Dec 7 09:26:44 2015 +1000
+
+ Compiler & warning related updates/fixes from Nelson
+
+ * merges:
+ Typo fix, 'max_align_t' -> 'sxe_max_align_t'
+ Silence warnings about usage of deprecated function when existing alternative is not available.
+ Use proper assert in lwlib
+ Fix typo on include guard for term.h
+ Use proper max in lwlib
+ Add some prototype to silence silly warnings.
+ Turn off warning about deprecated usage of __free_hook.
+ Use min/max from sxe-utils
+ Properly handle return from getcwd.
+ Shut set but unused warnings.
+ Rename our max_align_t to sxe_max_align_t
+ Mark variables set but unused.
+ Fixup assert definitions.
+ Add SXE_SET_UNUSED to shut unused warnings.
+ Cleanup utilities. Introduce sxe-memory.h
+ Address static inline warning in ase.
+ Prevent movemail from proceeding when setuid fails
+
+commit 763caa9fff2c6041ee54193f83a7ad56e94660d3
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Dec 7 09:23:24 2015 +1000
+
+ Typo fix, 'max_align_t' -> 'sxe_max_align_t'
+
+ * src/ui/specifier.c (aligned_sizeof_specifier): 'max_align_t' ->
+ `sxe_max_align_t'
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/ui/specifier.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5a34287d32d76245d5a28af73386d8c71d67e88f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 17:24:36 2015 -0500
+
+ Silence warnings about usage of deprecated function when existing alternative is not available.
+
+ * src/ui/X11/event-Xt.c (whatever): Add pragma to ignore warning.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/X11/event-Xt.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+commit 8a412ac83eb6b8109fd93dde9a79125f9ffbb313
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:54:49 2015 -0500
+
+ Use proper assert in lwlib
+
+ * src/ui/lwlib/lwlib-internal.h: Include sxe-utils instead of
+ defining assert.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/lwlib/lwlib-internal.h | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+commit c57ebd5cba75489c97cbe14f241e792619b09d5b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:53:42 2015 -0500
+
+ Fix typo on include guard for term.h
+
+ * src/ui/TTY/terminfo.c: Fix typo
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/TTY/terminfo.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f29f6b1e77808b36722014fe3c1754d1f5ac3562
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:52:42 2015 -0500
+
+ Use proper max in lwlib
+
+ * src/ui/lwlib/lwlib.c: Undefine max macro to use this type safe
+ alternative.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/lwlib/lwlib.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 182f58aeacc32908883b6b7d8d808c0ca16b5c0a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:50:21 2015 -0500
+
+ Add some prototype to silence silly warnings.
+
+ * src/effi.c(ffi_make_callback_x86): Add prototype.
+ * src/media/sound-jack.c (demux_internal): Ditto.
+ * src/mule/file-coding.c (autodetect_real_coding_system): Ditto.
+ * src/print.c (float_to_string): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/effi.c | 2 ++
+ src/media/sound-jack.c | 3 +++
+ src/mule/file-coding.c | 6 +++++-
+ src/print.c | 2 ++
+ 4 files changed, 12 insertions(+), 1 deletion(-)
+
+commit d2cfef1bb74e905f85dab23f3b1dfcf474eb6568
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:46:36 2015 -0500
+
+ Turn off warning about deprecated usage of __free_hook.
+
+ Since this is to try and avoid crashes on shutdown, it will either
+ be available and work, or linking will fail, which will be detected
+ by configure, and thus we will not use it.
+
+ * configure.ac: Add HAVE_FREE_HOOK when __free_hook is available.
+ Also fix detection of __after_morecore_hook.
+ * src/emacs.c (voodoo_free_hook): Ignore the warning about
+ deprecated variable.
+ * src/emacs.c (Fkill_emacs): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 22 +++++++++++++++++++++-
+ src/emacs.c | 16 ++++++++++++++++
+ 2 files changed, 37 insertions(+), 1 deletion(-)
+
+commit f8b54ac02452cfa17c403a08beed97efa245538c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:10:33 2015 -0500
+
+ Use min/max from sxe-utils
+
+ * src/ui/lwlib/xlwmenu.c: Include sxe-utils and remove the current
+ max macro.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/lwlib/xlwmenu.c | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+commit dc4582098947e7f4768c9a9841da2c47a0803d2d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:05:30 2015 -0500
+
+ Properly handle return from getcwd.
+
+ * src/realpath.c (xrealpath): Is getcwd returns NULL, also return
+ NULL. If we can't determine the cwd, then any relative path
+ processing fails.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/realpath.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit f76158def792b30973d21fd95aed52e96039532b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 16:02:46 2015 -0500
+
+ Shut set but unused warnings.
+
+ These are in the code for debug/inspection purposes.
+
+ * src/ui/lwlib/xlwgauge.c (GaugeExpose): Use SXE_SET_UNUSED.
+
+ * src/ui/lwlib/xlwcheckbox.c (DrawCheck):Ditto.
+
+ * src/sysdep.c (tty_init_sys_modes_on_device)
+ (tty_reset_sys_modes_on_device): Ditto.
+
+ * src/regex.c (re_match_2_internal): Ditto.
+
+ * src/mule/file-coding.c (Fdefine_coding_system_alias): Ditto.
+
+ * src/media/sound-oss.c (sound_oss_handle_aj_events): Ditto.
+
+ * src/media/sound-jack.c (sound_jack_handle_aj_events)
+ (sound_jack_process): Ditto.
+
+ * src/media/sound-ao.c (sound_ao_handle_aj_events): Ditto.
+
+ * src/media/sound-alsa.c (sound_alsa_handle_aj_events): Ditto.
+
+ * src/media/media-sndfile.c (media_sndfile_open): Ditto.
+
+ * src/media/media-mad.c (media_mad_read): Ditto.
+
+ * src/media/media-internal.c (media_internal_analyse_stream): Ditto.
+
+ * src/emacs.c (Fdump_emacs): Ditto.
+
+ * src/bytecode.c (execute_optimized_program): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/bytecode.c | 2 ++
+ src/emacs.c | 1 +
+ src/media/media-internal.c | 2 ++
+ src/media/media-mad.c | 1 +
+ src/media/media-sndfile.c | 2 ++
+ src/media/sound-alsa.c | 2 ++
+ src/media/sound-ao.c | 2 ++
+ src/media/sound-jack.c | 5 +++++
+ src/media/sound-oss.c | 2 ++
+ src/mule/file-coding.c | 1 +
+ src/regex.c | 3 +++
+ src/sysdep.c | 2 ++
+ src/ui/lwlib/xlwcheckbox.c | 3 +++
+ src/ui/lwlib/xlwgauge.c | 2 ++
+ 14 files changed, 30 insertions(+)
+
+commit 231bc2d28183d7def3772cb9f7410d98be486be8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 6 13:03:28 2015 -0500
+
+ Rename our max_align_t to sxe_max_align_t
+
+ This is needed because newer compilers now ship with this
+ symbol.
+
+ * src/sxe-utils.h: Rename max_align_t to sxe_max_align_t
+ * src/dumper.c (pdump_get_entry_list): Use sxe_max_align_t
+ (pdump_scan_by_alignment): Ditto.
+ (pdump): Ditto.
+ * src/opaque.c (aligned_sizeof_opaque): Ditto.
+ * src/opaque.h (Lisp_Opaque): Ditto.
+ * src/specifier.h (Lisp_Specifier): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/dumper.c | 20 ++++++++++----------
+ src/lstream.c | 2 +-
+ src/lstream.h | 2 +-
+ src/opaque.c | 2 +-
+ src/opaque.h | 2 +-
+ src/specifier.h | 2 +-
+ src/sxe-utils.h | 4 ++--
+ 7 files changed, 17 insertions(+), 17 deletions(-)
+
+commit 0afad4edf7ce3639d67d3535d2f12ce632cd6bd8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 27 17:35:16 2015 -0400
+
+ Mark variables set but unused.
+
+ * src/lisp.h (PRIVATE_EXTERNAL_LIST_LOOP_6): Mark elt as unused.
+ (PRIVATE_EXTERNAL_ALIST_LOOP_8): Set elt_car and elt_cdr as unused.
+ * src/mule/mule-ccl.c (CCL_WRITE_STRING): Set bytes as unused.
+ * src/ui/X11/dialog-x.c (dbox_descriptor_to_widget_value): Set
+ title as unused.
+ * src/ui/X11/glyphs-x.c (x_widget_instantiate): Set nm as unused.
+ * src/ui/X11/gui-x.c (button_item_to_widget_value): Set intlen as
+ unused.
+ * src/ui/X11/objects-x.c (x_font_instance_properties): Set
+ name_len as unused.
+ * src/ui/lwlib/lwlib-Xlw.c (xlw_update_one_widget): Set mw as
+ unused.
+ * src/ui/lwlib/xlwtabs.c (TabsResize): Set tab as unused.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lisp.h | 4 ++--
+ src/mule/mule-ccl.c | 1 +
+ src/ui/X11/dialog-x.c | 2 ++
+ src/ui/X11/glyphs-x.c | 4 +++-
+ src/ui/X11/gui-x.c | 4 ++++
+ src/ui/X11/objects-x.c | 2 ++
+ src/ui/lwlib/lwlib-Xlw.c | 3 +++
+ src/ui/lwlib/xlwtabs.c | 1 +
+ 8 files changed, 18 insertions(+), 3 deletions(-)
+
+commit 29c4caea228ce22a9bfa76ef833d4473a9be8979
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 27 17:28:23 2015 -0400
+
+ Fixup assert definitions.
+
+ * src/sxe-utils.h: Use assert_failed only when compiling emacs
+ itself. Also make assert a proper no-op expression, i.e.,
+ (void)0.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/sxe-utils.h | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 301c2aabd99739d5493b83bb71cb28e3dd5e8a48
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 27 17:26:39 2015 -0400
+
+ Add SXE_SET_UNUSED to shut unused warnings.
+
+ * src/sxe-utils.h (SXE_SET_UNUSED): Define macro to mark variables
+ set but unused, aka, dummy vars.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/sxe-utils.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit b84e8f01881114d77ad01ed16e50e561494a3c91
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 27 17:24:04 2015 -0400
+
+ Cleanup utilities. Introduce sxe-memory.h
+
+ Move all the memory related utilities to sxe-memory.h so that
+ sxe-utils.h can be included in contexts where the memory utils
+ are not welcome.
+
+ * src/sxemacs.h: Remove include for sxe-utils.h, lisp.h already
+ does it.
+ * src/lisp.h: Include new sxe-memory.h
+ * src/sxe-utils.h: Remove xnew, xnew_atomic, xnew_array,
+ xnew_atomic_array, xnew_and_zero, xzero, xnew_array_and_zero,
+ xrealloc_array, alloca_array, xstrdup
+ * src/sxe-memory.h: Add definitions removed from sxe-utils.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lisp.h | 1 +
+ src/sxe-memory.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/sxe-utils.h | 151 ----------------------------------------------
+ src/sxemacs.h | 2 +-
+ 4 files changed, 183 insertions(+), 152 deletions(-)
+
+commit aa7b146ed16d513b9f40fb79ca42e91116a70b67
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 27 17:14:52 2015 -0400
+
+ Address static inline warning in ase.
+
+ * modules/ase/ase-neighbourhood.h: Use extern_inline.
+ (ase_neighbourhood_point): Move definition to header.
+ (ase_neighbourhood_radius): Ditto.
+ (ase_neighbourhood_rational_measure): Ditto.
+ (ase_neighbourhood_lebesgue_measure): Ditto.
+ (_ase_neighbourhood_lebesgue): Inline dependency hoisted.
+ (_ase_neighbourhood_update_lebesgue): Ditto.
+ (_ase_neighbourhood_rational): Ditto.
+ (_ase_neighbourhood_update_rational): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/ase/ase-neighbourhood.c | 60 ------------------------
+ modules/ase/ase-neighbourhood.h | 101 ++++++++++++++++++++++++++++++++--------
+ 2 files changed, 81 insertions(+), 80 deletions(-)
+
+commit d870d2df966097d7d65b767eed35889657682c55
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 27 17:10:45 2015 -0400
+
+ Prevent movemail from proceeding when setuid fails
+
+ * lib-src/movemail.c (main): Exit is setuid fails
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/movemail.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+commit e3d0801a12b2b6ddb4720aaf9d1952b1d823e89e
+Merge: 14fb0b4 6ea51f3
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Sep 26 11:41:17 2015 -0400
+
+ Merge branch 'master' into for-steve
+
+commit 6ea51f307b0121b67ba06111ddedbfb16189ea44
+Merge: 8f74a8d 14fb0b4
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Sep 21 09:21:31 2015 +1000
+
+ Minor package-get cleanup + bldchain tweak
+
+ * merges:
+ Cleanup invalid mirrors
+ Cleanup mirrors
+ Improve missing header message
+ Improve detection libtool version detection
+
+commit 14fb0b4ba1fdf3d6c6c63f7c22b50aa4f8187921
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 20 12:57:43 2015 -0400
+
+ Cleanup invalid mirrors
+
+ * lisp/package-get.el (package-get-pre-release-download-sites):
+ Remove commented out entries from previous commit.
+ (package-get-download-sites): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/package-get.el | 77 -----------------------------------------------------
+ 1 file changed, 77 deletions(-)
+
+commit a2141c1d00c00cce549afa078d048f0802fad5a1
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 20 12:54:31 2015 -0400
+
+ Cleanup mirrors
+
+ * lisp/package-get.el (package-get-download-sites): Annotate
+ mirrors with connectivity difficulties or outdated contents.
+ Comment out mirrors which do not resolve or do not carry XEmacs
+ packages anymore.
+ (package-get-pre-release-download-sites): Ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/package-get.el | 149 ++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 98 insertions(+), 51 deletions(-)
+
+commit d1b630cec9bcf428d8f41ad8294674136b1ab90f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 20 10:52:44 2015 -0400
+
+ Improve missing header message
+
+ * configure.ac: Note that we also need Xt headers as newer distros
+ tend to package Xt headers separately from core X11.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4e3d7030d24968ceec61d1aca0a21feefef88632
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 20 10:51:00 2015 -0400
+
+ Improve detection libtool version detection
+
+ * autogen.sh: Use libtoolize for version if libtool is not to be
+ found.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ autogen.sh | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+commit 8f74a8dd656155dc7716bd1ce168bb086b44cb8b
+Merge: 6a46975 c94647f
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Sep 14 13:43:56 2015 +1000
+
+ TTY + General build chain related updates
+
+ * merges:
+ Conditional automake init
+ Small configure.ac fix
+ Fix info/Makefile.am for old automake
+ Allow m4 and autostuff to be customized
+ Enforce makeinfo version
+ Improve TTY library detection
+ Improve TTY section of summary
+ Add builtin tty support option
+ Forward compatible info in builddir (when CLEANFILES becomes obsolete)
+ Attempt to provide speed_t
+ Improve term initialization output
+ Provide helper defines
+ Allow for ncurses tinfo as TTY option
+
+commit c94647f78cb6bbefe60926513dfb2d3ca3e0dacc
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 13 18:10:27 2015 -0400
+
+ Conditional automake init
+
+ * configure.ac: Hugly hack to add info-in-buildir for automake >=
+ 1.14
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+commit dad5a180f46befe1a1c7af9ca2b0cbbda4de855c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 13 18:09:30 2015 -0400
+
+ Small configure.ac fix
+
+ * configure.ac: Fix typo, and determine SED and AWK early.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 5793c931bb2e06b238d1acfa9736bfe0055c00d1
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 13 18:08:24 2015 -0400
+
+ Fix info/Makefile.am for old automake
+
+ * info/Makefile.am: Turns out automake does not deal well with
+ unknown options. Horrible hack forthcoming in configure.ac.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/Makefile.am | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 3bbdbd725c0eedabcb84be9f9738f6c3610614e0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 13 18:06:21 2015 -0400
+
+ Allow m4 and autostuff to be customized
+
+ * autogen.sh: allow for environment variables to control which
+ git/m4/autoconf/automake binaries are used.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ autogen.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 54 insertions(+), 10 deletions(-)
+
+commit 977c0dd86106aaa81d1d49e9ea8051ce92643260
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 13 15:15:37 2015 -0400
+
+ Enforce makeinfo version
+
+ * m4/sxe-bldchain-progs.m4: Verify that makeinfo version is at
+ least 5.x
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-bldchain-progs.m4 | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit 5c14c1d0f287c56ced4276526f61d90ce2420212
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 18:12:21 2015 -0400
+
+ Improve TTY library detection
+
+ * configure.ac: Iterate over all "auto" libraries by order of
+ preference to find out which are linkable. Add libraries
+ requested on command line by adding --with-<lib>=yes before the
+ auto ones. Then find which libraries are needed to get all of the
+ required terminal functions. Check if combination still allows
+ for all functions to build. When all else fails if
+ --with-builtin-tty=yes is passed, use that.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 321 +++++++++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 202 insertions(+), 119 deletions(-)
+
+commit e0048c32e6de7b45bfacc683b81f0725581d883f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 18:09:15 2015 -0400
+
+ Improve TTY section of summary
+
+ * m4/sxe-summary.m4 (SXE_SUMMARY): Provide additional warning on
+ some of the tty options, and support for --with-tinfo and
+ --with-builtin-tty
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-summary.m4 | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+commit 3d73783dceefcc22ea86080c5dd40b00f887a324
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 18:08:12 2015 -0400
+
+ Add builtin tty support option
+
+ * configure.ac: Add disabled by default --with-builtin-tty as last
+ resort to get a workable build with no other libraries. A
+ workable terminal spec will be needed at runtime.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 97b46b308a60d7638a8ee0207e5176d8b232e712
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 14:05:29 2015 -0400
+
+ Forward compatible info in builddir (when CLEANFILES becomes obsolete)
+
+ * info/Makefile.am (AUTOMAKE_OPTIONS): Add info-in-builddir
+ automake option for forward compatibility.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 36622085bb772d206be2417635260ef4edeb7d89
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 14:02:47 2015 -0400
+
+ Attempt to provide speed_t
+
+ * ui/TTY/termcap.c: In our termcap-like implementation make sure
+ we provide speed_t if available.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/TTY/termcap.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit b04c7d2fc80d6b6f8c4f67059af51fa59f368872
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 14:01:32 2015 -0400
+
+ Improve term initialization output
+
+ * src/cmdloop.c (initial_command_loop): Provide better output when
+ terminal initialization fails. Now it does not look like a corrupt
+ message.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/cmdloop.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit d1a4d48f4954770121878971e81ee1c024966454
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 13:59:22 2015 -0400
+
+ Provide helper defines
+
+ * configure.ac: Make sure to define SED and ECHO as some system
+ autoconf macros use them without defining them (tsk tsk
+ libtool...)
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit adf025ccf5989bb271d3d1a843febb67609cd2dc
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Sep 8 13:57:40 2015 -0400
+
+ Allow for ncurses tinfo as TTY option
+
+ * configure.ac: Add --with-tinfo option
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 6a469751f4562ba7d6104a4db3c05e705801151e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Aug 24 18:14:59 2015 +1000
+
+ Disable "in-tree" builds.
+
+ * m4/sxe-srctree.m4 (SXE_CHECK_SRCDIR_HEALTH): Error if $blddir =
+ $srcdir.
+
+ * INSTALL: Add some blurb about in-tree builds no longer being
+ supported.
+ Minimum texinfo version is now 5.2.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ INSTALL | 36 +++++++++++++++++++++++++-----------
+ m4/sxe-srctree.m4 | 3 +++
+ 2 files changed, 28 insertions(+), 11 deletions(-)
+
+commit 74807b005e7c737b3f554847897facafd901710f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 23 17:40:02 2015 -0400
+
+ Make .info files be generated in builddir
+
+ * info/Makefile.am (CLEANFILES): According to automake, info files
+ are generated in builddir only if marked as user cleaned.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/Makefile.am | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+commit 2074af4b1b7854bbaa3c4cd3c57d62dc61a35a1d
+Merge: e01219e 74d5801
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Aug 23 11:13:16 2015 +1000
+
+ Misc build tweaks/updates from Nelson
+
+ * merges:
+ Document why the duplicate traversal is needed
+ Revert "Remove duplicate subdirs"
+ Make info be generated in buildidr
+ Remove duplicate subdirs
+ Improve liblzma pkg-config detection
+ Improve FFI pkg-config detection
+ Add new pkg-config macro SXE_PC_CHECK_EXISTS
+ Fix pkg-config autoconf macros
+ Automatically paths in site prefix to PKG_CONFIG_PATH
+
+commit 74d58019971b4ec0f9c88d9c95ca00066f46d0bb
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Aug 22 11:39:11 2015 -0400
+
+ Document why the duplicate traversal is needed
+
+ Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit b2f68744f35227b3008371facee6e89958af4a8a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Aug 22 11:33:41 2015 -0400
+
+ Revert "Remove duplicate subdirs"
+
+ This reverts commit 9cdb268091bd33e600448864eda49c3c8b365699.
+
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3883e7dad0f8334b72dcf38c39a19a9895ad1c35
+Merge: ba6346f 49ab5fa
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Aug 15 19:12:24 2015 -0400
+
+ Merge branch 'sxe_pc_check' into for-steve
+
+commit ba6346fd1f7ce61955e246d44cb254aa810529c8
+Merge: 57098f2 0a5fe99
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Aug 15 19:11:37 2015 -0400
+
+ Merge branch 'makeinfo_out_of_tree' into for-steve
+
+commit 0a5fe996bfed398bdf5c5f27c2552c361320fd4e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 9 14:19:35 2015 -0400
+
+ Make info be generated in buildidr
+
+ * info/Makefile.am (builddir, srcdir, SUBDIRS): Add settings to
+ generate info in buildir and reset SUBDIRS in order not to
+ recurse.
+
+ info/Makefile.am | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 9cdb268091bd33e600448864eda49c3c8b365699
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 9 14:18:20 2015 -0400
+
+ Remove duplicate subdirs
+
+ * Makefile.am (sxe_subdirs): Remove duplicate dirs
+
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 49ab5fac4cbf7edaa0ea3b9f4d10552c51837736
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 9 13:37:10 2015 -0400
+
+ Improve liblzma pkg-config detection
+
+ * m4/sxe-compress.m4: Also check for liblzma pkg-config modules
+ which is now commonly used.
+
+ m4/sxe-compress.m4 | 35 +++++++++++++++++++++++++++--------
+ 1 file changed, 27 insertions(+), 8 deletions(-)
+
+commit 3059c55db2238cb89dc4523608d5bcd3cfd634d8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 9 13:35:06 2015 -0400
+
+ Improve FFI pkg-config detection
+
+ * m4/sxe-emodffi.m4: Use the SXE_PC macros for pkg-config
+ detection of libffi.
+
+ m4/sxe-emodffi.m4 | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit 749c560c385d1332305e057a186cd50bfa54d5fe
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 9 13:31:32 2015 -0400
+
+ Add new pkg-config macro SXE_PC_CHECK_EXISTS
+
+ * m4/sxe-pkgconfig.m4: Add SXE_PC_CHECK_EXISTS which sets
+ sxe_cv_pc_[shmod]_exists to yes if module is configured via
+ pkg-config.
+
+ m4/sxe-pkgconfig.m4 | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+commit 7ea779b838ad6a1d28608bcfcaf3b4f0736425e8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 9 13:28:13 2015 -0400
+
+ Fix pkg-config autoconf macros
+
+ * m4/sxe-pkgconfig.m4: Correct quoting of shmod and MOD in
+ SXE_PC_CHECK_VERSION_ATLEAST, SXE_PC_CHECK_VERSION_ATMOST,
+ SXE_PC_CHECK_VERSION, SXE_PC_CHECK_LIBS, SXE_PC_CHECK_LDFLAGS,
+ SXE_PC_CHECK_CPPFLAGS
+
+ m4/sxe-pkgconfig.m4 | 48 ++++++++++++++++++++++++------------------------
+ 1 file changed, 24 insertions(+), 24 deletions(-)
+
+commit 57098f22777832b4aa91f1d4486886232a957484
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 9 13:23:05 2015 -0400
+
+ Automatically paths in site prefix to PKG_CONFIG_PATH
+
+ * ../configure.ac: If there is pkg-config and --with-site-prefixes
+ was passed to configure, also add those prefixes with
+ lib/pkgconfig to PKG_CONFIG_PATH.
+
+ configure.ac | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit e01219e73541a41ecd5c8739e59a07b5ffb89752
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jul 10 22:21:17 2015 +1000
+
+ Handle immediate autoloads (';;;###autoloadimmediate') better.
+
+ * lisp/autoload.el (process-one-lisp-autoload): Insert <immediate>
+ into the section header for immediate autoloads, to make sure the
+ upstream doesn't think there aren't any autoloads at all.
+
+ From: Mike Sperber <mike@xemacs.org>
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/autoload.el | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 7ce6c3cc03be110d63340d790a9c336125299e9b
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jul 10 16:21:34 2015 +1000
+
+ Support both "-*-coding:" and "-*- coding:" in magic cookies
+
+ The code responsible for checking coding sytem magic cookies in files was
+ only searching for "-*-coding:...", however most (most == all in SXEmacs,
+ but in XEmacs and GNU/Emacs most == majority) files that have these
+ cookies seem to use "-*- coding:...". This changeset means SXEmacs will
+ now honour the coding cookie regardless of it being "-*-coding" or
+ "-*- coding".
+
+ * src/mule/file-coding.c (autodetect_real_coding_system): Look for
+ " coding:" as well as "coding:"
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/mule/file-coding.c | 40 ++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 38 insertions(+), 2 deletions(-)
+
+commit f4138971962eba6a8dd94d7ddc1028e187aee41b
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jul 6 17:18:18 2015 +1000
+
+ Update the docstrings in the cl emodule.
+
+ This adds/updates the docstrings for the DEFUNs in the cl emodule. I've
+ basically just lifted the doctrings from the equivalent functions/macros
+ in cl*.el.
+
+ * modules/cl/cl-loop.c (Fcl_loop): Add a docstring.
+ (Fcl_doX): Typo in docstring.
+ (Fcl_dotimes): Update docstring.
+ (Fcl_dolist): Ditto.
+ (Fcl_do_symbols): Ditto.
+ (Fcl_loop_sentence): Direct folks to #'cl:loop docstring.
+
+ * modules/cl/cl.c (Fcl_pop): Add a docstring.
+ (Fcl_push): Ditto.
+ (Fcl_pushnew): Ditto.
+ (Fcl_eql): Ditto.
+ (Fcl_list_): Ditto.
+ (Fcl_tailp): Ditto.
+ (Fcl_ldiff): Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/cl/cl-loop.c | 301 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ modules/cl/cl.c | 35 ++++--
+ 2 files changed, 321 insertions(+), 15 deletions(-)
+
+commit 56c8b099ccef8240d76c6f88c3f31d86ae22cfba
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jul 4 12:23:33 2015 +1000
+
+ Partially sync files.el from XEmacs 21.5 for wildcard support.
+
+ This changeset partially syncs files.el with XEmacs 21.5 (cb65bfaf7110
+ tip) to give #'find-file and friends support for wildcards.
+
+ With this, you can do things like: `C-x C-f /path/to/*.c' and all .c files
+ in /path/to/ will be opened. Oh, and it also means that the current
+ ispell XEmacs package will work again.
+
+ * lisp/files.el (find-directory-functions): New.
+ (switch-to-next-buffer): New.
+ (switch-to-previous-buffer): New.
+ (switch-to-next-buffer-in-group): New and fixed to not use
+ obsolete vars.
+ (switch-to-previous-buffer-in-group): New. and fixed to not use
+ obsolete vars.
+ (find-file-create-switch-thunk): New.
+ (find-file): Synched up with XEmacs 21.5
+ cb65bfaf7110 tip.
+ (find-file-wildcards): New.
+ (find-file-suppress-same-file-warnings): New.
+ (find-file-noselect): Synched up with XEmacs 21.5 cb65bfaf7110
+ tip.
+ (find-file-noselect-1): New.
+ (insert-file-literally): New.
+ (find-file-literally): New.
+ (file-expand-wildcards): New.
+ (shell-quote-wildcard-pattern): New.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/files.el | 751 ++++++++++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 550 insertions(+), 201 deletions(-)
+
+commit 8735e449d5e2c97356dd317eae27cc075e059f55
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jul 3 21:35:00 2015 +1000
+
+ Run the testsuite with -vanilla to protect from local pollution.
+
+ This change just makes the testsuite run in a -vanilla SXEmacs instance
+ to keep local settings and packages out of the equation.
+
+ * tests/Makefile.am (tests_environment): Use -vanilla.
+ (check-formats, check-map, check-skiplists, check-%): Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ tests/Makefile.am | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 36ea5e75fe8caa7c5134fbd465af7d6f7697aa84
+Merge: 353afe8 5f6d015
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu Jul 2 17:01:03 2015 +1000
+
+ autogen.sh update from Horst
+
+ * merges:
+ remove GNUisms that break non-GNU stuff
+
+commit 5f6d015a3bc3ba49d5a47218b88efb39913ee3f6
+Author: Horst G. Burkhardt <mc@680x0.com>
+Date: Wed Jul 1 12:53:48 2015 +1000
+
+ remove GNUisms that break non-GNU stuff
+
+ Signed-off-by: Horst G. Burkhardt <mc@680x0.com>
+
+ autogen.sh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 353afe80cffff2e5e621aab8f9a7ae0f765ff2c4
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jun 28 15:40:19 2015 +1000
+
+ Fix quoting and indexing bug in git-for-steve.sh
+
+ * contrib/git-for-steve.sh (set_myremote): Remove quotes from
+ REMOTES value. And index counts from zero, not one.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 6a537a70e3a5c7623a82a20a3caf306d6a2b253e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jun 28 15:25:43 2015 +1000
+
+ Fix bugs in git-for-steve.sh script,
+
+ This changeset fixes one of those "hard to find" errors you get in shell
+ scripts that turn out to be a single character fix. Sheesh. So in the 2
+ days I spent tracking down this bloody 1 char fix I also tidied up the
+ rest of the script and improved the UI a tad. Also fixed a couple of
+ other bugs that hadn't been discovered yet. :)
+
+ * contrib/git-for-steve.sh: Fix/improve quoting throughout.
+ Some UI improvements.
+ (set_aliases): Add missing ')'.
+ (set_keys): Grep for '^default-key' instead of 'default-key' in
+ gpg.conf in case it is commented out.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 129 ++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 83 insertions(+), 46 deletions(-)
+
+commit e6c44735810e22bc17d6a037cb02e19d45b4d855
+Merge: c5b309c c4243d1
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 27 13:28:37 2015 +1000
+
+ Contrib script fix from Horst
+
+ * merges:
+ fix git-for-steve to work on systems that don't symlink /bin/sh to bash
+
+commit c5b309c7f2640ac5f39ba464688862effffc0b69
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 27 13:13:08 2015 +1000
+
+ Fix portability prob in git-for-steve.sh
+
+ * contrib/git-for-steve.sh: Make it a bash script.
+ (set_myremote): Properly quote $REMOTES
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c4243d1330e6f80767dc252a0537096890e59d25
+Author: Horst G. Burkhardt <mc@680x0.com>
+Date: Sat Jun 27 12:45:24 2015 +1000
+
+ fix git-for-steve to work on systems that don't symlink /bin/sh to bash
+
+ Signed-off-by: Horst G. Burkhardt <mc@680x0.com>
+
+ contrib/git-for-steve.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a25fa462ffd95d5e9113e7303ac968c90f2963f0
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jun 26 23:18:42 2015 +1000
+
+ Fix a couple of typos in the formats and aliases in git-for-steve.sh
+
+ * contrib/git-for-steve.sh (set_formats, set_aliases): Typo fixes.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit f99b3c7417506d3aa891d4998841de085672c3a3
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jun 26 14:10:10 2015 +1000
+
+ Temporarily turn off dbus detection.
+
+ Lets not build the dbus emodule until it actually does something.
+
+ * configure.ac: Disable dbus detection.
+
+ * modules/Makefile.am: Comment out DESCEND_DBUS to keep autogen.sh
+ happy.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac | 28 ++++++++++++++--------------
+ modules/Makefile.am | 6 +++---
+ 2 files changed, 17 insertions(+), 17 deletions(-)
+
+commit 9706bcac59a38104b91bbb106e37bc3a6f2ed8e2
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 15 17:37:10 2015 +1000
+
+ Update & fix texi docs to build clean against makeinfo v5.2
+
+ This seemingly monster changeset is nothing more than simple compile
+ warning fixes. But now the docs compile clean, and clean is good. :-)
+
+ * info/lispref/abbrevs.texi
+ * info/lispref/annotations.texi
+ * info/lispref/backups.texi
+ * info/lispref/buffers.texi
+ * info/lispref/building.texi
+ * info/lispref/commands.texi
+ * info/lispref/compile.texi
+ * info/lispref/consoles-devices.texi
+ * info/lispref/control.texi
+ * info/lispref/databases.texi
+ * info/lispref/debugging.texi
+ * info/lispref/dialog.texi
+ * info/lispref/display.texi
+ * info/lispref/ent.texi
+ * info/lispref/eval.texi
+ * info/lispref/extents.texi
+ * info/lispref/faces.texi
+ * info/lispref/files.texi
+ * info/lispref/frames.texi
+ * info/lispref/functions.texi
+ * info/lispref/glyphs.texi
+ * info/lispref/gutter.texi
+ * info/lispref/hash-tables.texi
+ * info/lispref/help.texi
+ * info/lispref/internationalization.texi
+ * info/lispref/intro.texi
+ * info/lispref/keymaps.texi
+ * info/lispref/ldap.texi
+ * info/lispref/lispref.texi
+ * info/lispref/lists.texi
+ * info/lispref/loading.texi
+ * info/lispref/macros.texi
+ * info/lispref/markers.texi
+ * info/lispref/menus.texi
+ * info/lispref/minibuf.texi
+ * info/lispref/modes.texi
+ * info/lispref/mule.texi
+ * info/lispref/numbers.texi
+ * info/lispref/objects.texi
+ * info/lispref/openssl.texi
+ * info/lispref/os.texi
+ * info/lispref/packaging.texi
+ * info/lispref/positions.texi
+ * info/lispref/postgresql.texi
+ * info/lispref/processes.texi
+ * info/lispref/range-tables.texi
+ * info/lispref/scrollbars.texi
+ * info/lispref/searching.texi
+ * info/lispref/sequences.texi
+ * info/lispref/specifiers.texi
+ * info/lispref/streams.texi
+ * info/lispref/strings.texi
+ * info/lispref/symbols.texi
+ * info/lispref/syntax.texi
+ * info/lispref/text.texi
+ * info/lispref/tips.texi
+ * info/lispref/toolbar.texi
+ * info/lispref/variables.texi
+ * info/lispref/windows.texi
+ * info/lispref/x-windows.texi
+ * info/sxemacs-faq.texi
+ * info/sxemacs/custom.texi
+ * info/sxemacs/menus.texi
+ * info/sxemacs/programs.texi
+ * info/sxemacs/sxemacs.texi
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/lispref/abbrevs.texi | 4 +-
+ info/lispref/annotations.texi | 14 +-
+ info/lispref/backups.texi | 14 +-
+ info/lispref/buffers.texi | 2 +-
+ info/lispref/building.texi | 2 +-
+ info/lispref/commands.texi | 68 ++---
+ info/lispref/compile.texi | 4 +-
+ info/lispref/consoles-devices.texi | 2 +-
+ info/lispref/control.texi | 26 +-
+ info/lispref/databases.texi | 2 +-
+ info/lispref/debugging.texi | 26 +-
+ info/lispref/dialog.texi | 4 +-
+ info/lispref/display.texi | 4 +-
+ info/lispref/ent.texi | 2 +-
+ info/lispref/eval.texi | 32 +--
+ info/lispref/extents.texi | 6 +-
+ info/lispref/faces.texi | 38 +--
+ info/lispref/files.texi | 58 ++---
+ info/lispref/frames.texi | 4 +-
+ info/lispref/functions.texi | 28 +-
+ info/lispref/glyphs.texi | 54 ++--
+ info/lispref/gutter.texi | 2 +-
+ info/lispref/hash-tables.texi | 6 +-
+ info/lispref/help.texi | 2 +-
+ info/lispref/internationalization.texi | 6 +-
+ info/lispref/intro.texi | 28 +-
+ info/lispref/keymaps.texi | 4 +-
+ info/lispref/ldap.texi | 2 +-
+ info/lispref/lispref.texi | 11 +-
+ info/lispref/lists.texi | 38 +--
+ info/lispref/loading.texi | 2 +-
+ info/lispref/macros.texi | 20 +-
+ info/lispref/markers.texi | 4 +-
+ info/lispref/menus.texi | 22 +-
+ info/lispref/minibuf.texi | 30 +--
+ info/lispref/modes.texi | 28 +-
+ info/lispref/mule.texi | 2 +-
+ info/lispref/numbers.texi | 4 +-
+ info/lispref/objects.texi | 110 ++++----
+ info/lispref/openssl.texi | 20 +-
+ info/lispref/os.texi | 86 +++---
+ info/lispref/packaging.texi | 4 +-
+ info/lispref/positions.texi | 22 +-
+ info/lispref/postgresql.texi | 2 +-
+ info/lispref/processes.texi | 30 +--
+ info/lispref/range-tables.texi | 6 +-
+ info/lispref/scrollbars.texi | 2 +-
+ info/lispref/searching.texi | 28 +-
+ info/lispref/sequences.texi | 2 +-
+ info/lispref/specifiers.texi | 6 +-
+ info/lispref/streams.texi | 2 +-
+ info/lispref/strings.texi | 4 +-
+ info/lispref/symbols.texi | 4 +-
+ info/lispref/syntax.texi | 18 +-
+ info/lispref/text.texi | 80 +++---
+ info/lispref/tips.texi | 4 +-
+ info/lispref/toolbar.texi | 6 +-
+ info/lispref/variables.texi | 34 +--
+ info/lispref/windows.texi | 2 +-
+ info/lispref/x-windows.texi | 12 +-
+ info/sxemacs-faq.texi | 464 ++++++++++++++++-----------------
+ info/sxemacs/custom.texi | 78 +++---
+ info/sxemacs/menus.texi | 4 +-
+ info/sxemacs/programs.texi | 2 +-
+ info/sxemacs/sxemacs.texi | 3 +-
+ 65 files changed, 820 insertions(+), 820 deletions(-)
+
+commit 21e3604bb7ab3d5e64cfbbb90a9b04ed8ca7ad07
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 15 14:34:36 2015 +1000
+
+ Update SPPM
+
+ * info/sppm.texi (IRC): JackaLX -> SteveYoungs
+
+ * info/sppm.texi (Voting): Votes to be decided by simple majority,
+ which I think is easier and fairer.
+
+ * info/sppm.texi (Sending a patch from a git repo): Update, use
+ the "for-steve" workflow, encourage GnuPG signing, mention and
+ recommend git-for-steve.sh.
+
+ * info/sppm.texi (Making Releases): Update to bring it inline with
+ what I actually do on release day.
+
+ * info/sppm.texi (Compatibility): Clarify a little.
+
+ * info/sppm.texi (Setting up a publicly accessible repo):
+ Explicitly use `git-for-steve.sh' in the example setup, and
+ mention it in the text.
+
+ * info/sppm.texi (Other Developers' Repositories): Add everyone's
+ repo that I know of.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/sppm.texi | 188 ++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 91 insertions(+), 97 deletions(-)
+
+commit fcfc7afbe817a619561ed91fa591c8ff482a1198
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 14 10:51:47 2015 -0400
+
+ Fix cl-loop-parser.y for bison 2.7
+
+ * modules/cl/cl-loop-parser.y: Use double quotes for api.prefix
+
+ modules/cl/cl-loop-parser.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8169c5886ae90461017c67b917566d519600f285
+Merge: 74a31d3 82008a1
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 14 10:07:33 2015 -0400
+
+ Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 82008a117980636406a20d417ca5197d003557c8
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jun 14 16:01:39 2015 +1000
+
+ Add 'scan-error' error type.
+
+ * src/syntax.c: Add `Qscan_error'.
+
+ * src/syntax.c (syms_of_syntax): DEFERROR_STANDARD it.
+
+ * src/syntax.c (scan_lists): Use it.
+
+ * lisp/subr.el (error): Add it to the docstring.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/subr.el | 1 +
+ src/syntax.c | 24 +++++++++++++++++++-----
+ 2 files changed, 20 insertions(+), 5 deletions(-)
+
+commit 65b1733aae3061ad18529ff38b00ed3e3bc38ea7
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 13 14:10:27 2015 +1000
+
+ Error when callbacks aren't available in curl:download
+
+ * lisp/ffi/ffi-curl.el (curl:download): Error when attempting to
+ dl to a buffer when that can't be done.
+
+ * lisp/ffi/ffi-curl.el (curl:download&): Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/ffi/ffi-curl.el | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+commit 1d6df596fd2a9f316a7b1abaa59a1e390d6db1d1
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 13 11:35:00 2015 +1000
+
+ Update cl-loop-parser grammar file for bison 3.x
+
+ This allows the cl emodule to build with bison version 3.x, and sets
+ the minimum required version to 2.7
+
+ * m4/sxe-bldchain-progs.m4 (SXE_PROG_BISON): Set minimum bison
+ version needed to v2.7.x,
+
+ * modules/cl/cl-loop-parser.y: Use api.prefix, api.pure instead of
+ name-prefix, pure_parser which are deprecated.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ m4/sxe-bldchain-progs.m4 | 2 +-
+ modules/cl/cl-loop-parser.y | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 171d5ad3a3a9006d4c03acc2136a0a95047d46e9
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 13 00:22:32 2015 +1000
+
+ Try to gracefully handle not having ffi-callbacks.
+
+ The change in 3ba78988 (effi.c) meant that ffi-curl.el and ffi-sqlite.el
+ could not be loaded if you weren't on a i386 machine. This changeset
+ takes care of that.
+
+ * lisp/ffi/ffi-curl.el (curl:cb-write-to-buffer): Wrap in
+ #'ignore-errors because our ffi-callbacks don't work on x86_64.
+
+ * lisp/ffi/ffi-curl.el (curl:download): Only attempt dl to a
+ buffer if curl:cb-write-to-buffer is bound.
+
+ * lisp/ffi/ffi-sqlite.el (sqlite-generic-collation): Wrap in
+ #'ignore-errors because our ffi-callbacks don't work on x86_64.
+
+ * lisp/ffi/ffi-sqlite.el (sqlite-create-collation): Error if
+ sqlite-generic-collation isn't bound.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/ffi/ffi-curl.el | 22 ++++++++++++----------
+ lisp/ffi/ffi-sqlite.el | 46 ++++++++++++++++++++++++++--------------------
+ 2 files changed, 38 insertions(+), 30 deletions(-)
+
+commit 0d3f550c44818fecad83d7d12f99fbe3457e406f
+Merge: ce7e32b 74a31d3
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jun 12 10:33:27 2015 +1000
+
+ Rework dirname tests & prevent 2 cores at configure time
+
+ * merges:
+ Fix configure dirname. Also streamline dirname usage.
+ Fix configure check for realpath and dirname. Also streamline dirname usage.
+
+commit 74a31d33deff58c3b6aa664b3b43ccd53d567426
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Jun 11 15:21:54 2015 -0400
+
+ Fix configure dirname. Also streamline dirname usage.
+
+ POSIX 1003.1 states: "The dirname() function may modify the string
+ pointed to by path, and may return a pointer to static storage
+ that may then be overwritten by subsequent calls to dirname()."
+
+ Source: http://www.unix.com/man-page/POSIX/3posix/dirname/
+
+ Because of this the only sane way of using dirname is to allocate
+ our own copy of the argument, call dirname and then copy to the
+ result.
+
+ The interesting news is we don't call xdirname anywhere in our
+ code, yes, not even in Ffile_dirname. In fact the contract as far
+ as the '/' termination and behavior on "non directory" is
+ completely different and actually changing it would break
+ build-autoloads.el and packages.el (easily fixed), and god knows
+ what other user code.
+
+ * m4/sxe-fs-funs.m4: Remove _SXE_CHECK_DIRNAME_SIDE_EFFECT,
+ _SXE_CHECK_DIRNAME_RETVAL_OWNER and
+ _SXE_CHECK_DIRNAME_RETVAL_OWNER tests since the change in xdirname
+ makes these checks not necessary.
+
+ * m4/sxe-fs-funs.m4 (SXE_CHECK_BROKEN_DIRNAME): Remove calls to
+ _SXE_CHECK_DIRNAME_SIDE_EFFECT, _SXE_CHECK_DIRNAME_RETVAL_OWNER
+ and _SXE_CHECK_DIRNAME_RETVAL_OWNER.
+
+ * src/sysdep.h (x__dirname): Provide only a POSIX-aware usage of
+ dirname. This means copying the argument to the result buffer
+ before calling dirname and the result (if not at start of the
+ result buffer), using xstrncpy if non-overlapping, memmove if
+ overlapping.
+
+ m4/sxe-fs-funs.m4 | 149 ------------------------------------------------------
+ src/sysdep.h | 41 ++++++---------
+ 2 files changed, 15 insertions(+), 175 deletions(-)
+
+commit 7a9be1a3ab4af6745629a3b1f7dbce581461d9e6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Jun 11 14:58:52 2015 -0400
+
+ Fix configure check for realpath and dirname. Also streamline dirname usage.
+
+ * m4/sxe-fs-funs.m4 (_SXE_CHECK_REALPATH_RETVAL_OWNER): Add double
+ call strategy to verify usage of internal memory.
+
+ m4/sxe-fs-funs.m4 | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit ce7e32b3f1157e493ceac23cc56cc9788f55c68e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu Jun 11 23:36:09 2015 +1000
+
+ Typo fix
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ m4/sxe-fs-funs.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 73eaf10ab548bfb1d23914980af54846fe0db29c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu Jun 11 21:47:36 2015 +1000
+
+ git-for-steve tweaks.
+
+ * contrib/git-for-steve.sh: Take more of a "git approach" to
+ testing if we're in a SXEmacs repo.
+
+ Save the current branch name in case we move from it and want to
+ return.
+
+ popd _before_ popping the stash.
+
+ Give the user a way to bypass the origin check.
+
+ (set_branch): Only switch to master if it's not the current
+ branch.
+ Ask if the user wants to switch to for-steve, instead of forcing
+ it.
+
+ (set_aliases): Make alias.alias only show aliases, and not every
+ config containing "alias".
+ Add a couple of new aliases:
+ "cob" -> "checkout -b"
+ "prb" -> "pull --rebase"
+ "wb" -> "rev-parse --abbrev-ref HEAD".
+
+ * contrib/git-for-steve.sh (LETSPOP):
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 76 ++++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 57 insertions(+), 19 deletions(-)
+
+commit 3ba78988a2a64e1a8e9770cad11e27abaa424890
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Wed Jun 10 10:29:49 2015 -0400
+
+ Signal error when callbacks are not supported in ffi
+
+ src/effi.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit a327fadefa474ec1a26694c7c280bf2fc0c473fb
+Merge: 6ac88d7 5d70e77
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 10 23:10:48 2015 +1000
+
+ Help prevent input method failures in XCreateIC from Nelson
+
+ * merges:
+ Avoid XCreateIC failures
+ Document LANG and XMODIFIERS in case of XCreateIC failure
+ Document LANG and XMODIFIERS in case of XCreateIC failure
+ Document XCreateIC issue
+
+commit 6ac88d720a08579cae5c5da6e9c222d98b8a32c1
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 10 18:22:08 2015 +1000
+
+ Re-write the git-for-steve.sh script
+
+ Many thanks and kudos to Nelson for not only writing the original script,
+ but for putting up with my endless questions on IRC.
+
+ The old script was great, and in fact I referenced it countless times in
+ the past to find out how to do certain git things, but it only went as far
+ as to print suggestions to stdout as to what you should change. This new
+ improved incarnation goes much further.
+
+ Here is what it _won't_ do:
+
+ It won't do anything if you're not in a SXEmacs source tree
+ It won't change anything that is already set without asking
+ It won't mess up a dirty WD, so you could run it right in the middle of
+ hacking if you wanted to
+ It won't do the wrong thing if you run it a 2nd, 3rd, 4th time (all bets
+ are off for the 5th run, no I'm kidding, it is safe to run as
+ often as you like)
+
+ What it does do is take care of everything SXEmacs-git related that you
+ can think of and probably a few things that you haven't.
+
+ * contrib/git-for-steve.sh: Complete re-write.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 671 ++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 575 insertions(+), 96 deletions(-)
+
+commit 5d70e776aa4cb1f0385e3d0e317951853e6d244a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 16:24:47 2015 -0400
+
+ Avoid XCreateIC failures
+
+ * src/mule/input-method-xlib.c(XIM_init_frame): Do not specify
+ XNStatusAttributes unless there is a XIMStatusArea. Some XIM
+ implementations are very sensitive to this (ibus is one
+ example).
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/mule/input-method-xlib.c | 43 ++++++++++++++++++++++++++-----------------
+ 1 file changed, 26 insertions(+), 17 deletions(-)
+
+commit f9b289e253a0a24c5e887dd3f72fc11fb5a0a14b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 16:08:57 2015 -0400
+
+ Document LANG and XMODIFIERS in case of XCreateIC failure
+
+ * src/mule/input-method-xlib: Add xim_warn2 macro.
+
+ * src/mule/input-method-xlib(XIM_init_frame): Get and output to
+ stderr the value of LANG and XMODIFIERS to help
+ troubleshooting.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/mule/input-method-xlib.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+commit 2ed3098165fffb3a401b2b439343718466ae4075
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 16:07:35 2015 -0400
+
+ Document LANG and XMODIFIERS in case of XCreateIC failure
+
+ * src/intl.c(init_input): Get and output to stderr the value of
+ LANG and XMODIFIERS to help troubleshooting.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/intl.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit 4b800457dd3b31c12a667583e68c895e49499fe9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 16:06:38 2015 -0400
+
+ Document XCreateIC issue
+
+ * PROBLEMS: Add description of XCreateIC failure
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ PROBLEMS | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 84605ad5745c071f0248e2e24d8b683483b47c47
+Merge: 0ba0b03 79aa021
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 8 01:50:31 2015 +1000
+
+ contrib update from Nelson
+
+ * merges:
+ Provide guidance on the developer and maintainer key tag
+ GPG key mandatory
+ Provide support contact
+
+commit 0ba0b0341b37c4a0ad0059f7819f018aabd94b98
+Merge: 071ccf6 78172dd
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 8 01:07:27 2015 +1000
+
+ Compiler warning fixes from Nelson
+
+ * merges:
+ Remove unused variable.
+ Remove unused variable and dead code.
+ Silence variable set but not used in macro expansion.
+ Silence some variable set but not used warnings.
+ Remove unused variable (value already inspectable)
+ Silence some variable set but not used warnings.
+ Silence some variable set but not used warnings.
+
+commit 79aa0217a255dd85b17376fa4b0b07107cba8452
+Merge: 78172dd 4e5298e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 11:00:53 2015 -0400
+
+ Merge branch 'signing_for_steve' into for-steve
+
+commit 4e5298ea8bc97687708d003eb4b8d8e8a76eea77
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 10:57:26 2015 -0400
+
+ Provide guidance on the developer and maintainer key tag
+
+ * contrib/git-for-steve.sh: Check and provide steps for
+ creating the developer key tag. Check and provide steps for
+ importing the maintainer key.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-for-steve.sh | 41 +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 41 insertions(+)
+
+commit 686677a9a9875474d550012c7222d35328288593
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 10:56:01 2015 -0400
+
+ GPG key mandatory
+
+ * contrib/git-for-steve.sh: Check for gpg installed and make it
+ mandatory. Also when the signing key is not set provide an
+ educated guess.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-for-steve.sh | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit 52ba1ca9eada4c08c9199f529a5974475d0ac9ee
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 10:55:07 2015 -0400
+
+ Provide support contact
+
+ * contrib/git-for-steve.sh: Add reference to #sxemacs channel
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-for-steve.sh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 78172dd9180e566d6ea09a80039f365be75b4d15
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 09:42:56 2015 -0400
+
+ Remove unused variable.
+
+ * modules/cl/cl-loop.c(cl_loop_dllist_map_return): Remove 'state'
+ because it is only set to one and never read.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/cl/cl-loop.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 053b107e1d8a11b2233154d528cfeeb47b157712
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 09:41:34 2015 -0400
+
+ Remove unused variable and dead code.
+
+ * src/ui/redisplay-output.c(compare_display_blocks): Remove
+ 'block_end' and the commented code that used it - Commented out
+ since '97 seems like dead and buried...
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/redisplay-output.c | 29 ++---------------------------
+ 1 file changed, 2 insertions(+), 27 deletions(-)
+
+commit cf2701895eb01ec2f5b52ccfe121521f29139fd9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 09:39:46 2015 -0400
+
+ Silence variable set but not used in macro expansion.
+
+ * src/lisp.h(GET_EXTERNAL_LIST_LENGTH): Provide usage of
+ 'GELL_elt'.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lisp.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 05a8cbcc0861a78dfae90fa7b213c5363d2fb4c6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 09:36:16 2015 -0400
+
+ Silence some variable set but not used warnings.
+
+ * modules/ase/ase-interval.c(ase-interval): Provide usage for
+ 'args'. Not removed in order to provide an additional stack
+ reference for argument lisp objects.
+
+ * modules/cl/cl-loop.c(cl:loop-sentence): Provide usage for
+ 'parse_result'. Could be useful in debug inspection.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/ase/ase-interval.c | 1 +
+ modules/cl/cl-loop.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 4f4fea42295b3bb7f98e9ad3a97a31da7064f7e6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 09:31:23 2015 -0400
+
+ Remove unused variable (value already inspectable)
+
+ * src/ui/scrollbar(update_scrollbar_instance): Remove
+ 'new_window' as its value can be inspected as 'w'.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/scrollbar.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 0e4a0a8dfcf1a4e15c733df913b56f92652c279e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 09:22:18 2015 -0400
+
+ Silence some variable set but not used warnings.
+
+ * src/ui/redisplay.c(regenerate_window_extents_only_changed,
+ regenerate_window_incrementally): Provide 'new_start' usage
+
+ * src/ui/specifier.c(specifier_instance): Provide 'tag' usage
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/redisplay.c | 4 ++++
+ src/ui/specifier.c | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit b3b44e277cae41063ccedfef923fda6e6bddb1a8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 7 09:05:38 2015 -0400
+
+ Silence some variable set but not used warnings.
+
+ * lib-src/etags.c(just_read_file): provide 'dummy' usage.
+
+ * lib-src/ootags.c(just_read_file): provide 'dummy' usage.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c | 1 +
+ lib-src/ootags.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 071ccf620b24b2ea44a31c33b9c09024e18f06c1
+Merge: f65a669 0fe7a46
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jun 7 10:59:41 2015 +1000
+
+ Path fix for doc-directory from Nelson
+
+ * merges:
+ Properly handle doc-directory
+
+commit 0fe7a465602563c035aa4c76621d34d71922ca01
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jun 6 11:37:20 2015 -0400
+
+ Properly handle doc-directory
+
+ * lisp/setup-paths.el (paths-find-doc-directory): use
+ exec-directory if configuration-doc-directory is nil as promised
+ in the documentation for doc-directory.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/setup-paths.el | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit f65a66933fc6a95ea7eae70995545fedc1f26586
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 6 16:11:09 2015 +1000
+
+ Fix cross-reference in lispref/packaging.texi
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/lispref/packaging.texi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 858233662e9c12ffe5a4ddcff74ea64845034859
+Merge: 4bf599c 1ae91c6
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 6 15:34:41 2015 +1000
+
+ XDG-compliant location for early-packages
+
+ * xdg-pkgs:
+ XDG Compliant user package tree -- doc updates.
+ XDG Compliant user (early) packages tree.
+
+commit 1ae91c6195b2f2f8e645dd0774b4efad0fbb8b79
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jun 6 14:04:44 2015 +1000
+
+ XDG Compliant user package tree -- doc updates.
+
+ This updates the documentation to reflect the new location for user
+ (early) packages.
+
+ * PROBLEMS: Add section about early-packages locations.
+
+ * README.packages: Update the text relating to user packages.
+
+ * etc/sxemacs.1 (FILES): Ditto.
+
+ * info/lispref/packaging.texi (The User View): Update.
+
+ * info/new-users-guide/custom2.texi (Init File): Typo fix.
+
+ * info/sxemacs-faq.texi (Q5.3.3): Ditto.
+
+ * info/sxemacs/cmdargs.texi (Command Switches): Add
+ -user-pkgs-directory.
+
+ * info/sxemacs/startup.texi (Startup Paths): Update for current
+ reality.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ PROBLEMS | 13 ++++-
+ README.packages | 16 ++++--
+ etc/sxemacs.1 | 38 ++++++++------
+ info/lispref/packaging.texi | 104 ++++++++++++++++++++++++--------------
+ info/new-users-guide/custom2.texi | 4 +-
+ info/sxemacs-faq.texi | 2 +-
+ info/sxemacs/cmdargs.texi | 6 +++
+ info/sxemacs/startup.texi | 63 ++++++++++++-----------
+ 8 files changed, 153 insertions(+), 93 deletions(-)
+
+commit 30e80ecbf0baf6d0bed7780ee90cfa1859546f4f
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu Jun 4 23:36:25 2015 +1000
+
+ XDG Compliant user (early) packages tree.
+
+ With this changeset, the location for a user's local packages, the ones
+ that make up `early-packages', is now under ${XDG_DATA_HOME}/sxemacs.
+ That is normally ~/.local/share/sxemacs, which is the directory used when
+ the XDG environment variable isn't set.
+
+ If the user has forced use of the old legacy ~/.sxemacs for their init
+ directory, then that is where the early-packages will be instead of the
+ XDG location. A warning is displayed if package subdirectories are
+ detected in any 2 or more of ~/.sxemacs, ${XDG_CONFIG_HOME}/sxemacs, and
+ ${XDG_DATA_HOME}/sxemacs (symlinked directories are ignored).
+
+ There is also a new command line switch, `-user-pkgs-directory' to set the
+ early-packages directory to any location.
+
+ * lisp/package-admin.el (package-admin-find-top-directory): Use
+ `user-packages-topdir' instead of `user-init-directory'.
+ (package-admin-get-install-dir): Ditto.
+
+ * lisp/package-get.el (package-get-package-index-file-location):
+ Default location is now in `user-packages-topdir' instead of
+ `user-init-directory'.
+ (package-get-install-to-user-directory): Renamed from
+ `package-get-install-to-user-init-directory'. The latter is
+ defvaralias'd back.
+ (package-get-maybe-save-index): Use `user-packages-topdir' instead
+ of `user-init-directory'.
+
+ * lisp/packages.el (packages-find-user-topdir): New. Returns
+ `user-packages-topdir'.
+ (packages-compute-package-locations): Rename the arg to
+ `user-packages-topdir', and update the doc string.
+
+ * lisp/startup.el (command-line-do-help): Add `-user-pkgs-directory'.
+ (command-line-early): For `-user' set an XDG compliant directory
+ for `user-packages-topdir' if possible, fall back to the legacy
+ .sxemacs otherwise.
+ (startup-setup-paths): Use #'packages-find-user-topdir to set
+ `user-packages-topdir'.
+
+ * src/emacs.c (vars_of_emacs): New var, `Vuser_packages_topdir'.
+ (main_1): Handle new command line arg, `-user-pkgs-directory'. Set
+ `Vuser_packages_topdir'.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/package-admin.el | 39 +++++++++++---------
+ lisp/package-get.el | 13 ++++---
+ lisp/packages.el | 99 ++++++++++++++++++++++++++++++++++++++++++++-------
+ lisp/startup.el | 17 +++++++--
+ src/emacs.c | 36 +++++++++++++++++--
+ 5 files changed, 166 insertions(+), 38 deletions(-)
+
+commit 4bf599c548264a82eae767411cb613033dd2273b
+Merge: 01ee95f a41eac1
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon May 11 13:31:46 2015 +1000
+
+ autogen.sh fix. Closes bug 165 from Horst
+
+ * merges:
+ Fix autogen.sh to work at Horst's site and on FBSD in general
+
+commit a41eac13d38be52266aa130c459f87b790990b19
+Author: Horst G. Burkhardt <mc@680x0.com>
+Date: Mon May 11 12:52:59 2015 +1000
+
+ Fix autogen.sh to work at Horst's site and on FBSD in general
+
+ Signed-off-by: Horst G. Burkhardt <mc@680x0.com>
+
+ autogen.sh | 17 +++--------------
+ 1 file changed, 3 insertions(+), 14 deletions(-)
+
+commit 01ee95f714416d9966727aad1f66a01ff2c3f540
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun May 10 10:17:23 2015 +1000
+
+ Bring some consistency to command line switches
+
+ We have UNIX style single dash cmdline long-opts, and GNU style double
+ dash cmdline long-opts, but not every single dash long-opt has a
+ corresponding double dash long-opt, and vice verse. This changeset
+ rectifies that.
+
+ * lisp/startup.el (command-line-early): Add missing GNU style
+ `--long-option' for all `-long-option' that were lacking it.
+ (startup-setup-paths): ditto.
+ (command-switch-alist): Add `-h'.
+
+ * info/sxemacs/cmdargs.texi: Add missing command switches.
+
+ * src/emacs.c (main_1): Add `-show-dump-id', `-terminal',
+ `-no-dump-file', `-color-terminal', `-no-windows', `-h' command
+ switches.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/sxemacs/cmdargs.texi | 39 ++++++++++++++++++++++++++++++++-------
+ lisp/startup.el | 29 +++++++++++++++++++----------
+ src/emacs.c | 27 +++++++++++++++++----------
+ 3 files changed, 68 insertions(+), 27 deletions(-)
+
+commit ccf396e4aaaa572f1a3fe927dc482331dd016ee1
+Merge: 4821f02 b6eed55
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun May 10 07:23:55 2015 +1000
+
+ Merge branch 'xdg-init'
+
+commit b6eed55f4da11386e477920b369b47053ecac8ac
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu May 7 23:23:56 2015 +1000
+
+ XDG init -- Git rid of hack in site-start.el
+
+ It was wrong to use site-start.el to cope with a dynamic user init
+ directory. This changeset puts it all into startup.el and removes the
+ site-start.el file. Admins can breath a sigh of relief. :)
+
+ user-init-directory and lisp-initd-dir will now also be included in the
+ debugging output when using -debug-paths.
+
+ * lisp/Makefile.am (corelispels): Remove site-start.el
+
+ * lisp/site-start.el: Removed.
+
+ * lisp/startup.el (find-user-init-directory): Actually set
+ user-init-directory.
+ Warn if multiple init directories were found.
+ (forced-user-init-directory): New, non-nil when the
+ user-init-directory has been set explicitly via the command
+ line. NOT a user variable, keep ya grubby paws offit.
+ (command-line-early): Ensure that all paths are correct when using
+ "-u", "-user", "-user-init-directory", and inlude
+ user-init-directory and lisp-initd-dir with -debug-paths.
+ (startup-setup-paths): Use #'find-user-init-directory to maybe
+ find the user's init directory. Include user-init-directory, and
+ lisp-initd-dir in debug output when -debug-paths.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/Makefile.am | 15 +++----
+ lisp/site-start.el | 58 -------------------------
+ lisp/startup.el | 122 ++++++++++++++++++++++++++++++++++++++++++-----------
+ 3 files changed, 105 insertions(+), 90 deletions(-)
+
+commit 4821f02fd1a7e818bd11bb68fbc294e087c39892
+Merge: 04168e3 5a2368c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue May 5 13:55:39 2015 +1000
+
+ Support XDG-based init directory
+
+ * xdg-init:
+ XDG init -- Doc updates.
+ XDG Compliant init directory.
+
+commit 5a2368c9080b7ebf2a1f414c9d4802698c7f6f53
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue May 5 13:49:42 2015 +1000
+
+ XDG init -- Doc updates.
+
+ Brings all the docs relating to the init file up to date.
+
+ * PROBLEMS: Update section on user-init-file
+
+ * configure.ac (package-prefix): Use "user's home directory"
+ instead of "~/.sxemacs".
+
+ * etc/sample.init.el: Update comments.
+
+ * etc/sxemacs.1: Update Files section regarding init.el.
+
+ * info/lispref/os.texi (Start-up Summary): Update locations for
+ init.el.
+
+ * info/lispref/os.texi (Init File): Describe user-init-directory.
+
+ * info/new-users-guide/custom1.texi: s/Emacs/SXEmacs/
+
+ * info/new-users-guide/custom1.texi (Customization Basics): Cross
+ reference `Init File'.
+
+ * info/lispref/postgresql.texi
+ (Building SXEmacs with PostgreSQL support): Comment out silly
+ nonsence about "binary kits" and ftp sites. :)
+
+ * info/sxemacs-faq.texi (Q1.0.2): Update.
+
+ * info/sxemacs-faq.texi (Q1.0.3): Sources are at
+ http://downloads.sxemacs.org/, not ftp. And snapshots are on the
+ web too.
+
+ * info/sxemacs-faq.texi (Q1.4.1): Update and cross-ref `Init
+ File'. Remove talk of "migrating old .emacs". We've never done
+ that.
+
+ * info/sxemacs/cmdargs.texi (Command Switches): Update.
+ s/Emacs/SXEmacs/
+
+ * info/sxemacs/custom.texi (Init File): Update. Mention
+ user-init-directory, cross-ref to lispref "Init File".
+
+ * info/sxemacs/sxemacs.texi (Distrib): Point folks to
+ http://downloads.sxemacs.org
+
+ * lisp/ffi/ffi-magic.el: doc update example
+
+ * lisp/files.el (user-init-file): Update doc.
+
+ * lisp/info.el (Info-annotate): Ditto.
+
+ * lisp/issue-tracker.el (report-sxemacs-bug-help): Ditto.
+
+ * lisp/menubar-items.el (default-menubar): Don't hard-code
+ "~/.sxemacs/init.el".
+
+ * lisp/package-admin.el (package-admin-get-install-dir): comment update.
+
+ * info/lispref/display.texi (Warnings): update.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ PROBLEMS | 21 +++++++++++---
+ configure.ac | 2 +-
+ etc/sample.init.el | 31 ++++++++++++++------
+ etc/sxemacs.1 | 15 ++++++----
+ info/lispref/display.texi | 2 +-
+ info/lispref/os.texi | 60 ++++++++++++++++++++++++++++++---------
+ info/lispref/postgresql.texi | 4 ++-
+ info/new-users-guide/custom1.texi | 31 ++++++++++----------
+ info/sxemacs-faq.texi | 35 +++++++++--------------
+ info/sxemacs/cmdargs.texi | 55 ++++++++++++++++++-----------------
+ info/sxemacs/custom.texi | 18 ++++++------
+ info/sxemacs/startup.texi | 1 +
+ info/sxemacs/sxemacs.texi | 5 +---
+ lisp/ffi/ffi-magic.el | 4 +--
+ lisp/files.el | 6 ++--
+ lisp/info.el | 8 +++---
+ lisp/issue-tracker.el | 2 +-
+ lisp/menubar-items.el | 3 +-
+ lisp/package-admin.el | 3 +-
+ modules/configure.ac | 2 +-
+ 20 files changed, 183 insertions(+), 125 deletions(-)
+
+commit 1637e28a4d2034d934a1c7e7ea5a70b3fd32a577
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun May 3 01:56:21 2015 +1000
+
+ XDG Compliant init directory.
+
+ This changeset moves the init directory from ~/.sxemacs to
+ $XDG_CONFIG_HOME/sxemacs, falling back to ~/.config/sxemacs when
+ $XDG_CONFIG_HOME isn't set.
+
+ SXEmacs will continue to use ~/.sxemacs if that directory exists, unless
+ the XDG-based directory also exists. In that case, the XDG-based directory
+ will take precedence, unless the user has set $SXE_USE_LEGACY in their
+ environment.
+
+ If no init directories exist, use the XDG-based directory, unless
+ $SXE_USE_LEGACY has been set.
+
+ If multiple init directories exist a warning is displayed to the user
+ showing the directories found, and which is the one in use. This warning
+ can be suppressed by adding the symbol `multi-initd' to
+ `display-warning-suppressed-classes'
+
+ * lisp/startup.el (find-user-init-directory): New.
+ (user-init-directory): Set to empty string.
+ (user-init-directory-base): Removed.
+ (command-line-do-help): Warn that using -user may not be the
+ wisest of choices.
+ (command-line-early): When using -user set user-init-directory to
+ ~user/.config/sxemacs, or ~user/.sxemacs if that doesn't exist.
+ (site-start-file): Doc fix.
+
+ * lisp/site-start.el: New. Deals with the consequences of
+ computing a user-init-directory at run-time.
+
+ * lisp/Makefile.am (corelispels): Add site-start.el.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/Makefile.am | 15 +++++++-------
+ lisp/site-start.el | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ lisp/startup.el | 61 ++++++++++++++++++++++++++++++++++++++++--------------
+ 3 files changed, 111 insertions(+), 23 deletions(-)
+
+commit 04168e3fa98cd90961d773c5ffda67a6797f8dd7
+Merge: de79373 3c5bbc5
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Mar 17 09:20:29 2014 +1000
+
+ Support user/group lookups from Nelson
+
+ * merges:
+ Add support for Unix lookup by name to user-uid and user-gid
+ Add support for Unix groups comparable to user id
+
+commit 3c5bbc52f44e2ad0c3426c275a9ec7d5d4c2bae2
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Mar 16 18:57:18 2014 -0400
+
+ Add support for Unix lookup by name to user-uid and user-gid
+
+ * src/editfns.c (Fuser_uid): add optional parameter user_name. If
+ specified the system will lookup the user uid, return nil if that
+ user does not exist.
+
+ * src/editfns.c (Fuser_gid): add optional parameter group_name. If
+ specified the system will lookup the group gid, return nil if that
+ group does not exist.
+
+ * src/editfns.c (Fuser_real_uid): clarify that the uid returned is
+ that of the process.
+
+ * src/editfns.c (Fuser_real_gid): clarify that the uid returned is
+ that of the process.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/editfns.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 48 insertions(+), 10 deletions(-)
+
+commit 4b276034ba5da9f3a29d6825fc6f0ccda9f20b7a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Mar 16 17:35:12 2014 -0400
+
+ Add support for Unix groups comparable to user id
+
+ * src/Makefile.am (libsxecore_a_headers):Add new sysgrp.h header.
+
+ * src/sysgrp.h: New header
+
+ * src/editfns.c: Include sysgrp.h
+
+ * src/editfns.c (Fuser_group_name): New defun similar to
+ Fuser_login_name but for groups.
+
+ * src/editfns.c (user_group_name): Actual implementation of
+ user_group_name. Can be called by other C functions in SXEmacs.
+
+ * src/editfns.c (Fuser_gid): Group counterpart to user-uid
+
+ * src/editfns.c (Fuser_real_gid): Group counterpart to
+ user-real-uid
+
+ * src/editfns.c (syms_of_editfns): Register new defuns
+ Fiser_group_name, Fuser_gid, Fuser_real_gid
+
+ * src/lisp.h: Add prototype for internal user_group_name
+
+ * src/lisp.h: Add declaration of Fuser_group_name
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/Makefile.am | 2 +-
+ src/editfns.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/lisp.h | 2 ++
+ src/sysgrp.h | 22 +++++++++++++++++++
+ 4 files changed, 87 insertions(+), 4 deletions(-)
+
+commit de793738afb6127055c16c8d8ac6d7042043e914
+Merge: d0e6dd3 c8551e7
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Feb 14 12:09:44 2014 +1000
+
+ Mac OS fixes from Nelson
+
+ * merges:
+ Fix SEGV while building autoloads for modules in Mac OS X with gcc-4.8.2
+
+commit c8551e77dfdec81a9776d5fdfbd281b8e1eb86c5
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Feb 13 20:32:42 2014 -0500
+
+ Fix SEGV while building autoloads for modules in Mac OS X with gcc-4.8.2
+
+ This seems to be a bad interaction between the gcc generated
+ switch code and with the Mac OS X pthreads stubs, which clear rax
+ where fun is expected by gcc to reside.
+
+ This is the minimal set of changes that fixes the issue, but now I
+ believe we should comb the codebase for the usage of UNLIKELY and
+ only keep those that are really useful.
+
+ * src/map.c: Refactor the check of NILP(fun) to be outside the
+ current switch, so there is an additional switch(arity) with just
+ the NILP(fun) branch of the old one. It was also necessary to
+ remove the UNLIKELY hint, which was causing the error: Invalid
+ regexp: "Unmatched ( or \\("
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/map.c | 190 +++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 94 insertions(+), 96 deletions(-)
+
+commit d0e6dd336c8136eaefc8c6d3b44a59199266305b
+Merge: 3eb639f 4c568a0
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jan 17 00:03:07 2014 +1000
+
+ #'directory-files fix (Closes 163)
+
+ * bug-163:
+ XEmacs compatibility fix in #'directory-files (Closes Bug 163)
+
+commit 4c568a08815692f48a7f9ff5559ee759d1da2e9e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu Jan 16 23:58:16 2014 +1000
+
+ XEmacs compatibility fix in #'directory-files (Closes Bug 163)
+
+ For details see: http://issues.sxemacs.org/show_bug.cgi?id=163
+
+ * src/dired.c (directory_files_resultify): Return an unsorted list
+ when RESULT-TYPE is `non-nil' or `list'.
+
+ * src/dired.c (Fdirectory_files): Update doc string.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/dired.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 3eb639f7ab0b546ab41278799b179ebec54e3cf5
+Merge: c29cb39 48ac31d
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu Dec 26 09:31:54 2013 +1000
+
+ Autoconf warnfix from Nelson
+
+ * merges:
+ Remove annoying autoconf warning
+
+commit 48ac31db7c535b263cbfc2e69b553ea2351cc278
+Author: Nelson Ferreira <njsf@sxemacs.org>
+Date: Wed Dec 25 17:41:38 2013 -0500
+
+ Remove annoying autoconf warning
+
+ Under autoconf 2.64 and newer the current autoconf macros of SXEmacs emit the following
+ warning multiple times:
+
+ _LT_SYS_DYNAMIC_LINKER was expanded before it was required
+
+ * m4/sxe-libtool.m4 (_SXE_CHECK_LT2): Add AC_REQUIRE for
+ _LT_SYS_DYNAMIC_LINKER as recommend by
+ http://www.gnu.org/software/autoconf/manual/autoconf.html#Expanded-Before-Required
+
+ Signed-off-by: Nelson Ferreira <njsf@sxemacs.org>
+
+ m4/sxe-libtool.m4 | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit c29cb39a57d5ab516dbfbd219706ab4392d1b605
+Merge: 6af6e5f f6c5116
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Dec 9 11:31:22 2013 +1000
+
+ Texinfo 5 fixes + warn fixes from Nelson
+
+ * merges:
+ Avoid warnings of unused parameter.
+ Avoid warning about dangling else
+ Avoid warning about deprecated XKeycodeToKeysym
+ Do not complain in configure when not in git workspace
+ Make texinfo 5.x not break the build
+
+commit f6c5116b1cb279a24c795916de329c7084d319ab
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 8 19:09:59 2013 -0500
+
+ Avoid warnings of unused parameter.
+
+ The old way of doing if(parameter); elicits other warnings such as if without a body.
+ While one could "fix" that in clang with placing the ; on the next line, using
+ SXE_UNUSED seems much saner, as it coveys intent.
+
+ * src/ent/ent-mpc.c: move prototype of mpc_set_ui_fr to ent-mpc.h
+ * src/ent/ent-mpc.h: declare mpc_set_ui_fr for usage by alloc.c
+ * src/ent/ent-float.c (mark_float): Removed if, marked as SXE_UNUSED
+ * src/ent/ent-float.c (float_equal): ditto
+ * src/ent/ent-float.c (ent_rem_FLOAT_T): ditto
+ * src/ent/ent-float.c (ent_rem_FLOAT_T_INT_T): ditto
+ * src/ent/ent-gaussian.c (bigg_equal): ditto.
+ * src/ent/ent-gaussian.c (bigg_hash): ditto.
+ * src/ent/ent-gaussian.c (bigg_mark): ditto.
+ * src/ent/ent-gaussian.c (bigg_finalise): ditto.
+ * src/ent/ent-indef.c (indef_hash): ditto.
+ * src/ent/ent-mpc.c (bigc_finalise): ditto.
+ * src/ent/ent-mpfr.c (bigfr_finalise): ditto.
+ * src/ent/ent.c (default_real_precision_changed): ditto.
+ * src/alloc.c: include ent-mpc.h when it is defined so that bigc uses the
+ proper definitions/prototypes
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/alloc.c | 1 +
+ src/ent/ent-float.c | 14 ++++----------
+ src/ent/ent-gaussian.c | 20 ++++----------------
+ src/ent/ent-indef.c | 5 +----
+ src/ent/ent-mpc.c | 6 +-----
+ src/ent/ent-mpc.h | 8 ++++++++
+ src/ent/ent-mpfr.c | 5 +----
+ src/ent/ent.c | 11 +++--------
+ 8 files changed, 23 insertions(+), 47 deletions(-)
+
+commit 20e812d1ed069aee8cdb9868b57fafec9197d995
+Merge: a705a97 e045f09
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 8 18:59:15 2013 -0500
+
+ Merge remote-tracking branch 'myremote/for-steve' into for-steve
+
+commit a705a974fb4c585778827d45f19b8c27e0e3bfa9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 8 18:58:16 2013 -0500
+
+ Avoid warning about dangling else
+
+ * lib-src/etags.c (get_language_from_filename): Create block scope on
+ outer if
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit e045f09be81787fec1dd6a444d6e0ca25d4b83a0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 8 16:05:21 2013 -0500
+
+ Avoid warning about deprecated XKeycodeToKeysym
+
+ * m4/sxe-gui.m4 (SXE_CHECK_XTOOLKITS): Check for XKBlib.h and
+ if it exists check for XKbKeycodeToKeysym availability
+ * src/ui/X11/event-Xt.c: Include XKBlib.h if available
+ * src/ui/X11/event-Xt.c (whatever): Use XKbKeycodeToKeysym instead
+ of XKeycodeToKeysym if available
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-gui.m4 | 9 +++++++++
+ src/ui/X11/event-Xt.c | 8 ++++++++
+ 2 files changed, 17 insertions(+)
+
+commit f33e320fa18a63107726355deb186c15bd70caed
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 8 14:08:31 2013 -0500
+
+ Do not complain in configure when not in git workspace
+
+ * configure.ac: redirect to /dev/null the git describe so that git
+ error message is not in output.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 28048c31d319fa17172064ad3d46e2345f381a22
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Dec 8 13:59:33 2013 -0500
+
+ Make texinfo 5.x not break the build
+
+ These changes are mostly promoting sections to chapters and subsections to sections.
+
+ * info/custom.texi (Declaring Groups): Promote to chapter
+ * info/custom.texi (Declaring Variables): Ditto.
+ * info/custom.texi (Declaring Faces): Ditto.
+ * info/custom.texi (Usage for Package Authors): Ditto.
+ * info/custom.texi (Utilities): Ditto.
+ * info/custom.texi (The Init File): Ditto
+ * info/custom.texi (Wishlist): Ditto
+ * info/widget.texi (Introduction): Ditto
+ * info/widget.texi (User Interface): Ditto
+ * info/widget.texi (Programming Example): Ditto
+ * info/widget.texi (Setting Up the Buffer): Ditto
+ * info/widget.texi (Basic Types): Ditto
+ * info/widget.texi (Sexp Types): Ditto
+ * info/widget.texi (Widget Properties): Ditto
+ * info/widget.texi (Defining New Widgets): Ditto
+ * info/widget.texi (Widget Browser): Ditto
+ * info/widget.texi (Widget Minor Mode): Ditto
+ * info/widget.texi (Utilities): Ditto
+ * info/widget.texi (Widget Wishlist): Ditto
+ * info/widget.texi (Widget Internals): Ditto
+
+ * info/lispref/edebug-inc.texi (Instrumenting Macro Calls): Use
+ itemize instead of table. Texinfo 5 refuses a table with @bullet.
+
+ * info/lispref/faces.texi (Face Properties): Add @item for each paragraph.
+
+ * info/sxemacs-faq.texi: Inline tex for removed @hfill
+ * info/term.texi: remove problematic start @
+ * info/term.texi: Use {} instead of ()
+
+ * info/lispref/packaging.texi (Makefile Targets): Promote to section
+ * info/sppm.texi (Voting): Ditto
+ * info/sppm.texi (Coding Style): Ditto.
+ * info/sppm.texi (Setting up a publicly accessible repo): Ditto
+ * info/sppm.texi (Setting up a publicly accessible repo): Ditto
+ * info/widget.texi (Editable text fields): Ditto
+ * info/widget.texi (The link widget): Ditto
+ * info/widget.texi (The url-link widget): Ditto
+ * info/widget.texi (The push-button widget): Ditto
+ * info/widget.texi (The editable-field widget): Ditto
+ * info/widget.texi (The menu-choice widget): Ditto
+ * info/widget.texi (The radio-button-choice widget): Ditto
+ * info/widget.texi (The item widget): Ditto
+ * info/widget.texi (The choice-item widget): Ditto
+ * info/widget.texi (The toggle widget): Ditto
+ * info/widget.texi (The checkbox widget): Ditto
+ * info/widget.texi (The checklist widget): Ditto
+ * info/widget.texi (The editable-list widget): Ditto
+ * info/widget.texi (The group widget): Ditto
+ * info/widget.texi (constants): Ditto
+ * info/widget.texi (generic): Ditto
+ * info/widget.texi (atoms): Ditto
+ * info/widget.texi (composite): Ditto
+ * info/widget.texi (The Widget and Type Structures): Ditto
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/custom.texi | 14 ++++-----
+ info/lispref/edebug-inc.texi | 5 ++--
+ info/lispref/faces.texi | 4 +++
+ info/lispref/packaging.texi | 2 +-
+ info/sppm.texi | 8 +++---
+ info/sxemacs-faq.texi | 2 +-
+ info/term.texi | 4 +--
+ info/widget.texi | 68 ++++++++++++++++++++++----------------------
+ 8 files changed, 56 insertions(+), 51 deletions(-)
+
+commit 6af6e5f341e434e442499168cc26e0c97178fdcd
+Merge: cb118b6 3e9fb87
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Dec 1 15:12:03 2013 +1000
+
+ memory fix from Nelson
+
+ * merges:
+ Fix heap free in __pntw_1dict
+
+commit 3e9fb8750ab759e49f2f50cf3417d83753b180b2
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Nov 30 20:06:24 2013 -0500
+
+ Fix heap free in __pntw_1dict
+
+ * src/map.c(__pntw_1dict): when array is allocated in the heap, the primary
+ address is kept in keys, but later vals is freed. This is clearly a bug,
+ which can corrupt the heap in weird ways that are untraceable.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/map.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit cb118b68d6c6e77968c4e663c2e06a3b7c17cce6
+Merge: 3542a3a 2c5153f
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Oct 6 20:24:54 2013 +1000
+
+ Revert my tmp workaround for 162
+
+ * revert-tmp-fix:
+ Revert the temporary workaround for bug #162
+
+commit 2c5153f2ed84a86570d2a45341f5f06cb9c760c5
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Oct 6 20:22:53 2013 +1000
+
+ Revert the temporary workaround for bug #162
+
+ * lisp/build-autoloads.el (find-emod-directories): Revert the
+ workaround.
+
+ * lisp/emod-utils.el (emodule-completions): Ditto.
+
+ * lisp/emod-utils.el (list-modules): Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/build-autoloads.el | 22 +++++++---------------
+ lisp/emod-utils.el | 25 ++++++++-----------------
+ 2 files changed, 15 insertions(+), 32 deletions(-)
+
+commit 3542a3a5f02d6ba21333bc38731491015eb8935e
+Merge: 01dca6f f303f85
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Oct 6 20:11:10 2013 +1000
+
+ Closes bug #162 from Sebastian
+
+ * merges:
+ Summary: pass decoration triple to mapfam worker routines by value (instead of by-ref) Keywords: fix bug 162
+
+commit f303f85925cb02173488ecc9811599d20325dc98
+Author: Sebastian Freundt <hroptatyr@fresse.org>
+Date: Sun Oct 6 07:56:53 2013 +0000
+
+ Summary: pass decoration triple to mapfam worker routines by value (instead of by-ref)
+ Keywords: fix bug 162
+
+ This changeset fixes the issues described in bug 162
+ (http://issues.sxemacs.org/show_bug.cgi?id=162).
+
+ The mapfam worker routine __pntw_1seq() (operate pointwise on just one sequence)
+ gets its decoration values (the initiator, the separator and the terminator) by
+ value now, i.e. on the stack. Whereas before it got a pointer to a stack-alloc'd
+ struct in the main mapfam routine.
+
+ Gcc 4.8.1 probably changed the memory layout or scope rules for pointers to stack
+ alloc'd objects slightly, we will never know, as this hasn't been investigated.
+
+ Anyway, it's probably good to keep an eye out for similar problems that match
+ this pattern.
+
+ src/map.c | 75 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 35 insertions(+), 40 deletions(-)
+
+commit 01dca6f2f363538734e654e0bc9ed47618aee468
+Merge: b4fc89e bd84934
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Oct 5 12:44:50 2013 +1000
+
+ Temp work-around for bug #162
+
+ * bldfix:
+ Temporary work-around for bug 162
+
+commit bd84934806706368e5f6349cebc79c6b372f7cf0
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Oct 5 12:36:57 2013 +1000
+
+ Temporary work-around for bug 162
+
+ http://issues.sxemacs.org/show_bug.cgi?id=162
+
+ * lisp/build-autoloads.el (find-emod-directories): Use #'mapconcat
+ instead of #'mapfam to work-around bug 162
+
+ * lisp/emod-utils.el (emodule-completions): Ditto.
+
+ * lisp/emod-utils.el (list-modules): Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/build-autoloads.el | 22 +++++++++++++++-------
+ lisp/emod-utils.el | 25 +++++++++++++++++--------
+ 2 files changed, 32 insertions(+), 15 deletions(-)
+
+commit b4fc89eb4bfa765772f9287573021fb442a71673
+Merge: 57fefb0 57bfdeb
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Sep 3 09:08:37 2013 +1000
+
+ Add logo XCF
+
+ * logo:
+ Delete XCF's superseded by SXEmacs.xcf
+ Add the GIMP source xcf for SXEmacs logo/banner
+
+commit 57bfdeb5a974980da409c00777051d039f46d6d3
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Sep 3 08:53:39 2013 +1000
+
+ Delete XCF's superseded by SXEmacs.xcf
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/banner.sxemacs.xcf | Bin 1280460 -> 0 bytes
+ contrib/sxemacs-grid.xcf | Bin 1246487 -> 0 bytes
+ contrib/sxemacs-nogrid.xcf | Bin 998732 -> 0 bytes
+ 3 files changed, 0 insertions(+), 0 deletions(-)
+
+commit 789d7570885598dc579b86efbff322e889f7bcb4
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Sep 2 23:20:31 2013 +1000
+
+ Add the GIMP source xcf for SXEmacs logo/banner
+
+ It is an amalgamation of the 3 xcf files currently in contrib,
+ namely: banner.sxemacs.xcf sxemacs-grid.xcf sxemacs-nogrid.xcf
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ etc/SXEmacs.xcf | Bin 0 -> 1270984 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 57fefb0d58a1b433931bb71379c7540b03686545
+Merge: c4f7e3b f99df2e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Sep 2 11:10:11 2013 +1000
+
+ Add original .xcf logo images
+
+ * merges:
+ Add SXEmacs logo XCF files
+
+commit f99df2e1a260ff213af626e04e422ebf5ffc2c3e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Sep 1 18:22:26 2013 -0400
+
+ Add SXEmacs logo XCF files
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/banner.sxemacs.xcf | Bin 0 -> 1280460 bytes
+ contrib/sxemacs-grid.xcf | Bin 0 -> 1246487 bytes
+ contrib/sxemacs-nogrid.xcf | Bin 0 -> 998732 bytes
+ 3 files changed, 0 insertions(+), 0 deletions(-)
+
+commit c4f7e3be6c7b0b51da4938b9a64d87e17ebd1772
+Merge: 438b9a2 f976b3b
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Aug 30 01:32:19 2013 +1000
+
+ Fix the fix for bug 160 from Nelson
+
+ * merges:
+ Bug fix: Fix for bug 160 broke -nw
+
+commit f976b3bf3f0e298c91a26ec10bbd3d6eb50f785d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Aug 29 07:54:46 2013 -0400
+
+ Bug fix: Fix for bug 160 broke -nw
+
+ sxemacs -nw would quit right after startup
+
+ * src/lread.c (locate_file_in_directory_mapper): Only close
+ closure->fd if non-zero, which would be the result of the attempt
+ to check the file using access.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lread.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 438b9a2456b1d5e16a1f136a5f6799662cbdb7ce
+Merge: adc5b24 289b9d8
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Aug 26 08:00:42 2013 +1000
+
+ Closes Bug 161
+
+ * merges:
+ Bug fix: 161 etags munges relative filenames (any path containing "..") in TAGS files
+
+commit 289b9d856af2c306368a38cb4771d42063a63894
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 25 14:33:44 2013 -0400
+
+ Bug fix: 161 etags munges relative filenames (any path containing "..") in TAGS files
+
+ Two bugs fixed here. One was Coverity induced, but another one,
+ the strcpy -> memmove change is a real issue regarding copying in
+ overlapping memory.
+
+ * lib-src/etags.c (relative_filename): Correct off-by-1 error in
+ counting down remaining bytes.
+
+ * lib-src/etags.c (absoulte_filename): Change strcpy to memmove
+ since this is a guaranteed overlapping memory copy, and strcpy is
+ not guaranteed by POSIX to handle it properly.
+ http://pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html
+
+ "If copying takes place between objects that overlap, the behavior is undefined."
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit adc5b2446a560277cfca12b1fe126473daf78988
+Merge: 9901a2f ffcdeff
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Aug 25 08:34:13 2013 +1000
+
+ Closes Bug 160
+
+ * merges:
+ Bug-fix: 160 #'package-suppress, `load-suppress-alist' don't suppress anything
+
+commit ffcdefff2cbd1f1ff23bce9264be9131b41b3daf
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Aug 24 17:53:43 2013 -0400
+
+ Bug-fix: 160 #'package-suppress, `load-suppress-alist' don't suppress anything
+
+ There were 3 different bugs conspiring for this:
+
+ * lisp/packages.el (package-suppress): the value for filename
+ added to load-suppress-alist contained the load-file-name instead
+ of using it as a basis for the directory of the file to exclude.
+
+ * src/lread.c (suppressedp_loop): No file was ever being
+ considered for exclusion because the check for CONSP was being
+ made against the acons function pointer instead of the _acons_
+ iteration variable.
+
+ * src/lread.c (locate_file_in_directory_mapper): When a file was
+ suppressed, the value of fd in the closure was left as is. This
+ not only leaked file descriptors but also made the search end
+ because in the end this is was the value considered to whether
+ there was a valid file to load or not, because closure.fd is the
+ return value of locate_file_in_directory.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/packages.el | 2 +-
+ src/lread.c | 5 ++++-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 9901a2f6fcebd9f6b9ec3cac19ec415da94196e9
+Merge: 50c1e17 65e6d9e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Aug 12 17:27:17 2013 +1000
+
+ contrib upd from Nelson
+
+ * merges:
+ Remove unneeded git-to-steve.sh. Use git-for-steve.sh instead
+
+commit 65e6d9e7c52f423328558bd0d7fa1ea9a781ff2c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 11 15:12:27 2013 -0400
+
+ Remove unneeded git-to-steve.sh. Use git-for-steve.sh instead
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-to-steve.sh | 85 -------------------------------------------------
+ 1 file changed, 85 deletions(-)
+
+commit 50c1e1747db3cee091ba27750d479c5cad8b3915
+Merge: adbbab7 c04986f
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Aug 11 09:12:14 2013 +1000
+
+ Small package-get fix from Nelson
+
+ * merges:
+ Tiny whitespace cleanup
+ Fix package update from local repository mirror.
+
+commit c04986f95b6fe2733bc057a05b70c8faf1496da9
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Aug 11 09:09:17 2013 +1000
+
+ Tiny whitespace cleanup
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/package-get.el | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 8fde3aee8bbec76a09d6882b8390800a76663ee4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Aug 3 15:56:27 2013 -0400
+
+ Fix package update from local repository mirror.
+
+ When updating packages from a local repository, package-get would
+ attempt to remove the file.
+ While this is useful behaviour for files downloaded from an update
+ site, for local directories it is not a good thing ;)
+
+ * lisp/package-get.el (package-get): move host to the uppermost
+ let. Surround all (delete-file full-package-filename) with (unless
+ (null host)
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/package-get.el | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit adbbab7df114cc3e561d0f0f687b8ccbe978da1e
+Merge: 5e62876 67bef31
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Mar 11 14:41:34 2013 +1000
+
+ A few audio fixes/work-arounds from Nelson
+
+ * njsf-snd:
+ Whitespace cleanup
+ Fix libao usage
+ Cleanup some jack server interactions
+ Fix typo in semaphore.h
+ Fix SXEmacs semaphores so that they deal with spurius pthreads conditional variable wakeups
+ Fix SoX media replay by closing and reopening stream on rewind because sox_seek is broken
+ Fix some synchronization issues. Improve audio job debug output
+
+commit 67bef3149361de10d38e1aeea6a1aca109930d9e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jan 21 11:52:24 2013 +1000
+
+ Whitespace cleanup
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c | 10 +++++-----
+ src/media/sound-jack.c | 4 ++--
+ src/media/sound.c | 2 +-
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 70a04894a990df17ad6d43132b501609d3774150
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 20 18:44:08 2013 -0500
+
+ Fix libao usage
+
+ * src/media/sound-ao.c (sound_ao_create): Zero out sample format
+ structure. Newer libao add a matrix field, which when non-null
+ could cause a crash. This will make ao support more future proof
+ to pointer dereference in future struct changes
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/sound-ao.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f70c41c0682f65023f3741058ba362b0913d8924
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 20 17:21:40 2013 -0500
+
+ Cleanup some jack server interactions
+
+ * src/media/sound-jack.c (sound_jack_subthread_create): Properly
+ close the client upon failure to complete subthread create.
+
+ * src/media/sound-jack.c (sound_jack_play): Improve
+ logging. Properly return status code of 0 upon success and 1 on
+ failure. Also cleanup the device data of the job.
+
+ * src/media/sound-jack.c (sound_jack_change_state): properly set
+ the state of the job upon start. Add code to the log of the
+ unknown event message.
+
+ * src/media/sound-jack.c (sound_jack_process): Lock the job while
+ processing the jack requests. Debug log the play state when draining
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/sound-jack.c | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+commit 08117313a4d872ab08bdcfe033c46c5cb1feea71
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 20 17:17:10 2013 -0500
+
+ Fix typo in semaphore.h
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/semaphore.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 42de8526277141d688c3e1da0efd878a5585973b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 20 17:14:31 2013 -0500
+
+ Fix SXEmacs semaphores so that they deal with spurius pthreads conditional variable wakeups
+
+ * src/semaphore.h (struct sxe_semaphore_s): add a generation count
+ * src/semaphore.h (struct sxe_msemaphore_s): ditto
+
+ * src/semaphore.h (sxe_msemaphore_init): initialize generation
+ * src/semaphore.h (sxe_semaphore_init): ditto
+
+ * src/semaphore.h (sxe_msemaphore_trigger): increment generation before signal
+ * src/semaphore.h (sxe_msemaphore_trigger): ditto
+ * src/semaphore.h (sxe_msemaphore_trigger_all): ditto
+ * src/semaphore.h (sxe_msemaphore_trigger_all): ditto
+
+ * src/semaphore.h (sxe_msemaphore_synchronise): Wait again if
+ generation is still the same (ie no signal occurred).
+
+ * src/semaphore.h (sxe_msemaphore_synchronise): ditto.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/semaphore.h | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+commit 549d757d733682cd019e13c97d2fa1643f6ade2e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 20 16:19:07 2013 -0500
+
+ Fix SoX media replay by closing and reopening stream on rewind because sox_seek is broken
+
+ * src/media/media-sox.c (media_sox_rewind): Close and reopen the
+ media stream if SXE_SOX_CAN_SEEK is not defined or sxe_sox_seek
+ fails. If reopen fails, cleanup the media to improve handling of
+ the rest of the media system.
+
+ * src/media/media-sox.c (media_sox_read): Improve logging message
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-sox.c | 48 ++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 44 insertions(+), 4 deletions(-)
+
+commit 65eaba6f51c7e693c09121ab667b8622323cb0ab
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 20 16:15:36 2013 -0500
+
+ Fix some synchronization issues. Improve audio job debug output
+
+ * src/media/sound.c (make_audio_job): Always initialie the mutex
+ since some sound backends are multi-threaded and will use the
+ mutex. Jack and AO are examples.
+
+ * src/media/sound.c (make_audio_job): Improve the job log message.
+
+ * src/media/sound.c (play-media-stream-synchronously): Improve
+ play log message to make clear this is synchronous play.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/sound.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 5e62876e5927f8745e5a44376dca8bb82e9c9b32
+Merge: 8729eec 1be84da
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 20 16:59:34 2013 +1000
+
+ bld-chain fix from Nelson
+
+ * merges:
+ Only include ent-mpfr.h if HAVE_MPFR to fix build when mpfr is not available
+
+commit 1be84da32f2cba8b5efa4a3ab4a0a7f4370cd853
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 19 17:41:26 2013 -0500
+
+ Only include ent-mpfr.h if HAVE_MPFR to fix build when mpfr is not available
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ent/ent-gaussian.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 8729eec073cb5652fe84dbc425c350fe4a535d3b
+Merge: bfcc99e 427f4c8
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 20 07:40:42 2013 +1000
+
+ autogen.sh update from Nelson
+
+ * merges:
+ Allow autogen.sh to do the right thing with newer libtool/autoconf
+
+commit 427f4c854808045505589648c94cf1d7c042170e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jan 19 13:43:40 2013 -0500
+
+ Allow autogen.sh to do the right thing with newer libtool/autoconf
+
+ * autogen.sh (libtool_ver): Force the run of libtoolize --copy
+ --ltdl before autoreconf so that sxe-libtool.m4 does not cause
+ an autoreconf error (and therefore no configure generated)
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ autogen.sh | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit bfcc99e4afa2313976aec89c4d98a6758d25e942
+Merge: db81b6f fc3b9c3
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Thu Jan 10 09:33:41 2013 +1000
+
+ FFI updates from Evgeny
+
+ * merges:
+ files.el: - Check file existance when openning file with `find-file-magic-files-alist'
+ ffi-wand: "logo" is unsupported format for read
+ [fix] effi: ffi-slot-offset - calculate offset correctly
+
+commit db81b6f5a1e41dcae3a587936f4d467b98bd2c1b
+Merge: aa30c7a 1b6e263
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 6 12:31:58 2013 +1000
+
+ Fix TTY cursor reset problem
+
+ * tty-cursor:
+ Fix the age old problem of TTY cursor being reset on exit
+
+commit 1b6e2638f91b3a7a1f30f2791b5434dff7931747
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 6 12:21:45 2013 +1000
+
+ Fix the age old problem of TTY cursor being reset on exit
+
+ This changeset stops SXEmacs from resetting the text cursor to block on
+ exit on a Linux console. It is actually still reset, but it is reset
+ correctly and now you'll end up with a "normal" cursor instead of a "very
+ visible" one.
+
+ One side-effect of this change is that SXEmacs on a console will now use a
+ block cursor, but that just adds consistency because that is how things
+ are in X11 and Xterm anyway.
+
+ * src/ui/TTY/console-tty.h (struct tty_console): Add
+ `cursor_invisible_' and `hard_cursor_' for invisible and hard to
+ see cursors.
+
+ * src/ui/TTY/redisplay-tty.c (init_tty_for_redisplay): Set
+ cursor_visible_ to "vs" and cursor_normal_ to "ve" like they
+ should be according to terminfo(5).
+ Also add cursor_invisible_ ("vi"), and hard_cursor_ ("HC").
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/ui/TTY/console-tty.h | 2 ++
+ src/ui/TTY/redisplay-tty.c | 14 ++++++++------
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+commit fc3b9c3c87ae7355045dfad122d953e90f0d1011
+Author: lg <lg@lg-XPS-L521X.(none)>
+Date: Fri Dec 28 11:01:26 2012 +0400
+
+ files.el:
+ - Check file existance when openning file with
+ `find-file-magic-files-alist'
+
+ lisp/files.el | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 0f8df72dfc57273f4dc5f1c6c4e2647059c03b40
+Author: lg <lg@lg-XPS-L521X.(none)>
+Date: Fri Dec 28 11:00:12 2012 +0400
+
+ ffi-wand:
+ "logo" is unsupported format for read
+
+ lisp/ffi/ffi-wand.el | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7b58fd38c765a7730e9685fb631401171affefa4
+Author: lg <lg@lg-XPS-L521X.(none)>
+Date: Fri Dec 28 10:06:27 2012 +0400
+
+ [fix] effi: ffi-slot-offset
+ - calculate offset correctly
+
+ [add] effi:
+ - x86_64 alignment support
+
+ src/effi.c | 51 +++++++++++++++++++++------------------------------
+ 1 file changed, 21 insertions(+), 30 deletions(-)
+
+commit aa30c7afddd4939c202f2e46efe10b0b55509a8d
+Merge: 06b081c 093e8af
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Sep 3 08:09:45 2012 +1000
+
+ Docstring and Makefile tweak from Nelson
+
+ * merges:
+ Fix docstring for insert-string
+ Small cleanup of the recursive make calls
+
+commit 093e8afb746801a64f5aa1f70eb0046bf630fae3
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Aug 12 18:22:15 2012 -0400
+
+ Fix docstring for insert-string
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/editfns.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ad6834da706febb3978e66dd9626b6ad81f4c13a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Aug 4 22:44:11 2012 -0400
+
+ Small cleanup of the recursive make calls
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ Makefile.am | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit 06b081c5e83d3585eadade9d1ab298dc95c1d8a5
+Merge: e44ed11 2451438
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jul 31 17:02:50 2012 +1000
+
+ Fixes bug 158 from Nelson
+
+ * merges:
+ Fix build failure of cl in newer gcc and bison combinations
+ Fix build process so that subdir failures cause actual failure, even when CFLAGS have a k somewhere...
+
+commit 24514386aa4c47fb13ad69eefaf587b1a1e1341a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Mon Jul 30 22:51:14 2012 -0400
+
+ Fix build failure of cl in newer gcc and bison combinations
+
+ * modules/cl/cl-loop.h: Include cl-loop-parser.h only after
+ cl_loop_sentence_t is defined.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/cl/cl-loop.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 6cadda014e92b2cb88656d7cfe8e1135a544a7dd
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Mon Jul 30 22:49:52 2012 -0400
+
+ Fix build process so that subdir failures cause actual failure, even when CFLAGS have a k somewhere...
+
+ * Makefile.am (beta): Use -w MAKEFLAGS instead of RECURSIVE_MAKE_ARGS
+ * Makefile.am (time-beta): Ditto.
+ * Makefile.am (time-all): Ditto.
+ * Makefile.am (time-check): Ditto.
+ * Makefile.am (build-report): Ditto.
+ * Makefile.am (time-build-report): Ditto.
+ * PROBLEMS: Add explanation for failure.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ Makefile.am | 18 +++++++++---------
+ PROBLEMS | 14 +++++++++++++-
+ 2 files changed, 22 insertions(+), 10 deletions(-)
+
+commit e44ed11ee1156f2065d0b221372bea4d11640ef4
+Merge: cd8d598 6d20705
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jul 1 14:23:35 2012 +1000
+
+ Fix xstrncpy usage, also fixes etags. From Nelson
+
+ * merges:
+ Fix usage of xstrncpy
+ Simple comment reflow to 80 cols
+ Fix etags xstrncpy usage, and some other niceties
+
+commit 6d207059b8f05c444001ce838320b761d4843130
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jun 30 23:03:17 2012 -0400
+
+ Fix usage of xstrncpy
+
+ * lib-src/fakemail.c (make_file_preface): make sure the len
+ argument to xstrcpy is always the available buffer len
+
+ * lib-src/ootags.c: Only define etags_strchr and etags_strrchr if
+ configure did not detect the right ones.
+
+ * lib-src/ootags.c (consider_token): Ditto
+
+ * lib-src/ootags.c (C_entries): Ditto
+
+ * lib-src/ootags.c (Pascal_functions): Ditto
+
+ * lib-src/ootags.c (Prolog_functions): Ditto
+
+ * lib-src/ootags.c (Erlang_functions): Ditto
+
+ * lib-src/ootags.c (savenstr): Ditto.
+
+ * lib-src/ootags.c (substitute): Properly account for remaining
+ buffer available.
+
+ * lib-src/gnuserv.c (handle_ipc_request): use buffer size instead
+ of message length for copy. also no need to \0 terminate with
+ xstrncpy
+
+ * lib-src/pop.c (pop_stat): Use xstrncpy here.
+
+ * src/dumper.c (pdump_load): No need for \0 termination here.
+
+ * src/emacs.c (make_docfile): use remaining size of buffer, not
+ len of source..
+
+ * src/sysdep.h (x__dirname): Use just len. xstrncpy will stop early.
+
+ * src/sysdep.h (xdirname): Oops, need +1 for the \0 terminator.
+
+ * src/ui/redisplay.c (add_bufbyte_string_runes): Account for the \0 terminator.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/fakemail.c | 12 +++---
+ lib-src/gnuserv.c | 4 +-
+ lib-src/ootags.c | 116 ++++++++++++++++++++++++++++-------------------------
+ lib-src/pop.c | 4 +-
+ src/dumper.c | 1 -
+ src/emacs.c | 6 +--
+ src/sysdep.h | 6 +--
+ src/ui/redisplay.c | 4 +-
+ 8 files changed, 79 insertions(+), 74 deletions(-)
+
+commit d9bf699fecd471a15a605e119f8d1cfcef71a0d0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jun 30 22:50:55 2012 -0400
+
+ Simple comment reflow to 80 cols
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/extents.h | 41 +++++++++++++++++++++++------------------
+ 1 file changed, 23 insertions(+), 18 deletions(-)
+
+commit e3f6b3844a11e8425a5be0e2e82b29021bb3f92f
+Merge: b334efb 73ea3f2
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jun 30 22:28:41 2012 -0400
+
+ Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit b334efbeebb3434fffd6bbcf70ae9979b4fb384e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sat Jun 30 22:28:19 2012 -0400
+
+ Fix etags xstrncpy usage, and some other niceties
+
+ * lib-src/etags.c: Make etags_strchr, etags_strrchr, etags_strcasecmp,
+ etags_strncasecmp only be defined if they were not detected by configure.
+
+ * lib-src/etags.c(consider_token): Adjust strncpy and string size.
+
+ * lib-src/etags.c(C_entries): Ditto.
+
+ * lib-src/etags.c(Pascal_functions): Ditto.
+
+ * lib-src/etags.c(HTML_labels): Ditto.
+
+ * lib-src/etags.c(Prolog_functions): Ditto.
+
+ * lib-src/etags.c(Erlang_functions): Ditto.
+
+ * lib-src/etags.c(substitute): Properly account for buffer size to
+ supply to xstrncpy.
+
+ * lib-src/etags.c(readline_internal): Only reallocate after size
+ is enough. Also correct the buffer available supplied to xstrncpy.
+
+ * lib-src/etags.c(savenstr): correct the size of buffer parameter
+ supplied to xstrncpy.
+
+ * lib-src/etags.c(linebuffer_setlen): Only reallocate after size
+ is enough.
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c | 251 +++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 132 insertions(+), 119 deletions(-)
+
+commit cd8d598153e1713aae9608b20e6928cb74be7a96
+Merge: 547d05c b028ccf
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 16:36:37 2012 +1000
+
+ Another peanuthorst to horst rename
+
+ * quickfix:
+ Rename peanuthorst to horst in etc/Makefile.am
+
+commit b028ccf9889224f8938e1c4ed6b5ffb38fb048e8
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 16:36:11 2012 +1000
+
+ Rename peanuthorst to horst in etc/Makefile.am
+
+ * etc/Makefile.am (dist_photos_DATA): peanuthorst -> horst
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ etc/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 547d05cc4791bc84538166171281a562b40ddc9d
+Merge: 81c0d7f c45dcc0
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 16:17:28 2012 +1000
+
+ PeanutHorst is now Horst
+
+ * quickfix:
+ Rename PeanutHorst to Horst in about.el
+
+commit c45dcc0b1a78933940b1ca819559658fd84af297
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 16:16:31 2012 +1000
+
+ Rename PeanutHorst to Horst in about.el
+
+ * lisp/about.el (about-personal-info): PeanutHorst -> Horst.
+
+ * lisp/about.el (about-hacker-contribution): Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/about.el | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+commit 81c0d7fc3fd0434e24baa42039cdd0d0bb46f6f5
+Merge: 296b7e0 533f88c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 16:09:56 2012 +1000
+
+ Photo optimisation from Horst
+
+ * merges:
+ optimised steve's photo, updated horst's photo
+
+commit 296b7e0f9372a85c3741488c2129a0225f7fdef9
+Merge: c4d5211 22d8092
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 16:05:13 2012 +1000
+
+ Minor SoX updates
+
+ * bug-141:
+ Minor updates and compiler warning fixes in SoX
+ Fix compiler warnings in media-sox.c
+
+commit 22d8092c0a5f515cc226320d6e29123e90f23881
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 15:57:57 2012 +1000
+
+ Minor updates and compiler warning fixes in SoX
+
+ * src/media/media-sox.h (sxe_sox_ssize_t): SoX just uses size_t
+ these days. So set to that if not HAVE_SOX_SSIZE_T.
+
+ * src/media/media-sox.c (media_sox_rewind): SEEK_SET ->
+ SOX_SEEK_SET.
+
+ * src/media/media-sox.c (media_sox_close): Fix format spec.
+
+ * src/media/media-sox.c (media_sox_read): Ditto.
+
+ * src/media/media-sox.c (media_sox_rewind): Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c | 10 +++++-----
+ src/media/media-sox.h | 2 +-
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 533f88c5dfc75584ca5b7fbe55195e47eb1ef57d
+Author: Horst G. Burkhardt III <horst@sxemacs.org>
+Date: Wed Jun 27 15:05:20 2012 +1000
+
+ optimised steve's photo, updated horst's photo
+
+ Signed-off-by: Horst G. Burkhardt III <horst@sxemacs.org>
+
+ etc/photos/horst.png | Bin 0 -> 36162 bytes
+ etc/photos/horstm.png | Bin 0 -> 12075 bytes
+ etc/photos/peanuthorst.png | Bin 32874 -> 0 bytes
+ etc/photos/peanuthorstm.png | Bin 12180 -> 0 bytes
+ etc/photos/steve.png | Bin 49065 -> 48621 bytes
+ etc/photos/stevem.png | Bin 24988 -> 16719 bytes
+ lisp/about.el | 6 +++---
+ 7 files changed, 3 insertions(+), 3 deletions(-)
+
+commit c4d5211d9cd46432ce64e4e92dcc18f3e8a77034
+Merge: d95ba78 9da3276
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 00:40:43 2012 +1000
+
+ PROBLEMS update from Horst
+
+ * merges:
+ Updated PROBLEMS as per last commit
+ Cleaning up PROBLEMS file, now it looks like we've been productive since forking; added PROBLEMS.XEmacs for older issues pertaining to XE
+
+commit bef4a7e11dd057d710809995a1a03332219c735b
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jun 27 00:39:35 2012 +1000
+
+ Fix compiler warnings in media-sox.c
+
+ * src/media/media-sox.c (media_sox_open): Shush compiler, give
+ `file_len' unused attribute.
+
+ * src/media/media-sox.c (media_sox_read): Ditto for `framesize'.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 9da3276ce1cc266104079b2e16c6069877b9993e
+Author: Horst G. Burkhardt III <horst@sxemacs.org>
+Date: Wed Jun 27 00:04:18 2012 +1000
+
+ Updated PROBLEMS as per last commit
+
+ Signed-off-by: Horst G. Burkhardt III <horst@sxemacs.org>
+
+ PROBLEMS | 2107 +-------------------------------------------------------------
+ 1 file changed, 3 insertions(+), 2104 deletions(-)
+
+commit f8258c0a238e1e6c77e29aaf9ca417e16610e204
+Author: Horst G. Burkhardt III <horst@sxemacs.org>
+Date: Tue Jun 26 22:49:14 2012 +1000
+
+ Cleaning up PROBLEMS file, now it looks like we've been productive since forking; added PROBLEMS.XEmacs for older issues pertaining to XE
+
+ Signed-off-by: Horst G. Burkhardt III <horst@sxemacs.org>
+
+ PROBLEMS.XEmacs | 1965 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 1965 insertions(+)
+
+commit d95ba78fecab8fdbc797ecfee3285dd81e0ff451
+Merge: 206a9a4 4145d23
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 26 16:49:20 2012 +1000
+
+ Bring back PulseAudio autodetection
+
+ * pulse:
+ Bring back auto-detection of PulseAudio
+
+commit 4145d238a3c3724627309c22ab95744b734a8e4c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 26 16:47:45 2012 +1000
+
+ Bring back auto-detection of PulseAudio
+
+ * configure.ac (with-sound): Re-enable PulseAudio.
+
+ * configure.ac (with-pulseaudio): Removed. It is now back in
+ with-sound.
+
+ * configure.ac: Nuke the `pulse_*_version' vars. They weren't
+ being used for anything.
+
+ * src/media/Makefile.am (libmm_a_CFLAGS): Add MM_CFLAGS.
+
+ * src/media/sound-pulse.c (stream_write_callback): Set
+ `resolution', `real_frm_sz', and `ctx' as unused. Shush compiler.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac | 23 +++++------------------
+ m4/sxe-mm.m4 | 17 +----------------
+ m4/sxe-summary.m4 | 1 -
+ src/media/sound-pulse.c | 8 +++++---
+ 4 files changed, 11 insertions(+), 38 deletions(-)
+
+commit 206a9a4cc731ee92f14a52c3543643c3f590f0ec
+Merge: 2fd7982 5fc5cf3
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 26 09:55:35 2012 +1000
+
+ Various build related fixes from Rudi
+
+ * merges:
+ bldchn, fix typo, wrong dbusbind.la variables
+ bldchn, add missing benchmark.el to the dist tarball
+ bldchn, add missing tests to the dist tarball
+
+commit 5fc5cf31ec5c823d4a7358ac32a03353533b8ee9
+Author: Ruediger Meier <ruediger.meier@ga-group.nl>
+Date: Mon Jun 25 15:57:17 2012 +0200
+
+ bldchn, fix typo, wrong dbusbind.la variables
+
+ We had such warnings from automake:
+ modules/dbus/Makefile.am:63: variable `dbus_la_SOURCES' is defined but no program or
+ modules/dbus/Makefile.am:63: library has `dbus_la' as canonical name (possible typo)
+ [...]
+
+ modules/dbus/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit c71af2f8f7c04f50bf86cdf41fa38996a6224695
+Author: Ruediger Meier <ruediger.meier@ga-group.nl>
+Date: Mon Jun 25 15:53:14 2012 +0200
+
+ bldchn, add missing benchmark.el to the dist tarball
+
+ Note that this benchmark will not be executed by any make target. Should we add
+ one?
+
+ tests/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit cc74c1d1c6c9aa558eadd7bac407619ba29abfd5
+Author: Ruediger Meier <ruediger.meier@ga-group.nl>
+Date: Mon Jun 18 13:16:52 2012 +0200
+
+ bldchn, add missing tests to the dist tarball
+
+ tests/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 2fd79826efd8f7e09ed733fac37248164f77fae1
+Merge: e1fb520 7fbb85e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 25 22:42:24 2012 +1000
+
+ Fix non-dbus build
+
+ * dbus-bldfix:
+ Fix build when dbus is not present.
+
+commit 7fbb85ee5b86bf9c7fa5eb792f959ad53301b8c2
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 25 22:41:52 2012 +1000
+
+ Fix build when dbus is not present.
+
+ * configure.ac: Put `SXE_EMOD_STATMOD([dbus])' where it can be
+ called if dbus is present or not.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit e1fb5209299cf9b85fc5774d514eac100ebf1428
+Merge: 374249e 9114804
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 25 13:43:33 2012 +1000
+
+ PulseAudio roles
+
+ * pulse-roles:
+ Support "media role" property for PulseAudio devices
+
+commit 9114804da42826c8bfdc8e200786bb0581787324
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 25 13:41:45 2012 +1000
+
+ Support "media role" property for PulseAudio devices
+
+ With PulseAudio a client can set various properties to tell the server
+ more about the client. One of these properties is a "media role" which
+ tells the PulseAudio server what type of media the client is supplying.
+ For example a mp3 player might set a role of "music", or a movie player
+ might set a role of "video".
+
+ You can't do anything in SXEmacs with roles other than set them, but in
+ your PulseAudio config you can then do nifty things based on them. Like,
+ you can get PulseAudio to mute (cork) your "music" streams when you play a
+ "video" stream.
+
+ This changeset allows the user to set the media role via the `:role'
+ keyword in #'make-audio-device.
+
+ * src/media/sound-pulse.c (sound_pulse_data_s): Add new object,
+ `role'.
+
+ * src/media/sound-pulse.c (sound_pulse_create): Parse :role as
+ well.
+
+ * src/media/sound-pulse.c (sound_pulse_finish):
+
+ * src/media/sound-pulse.c (sound_pulse_init_mainloop): Set
+ PULSE_PROP_media.role with the role.
+
+ * src/media/sound.c (Fmake_audio_device): Document PulseAudio
+ roles.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/sound-pulse.c | 15 +++++++++++++++
+ src/media/sound.c | 10 ++++++++++
+ 2 files changed, 25 insertions(+)
+
+commit 374249e84cebf527df8434478871d019d75d35d5
+Merge: 1491f82 cc3a107
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 19 18:20:27 2012 +1000
+
+ Quick typo fix
+
+ * typo-fix:
+ Typo fix
+
+commit cc3a10746bcc108f8f43159e197b9af83d55aa5f
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 19 18:18:52 2012 +1000
+
+ Typo fix
+
+ * lisp/lisp-initd.el (lisp-initd-compile): Typo fix.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/lisp-initd.el | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1491f827270ed0047a12382cd8957589f3110fe3
+Merge: 220e6ce 842ae4c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 19 16:51:26 2012 +1000
+
+ Fix SoX
+
+ * sox-fix:
+ SoX Fix -- Remove deprecated code.
+ SoX Fix -- Configure and build
+
+commit 842ae4c5739873fa89ea1d761716a82d2c6efafb
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 19 16:49:51 2012 +1000
+
+ SoX Fix -- Remove deprecated code.
+
+ This changeset removes all the old cruft in our SoX code that we no longer
+ need to worry about because we enforce a minimum required version.
+
+ * src/media/media-sox.h: Remove all the old crusty st_*
+
+ * src/media/media-sox.c: Ditto.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c | 8 ++------
+ src/media/media-sox.h | 26 --------------------------
+ 2 files changed, 2 insertions(+), 32 deletions(-)
+
+commit 57986fcd10ef7e524cae9805825deebbab5a2ae9
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Tue Jun 19 16:17:07 2012 +1000
+
+ SoX Fix -- Configure and build
+
+ Somewhere along the line our SoX code stopped working. This changeset
+ brings back SoX support in SXEmacs.
+
+ Please Note: There is now a minimum version required for SoX... 14.1.0
+
+ * m4/sxe-mm.m4 (SXE_CHECK_SOX_LOCATOR): Nuke it.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_SOX_LOCATIONS): Rewrite using pkg-config
+ voodoo.
+
+ * m4/sxe-mm.m4 (_SXE_CHECK_SOX): Simplify. No need to check for
+ that st rubbish anymore.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_SOX_HEADERS): Don't look for st.h.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_SOX_LIBS): Remove the st rubbish.
+
+ * m4/sxe-mm.m4 (SXE_CHECK_SOX_STRUCTS): Ditto.
+ Check for struct sox_format_t instead of sox_format.
+
+ * src/media/media-sox.c (media_sox_open): HAVE_STRUCT_SOX_FORMAT
+ -> HAVE_STRUCT_SOX_FORMAT_T
+
+ * INSTALL (Packages): Mention that the minimum version of SoX is
+ now 14.1.0.
+
+ * .gitignore: Ignore anything starting with `=' instead of just
+ `=build'. For us crazy folk who have multiple build directories on
+ the go at once.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ .gitignore | 2 +-
+ INSTALL | 2 +-
+ configure.ac | 1 -
+ m4/sxe-mm.m4 | 135 ++++++++++----------------------------------------
+ src/media/media-sox.c | 2 +-
+ 5 files changed, 30 insertions(+), 112 deletions(-)
+
+commit 220e6ce846f2ca635d9e3c9ab0d9812ddce4f540
+Merge: 8e74e67 dcab3d7
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 18 09:19:22 2012 +1000
+
+ SXEmacs, meet Dbus. Dbus, meet SXEmacs
+
+ * dbus:
+ Warning fixes -- dbusbind.
+ Whitespace cleanup in modules/dbus
+ Fix more warnings in dbusbind.c
+ Cosmetic changes to file header/licence
+ Port GNU/Emacs dbusbind.c to SXEmacs -- Warning fixes
+ Port GNU/Emacs dbusbind.c to SXEmacs -- Fix most errors.
+ Port GNU/Emacs dbusbind.c to SXEmacs -- Style changes
+ Improve D-Bus detection.
+ Fix dbus build.
+ True to add files to dbus module makefile
+ Add D-Bus module as option for with-modules
+ Add DESCEND clause for dbus module
+ Initial commit of D-Bus support imported from Emacs trunk revno=106693
+
+commit 8e74e675ad653f932a2792de362bcb155648e79b
+Merge: fe3409c 3930f4d
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 18 09:14:39 2012 +1000
+
+ Add 22.1.15 ChangeLog file
+
+ * misc:
+ Add last version ChangeLog file
+
+commit 3930f4d37174d819739b3ad22fc6df7f4284113b
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jun 18 09:14:08 2012 +1000
+
+ Add last version ChangeLog file
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ ChangeLog.d/ChangeLog-22.1.15 | 12669 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 12669 insertions(+)
+
+commit 73ea3f2ea863e13978b92c72f0ad7ae69146f492
+Merge: 6cafcf8 fe3409c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jun 17 10:55:22 2012 -0400
+
+ Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 6cafcf86ec97cd8f3b87ada387919a608e305610
+Merge: 334f219 b9f23b4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Fri Jun 15 11:16:25 2012 -0400
+
+ Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 334f219946ae8ddcfdd2a6515d0c44175bda6fe4
+Merge: 1b0c6ff 47a97e4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Fri Jun 15 11:16:19 2012 -0400
+
+ Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 1b0c6ff3e0d595f9ac1aed21f43019629d4d77b2
+Merge: b1de4b5 b1aa7ca
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Wed May 30 18:35:19 2012 -0400
+
+ Merge branch 'master' of ssh://dio.dreamhost.com/~/repos.nelsonferreira.com/git/sxemacs into for-steve
+
+commit b1de4b5e61489baec4c1d8172e04d9982f929807
+Merge: 9060f3e ccd489f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Fri Apr 13 13:32:20 2012 -0400
+
+ Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 9060f3e69bc2f8062b8fde60bc76366d6111ff8c
+Merge: 0714a82 31e8a7f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Mar 13 20:42:27 2012 -0400
+
+ Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 0714a826c16084db406d2a7335101ae350a001e3
+Merge: 7d75fa8 42297aa
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Fri Mar 9 19:00:38 2012 -0500
+
+ Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 7d75fa8904eb3b4ed4269423bcd6740a20bb4784
+Merge: dbcba80 e7ee5bd
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Wed Mar 7 11:20:23 2012 -0500
+
+ Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit dbcba80608278b9db3879cf696add1f9dc68523d
+Merge: ddc1be7 67d4837
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Mar 6 08:44:01 2012 -0500
+
+ Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit ddc1be760fa93a9c1e8ab1817f382fcbb95524bb
+Merge: 9a6533b c9752ce
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Mar 6 02:18:37 2012 -0500
+
+ Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 9a6533bb85fc241ed6ff3040a6404d2fe27c678b
+Merge: 97e22d6 38a15be
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Mar 6 02:18:25 2012 -0500
+
+ Merge branch 'master' of ssh://dio.dreamhost.com/~/repos.nelsonferreira.com/git/sxemacs into for-steve
+
+commit dcab3d791b094b5d7f502d9596937bb427c270e7
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 29 17:53:00 2012 +1000
+
+ Warning fixes -- dbusbind.
+
+ This changeset fixes all but 4 or 5 compiler warnings in dbusbind. The
+ warnings that are left are some "implicit declaration of function 'foo'"
+ for some GNU/Emacs functions that I don't yet know what to do with.
+
+ * modules/dbus/dbusbind.c (xd_find_watch_fd): Don't use
+ `dbus_watch_get_fd()', it's deprecated.
+
+ * modules/dbus/dbusbind.c (Fdbus_init_bus): Initialise busp to
+ NULL.
+
+ * modules/dbus/dbusbind.c (Fdbus_method_return_internal):
+ Initialise serial to 0.
+
+ * modules/dbus/dbusbind.c (Fdbus_method_error_internal): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_register_service): If all else
+ fails, return Qnil.
+
+ * modules/dbus/dbusbind.h (SBYTES): No need to call XSTRING as
+ XSTRING_LENGTH does that for us.
+
+ * modules/dbus/dbusbind.h (XD_ERROR): Correctly cast mess to work
+ right for our make_string().
+
+ * modules/dbus/dbusbind.h (syms_of_dbusbind): Add.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 25 ++++++++++---------------
+ modules/dbus/dbusbind.h | 15 +++++++++------
+ 2 files changed, 19 insertions(+), 21 deletions(-)
+
+commit c4270d307c554c3626740158ae0c5af204d7d5cf
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 29 00:11:08 2012 +1000
+
+ Whitespace cleanup in modules/dbus
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/Makefile.am | 1 -
+ modules/dbus/dbus.el | 50 ++++++++++++++++++++++++------------------------
+ modules/dbus/dbusbind.c | 4 ++--
+ modules/dbus/dbusbind.h | 16 ++++++++--------
+ 4 files changed, 35 insertions(+), 36 deletions(-)
+
+commit f922deb15970dbe7a23b7d0a4d313a56a6a7005d
+Merge: 571fb34 a17da6c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jan 28 23:56:28 2012 +1000
+
+ Merge branch 'master' into dbus
+
+ Conflicts:
+ modules/dbus/Makefile.am Trivial, resolved.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+commit 571fb34cc9594d364a3a92c30568f3643cc95f6e
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jan 25 14:27:41 2012 +1000
+
+ Fix more warnings in dbusbind.c
+
+ * modules/dbus/dbusbind.c (Fdbus_call_method_asynchronously): Use
+ CHECK_FUNCTION instead of GNU's FUNCTIONP
+
+ * modules/dbus/dbusbind.c (Fdbus_register_signal): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_register_method): Ditto.
+
+ * modules/dbus/dbusbind.h (SBYTES): Use XSTRING_LENGTH
+
+ * modules/dbus/dbusbind.c (syms_of_dbusbind): Use build_string
+ instead of GNU's make_pure_c_string.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 25 ++++++++++++-------------
+ modules/dbus/dbusbind.h | 4 ++--
+ 2 files changed, 14 insertions(+), 15 deletions(-)
+
+commit 72d1562400900a972a6eb36ba97ab921f1d7f63c
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Wed Jan 25 13:33:34 2012 +1000
+
+ Cosmetic changes to file header/licence
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 48 ++++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 34 insertions(+), 14 deletions(-)
+
+commit a1363efe6978f0b8139c5c72f3984a2fd952e02d
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Mon Jan 23 02:37:07 2012 +1000
+
+ Port GNU/Emacs dbusbind.c to SXEmacs -- Warning fixes
+
+ This changeset fixes a good deal of compiler warnings. We're not there
+ yet, but at least it does build now. Working? Nah, but it builds. :-)
+
+ * modules/dbus/dbusbind.c Moved all the stuff that belongs in a
+ header to new dbusbind.h.
+ Added a bunch of stuff from GNU/Emacs just to get it to build
+ cleanly.
+ (xd_read_message_1): #if 0'd out just to
+ get this pig to compile. Need to revisit this to actually make it
+ work.
+
+ * modules/dbus/dbusbind.h: New. Aside from the obvious, I'm also
+ putting some GNU/Emacs things in here that we don't have yet and
+ are needed for dbus until we do it our own way.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/Makefile.am | 2 +-
+ modules/dbus/dbusbind.c | 255 +++++++++----------------------------
+ modules/dbus/dbusbind.h | 325 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 384 insertions(+), 198 deletions(-)
+
+commit 920f94f62143e04975fd50a5548880e61f79d66f
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sun Jan 22 02:06:16 2012 +1000
+
+ Port GNU/Emacs dbusbind.c to SXEmacs -- Fix most errors.
+
+ This changeset continues the work in porting GNU/Emacs' dbusbind.c. It is
+ still not finished. The build is still badly broken.
+
+ * src/elhash.c: Make Q_test not static.
+
+ * modules/dbus/dbusbind.c (CHECK_DBUS_SERIAL_GET_SERIAL): We call
+ `MOST_POSITIVE_FIXNUM' a `EMACS_INT_MAX'.
+
+ * modules/dbus/dbusbind.c (xd_signature_cat): ptrdiff_t's -> int's
+
+ * modules/dbus/dbusbind.c (Fdbus_call_method): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_call_method_asynchronously): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_method_return_internal): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_method_error_internal): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_send_signal): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_register_service): Ditto.
+
+ * modules/dbus/dbusbind.c (Fdbus_register_signal): Ditto.
+
+ * modules/dbus/dbusbind.c (xd_read_queued_messages): Add missing
+ arg to internal_catch().
+
+ * modules/dbus/dbusbind.c (syms_of_dbusbind): Change GNU DEFSYM's
+ and defsubr's to our defsymbol and DEFSUBR respectively.
+
+ * modules/dbus/dbusbind.c (syms_of_dbusbind): SXEmacs-erise the
+ Fprovide().
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 146 +++++++++++++++++++++++++-----------------------
+ src/elhash.c | 3 +-
+ 2 files changed, 78 insertions(+), 71 deletions(-)
+
+commit d94bd7a6fd8bff465efc0345624d8c0af43ec64d
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jan 21 23:30:11 2012 +1000
+
+ Port GNU/Emacs dbusbind.c to SXEmacs -- Style changes
+
+ This changeset begins the process of porting GNU/Emacs' dbusbind.c to
+ SXEmacs. So far this is mostly just indentation changes and reformating
+ of DEFUN's.
+
+ Build is currently severely broken with this.
+
+ * modules/dbus/dbusbind.c: Reformat to SXEmacs style, and begin
+ porting.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 3499 ++++++++++++++++++++++++-----------------------
+ 1 file changed, 1754 insertions(+), 1745 deletions(-)
+
+commit e05a963faba21e99dcae14f245c13b7d0584fe5a
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Sat Jan 21 22:04:03 2012 +1000
+
+ Improve D-Bus detection.
+
+ * m4/sxe-emodffi.m4 (SXE_CHECK_DBUS): New to check for D-Bus.
+
+ * configure.ac: Use it.
+
+ * modules/dbus/Makefile.am (AM_CFLAGS): Add DBUS_CFLAGS.
+
+ * modules/dbus/Makefile.am (AM_LDFLAGS): Add DBUS_LIBS.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac | 18 +++++++++++-------
+ m4/sxe-emodffi.m4 | 11 +++++++++++
+ modules/dbus/Makefile.am | 5 +++--
+ 3 files changed, 25 insertions(+), 9 deletions(-)
+
+commit eabfdb7d71968d5aa41c7403c0de7237f0f9a1ae
+Author: Steve Youngs <steve@sxemacs.org>
+Date: Fri Jan 20 22:04:00 2012 +1000
+
+ Fix dbus build.
+
+ This changeset does just enough to get the new dbus emodule built. Please
+ note that this doesn't mean dbus in SXEmacs is now done. There is more to
+ come. This JUST puts a bandaid on the build chain so it will build.
+
+ * modules/dbus/Makefile.am (module_LTLIBRARIES): Set to `dbusbind.la'
+
+ * modules/dbus/Makefile.am (BUILT_SOURCES): Remove non-generated
+ sources.
+
+ * modules/dbus/Makefile.am (dbus_la_SOURCES): Renamed from
+ `sxe_dbus_la_SOURCES'.
+
+ * modules/dbus/Makefile.am (nodist_dbus_la_SOURCES): Renamed from
+ `nodist_sxe_dbus_la_SOURCES'.
+
+ * modules/dbus/Makefile.am (dbus_la_CFLAGS): Renamed from
+ `sxe_dbus_la_CFLAGS'.
+
+ * configure.ac: Set have_modules_dbus and have_static_modules_dbus
+ accordingly.
+
+ Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac | 10 ++++++++++
+ modules/dbus/Makefile.am | 16 +++++-----------
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+commit 81dd3117efce019fc5956143896f1c5d375f55a0
+Merge: 0a5d16d 910cd5f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Fri Jan 20 00:05:18 2012 -0500
+
+ Merge branch 'for-steve' into njsf-dbus
+
+commit 0a5d16d2e1625d69fc24f24b843e39fa6a252efc
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Thu Jan 19 21:40:40 2012 -0500
+
+ True to add files to dbus module makefile
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/dbus/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3197b6ea8a0ff24ff7e24e468e6eaad5487c3289
+Merge: 3ae1f7d 280ebe6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Sun Jan 15 21:31:46 2012 -0500
+
+ Merge remote-tracking branch 'njsf/for-steve' into njsf-dbus
+
+commit 3ae1f7deee97eec9d1473922ec91dcba1d5503cb
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Jan 3 01:38:53 2012 -0500
+
+ Add D-Bus module as option for with-modules
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 2fe2b4ddc8aa56863967d40422a3ea46013e0b9b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Jan 3 01:24:11 2012 -0500
+
+ Add DESCEND clause for dbus module
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 8ee0e2009cf6f05e03f1b57ac72b716c3fe28df3
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date: Tue Jan 3 01:19:05 2012 -0500
+
+ Initial commit of D-Bus support imported from Emacs trunk revno=106693
+
+ Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/dbus/Makefile.am | 17 +
+ modules/dbus/dbus.el | 1055 +++++++++++++++++++++
+ modules/dbus/dbusbind.c | 2347 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 3419 insertions(+)
SXEmacs Installation Guide
-Copyright (C) 2005 - 2012 Steve Youngs
+Copyright (C) 2005 - 2015 Steve Youngs
+
+
+,----[ In-Tree Builds Lead To Madness ]
+| Please note that because of the complexity of SXEmacs and its build
+| chain, we do not support building from within the source tree itself.
+|
+| So please, ALWAYS run `configure' and `make' from a separate directory,
+| completely outside of the source tree.
+|
+| In the code examples below, "${SRCTREE}" refers to the path where
+| you wish to build SXEmacs.
+`----
Building from tarball release:
See ./configure --help for a description of all possible options,
then
- $ ./configure [options]
+ $ ${SRCTREE}/configure [options]
$ make
$ make check
$ make install
Also, some configuration options may need external libraries that are
not shipped with SXEmacs. SXEmacs will determine which libraries it
-needs at configuration time (when you run `./configure').
+needs at configuration time (when you run `${SRCTREE}/configure').
If configure can't find a particular library and you _do_ have it
installed, you can usually get configure to find it by adding to the
If the optional libraries are in a non-standard location, use
--with-site-prefixes option of configure. Ex:
- ./configure --with-site-prefixes=/opt/local
+ ${SRCTREE}/configure --with-site-prefixes=/opt/local
You can specify a list of paths with --with-site-prefixes:
- ./configure --with-site-prefixes=/opt/local:/sw
+ ${SRCTREE}/configure --with-site-prefixes=/opt/local:/sw
NOTE: Usage of --prefix does NOT imply that it is added to
site prefixes, so if you may need to add --with-site-prefixes
even with --prefix:
- ./configure --prefix=/opt/local --with-site-prefixes=/opt/local
+ ${SRCTREE}/configure --prefix=/opt/local --with-site-prefixes=/opt/local
files and information you need.
-Building from git source:
-------------------------
+Building from git source:
+------------------------
This is identical to building from the tarball sources, with the
addition of an extra step, and some extra requirements (that are most
-likely already on your system).
+likely already on your system). Remember that "in-tree" builds are
+not supported, so configure and make from a directory outside the
+tree.
$ ./autogen.sh
- $ ./configure [options]
+ $ ${SRCTREE}/configure [options]
$ make
$ make check
$ make install
automake 1.9.4
autoconf 2.60
- texinfo 4.8
+ texinfo 5.2 (preferably 6.0)
Warnings from autogen.sh:
------------------------
if DESCEND_MODULES
sxe_subdirs += modules
endif
+## Note that src and lisp are traversed twice on purpose
+## for use of the proper dumped emacs for the autoloads and tests
sxe_subdirs += src lisp src lisp info etc tests
SUBDIRS =
XCreateIC. Failures have been observed with XMODIFIERS=@im=ibus
+*** Text gets garbled/corrupted with Xorg ATI driver
+
+Some versions of the Xorg ATI driver present display issues where text
+display gets corrupted. Because of the conservative way SXEmacs
+updates the screen it is more susceptible to these issues than other
+applications.
+
+Some users have reported the problem goes away when using proprietary
+drivers. CAVEAT EMPTOR: Proprietary drivers have also been reported
+to break other parts of the system, most notabable are bad
+interactions with graphic boot package Plymouth when it asks for
+password for encrypted volumes at boot.
+
+
* Original XEmacs PROBLEMS File
===============================
# Check file headers for more information.
# BSD's m4 probably isn't gonna cut it, use gm4 if it is available
-type gm4 >/dev/null 2>&1 && M4=gm4 || M4=m4
+if test -z "$M4"
+then
+ type gm4 >/dev/null 2>&1 && M4=gm4 || M4=m4
+fi
M4_VERSION=$($M4 --version | head -n1 | sed -e 's/^\(m4 \)\?(\?GNU M4)\? *//g' )
GOOD_M4=$( echo $M4_VERSION | awk -F. '{if( ($1>1) || ( ($1==1) && ($2>4) ) || ( ($1==1) && ($2==4) && ($3>=6) )) print 1 }')
export PATH
fi
-type git >/dev/null 2>&1 && GIT=git
+if test -z "$GIT"
+then
+ type git >/dev/null 2>&1 && GIT=git
+fi
+
olddir=$(pwd)
srcdir=$(dirname $0)
cd "$srcdir"
-EXPECTED_TREE_VERSION="22.1.15"
+EXPECTED_TREE_VERSION="22.1.16"
emacs_is_beta=t
if test -n "$GIT" -a -n "$($GIT symbolic-ref HEAD 2>/dev/null)"; then
emacs_minor_version="$(echo $TREE_VERSION|cut -d. -f2)"
emacs_beta_version="$(echo $TREE_VERSION|cut -d. -f3)"
emacs_full_version="$emacs_major_version.$emacs_minor_version.$emacs_beta_version"
-sxemacs_codename="Goggomobil"
+sxemacs_codename="Hillman Hunter"
sxemacs_git_version="$GIT_VERSION"
if test "$emacs_full_version" != "$EXPECTED_TREE_VERSION"; then
echo "*******************************************"
fi
-autoconf_ver=$(autoconf --version 2>/dev/null | head -n1)
-autoheader_ver=$(autoheader --version 2>/dev/null | head -n1)
-automake_ver=$(automake --version 2>/dev/null | head -n1)
-aclocal_ver=$(aclocal --version 2>/dev/null | head -n1)
-libtool_ver=$(libtool --version 2>/dev/null | head -n1)
+test -z "$AUTOCONF" && type autoconf >/dev/null 2>&1 && AUTOCONF=autoconf
+export AUTOCONF
+test -z "$AUTORECONF" && type autoreconf >/dev/null 2>&1 && AUTORECONF=autoreconf
+export AUTORECONF
+test -z "$AUTOHEADER" && type autoheader >/dev/null 2>&1 && AUTOHEADER=autoheader
+export AUTOHEADER
+test -z "$AUTOMAKE" && type automake >/dev/null 2>&1 && AUTOMAKE=automake
+export AUTOMAKE
+test -z "$ACLOCAL" && type aclocal >/dev/null 2>&1 && ACLOCAL=aclocal
+export ACLOCAL
+test -z "$LIBTOOL" && type libtool >/dev/null 2>&1 && LIBTOOL=libtool
+export LIBTOOL
+if test -z "$LIBTOOLIZE"; then
+ if type glibtoolize >/dev/null 2>&1; then
+ LIBTOOLIZE=glibtoolize
+ elif type libtoolize >/dev/null 2>&1; then
+ LIBTOOLIZE=libtoolize
+ fi
+fi
+export LIBTOOLIZE
+autoconf_ver=$($AUTOCONF --version 2>/dev/null | head -n1)
+if test -z "$autoconf_ver"; then
+ echo Could not determine autoconf
+ exit 1
+fi
+autoreconf_ver=$($AUTORECONF --version 2>/dev/null | head -n1)
+if test -z "$autoreconf_ver"; then
+ echo Could not determine autoreconf
+ exit 1
+fi
+autoheader_ver=$($AUTOHEADER --version 2>/dev/null | head -n1)
+if test -z "$autoheader_ver"; then
+ echo Could not determine autoheader
+ exit 1
+fi
+automake_ver=$($AUTOMAKE --version 2>/dev/null | head -n1)
+if test -z "$automake_ver"; then
+ echo Could not determine automake
+ exit 1
+fi
+aclocal_ver=$($ACLOCAL --version 2>/dev/null | head -n1)
+if test -z "$aclocal_ver"; then
+ echo Could not determine aclocal
+ exit 1
+fi
+libtool_ver=$($LIBTOOL --version 2>/dev/null | head -n1)
+if test -z "$libtool_ver" -a -n "$LIBTOOLIZE"; then
+ libtool_ver=$($LIBTOOLIZE --version 2>/dev/null | head -n1)
+fi
+if test -z "$libtool_ver"; then
+ echo WARNING: Could not determine libtool
+fi
# When things go wrong... get a bigger hammer!
if test -n "$PHAMMER"; then
m4_define([4IBTOOL_VERSION], [$libtool_ver])
EOF
-if type glibtoolize 2>/dev/null; then
- LIBTOOLIZE=glibtoolize
-else
- LIBTOOLIZE=libtoolize
-fi
# using libtoolize as we did before doesn't work anymore, so just mkdir --Horst
-mkdir -p libltdl/m4
-autoreconf --force --verbose --install -Wall
+test -d libtld/m4 || mkdir -p libltdl/m4
+$AUTORECONF --force --verbose --install -Wall
# hack-o-matic. Using gmp's config.{guess,sub} lets us have properer
# detected machine configurations --SY.
guess=$(grep GMP config.guess)
sub=$(grep GMP config.sub)
if test -z "${guess}"; then
- mv -vf config.guess configfsf.guess
- cp -v configgmp.guess config.guess
+ mv -f config.guess configfsf.guess
+ cp configgmp.guess config.guess
fi
if test -z "${sub}"; then
- mv -vf config.sub configfsf.sub
- cp -v configgmp.sub config.sub
+ mv -f config.sub configfsf.sub
+ cp configgmp.sub config.sub
fi
cd $olddir
[all], [all], [dnl
OG_MULTIARG_ITEM([ase], [ase], [algebraic structures])
OG_MULTIARG_ITEM([cl], [cl], [fast Common Lisp implementation])
- OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
])
+ dnl OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
OG_MULTIARG_WITH([static-modules], [dnl
AS_HELP_STRING([--with-static-modules], [
[none], [NONE], [dnl
OG_MULTIARG_ITEM([ase], [ase], [algebraic structures])
OG_MULTIARG_ITEM([cl], [cl], [fast Common Lisp implementation])
- OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
])
+ dnl OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
OG_MULTIARG_WITH([ent], [dnl
AS_HELP_STRING([--with-ent], [
[Use the terminfo library for tty support.]),
[auto], [Autodetect])
+OG_ARG_WITH([tinfo],
+ AS_HELP_STRING([--with-tinfo],
+ [Use the ncurses tinfo library for tty support.]),
+ [auto], [Autodetect])
+
OG_ARG_WITH([termlib],
AS_HELP_STRING([--with-termlib],
[Use the termlib library for tty support.]),
[Use the termcap library for tty support.]),
[auto], [Autodetect])
+OG_ARG_WITH([builtin-tty],
+ AS_HELP_STRING([--with-builtin-tty],
+ [Use builtin termcap like code. LEGACY CODE. Please consider
+ installing ncurses. Requires /etc/termcap or TERMCAP
+ environment variable to work.]),
+ [no], [No])
+
OG_ARG_WITH([gpm],
AS_HELP_STRING([--with-gpm],
#
# Turn off core generation. We are already verifying the program fails, no need
# poluting the workspace. Of course if you are a SXEmacs developer you may want
-# to comemnt this on occasion :-)
+# to comment this on occasion :-)
ulimit -c 0
## initialise our nestable msg funs
SXE_INIT_MSG_LEVEL
+AC_PROG_SED
+AC_PROG_AWK
+
+ECHO=echo
+
dnl Small snippet to make echo -n work on solaris
ECHO_N= ECHO_C=
case `echo -n x` in
dnl -------------------------------------------------------------------------
SXE_CHECK_COMMAND_LINE
-AM_INIT_AUTOMAKE([foreign -Wall])
+test -z "$AUTOMAKE" || AUTOMAKE=automake
+
+AM_INIT_AUTOMAKE(m4_esyscmd([
+ automake_ver=`$AUTOMAKE --version 2>/dev/null | head -n1`
+ automake_major=`echo "$automake_ver" | sed -e 's/^.* \([0-9]*\).*/\1/'`
+ automake_minor=`echo "$automake_ver" | sed -e 's/^.* [0-9]*\.\([0-9]*\).*/\1/'`
+ if test "$automake_major" = "1" -a "$automake_minor" -lt "14"
+ then
+ echo "foreign -Wall"
+ else
+ echo "info-in-builddir foreign -Wall"
+ fi]))
+
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
SXE_CHECK_BUILDCHAIN
AC_SUBST(EGREP)
dnl ----------------------------------------------------------------
SXE_CHECK_BASIC_FUNS
-AC_CHECK_FUNCS([alarm cbrt closedir dup2 eaccess endpwent floor fmod fpathconf frexp fsync ftime ftruncate getaddrinfo getcwd gethostbyname gethostname getnameinfo getpagesize getrlimit gettimeofday getwd isascii isatty link logb lrand48 matherr memchr memmove memset mkdir mktime munmap perror poll pow putenv random re_comp readlink regcomp rename res_init rint rmdir select setitimer setlocale setpgid setsid sigblock sighold sigprocmask snprintf socket sqrt stpcpy strncpy strncat strcasecmp strchr strdup strerror strlwr strrchr strspn strtol strupr symlink ttyname tzset ulimit umask uname usleep utime vlimit vsnprintf waitpid wcscmp wcslen])
+AC_CHECK_FUNCS([alarm cbrt closedir dup2 eaccess endpwent floor fmod fpathconf frexp fsync ftime ftruncate getaddrinfo getcwd gethostbyname gethostname getnameinfo getpagesize getrlimit gettimeofday getwd isascii isatty link logb log2 log2f log2l log10 log10f log10l log logf logl lrand48 matherr memchr memmove memset mkdir mktime munmap perror poll pow putenv random re_comp readlink regcomp rename res_init rint rmdir select setitimer setlocale setpgid setsid sigblock sighold sigprocmask snprintf socket sqrt stpcpy strncpy strncat strcasecmp strchr strdup strerror strlwr strrchr strspn strtol strupr symlink ttyname tzset ulimit umask uname usleep utime vlimit vsnprintf waitpid wcscmp wcslen])
AS_IF([test "$have_isatty" = "yes"],
AC_DEFINE([HAVE_ISATTY], [1], [isatty is available]))
after_morecore_hook_exists=yes
AC_CHECK_FUNC(malloc_set_state, ,doug_lea_malloc=no)
AC_MSG_CHECKING(whether __after_morecore_hook exists)
-AC_LINK_IFELSE([AC_LANG_SOURCE([[extern void (* __after_morecore_hook)();],[__after_morecore_hook = 0]])],
+AC_LINK_IFELSE([AC_LANG_SOURCE([
+ [extern void (* __after_morecore_hook)();]
+ [main() {__after_morecore_hook = 0;}]
+ ])],
[AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)
after_morecore_hook_exists=no])
+if test "$after_morecore_hook_exists" = "yes" ; then
+ AC_DEFINE([HAVE_MORECORE_HOOK], [1], [Define if __after_morecore_hook is available])
+fi
+AC_SUBST(HAVE_MORECORE_HOOK)
+free_hook_exists=yes
+AC_MSG_CHECKING(whether __free_hook exists)
+AC_LINK_IFELSE([AC_LANG_SOURCE([
+ [extern void (* __free_hook)();]
+ [main() {__free_hook = 0;}]
+ ])],
+ [AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)
+ free_hook_exists=no])
+if test "$free_hook_exists" = "yes" ; then
+ AC_DEFINE([HAVE_FREE_HOOK], [1], [Define if __free_hook is available])
+fi
+AC_SUBST(HAVE_FREE_HOOK)
if test "$system_malloc" = "yes" ; then
GNU_MALLOC=no
GNU_MALLOC_reason="
SXE_EMOD_STATMOD([cl])
dnl D-Bus
-SXE_CHECK_DBUS
-if test "$have_dbus" = "yes"; then
- if test "$with_modules_dbus" = "yes"; then
- have_modules_dbus=yes
- fi
- if test "$with_static_modules_dbus" = "yes"; then
- have_static_modules_dbus=yes
- fi
-else
- AC_MSG_WARN([I cannot believe you do not have d-bus.])
-fi
+dnl SXE_CHECK_DBUS
+dnl if test "$have_dbus" = "yes"; then
+dnl if test "$with_modules_dbus" = "yes"; then
+dnl have_modules_dbus=yes
+dnl fi
+dnl if test "$with_static_modules_dbus" = "yes"; then
+dnl have_static_modules_dbus=yes
+dnl fi
+dnl else
+dnl AC_MSG_WARN([I cannot believe you do not have d-bus.])
+dnl fi
-SXE_EMOD_STATMOD([dbus])
+dnl SXE_EMOD_STATMOD([dbus])
AM_CONDITIONAL([AUTARKIC], [test "0" = "1"])
MODARCHDIR=
dnl make sure we can find Intrinsic.h
AC_CHECK_HEADER([X11/Intrinsic.h], [],
- [AC_MSG_ERROR([Unable to find X11 header files. Try using --x-includes=<path> if you know the path, or --with-x=no to disable X11 support.])])
+ [AC_MSG_ERROR([Unable to find X11 and/or Xt header files. Try using --x-includes=<path> if you know the path, or --with-x=no to disable X11 support.])])
dnl Check some more headers
AC_CHECK_HEADERS([X11/Intrinsic.h X11/StringDefs.h X11/Shell.h X11/ShellP.h],
AS_IF([test "$with_tty" != "no"],[
AS_MESSAGE(checking for TTY-related features)
dnl Check if needed calls are available at all...
- tty_libs="ncurses curses terminfo termlib termcap"
- tty_funcs="tgetent tgetstr tgetflag tparm tgoto tputs"
- for func in $tty_funcs; do
- AC_SEARCH_LIBS($func,$tty_libs)
+
+ with_tty_libs=""
+ detect_tty_libs=""
+ for lib in ncurses curses tinfo terminfo termlib termcap
+ do
+ eval "with=\$with_${lib}"
+ if test "$with" = no
+ then
+ AC_MSG_WARN(["Ignoring available ${lib} due to --with-${lib}=no"])
+ elif test "$with" = "yes"
+ then
+ with_tty_libs="$with_tty_libs $lib"
+ else
+ detect_tty_libs="$detect_tty_libs $lib"
+ fi
done
- AS_IF([test "$ac_cv_search_tgetent" = "no" -a \
- "$ac_cv_search_tgetflag" = "no" -a \
- "$ac_cv_search_tgetstr" = "no" -a \
- "$ac_cv_search_tgoto" = "no" -a \
- "$ac_cv_search_tparm" = "no" -a \
- "$ac_cv_search_tputs" = "no" ],
- have_tty=no)
- AS_IF([test "$with_tty" = "yes" -a "$have_tty" = "no" ],[
- AC_MSG_ERROR([Your system lacks necessary functions for requested TTY support])])
-],[
- for feature in ncurses curses termcap terminfo termlib gpm; do
- if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then
- AC_MSG_WARN([--with-${feature} ignored: Not valid without TTY support])
- fi
- eval "with_${feature}=no"
- done
-])
-AS_IF([test "$with_tty" != "no" -a "$have_tty" != "no" ],[
- for lib in $tty_libs; do
- SXE_CHECK_LINK_LIB($lib, , eval have_${lib}=no)
- with_lib_eval=`eval echo \\$with_$lib`
- have_lib_eval=`eval echo \\$have_$lib`
- AS_IF([test "$have_lib_eval" = "yes" ], [
- for func in $tty_funcs; do
- AC_CHECK_LIB($lib, tgetent)
- AC_CHECK_LIB($lib, tgetstr)
- AC_CHECK_LIB($lib, tgetflags)
- AC_CHECK_LIB($lib, tparm)
- AC_CHECK_LIB($lib, tgoto)
- AC_CHECK_LIB($lib, tputs)
- done
- ])
- have_lib_eval=`eval echo \\$have_$lib`
- AS_IF([test "$with_lib_eval" = "yes" -a \
- "$have_lib_eval" = "no" ],
- AC_MSG_WARN([Errors detected trying to use requested $lib. Continuing with autodetection.]))
+ # All terminal info functions needed
+ tty_funcs="tgetent tgetstr tgetflag tgetnum tparm tgoto tputs"
+ tty_libs=""
+ # Filter by existing libs, printf is sure to be available with libc, so failure
+ # would come from lib not find
+ for lib in $with_tty_libs $detect_tty_libs
+ do
+ SXE_CHECK_LINK_LIB($lib)
+ if eval "test \"\$sxe_cv_c_lib_${lib}\" != yes"
+ then
+ if eval "test \"\$with_${lib}\" = yes"
+ then
+ AC_MSG_WARN(["Ignoring --with-${lib}=yes due to library not linkable"])
+ eval "with_${lib}=no"
+ fi
+ continue
+ fi
+
+ AC_CHECK_LIB([$lib], [$tty_funcs])
+
+ # Lets verify we have all functions
+ for func in $tty_func
+ do
+ if eval "test \"\$ac_cv_lib_${lib}_${func}\" = no"
+ then
+ AS_MESSAGE(["Skipping ${lib}, does not support to all TTY functions"])
+ lib=""
+ break
+ fi
+ done
+
+ tty_libs="$tty_libs $lib"
done
- AS_IF([test "$sxe_cv_c_lib_ncurses" = "no" -a \
- "$sxe_cv_c_lib_curses" = "no" -a \
- "$sxe_cv_c_lib_termcap" = "no" -a \
- "$sxe_cv_c_lib_terminfo" = "no" -a \
- "$sxe_cv_c_lib_termlib" = "no"],
- have_tty=no)
- AS_IF([test "$with_tty" = "yes" -a "$have_tty" = "no"],
- AC_MSG_ERROR([Your system lacks necessary libraries for requested TTY support.]))
-])
-
-AS_IF([test "$with_tty" != "no" -a "$have_tty" != "no" ],[
- AC_DEFINE([HAVE_NCURSES], [1], [Description here!])
- with_ncurses=yes
- AC_CHECK_HEADER(ncurses/ncurses.h, curses_h_file=ncurses/ncurses.h)
- if test -z "$curses_h_file"; then
- AC_CHECK_HEADER(ncurses/curses.h, curses_h_file=ncurses/curses.h)
- fi
- if test -n "$curses_h_file"; then
- AC_CHECK_HEADER(ncurses/termcap.h, termcap_h_file=ncurses/termcap.h)
- AC_CHECK_HEADER(ncurses/term.h, term_h_file=ncurses/term.h)
- else
- AC_CHECK_HEADER(ncurses.h, curses_h_file=ncurses.h)
- AC_CHECK_HEADER(termcap.h, termcap_h_file=termcap.h)
- AC_CHECK_HEADER(term.h, term_h_file=term.h)
- fi
- SXE_ADD_SXEUITTY_OBJS(terminfo.o)
- SXE_PREPEND(-lncurses, LIBS)
-
- if test -z "$curses_h_file" ; then
- dnl Try again, and check for the bogus ncurses/ include bug.
- dnl (i.e. ncurses/curses.h bogusly includes <unctrl.h> instead of
- dnl <ncurses/unctrl.h>)
- save_c_switch_site="$c_switch_site"
- c_switch_site="$c_switch_site -I/usr/include/ncurses"
+ if test -n "$tty_libs"
+ then
+ AS_MESSAGE(["Considering libraries: $tty_libs"])
+
+ # Check which preferred lib can be used
+ for func in $tty_funcs
+ do
+ # Make sure no flags are harmed during the search
+ sxe_save_LIBS=$LIBS
+ AC_SEARCH_LIBS($func, $tty_libs)
+ LIBS=$sxe_save_LIBS
+ done
+
+ # Minimize the set of libraries
+ tty_feature=""
+ tty_fun=""
+ for func in $tty_funcs
+ do
+ eval lib=\$ac_cv_search_${func}
+ if test "$lib" != no -a "$lib" != "none required"
+ then
+ for feature in $tty_feature
+ do
+ if test "$feature" = "$lib"
+ then
+ lib=""
+ func=""
+ break;
+ fi
+ done
+ tty_feature="$tty_feature $lib"
+ tty_fun="$tty_fun $func"
+ fi
+ done
+ fi
+
+ if test -n "$tty_feature"
+ then
+ # Check all the expected functions still compile with all the added
+ # libraries
+ sxe_save_LIBS=$LIBS
+ LIBS="$LIBS $tty_feature"
+ AC_CHECK_FUNCS($tty_funcs)
+ for func in $tty_fun
+ do
+ if eval "test \"\$ac_cv_func_${func}\" = no"
+ then
+ tty_feature=""
+ break
+ fi
+ done
+ LIBS=$sxe_save_LIBS
+ fi
+
+ if test -n "$tty_feature"
+ then
+ SXE_PREPEND($tty_feature, LIBS)
+ for lib in $tty_feature
+ do
+ l=`echo $lib | sed -e 's/^-l//g'`
+ eval "with_${l}=yes"
+ done
+ with_builtin_tty=no
+ have_tty=yes
+ else
+ AC_MSG_WARN([Could not link all needed tty functions.]
+ [Please consider installing ncurses.])
+ if test "$with_builtin_tty" = yes
+ then
+ AC_MSG_WARN([Using builtin tty support.])
+ have_tty=yes
+ else
+ AC_MSG_WARN([Use --with-builtin-tty=yes if you cannot use ncurses.])
+ have_tty=no
+ fi
+ fi
+
+ if test "$with_builtin_tty" = yes
+ then
+ # Add our own wrappers using termcap
+ SXE_ADD_SXEUITTY_OBJS(termcap.o)
+ SXE_ADD_SXEUITTY_OBJS(tparam.o)
+ have_tty=yes
+ elif test "$have_tty" = yes
+ then
+ # Terminfo interface, since tgetent etc are available
+ SXE_ADD_SXEUITTY_OBJS(terminfo.o)
+ fi
+
+ # Check headers, first generally
+ AC_CHECK_HEADER(termcap.h, termcap_h_file=termcap.h)
+ AC_CHECK_HEADER(term.h, term_h_file=term.h)
+
+ if test "$have_ncurses" = yes; then
+ # Verify how ncurses overrides them
AC_CHECK_HEADER(ncurses/ncurses.h, curses_h_file=ncurses/ncurses.h)
if test -z "$curses_h_file"; then
AC_CHECK_HEADER(ncurses/curses.h, curses_h_file=ncurses/curses.h)
fi
if test -n "$curses_h_file"; then
AC_CHECK_HEADER(ncurses/termcap.h, termcap_h_file=ncurses/termcap.h)
- AC_CHECK_HEADER(ncurses/term.h, term_h_file=ncurses/term.h)
+ AC_CHECK_HEADER(ncurses/term.h, term_h_file=ncurses/term.h)
else
- AC_CHECK_HEADER(ncurses.h, curses_h_file=ncurses.h)
- AC_CHECK_HEADER(termcap.h, curses_h_file=termcap.h)
- AC_CHECK_HEADER(term.h, curses_h_file=term.h)
+ AC_CHECK_HEADER(ncurses.h, curses_h_file=ncurses.h)
fi
- if test -n "$curses_h_file"
- then AC_MSG_WARN([Your system has the bogus ncurses include bug.])
- else c_switch_site="$save_c_switch_site"
+
+ if test -z "$curses_h_file" ; then
+ dnl Try again, and check for the bogus ncurses/ include bug.
+ dnl (i.e. ncurses/curses.h bogusly includes <unctrl.h> instead of
+ dnl <ncurses/unctrl.h>)
+ save_c_switch_site="$c_switch_site"
+ c_switch_site="$c_switch_site -I/usr/include/ncurses"
+ AC_CHECK_HEADER(ncurses/ncurses.h, curses_h_file=ncurses/ncurses.h)
+ if test -z "$curses_h_file"; then
+ AC_CHECK_HEADER(ncurses/curses.h, curses_h_file=ncurses/curses.h)
+ fi
+ if test -n "$curses_h_file"; then
+ AC_CHECK_HEADER(ncurses/termcap.h, termcap_h_file=ncurses/termcap.h)
+ AC_CHECK_HEADER(ncurses/term.h, term_h_file=ncurses/term.h)
+ else
+ AC_CHECK_HEADER(ncurses.h, curses_h_file=ncurses.h)
+ fi
+ if test -n "$curses_h_file"
+ then
+ AC_MSG_WARN([Your system has the bogus ncurses include bug.])
+ AC_CHECK_HEADER(termcap.h, curses_h_file=termcap.h)
+ AC_CHECK_HEADER(term.h, curses_h_file=term.h)
+ else c_switch_site="$save_c_switch_site"
+ fi
fi
+ fi
+
+ if test -n "$curses_h_file"; then
+ AC_DEFINE_UNQUOTED([HAVE_CURSES_H], [1],
+ [There is a curses.h header file available])
+ AC_DEFINE_UNQUOTED([CURSES_H_FILE], ["${curses_h_file}"],
+ [The curses.h header file])
+ fi
+
+ if test -n "$termcap_h_file"; then
+ AC_DEFINE_UNQUOTED([HAVE_TERMCAP_H], [1],
+ [There is a termcap.h header available])
+ AC_DEFINE_UNQUOTED([TERMCAP_H_FILE], ["${termcap_h_file}"],
+ [The termcap.h header file])
+ fi
+
+ if test -n "$term_h_file"; then
+ AC_DEFINE_UNQUOTED([HAVE_TERM_H], [1],
+ [There is a term.h header available])
+ AC_DEFINE_UNQUOTED([TERM_H_FILE], ["${term_h_file}"],
+ [The term.h header file])
+ fi
+
+ # Finally let's see if we have prototype for the elusive tparm
+ AC_MSG_CHECKING(for tparm prototype)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+/* Completely incompatible prototype with all tparm ones
+ if files above define it, compilation should fail
+*/
+extern void tparm(void);
+ ]], [[ tparm(); ]])],
+ [AC_MSG_RESULT(no)],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED([HAVE_TPARM_PROTOTYPE], [1],
+ [tparm has a prototype defined])])
+
+ # Finally let's see if we have prototype for tgetent
+ AC_MSG_CHECKING(for tgetent prototype)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetent(void);
+ ]], [[ tgetent(); ]])],
+ [AC_MSG_RESULT(no)],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED([HAVE_TGETENT_PROTOTYPE], [1],
+ [tgetent has a prototype defined])])
+
+
+ # Finally let's see if we have prototype for tgetflag
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetflag(void);
+ ]], [[ tgetflag(); ]])],
+ [AC_MSG_RESULT(no)],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED([HAVE_TGETFLAG_PROTOTYPE], [1],
+ [tgetflag has a prototype defined])])
+
+ # Finally let's see if we have prototype for tgetnum
+ AC_MSG_CHECKING(for tgetnum prototype)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetnum(void);
+ ]], [[ tgetnum(); ]])],
+ [AC_MSG_RESULT(no)],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED([HAVE_TGETNUM_PROTOTYPE], [1],
+ [tgetnum has a prototype defined])])
+
+ # Finally let's see if we have prototype for tgetnum
+ AC_MSG_CHECKING(for tgetstr prototype)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetstr(void);
+ ]], [[ tgetstr(); ]])],
+ [AC_MSG_RESULT(no)],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED([HAVE_TGETSTR_PROTOTYPE], [1],
+ [tgetstr has a prototype defined])])
+
+ # Finally let's see if we have prototype for tgetnum
+ AC_MSG_CHECKING(for tputs prototype)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tputs(void);
+ ]], [[ tputs(); ]])],
+ [AC_MSG_RESULT(no)],
+ [AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED([HAVE_TPUTS_PROTOTYPE], [1],
+ [tputs has a prototype defined])])
+],[
+ for feature in ncurses curses termcap terminfo termlib gpm; do
+ if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then
+ AC_MSG_WARN([--with-${feature} ignored: Not valid without TTY support])
fi
-])
-
-AS_IF([test "$with_tty" != "no" -a "$have_ncurses" != "no" ],[
- if test "$with_ncurses" = "no" -o -z "$curses_h_file" ; then
-
- # Check alternate library includes
- for lib in curses term terminfo termcap; do
- AC_CHECK_HEADER(${lib}.h, [
- eval ${lib}_h_file=${lib}.h
- AC_CHECK_LIB($lib, tgetent, eval have_${lib}=yes, eval have_${lib}=no)
- AC_CHECK_LIB($lib, tgetstr, , eval have_${lib}=no)])
- done
-
- for lib in curses terminfo termlib termcap; do
- have_lib_eval=`eval echo \\$have_$lib`
- if test "$have_lib_eval" = "yes"; then
- AC_CHECK_LIB($lib, tparm,
- SXE_ADD_SXEUITTY_OBJS(terminfo.o),
- SXE_ADD_SXEUITTY_OBJS(tparam.o))
- SXE_PREPEND(-l${lib}, LIBS)
- break
- fi
- done
- fi
- if test -n "$curses_h_file"; then
- AC_DEFINE_UNQUOTED([HAVE_CURSES_H], [1], [There is a curses.h header file available])
- fi
- if test -n "$termcap_h_file"; then
- AC_DEFINE_UNQUOTED([HAVE_TERMCAP_H], [1], [There is a termcap.h header available])
- fi
- if test -n "$term_h_file"; then
- AC_DEFINE_UNQUOTED([HAVE_TERM_H], [1], [There is a term.h header available])
- fi
- AC_DEFINE_UNQUOTED([CURSES_H_FILE], ["${curses_h_file-curses.h}"], [The curses.h header file])
- AC_DEFINE_UNQUOTED([TERMCAP_H_FILE], ["${termcap_h_file-termcap.h}"], [The termcap.h header file])
- AC_DEFINE_UNQUOTED([TERM_H_FILE], ["${term_h_file-term.h}"], [The term.h header file])
+ eval "with_${feature}=\"\""
+ done
])
AS_IF([test "$with_tty" != "no" -a "$have_tty" != no], [
- AC_DEFINE([HAVE_TTY], [1], [Include TTY support for SXEmacs])
- AC_DEFINE([HAVE_UNIXOID_EVENT_LOOP], [1], [Include Unixoid event loop - TTY provided])
+ AC_DEFINE([HAVE_TTY], [1],
+ [Include TTY support for SXEmacs])
+ AC_DEFINE([HAVE_UNIXOID_EVENT_LOOP], [1],
+ [Include Unixoid event loop - TTY provided])
SXE_ADD_SXEUITTY_OBJS([console-tty.o device-tty.o event-tty.o frame-tty.o objects-tty.o redisplay-tty.o cm.o])
])
+
AS_IF([test "$with_tty" != "no" -a "$have_tty" != no], [
dnl General Purpose Mouse (libgpm) support
AS_IF([test "$with_gpm" != "no"], [
## Since almost any of the below tests uses pkgconfig we make a
## once-for-all-times check now
SXE_SEARCH_CONFIG_PROG([pkg-config])
+if test "$have_pkg_config" = "yes" -a -n "$with_site_prefixes"; then
+ for dir in $with_site_prefixes; do
+ pkgcfg_dir="${dir}/lib/pkgconfig"
+ if test -n "$PKG_CONFIG_PATH"; then
+ PKG_CONFIG_PATH="$PKG_CONFIG_PATH":"$pkgcfg_dir"
+ else
+ PKG_CONFIG_PATH="$pkgcfg_dir"
+ fi
+ done
+ export PKG_CONFIG_PATH
+fi
dnl libsndfile support
if test "$with_media_sndfile" != "no"; then
if test "$have_media_ffmpeg" = "yes"; then
AC_MSG_RESULT([yes])
- FFMPEG_LIBS=`$PKG_CONFIG --libs libavformat`
- FFMPEG_CPPFLAGS=`$PKG_CONFIG --cflags libavformat`
+ FFMPEG_LIBS=`$PKG_CONFIG --libs libavformat libavcodec libavutil`
+ FFMPEG_CPPFLAGS=`$PKG_CONFIG --cflags libavformat libavcodec libavutil`
SXE_PREPEND($FFMPEG_LIBS, MM_LIBS)
SXE_PREPEND_UNDUP($FFMPEG_CPPFLAGS, MM_CPPFLAGS)
SXE_ADD_MM_OBJS([media-ffmpeg.o])
-#!/bin/sh
+#!/usr/bin/env bash
#
# A script to setup your git area to contribute back to SXEmacs
#
##
LETSPOP=0
cat<<EOF
-**********************************************************************
+**[Welcome]***********************************************************
| Hello, and welcome to the SXEmacs Team |
| |
| This script will help guide you through setting up your personal |
read junk
# Work in the toplevel dir just to be on the safe side
-pushd $(git rev-parse --show-toplevel) 2>/dev/null ||
+pushd $(git rev-parse --show-toplevel) 1>/dev/null ||
( echo 1>&2 "Please run this script from _inside_ your SXEmacs repo."
exit 1 )
# Lets not mess about in anything that isn't a SXEmacs repo
-if [ ! -f "sxemacs.pc.in" ]; then
+if [ "$(git show-ref v22.1.13 2>/dev/null|cut -c-8)" != "5ff9eebe" ]; then
echo 1>&2 "This is NOT a SXEmacs repo, bailing out!"
exit 1
fi
+
+# Save the current branch name in case we move about
+CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
+
## Clean WD
clear_wd()
{
cat<<EOF
-**********************************************************************
+**[Dirty Tree]********************************************************
Your working directory contains changes that have not been committed
yet. Under certain conditions this script may do a couple of branch
jumps, so we will play it safe and store your changes out of the way
have_noname()
{
echo
- echo "Please enter your name as you would like it to appear in the logs"
- echo -n "Take care to guard against shell expansion (\"John Doe\"): "
+ echo "Please enter your name as you would like it to appear in the logs"
+ echo -n 'Protected with quotes (e.g. "John Doe"): '
read NAME
}
{
echo
echo "Git needs to know your email address (for commit logs, etc)."
- echo -n "Please enter your email address (eg john@doe.com): "
+ echo -n "Please enter your email address (e.g. john@doe.com): "
read EMAIL
git config user.email ${EMAIL}
}
## Tracking branch "for-steve"
# Make sure origin points to http://git.sxemacs.org/sxemacs
-ORIGIN_URL=$(git config remote.origin.url)
-if [ "${ORIGIN_URL}" != "http://git.sxemacs.org/sxemacs" ]; then
- echo
- echo "Uh-Oh! origin URL is wrong. Currently set to: ${ORIGIN_URL}"
- echo -n "Hit [RETURN] to reset to: http://git.sxemacs.org/sxemacs or C-c to abort: "
- read junk
- git remote set-url origin http://git.sxemacs.org/sxemacs
+CHECK_ORIGIN=${CHECK_ORIGIN:-true}
+if [ "${CHECK_ORIGIN}" != "false" ]; then
+ ORIGIN_URL=$(git config remote.origin.url)
+ if [ "${ORIGIN_URL}" != "http://git.sxemacs.org/sxemacs" ]; then
+ cat<<EOF
+
+**[Bad origin]********************************************************
+WARNING: origin URL is WRONG.
+
+ It is currently set to: ${ORIGIN_URL}
+But it SHOULD be set to: http://git.sxemacs.org/sxemacs
+
+It you are absolutely 110% sure that your origin is correct, abort now
+with C-c, and re-run this script with the environment variable,
+"CHECK_ORIGIN" set explicitly to the string: "false". Otherwise we
+are going to reset it for you.
+**********************************************************************
+ Hit [RETURN] to continue, or C-c to abort.
+EOF
+ read junk
+ git remote set-url origin http://git.sxemacs.org/sxemacs
+ fi
fi
set_branch()
{
echo
- echo "**********************************************************************"
- echo "Setting up a \"for-steve\" branch to track origin/master."
+ echo "**[Tracking branch]***************************************************"
+ echo 'Setting up a "for-steve" branch to track origin/master.'
echo
echo "This is the branch that you will merge your work into once it is"
echo "ready for Steve to pull into his repo."
echo "**********************************************************************"
echo -n " Hit [RETURN] to continue, or C-c to abort."
read junk
- # Does it make a difference from where we do this from? Lets
- # jump into master just to be on the safe side.
- git checkout --quiet master
+ # Does it make a difference from where we do this from? Lets jump
+ # into master if we're not there already, just to be on the safe
+ # side.
+ [ "${CURRENT_BRANCH}" != "master" ] && git checkout --quiet master
git branch --track for-steve origin/master
+ # Offer to leave them in for-steve, but only if we didn't stash
+ if [ ${LETSPOP} -eq 0 ]; then
+ echo
+ echo -n 'Switch to the "for-steve" branch when this script exits? [Y/n]: '
+ read RESP
+ if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
+ git checkout --quiet for-steve
+ fi
+ fi
}
git branch | grep -q for-steve || set_branch
-git checkout --quiet for-steve
## Remotes
# myremote
{
cat<<EOF
-**********************************************************************
+**[Remote]************************************************************
You need to have a remote repository set up for you to push your
changes to. Steve will need read-only access so he can fetch your
changes into his repo. You can name this repo anything you like,
-just as long as it is a single word, and that word is not \"origin\".
+just as long as it is a single word, and that word is not "origin".
A remote repo can have a "Fetch URL", and a "Push URL". The
former (Fetch URL) is the URL from which people would clone, pull,
couple of examples...
ssh://user@example.com/~/path/to/repo (using ssh)
- https://user:pass@example.com/path/to/repo (using \"smart http\")
+ https://user:pass@example.com/path/to/repo (using "smart http")
+**********************************************************************
+-- more -- Hit [RETURN] to continue, or C-c to abort.
+EOF
+read junk
+ cat<<EOF
+
+**[Remote (cont)]*****************************************************
You _could_ use a git protocol URL (git://), but because the git
protocol has no authentication if you allow write access you are
allowing write access for anyone who has an internet connection. So
read junk
REMOTES=($(git remote | grep -v origin))
echo
- echo "**********************************************************************"
+ echo "**[Remotes]***********************************************************"
echo " Currently configured remotes (possibly empty list)"
echo
- for (( i = 1; i <= ${#REMOTES}; i++ )); do
- echo -n "\t"${i} -- ${REMOTES[${i}]}" at: "
+ for (( i = 0; i <= ${#REMOTES}; i++ )); do
+ echo -en "\t"${i} -- ${REMOTES[${i}]}" at: "
echo $(git config remote.${REMOTES[${i}]}.url)
done
echo
echo "**********************************************************************"
- echo -n " Enter the number that corresponds to your remote, or \"x\" for none: "
+ echo -n ' Enter the number that corresponds to your remote, or "x" for none: '
read index
if [ "${index}" = "x" -o "${index}" = "" ]; then
echo
- echo -n "Enter the \"Fetch URL\" (read-only access) to your remote: "
+ echo -n 'Enter the "Fetch URL" (read-only access) to your remote: '
read MYREMOTE_FETCH
- echo -n "Enter the \"Push URL\" (write-access for you) to your remote: "
+ echo -n 'Enter the "Push URL" (write-access for you) to your remote: '
read MYREMOTE_PUSH
- echo "And what would you like to call this remote? It MUST be a single "
- echo -n "word, and CANNOT be \"origin\": "
+ echo "And what would you like to call this remote? It MUST be a single"
+ echo -n 'word, and CANNOT be "origin": '
read MYREMOTE_NAME
git remote add ${MYREMOTE_NAME} ${MYREMOTE_FETCH}
git remote set-url --push ${MYREMOTE_NAME} ${MYREMOTE_PUSH}
TYPE="X"
URL=$(git config remote.${REMOTES[${index}]}.url)
while [ "${TYPE}" != "F" -a "${TYPE}" != "P" -a "${TYPE}" != "B" ]; do
- echo "Is \"${URL}\""
+ echo 'Is "'${URL}'"'
echo -n " used for Fetch, Push, or Both? [F/P/B]: "
read TYPE
TYPE=$(echo ${TYPE}|tr 'fpb' 'FPB')
done
case ${TYPE} in
F)
- echo -n "${REMOTES[${index}]} \"Push URL\" (write-access for you): "
+ echo -n ${REMOTES[${index}]} '"Push URL" (write-access for you): '
read TYPEURL
git remote set-url --push ${REMOTES[${index}]} ${TYPEURL}
;;
P)
- echo -n "${REMOTES[${index}]} \"Fetch URL\" (read-only access): "
+ echo -n ${REMOTES[${index}]} '"Fetch URL" (read-only access): '
read TYPEURL
git remote set-url ${REMOTES[${index}]} ${TYPEURL}
git remote set-url --push ${REMOTES[${index}]} ${URL}
if [ -z "$(git config sxemacs.remote)" ]; then
cat<<EOF
-**********************************************************************
+**[Public repo]*******************************************************
The easiest, and quickest way to get your work and changes into the
main SXEmacs repository is if you have a publicly accessible remote
repo. Well, technically, it does not need to be publicly accessible,
will ever need to write to this repo.
**********************************************************************
EOF
- echo -n " Do you have a remote repo like this set up? [Y/n]:"
+ echo -n " Do you have a remote repo like this set up? [Y/n]: "
read RESP
if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
set_myremote
git tag|grep -q ${TAGNAME} && TAGEXISTS=yes
if [ "${TAGEXISTS}" = "yes" ]; then
+ echo
+ echo "**[Existing devkey]***************************************************"
echo "There is already a developer key tag using your initials..."
echo
git show ${TAGNAME}|sed -n 2,5p
echo
- echo -n "Is it yours? [Y/n]: "
+ echo "**********************************************************************"
+ echo -n " Is it yours? [Y/n]: "
read RESP
if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
git config sxemacs.devkey $(git show-ref ${TAGNAME}|awk '{print $1;}')
To verify signed objects in the repo, use the '--show-signature'
option with the git-log and git-show commands.
+To verify this tag, use 'git tag -v ${TAGNAME}'
+
EOF
)
git tag -s ${TAGNAME} -m "${TAGMSG}" \
git config sxemacs.devkey $(git show-ref ${TAGNAME} |
awk '{print $1;}')
- echo
- echo "Your devkey tag has been created successfully."
+ # If something went wrong here we should probably bail out
+ if [ $? -gt 0 ]; then
+ echo 1>&2 'Something has gone horribly wrong while trying to add your devkey.'
+ echo 1>&2 'Please check that your local GnuPG settings are correct, and then'
+ echo 1>&2 'attempt to re-run this script.'
+ echo
+ echo 1>&2 'If the problem persists, get in contact with us and we will do our'
+ echo 1>&2 'best to help you resolve it.'
+ exit 1
+ else
+ echo
+ echo "Your devkey tag has been created successfully."
+ fi
echo -n "Can we now push ${TAGNAME} to $(git config sxemacs.remote)? [Y/n]: "
read RESP
if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
git push $(git config sxemacs.remote) ${TAGNAME}
cat<<EOF
-**********************************************************************
+**[Devkey]************************************************************
Please let Steve know that your devkey is ready to be fetched into the
main SXEmacs repo.
git tag|grep -q maintainer-pgp &&
git show maintainer-pgp|gpg --import --quiet
- DEFKEY=$(grep default-key ~/.gnupg/gpg.conf 2>/dev/null |
+ DEFKEY=$(grep '^default-key' ~/.gnupg/gpg.conf 2>/dev/null |
awk '{print $2;}')
if [ -z "${DEFKEY}" ]; then
GUESS=$(gpg --list-keys $(git config user.email) |
if ! type gpg 1>/dev/null ; then
cat<<EOF
-**********************************************************************
+**[No GnuPG]**********************************************************
WARNING: We could not find a gpg executable!
The GnuPG related setup in this script will be skipped.
git config format.numbered auto
[ -n "$(git config format.to)" ] || git config format.to \
"SXEmacs Patches <sxemacs-patches@sxemacs.org>"
- [ -n "$(git config format.subjecprefix)" ] ||
+ [ -n "$(git config format.subjectprefix)" ] ||
git config format.subjectprefix Patch
- git config format.headers || git config format.headers \
+ [ -n "$(git config format.headers)" ] || git config format.headers \
"X-Git-Repo: $(git config remote.$(git config sxemacs.remote).url)
X-Git-Branch: for-steve"
[ -n "$(git config sendemail.to)" ] || git config sendemail.to \
"$(git config user.name) <$(git config user.email)>"
echo
- echo "**********************************************************************"
+ echo "**[Format Summary]****************************************************"
echo " Here are the format and sendemail configs we just set."
echo
echo " format.numbered --" $(git config format.numbered)
}
BOOL=$(git config sxemacs.formats)
if [ "${BOOL}" != "true" ]; then
- echo
- echo "We're going to set some format config values, but only if they aren't"
- echo "already set, so your existing ones are safe."
+ cat<<EOF
+
+**[Formats]***********************************************************
+We are going to set some format config values, but only if they are
+not already set, so your existing ones are safe.
+**********************************************************************
+ Hit [RETURN] to continue, or C-c to abort.
+EOF
+ read junk
set_formats
fi
{
# post-commit hook
if [ -f ".git/hooks/post-commit" ]; then
- cat>>.git/hooks/post-commit<<EOF
+ if ! grep -q 'lines added by git-for-steve' .git/hooks/post-commit; then
+ cat>>.git/hooks/post-commit<<EOF
### Begin - lines added by git-for-steve.sh
LOG=\$(git rev-parse --show-toplevel)/++log
[ -f \${LOG} ] && rm -f \${LOG}
### End -- lines added by git-for-steve.sh
EOF
+ fi
elif [ -f ".git/hooks/post-commit.sample" ]; then
- cat>>.git/hooks/post-commit.sample<<EOF
+ cp .git/hooks/post-commit{.sample,}
+ sed -i /Nothing/d .git/hooks/post-commit
+ cat>>.git/hooks/post-commit<<EOF
### Begin - lines added by git-for-steve.sh
LOG=\$(git rev-parse --show-toplevel)/++log
[ -f \${LOG} ] && rm -f \${LOG}
### End -- lines added by git-for-steve.sh
EOF
- sed -i /Nothing/d .git/hooks/post-commit.sample
- mv .git/hooks/post-commit{.sample,}
else
cat>.git/hooks/post-commit<<EOF
#!/bin/sh
if [ "${HAVEHOOK}" != "true" ]; then
cat<<EOF
-**********************************************************************
+**[Commit Hook]*******************************************************
Some of the SXEmacs developers use a variation of the
-#'add-change-log-entry defun (C-x 4 a) for logging their changes
+'add-change-log-entry' defun (C-x 4 a) for logging their changes
It creates a log file in the toplevel directory (called '++log') which
you can use with the '-F' switch of 'git commit'.
GITTMP=${GITTMP:-${TMP:-/tmp}}
[ -n "$(git config alias.alias)" ] ||
- git config alias.alias "config --get-regexp alias"
+ git config alias.alias "config --get-regexp ^alias"
[ -n "$(git config alias.bi)" ] || git config alias.bi bisect
[ -n "$(git config alias.co)" ] || git config alias.co checkout
+ [ -n "$(git config alias.cob)" ] || git config alias.cob "checkout -b"
[ -n "$(git config alias.ci)" ] || git config alias.ci commit
[ -n "$(git config alias.cam)" ] || git config alias.cam "commit -sam"
+ [ -n "$(git config alias.sam)" ] || git config alias.sam "commit -sam"
BOOL=$(git config sxemacs.commithook)
if [ "${BOOL}" = "true" ]; then
fi
[ -n "$(git config alias.rbi)" ] || git config alias.rbi "rebase -i"
- [ -n "$(git config alias.pfs)" ] ||
- git config alias.pfs "push $(git config sxemacs.remote) for-steve"
+ [ -n "$(git config alias.prb)" ] || git config alias.prb "pull --rebase"
+
+ REMOTE=$(git config sxemacs.remote)
+ if [ -n "${REMOTE}" ]; then
+ [ -n "$(git config alias.pfs)" ] ||
+ git config alias.pfs "push ${REMOTE} for-steve"
+ fi
+
[ -n "$(git config alias.fp)" ] || git config alias.fp \
"format-patch --minimal -o ${GITTMP} origin/master"
[ -n "$(git config alias.fpc)" ] || git config alias.fpc \
"send-email ${GITTMP}"
[ -n "$(git config alias.spc)" ] || git config alias.spc \
"send-email --compose ${GITTMP}"
+ [ -n "$(git config alias.wb)" ] || git config alias.wb \
+ "rev-parse --abbrev-ref HEAD"
echo
- echo "**********************************************************************"
+ echo "**[Your Aliases]******************************************************"
echo " The following aliases are now available for use..."
echo
git alias
if [ "${BOOL}" != "true" ]; then
cat<<EOF
-**********************************************************************
+**[Aliases]***********************************************************
And finally, lets set a few aliases. We will only set them if they
have not already been set so all of your pre-existing aliases are
safe.
set_aliases
fi
+popd 1>/dev/null
+
+if [ ${LETSPOP} -eq 1 ]; then
+ # If we changed branches on them, go back.
+ if [ "${CURRENT_BRANCH}" != "$(git rev-parse --abbrev-ref HEAD)" ]; then
+ git checkout --quiet ${CURRENT_BRANCH}
+ fi
+ git stash pop --quiet
+fi
+
+## All done, bar the shouting...
cat<<EOF
-**********************************************************************
+**[Thanks]************************************************************
| Thank you for taking the time to setup your repo so that you can |
| contribute back to the SXEmacs Project. We really appreciate all |
| that you do, no matter how small or insignificant you may think it |
**********************************************************************
EOF
-# If we stashed at the start, pop them back
-[ ${LETSPOP} -eq 1 ] && git stash pop --quiet
-
-popd
-
exit 0
### git-for-steve.sh ends here.
\f
+* Changes in SXEmacs 22.1.16 (Hillman Hunter)
+=============================================
+
+** Developer Stats
+
+ Nelson Ferreira -- 124 commits
+
+ Steve Youngs -- 62 commits
+ Horst G. Burkhardt III -- 6 commits
+ Evgeny Zajcev -- 3 commits
+ Ruediger Meier -- 3 commits
+ Sebastian Freundt -- 1 commit
+
+** Bugs closed in this release:
+
+132, 141, 152, 155, 156, 158, 160, 161, 162, 163, 165, 169, 170, 171,
+172, 173, 174, 176, 181
+
+** Multimedia fixes/updates -- Ferreira, Youngs.
+
+SoX and FFmpeg support was brought back and mostly fixed. PulseAudio
+has been brought back, and support for "media roles" was added.
+
+** Build chain fixes/updates -- Meier, Ferreira, Burkhardt, Youngs
+
+A lot of work went into stamping out compiler warnings and errors to
+give us a much cleaner/safer build.
+
+** FFI updates -- Zajcev, Youngs.
+
+** Don't reset the cursor upon exit on a TTY -- Youngs.
+
+** Contrib updates/fixes/additions -- Ferreira, Youngs.
+
+** Make docs compatible with Texinfo 5.x -- Youngs.
+
+** Support Unix user/group lookups -- Ferreira.
+
+** XDG compliance -- Youngs.
+
+SXEmacs now looks for user files in locations that are much more
+inline with modern standards and conventions.
+
+`user-init-directory' is now ${XDG_CONFIG_HOME}/sxemacs or
+~/.config/sxemacs if $XDG_CONFIG_HOME is not set.
+
+User packages will now be searched for in ${XDG_DATA_HOME}/sxemacs
+(~/.local/share/sxemacs).
+
+The old legacy directory `~/.sxemacs' is still supported, and in fact
+will still be used if the XDG directories don't exist and it (the
+legacy dir) does. A user can also force use of the legacy directory
+if they so choose.
+
+** Add wildcard support to #'find-file et al. -- Youngs.
+
+** Fix coding cookies -- Youngs.
+
+** "In-tree builds" are no longer supported. -- Youngs.
+
+If you want to build SXEmacs, do the right thing and build OUTSIDE of
+the source tree.
+
+** TTY related fixes/updates -- Ferreira.
+
+** Various minor updates/tweaks/fixes -- Burkhardt, Ferreira, Youngs.
+
+
* Changes in SXEmacs 22.1.15 (Goggomobil)
=========================================
LANG=C
LC_ALL=C
+# Since automake does not ignore unknown options, this has to be set in
+# a horrible hack in configure.ac until we choose to mandate automake 1.14
+# Since many distros still carry automake 1.13, this is up for debate...
+#
+# AUTOMAKE_OPTIONS = info-in-builddir
+
+builddir = @builddir@
+srcdir = @srcdir@
+
+SUBDIRS=
+
+CLEANFILES =
+CLEANFILES += cl.info
+CLEANFILES += custom.info
+CLEANFILES += emodules.info
+CLEANFILES += external-widget.info
+CLEANFILES += internals/internals.info
+CLEANFILES += lispref/lispref.info
+CLEANFILES += new-users-guide/new-users-guide.info
+CLEANFILES += sppm.info
+CLEANFILES += sxemacs-faq.info
+CLEANFILES += sxemacs/sxemacs.info
+CLEANFILES += term.info
+CLEANFILES += widget.info
+
info_TEXINFOS =
info_TEXINFOS += cl.texi
info_TEXINFOS += custom.texi
* Standard Abbrev Tables:: Abbrev tables used by various major modes.
@end menu
-@node Abbrev Mode
+@node Abbrev Mode, Abbrev Tables, Abbrevs, Abbrevs
@section Setting Up Abbrev Mode
Abbrev mode is a minor mode controlled by the value of the variable
(error "Not expanding this abbrev"))))
@end smallexample
-@node Standard Abbrev Tables
+@node Standard Abbrev Tables, , Abbrev Expansion, Abbrevs
@section Standard Abbrev Tables
Here we list the variables that hold the abbrev tables for the
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/annotations.info
-@node Annotations, Display, Glyphs, top
+@node Annotations, Display, Glyphs, Top
@chapter Annotations
@cindex annotation
annotation's lifetime.
@end menu
-@node Annotation Basics
+@node Annotation Basics, Annotation Primitives, Annotations, Annotations
@section Annotation Basics
@cindex margin
space to display in.
-@node Annotation Primitives
+@node Annotation Primitives, Annotation Properties, Annotation Basics, Annotations
@section Annotation Primitives
@defun make-annotation glyph &optional position layout buffer with-event d-glyph rightp
@code{nil} otherwise.
@end defun
-@node Annotation Properties
+@node Annotation Properties, Locating Annotations, Annotation Primitives, Annotations
@section Annotation Properties
@defun annotation-glyph annotation
@end defun
-@node Locating Annotations
+@node Locating Annotations, Margin Primitives, Annotation Properties, Annotations
@section Locating Annotations
@defun annotations-in-region start end buffer
@end defun
-@node Margin Primitives
+@node Margin Primitives, Annotation Hooks, Locating Annotations, Annotations
@section Margin Primitives
@cindex margin width
@code{Emacs.left-margin.foreground}; likewise for the right margin.
-@node Annotation Hooks
+@node Annotation Hooks, , Margin Primitives, Annotations
@section Annotation Hooks
@cindex annotation hooks
@end menu
-@node Backup Files
+@node Backup Files, Auto-Saving, Backups and Auto-Saving, Backups and Auto-Saving
@section Backup Files
@cindex backup file
@end menu
-@node Making Backups
+@node Making Backups, Rename or Copy, Backup Files, Backup Files
@subsection Making Backup Files
@defun backup-buffer
@end defvar
-@node Rename or Copy
+@node Rename or Copy, Numbered Backups, Making Backups, Backup Files
@subsection Backup by Renaming or by Copying?
@cindex backup files, how to make them
@end defvar
-@node Numbered Backups
+@node Numbered Backups, Backup Names, Rename or Copy, Backup Files
@subsection Making and Deleting Numbered Backup Files
If a file's name is @file{foo}, the names of its numbered backup
file. The default value is 2.
@end defopt
-@node Backup Names
+@node Backup Names, , Numbered Backups, Backup Files
@subsection Naming Backup Files
The functions in this section are documented mainly because you can
@end defun
-@node Auto-Saving
+@node Auto-Saving, Reverting, Backup Files, Backups and Auto-Saving
@section Auto-Saving
@cindex auto-saving
@end defvar
-@node Reverting
+@node Reverting, , Auto-Saving, Backups and Auto-Saving
@section Reverting
If you have made extensive changes to a file and then change your mind
@end menu
-@node Buffer Basics
+@node Buffer Basics, Current Buffer, Buffers, Buffers
@section Buffer Basics
@ifinfo
@end menu
-@node Building SXEmacs
+@node Building SXEmacs, Garbage Collection, Building SXEmacs and Object Allocation, Building SXEmacs and Object Allocation
@appendixsec Building SXEmacs
@cindex building SXEmacs
@pindex temacs
@end menu
-@node Command Overview
+@node Command Overview, Defining Commands, Command Loop, Command Loop
@section Command Loop Overview
The command loop in SXEmacs is a standard event loop, reading events
does.
-@node Defining Commands
+@node Defining Commands, Interactive Call, Command Overview, Command Loop
@section Defining Commands
@cindex defining commands
@cindex commands, defining
@end menu
-@node Using Interactive
+@node Using Interactive, Interactive Codes, Defining Commands, Defining Commands
@subsection Using @code{interactive}
This section describes how to write the @code{interactive} form that
@var{function} is not interactive, @code{nil} will be returned.
@end defun
-@node Interactive Codes
+@node Interactive Codes, Interactive Examples, Using Interactive, Defining Commands
@subsection Code Characters for @code{interactive}
@cindex interactive code description
@cindex description for interactive codes
value becomes the argument for the command. Prompt.
@end table
-@node Interactive Examples
+@node Interactive Examples, , Interactive Codes, Defining Commands
@subsection Examples of Using @code{interactive}
@cindex examples of using @code{interactive}
@cindex @code{interactive}, examples of using
@end example
-@node Interactive Call
+@node Interactive Call, Command Loop Info, Defining Commands, Command Loop
@section Interactive Call
@cindex interactive call
@end defun
-@node Command Loop Info
+@node Command Loop Info, Events, Interactive Call, Command Loop
@section Information from the Command Loop
The editor command loop sets several Lisp variables to keep status
@end defvar
-@node Events
+@node Events, Reading Input, Command Loop Info, Command Loop
@section Events
@cindex events
@cindex input events
@end menu
-@node Event Types
+@node Event Types, Event Contents, Events, Events
@subsection Event Types
Events represent keyboard or mouse activity or status changes of various
@end table
-@node Event Contents
+@node Event Contents, Event Predicates, Event Types, Events
@subsection Contents of the Different Types of Events
Every event, no matter what type it is, contains a timestamp (which is
@end table
@end defun
-@node Event Predicates
+@node Event Predicates, Accessing Mouse Event Positions, Event Contents, Events
@subsection Event Predicates
The following predicates return whether an object is an event of a
@end defun
-@node Accessing Mouse Event Positions
+@node Accessing Mouse Event Positions, Accessing Other Event Info, Event Predicates, Events
@subsection Accessing the Position of a Mouse Event
Unlike other events, mouse events (i.e. motion, button-press,
@end menu
-@node Frame-Level Event Position Info
+@node Frame-Level Event Position Info, Window-Level Event Position Info, Accessing Mouse Event Positions, Accessing Mouse Event Positions
@subsubsection Frame-Level Event Position Info
The following functions return frame-level information about where
This will signal an error if the event is not a mouse event.
@end defun
-@node Window-Level Event Position Info
+@node Window-Level Event Position Info, Event Text Position Info, Frame-Level Event Position Info, Accessing Mouse Event Positions
@subsubsection Window-Level Event Position Info
The following functions return window-level information about where
button-press, button-release, or misc-user event.
@end defun
-@node Event Text Position Info
+@node Event Text Position Info, Event Glyph Position Info, Window-Level Event Position Info, Accessing Mouse Event Positions
@subsubsection Event Text Position Info
The following functions return information about the text (including the
@end defun
-@node Event Glyph Position Info
+@node Event Glyph Position Info, Event Toolbar Position Info, Event Text Position Info, Accessing Mouse Event Positions
@subsubsection Event Glyph Position Info
The following functions return information about the glyph (if any) that
@end defun
-@node Event Toolbar Position Info
+@node Event Toolbar Position Info, Other Event Position Info, Event Glyph Position Info, Accessing Mouse Event Positions
@subsubsection Event Toolbar Position Info
@defun event-over-toolbar-p event
@end defun
-@node Other Event Position Info
+@node Other Event Position Info, , Event Toolbar Position Info, Accessing Mouse Event Positions
@subsubsection Other Event Position Info
@defun event-over-border-p event
Otherwise, @code{nil} is returned.
@end defun
-@node Accessing Other Event Info
+@node Accessing Other Event Info, Working With Events, Accessing Mouse Event Positions, Events
@subsection Accessing the Other Contents of Events
The following functions allow access to the contents of events other
@end defun
-@node Working With Events
+@node Working With Events, Converting Events, Accessing Other Event Info, Events
@subsection Working With Events
SXEmacs provides primitives for creating, copying, and destroying
@end defun
-@node Converting Events
+@node Converting Events, , Working With Events, Events
@subsection Converting Events
SXEmacs provides some auxiliary functions for converting between events
@end defun
-@node Reading Input
+@node Reading Input, Waiting, Events, Command Loop
@section Reading Input
The editor command loop reads keyboard input using the function
@end menu
-@node Key Sequence Input
+@node Key Sequence Input, Reading One Event, Reading Input, Reading Input
@subsection Key Sequence Input
@cindex key sequence input
converts the character to lower case. Note that @code{lookup-key} does
not perform case conversion in this way.
-@node Reading One Event
+@node Reading One Event, Dispatching an Event, Key Sequence Input, Reading Input
@subsection Reading One Event
The lowest level functions for command input are those which read a
eval event will be the next event read after all pending events.
@end defun
-@node Dispatching an Event
+@node Dispatching an Event, Quoted Character Input, Reading One Event, Reading Input
@subsection Dispatching an Event
@cindex dispatching an event
@end defun
-@node Quoted Character Input
+@node Quoted Character Input, Peeking and Discarding, Dispatching an Event, Reading Input
@subsection Quoted Character Input
@cindex quoted character input
@need 2000
-@node Peeking and Discarding
+@node Peeking and Discarding, , Quoted Character Input, Reading Input
@subsection Miscellaneous Event Input Features
This section describes how to ``peek ahead'' at events without using
@end defun
-@node Waiting
+@node Waiting, Quitting, Reading Input, Command Loop
@section Waiting for Elapsed Time or Input
@cindex pausing
@cindex waiting
@xref{Time of Day}, for functions to get the current time.
-@node Quitting
+@node Quitting, Prefix Command Arguments, Waiting, Command Loop
@section Quitting
@cindex @kbd{C-g}
@cindex quitting
See the function @code{set-input-mode} in @ref{Terminal Input}.
-@node Prefix Command Arguments
+@node Prefix Command Arguments, Recursive Editing, Quitting, Command Loop
@section Prefix Command Arguments
@cindex prefix argument
@cindex raw prefix argument
@end deffn
-@node Recursive Editing
+@node Recursive Editing, Disabling Commands, Prefix Command Arguments, Command Loop
@section Recursive Editing
@cindex recursive command loop
@cindex recursive editing level
recursive edit is active, it returns 0.
@end defun
-@node Disabling Commands
+@node Disabling Commands, Command History, Recursive Editing, Command Loop
@section Disabling Commands
@cindex disabled command
@end defvar
-@node Command History
+@node Command History, Keyboard Macros, Disabling Commands, Command Loop
@section Command History
@cindex command history
@cindex complex command
minibuffer.
-@node Keyboard Macros
+@node Keyboard Macros, , Command History, Command Loop
@section Keyboard Macros
@cindex keyboard macros
@end menu
-@node Speed of Byte-Code
+@node Speed of Byte-Code, Compilation Functions, Byte Compilation, Byte Compilation
@section Performance of Byte-Compiled Code
A byte-compiled function is not as efficient as a primitive function
@end example
-@node Different Behaviour
+@node Different Behaviour, , Disassembly, Byte Compilation
@section Different Behaviour
The intent is that compiled byte-code and the corresponding code
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/consoles-devices.info
-@node Consoles and Devices, Positions, Frames, top
+@node Consoles and Devices, Positions, Frames, Top
@chapter Consoles and Devices
@cindex devices
@cindex consoles
@end menu
-@node Sequencing
+@node Sequencing, Conditionals, Control Structures, Control Structures
@section Sequencing
Evaluating forms in the order they appear is the most common way
@end defspec
-@node Conditionals
+@node Conditionals, Combining Conditions, Sequencing, Control Structures
@section Conditionals
@cindex conditional evaluation
@end example
-@node Combining Conditions
+@node Combining Conditions, Iteration, Conditionals, Control Structures
@section Constructs for Combining Conditions
This section describes three constructs that are often used together
@end defspec
-@node Iteration
+@node Iteration, Nonlocal Exits, Combining Conditions, Control Structures
@section Iteration
@cindex iteration
@cindex recursion
@c description here anyway?
-@node Nonlocal Exits
+@node Nonlocal Exits, , Iteration, Control Structures
@section Nonlocal Exits
@cindex nonlocal exits
@end menu
-@node Catch and Throw
+@node Catch and Throw, Examples of Catch, Nonlocal Exits, Nonlocal Exits
@subsection Explicit Nonlocal Exits: @code{catch} and @code{throw}
Most control constructs affect only the flow of control within the
@end defun
-@node Examples of Catch
+@node Examples of Catch, Errors, Catch and Throw, Nonlocal Exits
@subsection Examples of @code{catch} and @code{throw}
One way to use @code{catch} and @code{throw} is to exit from a doubly
body-form @code{'no} is never evaluated.
-@node Errors
+@node Errors, Cleanups, Examples of Catch, Nonlocal Exits
@subsection Errors
@cindex errors
@end menu
-@node Signaling Errors
+@node Signaling Errors, Processing of Errors, Errors, Errors
@subsubsection How to Signal an Error
@cindex signaling errors
@end defmac
-@node Processing of Errors
+@node Processing of Errors, Handling Errors, Signaling Errors, Errors
@subsubsection How SXEmacs Processes Errors
When an error is signaled, @code{signal} searches for an active
variables precisely as they were at the time of the error.
-@node Handling Errors
+@node Handling Errors, Error Symbols, Processing of Errors, Errors
@subsubsection Writing Code to Handle Errors
@cindex error handler
@cindex handling errors
@end smallexample
-@node Error Symbols
+@node Error Symbols, , Handling Errors, Errors
@subsubsection Error Symbols and Condition Names
@cindex error symbol
@cindex error name
and their conditions.
-@node Cleanups
+@node Cleanups, , Errors, Nonlocal Exits
@subsection Cleaning Up from Nonlocal Exits
The @code{unwind-protect} construct is essential whenever you
@comment needs heavy extension! -hroptatyr
@setfilename ../../info/databases.info
-@node Databases, Processes, Range Tables, top
+@node Databases, Processes, Range Tables, Top
@chapter Databases
@cindex database
@code{open-termscript} function can be useful. @xref{Terminal Output}.
-@node Debugger
+@node Debugger, Syntax Errors, Debugging, Debugging
@section The Lisp Debugger
@cindex debugger
@cindex Lisp debugger
@end menu
-@node Error Debugging
+@node Error Debugging, Infinite Loops, Debugger, Debugger
@subsection Entering the Debugger on an Error
@cindex error debugging
@cindex debugging errors
@end example
-@node Infinite Loops
+@node Infinite Loops, Function Debugging, Error Debugging, Debugger
@subsection Debugging Infinite Loops
@cindex infinite loops
@cindex loops, infinite
@end defopt
-@node Function Debugging
+@node Function Debugging, Explicit Debug, Infinite Loops, Debugger
@subsection Entering the Debugger on a Function Call
@cindex function call debugging
@cindex debugging specific functions
@end deffn
-@node Explicit Debug
+@node Explicit Debug, Using Debugger, Function Debugging, Debugger
@subsection Explicit Entry to the Debugger
You can cause the debugger to be called at a certain point in your
an implicit @code{progn} (@pxref{Sequencing}).
-@node Using Debugger
+@node Using Debugger, Debugger Commands, Explicit Debug, Debugger
@subsection Using the Debugger
When the debugger is entered, it displays the previously selected
@need 3000
-@node Debugger Commands
+@node Debugger Commands, Invoking the Debugger, Using Debugger, Debugger
@subsection Debugger Commands
@cindex debugger command list
@end table
-@node Invoking the Debugger
+@node Invoking the Debugger, Internals of Debugger, Debugger Commands, Debugger
@subsection Invoking the Debugger
Here we describe fully the function used to invoke the debugger.
@need 5000
-@node Internals of Debugger
+@node Internals of Debugger, , Invoking the Debugger, Debugger
@subsection Internals of the Debugger
This section describes functions and variables used internally by the
@end defun
-@node Syntax Errors
+@node Syntax Errors, Compilation Errors, Debugger, Debugging
@section Debugging Invalid Lisp Syntax
The Lisp reader reports invalid syntax, but cannot say where the real
@end menu
-@node Excess Open
+@node Excess Open, Excess Close, Syntax Errors, Syntax Errors
@subsection Excess Open Parentheses
The first step is to find the defun that is unbalanced. If there is
anything.
-@node Excess Close
+@node Excess Close, , Excess Open, Syntax Errors
@subsection Excess Close Parentheses
To deal with an excess close parenthesis, first insert an open
anything.
-@node Compilation Errors, Edebug, Syntax Errors, Debugging
+@node Compilation Errors, , Syntax Errors, Debugging
@section Debugging Problems in Compilation
When an error happens during byte compilation, it is normally due to
* Dialog Box Functions::
@end menu
-@node Dialog Box Format
+@node Dialog Box Format, Dialog Box Functions, Dialog Boxes, Dialog Boxes
@section Dialog Box Format
A dialog box description is a list.
@end example
-@node Dialog Box Functions
+@node Dialog Box Functions, , Dialog Box Format, Dialog Boxes
@section Dialog Box Functions
@defun popup-dialog-box dbox-desc
@end menu
-@node Refresh Screen
+@node Refresh Screen, Truncation, Display, Display
@section Refreshing the Screen
The function @code{redraw-frame} redisplays the entire contents of a
@end ignore
-@node Beeping
+@node Beeping, , Display Tables, Display
@section Beeping
@cindex beeping
@cindex bell
@end menu
-@node ENT Basics
+@node ENT Basics, Types of Numbers, Enhanced Number Types, Enhanced Number Types
@section ENT Basics
SXEmacs supports several of the available arithmetical and
@end menu
-@node Intro Eval
+@node Intro Eval, Eval, Evaluation, Evaluation
@section Introduction to Evaluation
The Lisp interpreter, or evaluator, is the program that computes
The details of what evaluation means for each kind of form are
described below (@pxref{Forms}).
-@node Eval
+@node Eval, Forms, Intro Eval, Evaluation
@section Eval
@c ??? Perhaps this should be the last section in the chapter.
@end example
@end defvar
-@node Forms
+@node Forms, Quoting, Eval, Evaluation
@section Kinds of Forms
A Lisp object that is intended to be evaluated is called a @dfn{form}.
@end menu
-@node Self-Evaluating Forms
+@node Self-Evaluating Forms, Symbol Forms, Forms, Forms
@subsection Self-Evaluating Forms
@cindex vector evaluation
@cindex literal evaluation
@end example
-@node Symbol Forms
+@node Symbol Forms, Classifying Lists, Self-Evaluating Forms, Forms
@subsection Symbol Forms
@cindex symbol evaluation
@code{eval} treats them like any other symbol.
-@node Classifying Lists
+@node Classifying Lists, Function Indirection, Symbol Forms, Forms
@subsection Classification of List Forms
@cindex list form evaluation
Scheme.
-@node Function Indirection
+@node Function Indirection, Function Forms, Classifying Lists, Forms
@subsection Symbol Function Indirection
@cindex symbol function indirection
@cindex indirection
@end defun
-@node Function Forms
+@node Function Forms, Macro Forms, Function Indirection, Forms
@subsection Evaluation of Function Forms
@cindex function form evaluation
@cindex function call
the last body form becomes the value of the function call.
-@node Macro Forms
+@node Macro Forms, Special Forms, Function Forms, Forms
@subsection Lisp Macro Evaluation
@cindex macro call evaluation
@xref{Macros}, for a complete description of SXEmacs Lisp macros.
-@node Special Forms
+@node Special Forms, Autoloading, Macro Forms, Forms
@subsection Special Forms
@cindex special form evaluation
@end quotation
-@node Autoloading
+@node Autoloading, , Special Forms, Forms
@subsection Autoloading
The @dfn{autoload} feature allows you to call a function or macro
definition loaded from that file. @xref{Autoload}.
-@node Quoting
+@node Quoting, , Forms, Evaluation
@section Quoting
@cindex quoting
@end menu
-@node Quoting with quote
+@node Quoting with quote, Quoting with function, Quoting, Quoting
@subsection Quoting with @code{quote}
@findex quote
@findex @samp{'}
@end example
-@node Quoting with function
+@node Quoting with function, Quoting with backquote, Quoting with quote, Quoting
@subsection Quoting with @code{function}
@findex function
@findex @samp{#'}
The true expansion of @code{(lambda @dots{})} is @code{(function (lambda @dots{}))}.
-@node Quoting with backquote
+@node Quoting with backquote, Nested quoting, Quoting with function, Quoting
@subsection Quoting with @code{`} (backquote)
@findex backquote
@findex @samp{`}
@end example
-@node Nested quoting
+@node Nested quoting, , Quoting with backquote, Quoting
@subsection Nested quoting
Simple nested quotations have already been used throughout this
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/extents.info
-@node Extents, Specifiers, Abbrevs, top
+@node Extents, Specifiers, Abbrevs, Top
@chapter Extents
@cindex extent
@end menu
-@node Intro to Extents
+@node Intro to Extents, Creating and Modifying Extents, Extents, Extents
@section Introduction to Extents
@cindex extent priority
@cindex priority of an extent
keystrokes not defined in the keymap is as normal for the buffer.
-@node Atomic Extents
+@node Atomic Extents, , Extents and Events, Extents
@section Atomic Extents
@cindex atomic extent
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/faces.info
-@node Faces and Window-System Objects, Glyphs, Specifiers, top
+@node Faces and Window-System Objects, Glyphs, Specifiers, Top
@chapter Faces and Window-System Objects
@cindex faces
@cindex window-system objects
@end menu
-@node Faces
+@node Faces, Fonts, Faces and Window-System Objects, Faces and Window-System Objects
@section Faces
A @dfn{face} is a named collection of graphical properties: font,
@end menu
-@node Merging Faces
+@node Merging Faces, Basic Face Functions, Faces, Faces
@subsection Merging Faces for Display
Here are all the ways to specify which face to use for display of text:
used to color it.
-@node Basic Face Functions
+@node Basic Face Functions, Face Properties, Merging Faces, Faces
@subsection Basic Functions for Working with Faces
The properties a face can specify include the font, the foreground
@end defun
-@node Face Properties
+@node Face Properties, Face Convenience Functions, Basic Face Functions, Faces
@subsection Face Properties
You can examine and modify the properties of an existing face with the
@end defun
-@node Face Convenience Functions
+@node Face Convenience Functions, Other Face Display Functions, Face Properties, Faces
@subsection Face Convenience Functions
@deffn Command set-face-foreground face color &optional locale tag-set how-to-add
@end defun
-@node Other Face Display Functions
+@node Other Face Display Functions, , Face Convenience Functions, Faces
@subsection Other Face Display Functions
@deffn Command invert-face face &optional locale
@end defun
-@node Fonts
+@node Fonts, Colors, Faces, Faces and Window-System Objects
@section Fonts
@cindex fonts
@end menu
-@node Font Specifiers
+@node Font Specifiers, Font Instances, Fonts, Fonts
@subsection Font Specifiers
@defun font-specifier-p object
@end defun
-@node Font Instances
+@node Font Instances, Font Instance Names, Font Specifiers, Fonts
@subsection Font Instances
@defun font-instance-p object
@end defun
-@node Font Instance Names
+@node Font Instance Names, Font Instance Size, Font Instances, Fonts
@subsection Font Instance Names
@cindex font instance name
@cindex available fonts
@end defun
-@node Font Instance Size
+@node Font Instance Size, Font Instance Characteristics, Font Instance Names, Fonts
@subsection Font Instance Size
@cindex font instance size
@end defun
-@node Font Instance Characteristics
+@node Font Instance Characteristics, Font Convenience Functions, Font Instance Size, Fonts
@subsection Font Instance Characteristics
@cindex font instance characteristics
@cindex characteristics of font instances
@end defun
-@node Font Convenience Functions
+@node Font Convenience Functions, , Font Instance Characteristics, Fonts
@subsection Font Convenience Functions
@defun font-name font &optional domain
@end defun
-@node Colors
+@node Colors, , Fonts, Faces and Window-System Objects
@section Colors
@cindex colors
@end menu
-@node Color Specifiers
+@node Color Specifiers, Color Instances, Colors, Colors
@subsection Color Specifiers
@defun color-specifier-p object
@end defun
-@node Color Instances
+@node Color Instances, Color Instance Properties, Color Specifiers, Colors
@subsection Color Instances
@cindex color instances
@end defun
-@node Color Instance Properties
+@node Color Instance Properties, Color Convenience Functions, Color Instances, Colors
@subsection Color Instance Properties
@defun color-instance-name color-instance
@end example
@end defun
-@node Color Convenience Functions
+@node Color Convenience Functions, , Color Instance Properties, Colors
@subsection Color Convenience Functions
@defun color-name color &optional domain
@end menu
-@node Visiting Files
+@node Visiting Files, Saving Buffers, Files, Files
@section Visiting Files
@cindex finding files
@cindex visiting files
@end menu
-@node Visiting Functions
+@node Visiting Functions, Subroutines of Visiting, Visiting Files, Visiting Files
@subsection Functions for Visiting Files
This section describes the functions normally used to visit files.
@end defvar
-@node Subroutines of Visiting
+@node Subroutines of Visiting, , Visiting Functions, Visiting Files
@subsection Subroutines of Visiting
The @code{find-file-noselect} function uses the
@end defun
-@node Saving Buffers
+@node Saving Buffers, Reading from Files, Visiting Files, Files
@section Saving Buffers
When you edit a file in SXEmacs, you are actually working on a buffer
@end defopt
-@node Reading from Files
+@node Reading from Files, Writing to Files, Saving Buffers, Files
@section Reading from Files
You can copy a file from the disk and insert it into a buffer
@ref{Magic File Names}.
-@node Writing to Files
+@node Writing to Files, File Locks, Reading from Files, Files
@section Writing to Files
You can write the contents of a buffer, or part of a buffer, directly
@end deffn
-@node File Locks
+@node File Locks, Information about Files, Writing to Files, Files
@section File Locks
@cindex file locks
@end defun
-@node Information about Files
+@node Information about Files, Changing File Attributes, File Locks, Files
@section Information about Files
The functions described in this section all operate on strings that
@end menu
-@node Testing Accessibility
+@node Testing Accessibility, Kinds of Files, Information about Files, Information about Files
@subsection Testing Accessibility
@cindex accessibility of a file
@cindex file accessibility
@end defun
-@node Kinds of Files
+@node Kinds of Files, Truenames, Testing Accessibility, Information about Files
@subsection Distinguishing Kinds of Files
This section describes how to distinguish various kinds of files, such
@end defun
-@node Truenames
+@node Truenames, File Attributes, Kinds of Files, Information about Files
@subsection Truenames
@cindex truename (of file)
@xref{Buffer File Name}, for related information.
-@node File Attributes
+@node File Attributes, , Truenames, Information about Files
@subsection Other Information about Files
This section describes the functions for getting detailed information
@end defun
-@node Changing File Attributes
+@node Changing File Attributes, File Names, Information about Files, Files
@section Changing File Names and Attributes
@cindex renaming files
@cindex copying files
@end defun
-@node File Names
+@node File Names, Contents of Directories, Changing File Attributes, Files
@section File Names
@cindex file names
@end menu
-@node File Name Components
+@node File Name Components, Directory Names, File Names, File Names
@subsection File Name Components
@cindex directory part (of file name)
@cindex nondirectory part (of file name)
@end defun
-@node Directory Names
+@node Directory Names, Relative File Names, File Name Components, File Names
@subsection Directory Names
@cindex directory name
@cindex file name of directory
@end defun
-@node Relative File Names
+@node Relative File Names, File Name Expansion, Directory Names, File Names
@subsection Absolute and Relative File Names
@cindex absolute file name
@cindex relative file name
@end defun
-@node File Name Expansion
+@node File Name Expansion, Unique File Names, Relative File Names, File Names
@subsection Functions that Expand Filenames
@cindex expansion of file names
@end defun
-@node Unique File Names
+@node Unique File Names, File Name Completion, File Name Expansion, File Names
@subsection Generating Unique File Names
Some programs need to write temporary files. Here is the usual way to
@end defun
-@node File Name Completion
+@node File Name Completion, User Name Completion, Unique File Names, File Names
@subsection File Name Completion
@cindex file name completion subroutines
@cindex completion, file name
@end defopt
-@node User Name Completion
+@node User Name Completion, , File Name Completion, File Names
@subsection User Name Completion
@cindex user name completion subroutines
@cindex completion, user name
@end defun
-@node Contents of Directories
+@node Contents of Directories, Create/Delete Dirs, File Names, Files
@section Contents of Directories
@cindex directory-oriented functions
@cindex file names in directory
@end defvar
-@node Create/Delete Dirs
+@node Create/Delete Dirs, Magic File Names, Contents of Directories, Files
@section Creating and Deleting Directories
@c Emacs 19 features
@end deffn
-@node Magic File Names
+@node Magic File Names, Partial Files, Create/Delete Dirs, Files
@section Making Certain File Names ``Magic''
@cindex magic file names
@end defun
-@node Partial Files
+@node Partial Files, Format Conversion, Magic File Names, Files
@section Partial Files
@cindex partial files
* Detached Partial Files::
@end menu
-@node Intro to Partial Files
+@node Intro to Partial Files, Creating a Partial File, Partial Files, Partial Files
@subsection Intro to Partial Files
A @dfn{partial file} is a section of a buffer (called the @dfn{master
work correctly.
-@node Creating a Partial File
+@node Creating a Partial File, Detached Partial Files, Intro to Partial Files, Partial Files
@subsection Creating a Partial File
@deffn Command make-file-part &optional start end name buffer
@end deffn
-@node Detached Partial Files
+@node Detached Partial Files, , Creating a Partial File, Partial Files
@subsection Detached Partial Files
Every partial file has an extent in the master buffer associated with it
detached file part is to be saved.
-@node Format Conversion
+@node Format Conversion, , Partial Files, Files
@section File Format Conversion
@cindex file format conversion
@xref{Display}, for related information.
-@node Creating Frames
+@node Creating Frames, Frame Properties, Frames, Frames
@section Creating Frames
To create a new frame, call the function @code{make-frame}.
@end defun
-@node Frame Hooks
+@node Frame Hooks, , Frame Configurations, Frames
@section Hooks for Customizing Frame Behavior
@cindex frame hooks
@end menu
-@node What Is a Function
+@node What Is a Function, Lambda Expressions, Functions and Commands, Functions and Commands
@section What Is a Function?
In a general sense, a function is a rule for carrying on a computation
@end defun
-@node Lambda Expressions
+@node Lambda Expressions, Function Names, What Is a Function, Functions and Commands
@section Lambda Expressions
@cindex lambda expression
@end menu
-@node Lambda Components
+@node Lambda Components, Simple Lambda, Lambda Expressions, Lambda Expressions
@subsection Components of a Lambda Expression
@ifinfo
function is the value returned by the last element of the body.
-@node Simple Lambda
+@node Simple Lambda, Argument List, Lambda Components, Lambda Expressions
@subsection A Simple Lambda-Expression Example
Consider for example the following function:
variables.
-@node Argument List
+@node Argument List, Function Documentation, Simple Lambda, Lambda Expressions
@subsection Advanced Features of Argument Lists
@kindex wrong-number-of-arguments
@cindex argument binding
@end smallexample
-@node Function Documentation
+@node Function Documentation, , Argument List, Lambda Expressions
@subsection Documentation Strings of Functions
@cindex documentation of function
as the return value and as the documentation.
-@node Function Names
+@node Function Names, Defining Functions, Lambda Expressions, Functions and Commands
@section Naming a Function
@cindex function definition
@cindex named function
these two uses of a symbol are independent and do not conflict.
-@node Defining Functions
+@node Defining Functions, Calling Functions, Function Names, Functions and Commands
@section Defining Functions
@cindex defining a function
and tells the Lisp compiler to open-code it. @xref{Inline Functions}.
-@node Calling Functions
+@node Calling Functions, Mapping Functions, Defining Functions, Functions and Commands
@section Calling Functions
@cindex function invocation
@cindex calling a function
@end deffn
-@node Mapping Functions
+@node Mapping Functions, Anonymous Functions, Calling Functions, Functions and Commands
@section Mapping Functions
@cindex mapping functions
-@node Anonymous Functions
+@node Anonymous Functions, Function Cells, Mapping Functions, Functions and Commands
@section Anonymous Functions
@cindex anonymous function
realistic example using @code{function} and an anonymous function.
-@node Function Cells
+@node Function Cells, Inline Functions, Anonymous Functions, Functions and Commands
@section Accessing Function Cell Contents
The @dfn{function definition} of a symbol is the object stored in the
redefine a function defined elsewhere.
-@node Inline Functions
+@node Inline Functions, Related Topics, Function Cells, Functions and Commands
@section Inline Functions
@cindex inline functions
@c Emacs versions prior to 19 did not have inline functions.
-@node Related Topics
+@node Related Topics, , Inline Functions, Functions and Commands
@section Other Topics Related to Functions
Here is a table of several functions that do things related to
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/glyphs.info
-@node Glyphs, Annotations, Faces and Window-System Objects, top
+@node Glyphs, Annotations, Faces and Window-System Objects, Top
@chapter Glyphs
@cindex glyphs
@end menu
-@node Glyph Intro
+@node Glyph Intro, Images, Glyphs, Glyphs
@section Glyph Introduction
In SXEmacs, ``glyph'' does @strong{not} refer to a single unit of textual
more information about specifier locales and domains.
-@node Images
+@node Images, Using Glyphs, Glyph Intro, Glyphs
@section Images
@menu
@end menu
-@node Image Specifiers
+@node Image Specifiers, Image Instantiator Conversion, Images, Images
@subsection Image Specifiers
@cindex image specifiers
@end table
-@node Image Instantiator Conversion
+@node Image Instantiator Conversion, Image Instantiator Formats, Image Specifiers, Images
@subsection Image Instantiator Conversion
@cindex image instantiator conversion
@cindex conversion of image instantiators
@end defun
-@node Image Instantiator Formats
+@node Image Instantiator Formats, Image Instances, Image Instantiator Conversion, Images
@subsection Image Instantiator Formats
@cindex image instantiator formats
@end defvar
-@node Image Instances
+@node Image Instances, , Image Instantiator Formats, Images
@subsection Image Instances
@cindex image instances
@end menu
-@node Image Instance Types
+@node Image Instance Types, Image Instance Functions, Image Instances, Image Instances
@subsubsection Image Instance Types
@cindex image instance types
@end defun
-@node Image Instance Functions
+@node Image Instance Functions, , Image Instance Types, Image Instances
@subsubsection Image Instance Functions
@defun make-image-instance data &optional domain dest-types noerror
@end defun
-@node Using Glyphs
+@node Using Glyphs, Manipulating Glyphs, Images, Glyphs
@section Using Glyphs
Glyph usage is unfortunately somewhat arcane. (For discussion of
@end menu
-@node Creating Glyphs
+@node Creating Glyphs, Buffer Glyphs, Using Glyphs, Using Glyphs
@subsection Creating Glyphs
@defun make-glyph &optional spec-list type
on the existing glyph, @code{frame-icon-glyph}.
-@node Buffer Glyphs
+@node Buffer Glyphs, Redisplay Glyphs, Creating Glyphs, Using Glyphs
@subsection Buffer Glyphs
Creating a glyph using @code{make-glyph} does not specify @emph{where}
@end table
-@node Redisplay Glyphs
+@node Redisplay Glyphs, Frame Glyphs, Buffer Glyphs, Using Glyphs
@subsection Redisplay Glyphs
To use a glyph to control the shape of miscellaneous redisplay effects
@end defvr
-@node Frame Glyphs
+@node Frame Glyphs, External Glyphs, Redisplay Glyphs, Using Glyphs
@subsection Frame Glyphs
There are also a number of special objects whose appearance is specified
@end table
-@node External Glyphs
+@node External Glyphs, Native GUI Widgets, Frame Glyphs, Using Glyphs
@subsection External Glyphs
@cindex frame icon
@cindex icon, frame
@end defun
-@node Native GUI Widgets
+@node Native GUI Widgets, Subwindows, External Glyphs, Using Glyphs
@subsection Native GUI Widgets
@cindex native widget
* Primitive Widgets:: Catalogue of available native widgets.
@end menu
-@node Introduction to Widgets
+@node Introduction to Widgets, Lisp API to Native Widgets, Native GUI Widgets, Native GUI Widgets
@subsubsection Introduction to Native Widgets and Subwindow Glyphs
Traditionally Emacsen have hidden the GUI apparatus from the Lisp
search dialog is formatted using layouts.
-@node Lisp API to Native Widgets
+@node Lisp API to Native Widgets, Layouts, Introduction to Widgets, Native GUI Widgets
@subsubsection Lisp API to Native Widgets
Native widgets are manipulated as @emph{glyphs} (@pxref{Glyphs}). Thus
disconcerting than the actual case.
-@node Layouts
+@node Layouts, Primitive Widgets, Lisp API to Native Widgets, Native GUI Widgets
@subsubsection Layouts
A SXEmacs @dfn{layout} is a one-dimensional array of glyphs. It is a
@end example
-@node Primitive Widgets
+@node Primitive Widgets, , Layouts, Native GUI Widgets
@subsubsection Primitive Widgets
@c #### the following table should be replaced with a menu of nodes
@end table
-@node Subwindows
+@node Subwindows, , Native GUI Widgets, Using Glyphs
@subsection Subwindows
Subwindows are not currently implemented.
@end defun
-@node Manipulating Glyphs
+@node Manipulating Glyphs, Glyph Examples, Using Glyphs, Glyphs
@section Manipulating Glyphs
Each glyphs has properties that may be accessed. Most of these can
@end menu
-@node Glyph Properties
+@node Glyph Properties, Glyph Convenience Functions, Manipulating Glyphs, Manipulating Glyphs
@subsection Glyph Properties
Each glyph has a list of properties, which control all of the aspects of
@end defun
-@node Glyph Convenience Functions
+@node Glyph Convenience Functions, Glyph Dimensions, Glyph Properties, Manipulating Glyphs
@subsection Glyph Convenience Functions
The following functions are provided for working with specific
@end defun
-@node Glyph Dimensions
+@node Glyph Dimensions, Glyph Types, Glyph Convenience Functions, Manipulating Glyphs
@subsection Glyph Dimensions
@defun glyph-width glyph &optional window
@end defun
-@node Glyph Types
+@node Glyph Types, , Glyph Dimensions, Manipulating Glyphs
@subsection Glyph Types
Each glyph has a particular type, which controls how the glyph's image
@end defun
-@node Glyph Examples
+@node Glyph Examples, , Manipulating Glyphs, Glyphs
@section Glyph Examples
For many applications, displaying graphics is a simple process: you
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/gutter.info
-@node Gutter, Scrollbars, Toolbar, top
+@node Gutter, Scrollbars, Toolbar, Top
@chapter Gutter
@cindex gutter
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/hash-tables.info
-@node Hash Tables, Range Tables, Media, top
+@node Hash Tables, Range Tables, Media, Top
@chapter Hash Tables
@cindex hash table
@end menu
-@node Introduction to Hash Tables
+@node Introduction to Hash Tables, Working With Hash Tables, Hash Tables, Hash Tables
@section Introduction to Hash Tables
A @dfn{hash table} is a data structure that provides mappings from
@end defun
-@node Weak Hash Tables
+@node Weak Hash Tables, , Working With Hash Tables, Hash Tables
@section Weak Hash Tables
@cindex hash table, weak
@cindex weak hash table
@end menu
-@node Documentation Basics
+@node Documentation Basics, Accessing Documentation, Documentation, Documentation
@section Documentation Basics
@cindex documentation conventions
@cindex writing a documentation string
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/internationalization.info
-@node Internationalization, Foreign Functions, Enhanced Number Types, top
+@node Internationalization, Foreign Functions, Enhanced Number Types, Top
@chapter Internationalization
@menu
@end menu
-@node I18N Levels 1 and 2
+@node I18N Levels 1 and 2, I18N Level 3, Internationalization, Internationalization
@section I18N Levels 1 and 2
SXEmacs is now compliant with I18N levels 1 and 2. Specifically, this means
packages, the final carriage returns in the strings produced by
@code{make-docfile} must be ignored.)
-@node I18N Level 4
+@node I18N Level 4, , I18N Level 3, Internationalization
@section I18N Level 4
The Asian-language support in XEmacs is called ``MULE''. @xref{MULE}.
Public License instead of this License.
-@node Introduction, Packaging, Copying, Top
+@node Introduction, , Copying
@chapter Introduction
Most of the SXEmacs text editor is written in the programming
@end menu
-@node Caveats
+@node Caveats, Lisp History, Introduction, Introduction
@section Caveats
This manual has gone through numerous drafts. It is nearly complete
-- Sebastian Freundt
@end ifinfo
-@node Lisp History
+@node Lisp History, Conventions, Caveats, Introduction
@section Lisp History
@cindex Lisp history
worry about it; this manual is self-contained.
-@node Conventions
+@node Conventions, Acknowledgements, Lisp History, Introduction
@section Conventions
This section explains the notational conventions that are used in this
@end menu
-@node Some Terms
+@node Some Terms, nil and t, Conventions, Conventions
@subsection Some Terms
Throughout this manual, the phrases ``the Lisp reader'' and ``the Lisp
in this font or form: @var{first-number}.
-@node nil and t
+@node nil and t, Evaluation Notation, Some Terms, Conventions
@subsection @code{nil} and @code{t}
@cindex @code{nil}, uses of
@cindex truth value
Variables}.
-@node Evaluation Notation
+@node Evaluation Notation, Printing Notation, nil and t, Conventions
@subsection Evaluation Notation
@cindex evaluation notation
@cindex documentation notation
@end example
-@node Printing Notation
+@node Printing Notation, Error Messages, Evaluation Notation, Conventions
@subsection Printing Notation
@cindex printing notation
@end example
-@node Error Messages
+@node Error Messages, Buffer Text Notation, Printing Notation, Conventions
@subsection Error Messages
@cindex error message notation
@end example
-@node Buffer Text Notation
+@node Buffer Text Notation, Format of Descriptions, Error Messages, Conventions
@subsection Buffer Text Notation
@cindex buffer text notation
@end example
-@node Format of Descriptions
+@node Format of Descriptions, , Buffer Text Notation, Conventions
@subsection Format of Descriptions
@cindex description format
@end menu
-@node A Sample Function Description
+@node A Sample Function Description, A Sample Variable Description, Format of Descriptions, Format of Descriptions
@subsubsection A Sample Function Description
@cindex function descriptions
@cindex command descriptions
@end defspec
-@node A Sample Variable Description
+@node A Sample Variable Description, , A Sample Function Description, Format of Descriptions
@subsubsection A Sample Variable Description
@cindex variable descriptions
@cindex option descriptions
replaced by `User Option'.
-@node Acknowledgements
+@node Acknowledgements, , Conventions, Introduction
@section Acknowledgements
This manual was based on the GNU Emacs Lisp Reference Manual, version
@end menu
-@node Keymap Terminology
+@node Keymap Terminology, Format of Keymaps, Keymaps, Keymaps
@section Keymap Terminology
@cindex key
@cindex keystroke
@end deffn
-@node Other Keymap Functions
+@node Other Keymap Functions, , Scanning Keymaps, Keymaps
@section Other Keymap Functions
@defun set-keymap-prompt keymap new-prompt
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/ldap.info
-@node LDAP Support, PostgreSQL Support, X-Windows, top
+@node LDAP Support, PostgreSQL Support, X-Windows, Top
@chapter LDAP Support
@cindex LDAP
@c and also in the file intro.texi.
@c This manual documents SXEmacs 22.1 and was based on the
@c documentation for XEmacs 21.0 (v3.3).
-@subtitle Version @version{} (for SXEmacs 22.1), May 2005
+@subtitle Version @version{} (for SXEmacs 22.1), Jun 2015
+
+@author Steve Youngs <steve@@sxemacs.org>
+@author Sebastian Freundt <hroptatyr@@sxemacs.org>
+@author Ben Wing <wing@@xemacs.org>
-@author by Steve Youngs, Sebastian Freundt
-@author SXEmacs developers
-@author
-@author Based on the XEmacs Lisp Reference Manual
-@author by Ben Wing
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
@end menu
-@node Cons Cells
+@node Cons Cells, Lists as Boxes, Lists, Lists
@section Lists and Cons Cells
@cindex lists and cons cells
@cindex @code{nil} and lists
elements of @var{l} except the first.
-@node Lists as Boxes
+@node Lists as Boxes, List-related Predicates, Cons Cells, Lists
@section Lists as Linked Pairs of Boxes
@cindex box representation for lists
@cindex lists represented as boxes
lists, and for more ``box and arrow'' illustrations of lists.
-@node List-related Predicates
+@node List-related Predicates, List Elements, Lists as Boxes, Lists
@section Predicates on Lists
The following predicates test whether a Lisp object is an atom, is a
@need 2000
-@node List Elements
+@node List Elements, Building Lists, List-related Predicates, Lists
@section Accessing Elements of Lists
@cindex list elements
@end defun
-@node Building Lists
+@node Building Lists, Modifying Lists, List Elements, Lists
@section Building Cons Cells and Lists
@cindex cons cells
@cindex building lists
@end defun
-@node Modifying Lists
+@node Modifying Lists, Sets And Lists, Building Lists, Lists
@section Modifying Existing List Structure
You can modify the @sc{car} and @sc{cdr} contents of a cons cell with the
@end menu
-@node Setcar
+@node Setcar, Setcdr, Modifying Lists, Modifying Lists
@subsection Altering List Elements with @code{setcar}
Changing the @sc{car} of a cons cell is done with @code{setcar}. When
@end example
-@node Setcdr
+@node Setcdr, Rearrangement, Setcar, Modifying Lists
@subsection Altering the CDR of a List
The lowest-level primitive for modifying a @sc{cdr} is @code{setcdr}:
@end smallexample
-@node Rearrangement
+@node Rearrangement, , Setcdr, Modifying Lists
@subsection Functions that Rearrange Lists
@cindex rearrangement of lists
@cindex modification of lists
@end defun
-@node Sets And Lists
+@node Sets And Lists, Association Lists, Modifying Lists, Lists
@section Using Lists as Sets
@cindex lists as sets
@cindex sets
for another way to add an element to a list stored in a variable.
-@node Association Lists
+@node Association Lists, Property Lists, Sets And Lists, Lists
@section Association Lists
@cindex association list
@cindex alist
@end defun
-@node Property Lists
+@node Property Lists, Skip Lists, Association Lists, Lists
@section Property Lists
@cindex property list
@cindex plist
@end menu
-@node Working With Normal Plists
+@node Working With Normal Plists, Working With Lax Plists, Property Lists, Property Lists
@subsection Working With Normal Plists
@defun plist-get plist property &optional default
@end defun
-@node Working With Lax Plists
+@node Working With Lax Plists, Converting Plists To/From Alists, Working With Normal Plists, Property Lists
@subsection Working With Lax Plists
Recall that a @dfn{lax plist} is a property list whose keys are compared
@end defun
-@node Converting Plists To/From Alists
+@node Converting Plists To/From Alists, , Working With Lax Plists, Property Lists
@subsection Converting Plists To/From Alists
@defun alist-to-plist alist
@end defun
-@node Skip Lists
+@node Skip Lists, Weak Lists, Property Lists, Lists
@section Skip Lists
@cindex skip list
-@node Weak Lists
+@node Weak Lists, DL-Lists, Skip Lists, Lists
@section Weak Lists
@cindex weak list
@end defun
-@node DL-Lists
+@node DL-Lists, Bloom Filters, Weak Lists, Lists
@section Doubly-Linked Lists
@cindex dl-list
@cindex doubly-linked list
@end example
-@node Bloom Filters
+@node Bloom Filters, , DL-Lists, Lists
@section Bloom Filters
@cindex Bloom filters
@end menu
-@node How Programs Do Loading
+@node How Programs Do Loading, Autoload, Loading, Loading
@section How Programs Do Loading
SXEmacs Lisp has several interfaces for loading. For example,
@end menu
-@node Simple Macro
+@node Simple Macro, Expansion, Macros, Macros
@section A Simple Example of a Macro
Suppose we would like to define a Lisp construct to increment a
proceeds to evaluate it, thus incrementing @code{x}.
-@node Expansion
+@node Expansion, Compiling Macros, Simple Macro, Macros
@section Expansion of a Macro Call
@cindex expansion of macros
@cindex macro call
@end defun
-@node Compiling Macros
+@node Compiling Macros, Defining Macros, Expansion, Macros
@section Macros and Byte Compilation
@cindex byte-compiling macros
During Compile}).
-@node Defining Macros
+@node Defining Macros, Backquote, Compiling Macros, Macros
@section Defining Macros
A Lisp macro is a list whose @sc{car} is @code{macro}. Its @sc{cdr} should
@end defspec
-@node Backquote
+@node Backquote, Problems with Macros, Defining Macros, Macros
@section Backquote
@cindex backquote (list substitution)
@cindex ` (list substitution)
-@node Problems with Macros
+@node Problems with Macros, , Backquote, Macros
@section Common Problems Using Macros
The basic facts of macro expansion have counterintuitive consequences.
@end menu
-@node Argument Evaluation
+@node Argument Evaluation, Surprising Local Vars, Problems with Macros, Problems with Macros
@subsection Evaluating Macro Arguments Repeatedly
When defining a macro you must pay attention to the number of times
@end ifinfo
-@node Surprising Local Vars
+@node Surprising Local Vars, Eval During Expansion, Argument Evaluation, Problems with Macros
@subsection Local Variables in Macro Expansions
@ifinfo
in expressions ordinarily.
-@node Eval During Expansion
+@node Eval During Expansion, Repeated Expansion, Surprising Local Vars, Problems with Macros
@subsection Evaluating Macro Arguments in Expansion
Another problem can happen if you evaluate any of the macro argument
computed as part of executing the expansion.
-@node Repeated Expansion
+@node Repeated Expansion, , Eval During Expansion, Problems with Macros
@subsection How Many Times is the Macro Expanded?
Occasionally problems result from the fact that a macro call is
@end menu
-@node Overview of Markers
+@node Overview of Markers, Predicates on Markers, Markers, Markers
@section Overview of Markers
A marker specifies a buffer and a position in that buffer. The marker
@end deffn
-@node The Region
+@node The Region, , The Mark, Markers
@section The Region
@cindex region, the
@end menu
-@node Menu Format
+@node Menu Format, Menubar Format, Menus, Menus
@section Format of Menus
@cindex menu format
@cindex format of menus
@end example
-@node Menubar Format
+@node Menubar Format, Menubar, Menu Format, Menus
@section Format of the Menubar
@cindex menubar format
@cindex format of the menubar
@end itemize
-@node Menubar
+@node Menubar, Modifying Menus, Menubar Format, Menus
@section Menubar
@cindex menubar
@end defvar
-@node Modifying Menus
+@node Modifying Menus, Menu Filters, Menubar, Menus
@section Modifying Menus
The following functions are provided to modify the menubar of one of its
@end defun
-@node Menu Filters
+@node Menu Filters, Pop-Up Menus, Modifying Menus, Menus
@section Menu Filters
@cindex menu filters
@end defun
-@node Pop-Up Menus
+@node Pop-Up Menus, Menu Accelerators, Menu Filters, Menus
@section Pop-Up Menus
@cindex pop-up menu
@end deffn
-@node Menu Accelerators
+@node Menu Accelerators, Buffers Menu, Pop-Up Menus, Menus
@section Menu Accelerators
@cindex menu accelerators
@cindex keyboard menu accelerators
@end menu
-@node Creating Menu Accelerators
+@node Creating Menu Accelerators, Keyboard Menu Traversal, Menu Accelerators, Menu Accelerators
@subsection Creating Menu Accelerators
Menu accelerators are specified as part of the menubar format using the
@xref{Menu Accelerator Functions}.
-@node Keyboard Menu Traversal
+@node Keyboard Menu Traversal, Menu Accelerator Functions, Creating Menu Accelerators, Menu Accelerators
@subsection Keyboard Menu Traversal
In addition to immediately activating a menu or menu item, the keyboard can
for more information about how to modify the menu traversal keys.
-@node Menu Accelerator Functions
+@node Menu Accelerator Functions, , Keyboard Menu Traversal, Menu Accelerators
@subsection Menu Accelerator Functions
@deffn Command accelerate-menu
followed by anything else.
-@node Buffers Menu
+@node Buffers Menu, , Menu Accelerators, Menus
@section Buffers Menu
@cindex buffers menu
@end menu
-@node Intro to Minibuffers
+@node Intro to Minibuffers, Text from Minibuffer, Minibuffers, Minibuffers
@section Introduction to Minibuffers
In most ways, a minibuffer is a normal SXEmacs buffer. Most operations
@end itemize
-@node Text from Minibuffer
+@node Text from Minibuffer, Object from Minibuffer, Intro to Minibuffers, Minibuffers
@section Reading Text Strings with the Minibuffer
Most often, the minibuffer is used to read text as a string. It can
@end defvar
-@node Object from Minibuffer
+@node Object from Minibuffer, Minibuffer History, Text from Minibuffer, Minibuffers
@section Reading Lisp Objects with the Minibuffer
This section describes functions for reading Lisp objects with the
@end defun
-@node Minibuffer History
+@node Minibuffer History, Completion, Object from Minibuffer, Minibuffers
@section Minibuffer History
@cindex minibuffer history
@cindex history list
fruitful in discovering them.
-@node Completion
+@node Completion, Yes-or-No Queries, Minibuffer History, Minibuffers
@section Completion
@cindex completion
@end menu
-@node Basic Completion
+@node Basic Completion, Minibuffer Completion, Completion, Completion
@subsection Basic Completion Functions
The two functions @code{try-completion} and @code{all-completions}
@end defvar
-@node Minibuffer Completion
+@node Minibuffer Completion, Completion Commands, Basic Completion, Completion
@subsection Completion and the Minibuffer
This section describes the basic interface for reading from the
@end defun
-@node Completion Commands
+@node Completion Commands, High-Level Completion, Minibuffer Completion, Completion
@subsection Minibuffer Commands That Do Completion
This section describes the keymaps, commands and user options used in
@end defopt
-@node High-Level Completion
+@node High-Level Completion, Reading File Names, Completion Commands, Completion
@subsection High-Level Completion Functions
This section describes the higher-level convenient functions for
@end defun
-@node Reading File Names
+@node Reading File Names, Programmed Completion, High-Level Completion, Completion
@subsection Reading File Names
Here is another high-level completion function, designed for reading a
@end defopt
-@node Programmed Completion
+@node Programmed Completion, , Reading File Names, Completion
@subsection Programmed Completion
@cindex programmed completion
@xref{File Name Completion}.
-@node Yes-or-No Queries
+@node Yes-or-No Queries, Multiple Queries, Completion, Minibuffers
@section Yes-or-No Queries
@cindex asking the user questions
@cindex querying the user
@end defun
-@node Multiple Queries
+@node Multiple Queries, Reading a Password, Yes-or-No Queries, Minibuffers
@section Asking Multiple Y-or-N Questions
When you have a series of similar questions to ask, such as ``Do you
@end defun
-@node Reading a Password
+@node Reading a Password, Minibuffer Misc, Multiple Queries, Minibuffers
@section Reading a Password
@cindex passwords, reading
@end defopt
-@node Minibuffer Misc
+@node Minibuffer Misc, , Reading a Password, Minibuffers
@section Minibuffer Miscellany
This section describes some basic functions and variables related to
@end menu
-@node Major Modes
+@node Major Modes, Minor Modes, Modes, Modes
@section Major Modes
@cindex major mode
@cindex Fundamental mode
@end menu
-@node Major Mode Conventions
+@node Major Mode Conventions, Example Major Modes, Major Modes, Major Modes
@subsection Major Mode Conventions
The code for existing major modes follows various coding conventions,
@end defvar
-@node Example Major Modes
+@node Example Major Modes, Auto Major Mode, Major Mode Conventions, Major Modes
@subsection Major Mode Examples
Text mode is perhaps the simplest mode besides Fundamental mode.
@end smallexample
-@node Auto Major Mode
+@node Auto Major Mode, Mode Help, Example Major Modes, Major Modes
@subsection How SXEmacs Chooses a Major Mode
Based on information in the file name or in the file itself, SXEmacs
@end defun
-@node Mode Help
+@node Mode Help, Derived Modes, Auto Major Mode, Major Modes
@subsection Getting Help about a Major Mode
@cindex mode help
@cindex help for major mode
@end defvar
-@node Derived Modes
+@node Derived Modes, , Mode Help, Major Modes
@subsection Defining Derived Modes
It's often useful to define a new major mode in terms of an existing
@end defmac
-@node Minor Modes
+@node Minor Modes, Modeline Format, Major Modes, Modes
@section Minor Modes
@cindex minor mode
@end menu
-@node Minor Mode Conventions
+@node Minor Mode Conventions, Keymaps and Minor Modes, Minor Modes, Minor Modes
@subsection Conventions for Writing Minor Modes
@cindex minor mode conventions
@cindex conventions for writing minor modes
@end itemize
-@node Keymaps and Minor Modes
+@node Keymaps and Minor Modes, , Minor Mode Conventions, Minor Modes
@subsection Keymaps and Minor Modes
Each minor mode can have its own keymap, which is active when the mode
standard one. The editor command loop handles this function specially.)
-@node Modeline Format
+@node Modeline Format, Hooks, Minor Modes, Modes
@section Modeline Format
@cindex modeline
@end menu
-@node Modeline Data
+@node Modeline Data, Modeline Variables, Modeline Format, Modeline Format
@subsection The Data Structure of the Modeline
@cindex modeline construct
@end example
-@node Modeline Variables
+@node Modeline Variables, %-Constructs, Modeline Data, Modeline Format
@subsection Variables Used in the Modeline
This section describes variables incorporated by the
@end defvar
-@node %-Constructs
+@node %-Constructs, , Modeline Variables, Modeline Format
@subsection @code{%}-Constructs in the ModeLine
The following table lists the recognized @code{%}-constructs and what
@end table
-@node Hooks
+@node Hooks, , Modeline Format, Modes
@section Hooks
@cindex hooks
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/internationalization.info
-@node MULE, Tips, Foreign Functions, top
+@node MULE, Tips, Foreign Functions, Top
@chapter MULE
@dfn{MULE} is the name originally given to the version of GNU Emacs
@end menu
-@node Integer Basics
+@node Integer Basics, Float Basics, Numbers, Numbers
@section Integer Basics
The range of values for an integer depends on the machine. The
@end defun
-@node Random Numbers
+@node Random Numbers, , Math Functions, Numbers
@section Random Numbers
@cindex random numbers
@end menu
-@node Printed Representation
+@node Printed Representation, Comments, Lisp Data Types, Lisp Data Types
@section Printed Representation and Read Syntax
@cindex printed representation
@cindex read syntax
@code{read}, the basic function for reading objects.
-@node Comments
+@node Comments, Primitive Types, Printed Representation, Lisp Data Types
@section Comments
@cindex comments
@cindex @samp{;} in comment
@xref{Comment Tips}, for conventions for formatting comments.
-@node Primitive Types
+@node Primitive Types, Programming Types, Comments, Lisp Data Types
@section Primitive Types
@cindex primitive types
@end itemize
-@node Programming Types
+@node Programming Types, Editing Types, Primitive Types, Lisp Data Types
@section Programming Types
@cindex programming types
@end menu
-@node Integer Type
+@node Integer Type, Floating Point Type, Programming Types, Programming Types
@subsection Integer Type
The range of values for integers in SXEmacs Lisp is @minus{}134217728 to
@xref{Numbers}, for more information.
-@node Floating Point Type
+@node Floating Point Type, Character Type, Integer Type, Programming Types
@subsection Floating Point Type
SXEmacs supports floating point numbers. The precise range of floating
@xref{Numbers}, for more information.
-@node Character Type
+@node Character Type, Symbol Type, Floating Point Type, Programming Types
@subsection Character Type
@cindex @sc{ascii} character codes
@cindex char-int confoundance disease
actual whitespace character such as a tab.
-@node Symbol Type
+@node Symbol Type, Sequence Type, Character Type, Programming Types
@subsection Symbol Type
A @dfn{symbol} in SXEmacs Lisp is an object with a name. The symbol
@end example
-@node Sequence Type
+@node Sequence Type, Cons Cell Type, Symbol Type, Programming Types
@subsection Sequence Types
A @dfn{sequence} is a Lisp object that represents an ordered set of
@code{nil}.
-@node Cons Cell Type
+@node Cons Cell Type, Array Type, Sequence Type, Programming Types
@subsection Cons Cell and List Types
@cindex address field of register
@cindex decrement field of register
@end menu
-@node Dotted Pair Notation
+@node Dotted Pair Notation, Association List Type, Cons Cell Type, Cons Cell Type
@subsubsection Dotted Pair Notation
@cindex dotted pair notation
@cindex @samp{.} in lists
@end ifinfo
-@node Association List Type
+@node Association List Type, , Dotted Pair Notation, Cons Cell Type
@subsubsection Association List Type
An @dfn{association list} or @dfn{alist} is a specially-constructed
functions that work on alists.
-@node Array Type
+@node Array Type, String Type, Cons Cell Type, Programming Types
@subsection Array Type
An @dfn{array} is composed of an arbitrary number of slots for
string type, the vector type, and the bit vector type.
-@node String Type
+@node String Type, Vector Type, Array Type, Programming Types
@subsection String Type
A @dfn{string} is an array of characters. Strings are used for many
@xref{Strings and Characters}, for functions that work on strings.
-@node Vector Type
+@node Vector Type, Bit Vector Type, String Type, Programming Types
@subsection Vector Type
A @dfn{vector} is a one-dimensional array of elements of any type. It
@xref{Vectors}, for functions that work with vectors.
-@node Bit Vector Type
+@node Bit Vector Type, Function Type, Vector Type, Programming Types
@subsection Bit Vector Type
A @dfn{bit vector} is a one-dimensional array of 1's and 0's. It
@xref{Bit Vectors}, for functions that work with bit vectors.
-@node Function Type
+@node Function Type, Macro Type, Bit Vector Type, Programming Types
@subsection Function Type
Just as functions in other programming languages are executable,
functions @code{funcall} and @code{apply}. @xref{Calling Functions}.
-@node Macro Type
+@node Macro Type, Primitive Function Type, Function Type, Programming Types
@subsection Macro Type
A @dfn{Lisp macro} is a user-defined construct that extends the Lisp
of how to write a macro.
-@node Primitive Function Type
+@node Primitive Function Type, Compiled-Function Type, Macro Type, Programming Types
@subsection Primitive Function Type
@cindex special forms
@end example
-@node Compiled-Function Type
+@node Compiled-Function Type, Autoload Type, Primitive Function Type, Programming Types
@subsection Compiled-Function Type
The byte compiler produces @dfn{compiled-function objects}. The
however, it is @samp{#[...]}.
-@node Autoload Type
+@node Autoload Type, Char Table Type, Compiled-Function Type, Programming Types
@subsection Autoload Type
An @dfn{autoload object} is a list whose first element is the symbol
symbol. @xref{Autoload}, for more details.
-@node Char Table Type
+@node Char Table Type, Hash Table Type, Autoload Type, Programming Types
@subsection Char Table Type
@cindex char table type
(not yet documented)
-@node Hash Table Type
+@node Hash Table Type, Range Table Type, Char Table Type, Programming Types
@subsection Hash Table Type
@cindex hash table type
tables.
-@node Range Table Type
+@node Range Table Type, Weak List Type, Hash Table Type, Programming Types
@subsection Range Table Type
@cindex range table type
tables.
-@node Weak List Type
+@node Weak List Type, , Range Table Type, Programming Types
@subsection Weak List Type
@cindex weak list type
(not yet documented)
-@node Editing Types
+@node Editing Types, Window-System Types, Programming Types, Lisp Data Types
@section Editing Types
@cindex editing types
@end menu
-@node Buffer Type
+@node Buffer Type, Marker Type, Editing Types, Editing Types
@subsection Buffer Type
A @dfn{buffer} is an object that holds text that can be edited
@end example
-@node Marker Type
+@node Marker Type, Extent Type, Buffer Type, Editing Types
@subsection Marker Type
A @dfn{marker} denotes a position in a specific buffer. Markers
markers.
-@node Extent Type
+@node Extent Type, Window Type, Marker Type, Editing Types
@subsection Extent Type
An @dfn{extent} specifies temporary alteration of the display
Extents are used to implement text properties. @xref{Text Properties}.
-@node Window Type
+@node Window Type, Frame Type, Extent Type, Editing Types
@subsection Window Type
A @dfn{window} describes the portion of the frame that SXEmacs uses to
@xref{Windows}, for a description of the functions that work on windows.
-@node Frame Type
+@node Frame Type, Device Type, Window Type, Editing Types
@subsection Frame Type
A @var{frame} is a rectangle on the screen (a @dfn{window} in standard
@xref{Frames}, for a description of the functions that work on frames.
-@node Device Type
+@node Device Type, Console Type, Frame Type, Editing Types
@subsection Device Type
A @dfn{device} represents a single display on which frames exist.
related to devices.
-@node Console Type
+@node Console Type, Window Configuration Type, Device Type, Editing Types
@subsection Console Type
A @dfn{console} represents a single keyboard to which devices
related to consoles.
-@node Window Configuration Type
+@node Window Configuration Type, Event Type, Console Type, Editing Types
@subsection Window Configuration Type
@cindex screen layout
related to window configurations.
-@node Event Type
+@node Event Type, Process Type, Window Configuration Type, Editing Types
@subsection Event Type
(not yet documented)
-@node Process Type
+@node Process Type, Stream Type, Event Type, Editing Types
@subsection Process Type
The word @dfn{process} usually means a running program. SXEmacs itself
from processes.
-@node Stream Type
+@node Stream Type, Keymap Type, Process Type, Editing Types
@subsection Stream Type
A @dfn{stream} is an object that can be used as a source or sink for
related to streams, including parsing and printing functions.
-@node Keymap Type
+@node Keymap Type, Syntax Table Type, Stream Type, Editing Types
@subsection Keymap Type
A @dfn{keymap} maps keys typed by the user to commands. This mapping
keys, local as well as global keymaps, and changing key bindings.
-@node Syntax Table Type
+@node Syntax Table Type, Display Table Type, Keymap Type, Editing Types
@subsection Syntax Table Type
Under SXEmacs and XEmacs 20+, a @dfn{syntax table} is a particular
and modify syntax tables.
-@node Display Table Type
+@node Display Table Type, Database Type, Syntax Table Type, Editing Types
@subsection Display Table Type
A @dfn{display table} specifies how to display each character code.
@xref{Display Tables}.
-@node Database Type
+@node Database Type, Charset Type, Display Table Type, Editing Types
@subsection Database Type
@cindex database type
(not yet documented)
-@node Charset Type
+@node Charset Type, Coding System Type, Database Type, Editing Types
@subsection Charset Type
@cindex charset type
(not yet documented)
-@node Coding System Type
+@node Coding System Type, , Charset Type, Editing Types
@subsection Coding System Type
@cindex coding system type
(not yet documented)
-@node Window-System Types
+@node Window-System Types, Type Predicates, Editing Types, Lisp Data Types
@section Window-System Types
@cindex window system types
@end menu
-@node Face Type
+@node Face Type, Glyph Type, Window-System Types, Window-System Types
@subsection Face Type
@cindex face type
(not yet documented)
-@node Glyph Type
+@node Glyph Type, Specifier Type, Face Type, Window-System Types
@subsection Glyph Type
@cindex glyph type
(not yet documented)
-@node Specifier Type
+@node Specifier Type, Font Instance Type, Glyph Type, Window-System Types
@subsection Specifier Type
@cindex specifier type
(not yet documented)
-@node Font Instance Type
+@node Font Instance Type, Color Instance Type, Specifier Type, Window-System Types
@subsection Font Instance Type
@cindex font instance type
(not yet documented)
-@node Color Instance Type
+@node Color Instance Type, Image Instance Type, Font Instance Type, Window-System Types
@subsection Color Instance Type
@cindex color instance type
(not yet documented)
-@node Image Instance Type
+@node Image Instance Type, Toolbar Button Type, Color Instance Type, Window-System Types
@subsection Image Instance Type
@cindex image instance type
(not yet documented)
-@node Toolbar Button Type
+@node Toolbar Button Type, Subwindow Type, Image Instance Type, Window-System Types
@subsection Toolbar Button Type
@cindex toolbar button type
(not yet documented)
-@node Subwindow Type
+@node Subwindow Type, X Resource Type, Toolbar Button Type, Window-System Types
@subsection Subwindow Type
@cindex subwindow type
(not yet documented)
-@node X Resource Type
+@node X Resource Type, , Subwindow Type, Window-System Types
@subsection X Resource Type
@cindex X resource type
(not yet documented)
-@node Type Predicates
+@node Type Predicates, Equality Predicates, Window-System Types, Lisp Data Types
@section Type Predicates
@cindex predicates
@cindex type checking
@end defun
-@node Equality Predicates
+@node Equality Predicates, , Type Predicates, Lisp Data Types
@section Equality Predicates
@cindex equality
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/openssl.info
-@node OpenSSL Support, Enhanced Number Types, PostgreSQL Support, top
+@node OpenSSL Support, Enhanced Number Types, PostgreSQL Support, Top
@comment node-name, next, previous, up
@chapter OpenSSL Support
@cindex OpenSSL
@end menu
-@node Building SXEmacs with OpenSSL support
+@node Building SXEmacs with OpenSSL support, SXEmacs OpenSSL API, OpenSSL Support, OpenSSL Support
@section Building SXEmacs with OpenSSL support
SXEmacs OpenSSL support requires linking to the OpenSSL libcrypto and libssl
flag when you run the SXEmacs configure script.
-@node SXEmacs OpenSSL API
+@node SXEmacs OpenSSL API, , Building SXEmacs with OpenSSL support, OpenSSL Support
@section SXEmacs OpenSSL API
@c Explaining cryptographical details behind OpenSSL API functions is
@end menu
-@node openssl General
+@node openssl General, openssl RAND, SXEmacs OpenSSL API, SXEmacs OpenSSL API
@subsection General information
In this section we deal with informative functions which kind of
@end itemize
-@node openssl RAND
+@node openssl RAND, openssl MD, openssl General, SXEmacs OpenSSL API
@subsection (Pseudo) Random Numbers
Random numbers are necessary for cryptographically secure
is @emph{not} cryptographically secure.
-@node openssl MD
+@node openssl MD, openssl HMAC, openssl RAND, SXEmacs OpenSSL API
@subsection Message Digests (aka hashes)
Message digests are widely used in modern information
other implementations.
-@node openssl HMAC
+@node openssl HMAC, openssl CIPHER, openssl MD, SXEmacs OpenSSL API
@subsection Message Authentication Codes (aka keyed hashes)
Ordinary message digests only offer data integrity verification,
@end example
-@node openssl CIPHER
+@node openssl CIPHER, openssl PKEY, openssl HMAC, SXEmacs OpenSSL API
@subsection Symmetric Cryptography
Symmetric-key algorithms can be divided into stream ciphers and
-@node openssl PKEY
+@node openssl PKEY, openssl SSL/TLS, openssl CIPHER, SXEmacs OpenSSL API
@subsection public key crypto systems
While keys for symmetric ciphers can be easily stored as strings, keys
@end example
-@node openssl SSL/TLS
+@node openssl SSL/TLS, , openssl PKEY, SXEmacs OpenSSL API
@subsection Secure Network Layers
The SSL/TLS support in this API is definitely not a copy of the
* Flow Control:: How to turn output flow control on or off.
* Batch Mode:: Running SXEmacs without terminal interaction.
@end menu
-@ignore
-* Special Keysyms:: Defining system-specific key symbols for X windows.
-@end ignore
+@c @ignore
+@c * Special Keysyms:: Defining system-specific key symbols for X windows.
+@c @end ignore
-@node Starting Up
+@node Starting Up, Getting Out, System Interface, System Interface
@section Starting Up SXEmacs
This section describes what SXEmacs does when it is started, and how you
@end menu
-@node Start-up Summary
+@node Start-up Summary, Init File, Starting Up, Starting Up
@subsection Summary: Sequence of Actions at Start Up
@cindex initialization
@cindex start up of SXEmacs
@end defopt
-@node Init File
+@node Init File, Terminal-Specific, Start-up Summary, Starting Up
@subsection The Init File: @file{init.el}
@cindex init file
@cindex @file{init.el}
@end defvar
-@node Terminal-Specific
+@node Terminal-Specific, Command Line Arguments, Init File, Starting Up
@subsection Terminal-Specific Initialization
@cindex terminal-specific initialization
@end defvar
-@node Command Line Arguments
+@node Command Line Arguments, , Terminal-Specific, Starting Up
@subsection Command Line Arguments
@cindex command line arguments
@end defvar
-@node Getting Out
+@node Getting Out, System Environment, Starting Up, System Interface
@section Getting out of SXEmacs
@cindex exiting SXEmacs
@end menu
-@node Killing SXEmacs
+@node Killing SXEmacs, Suspending SXEmacs, Getting Out, Getting Out
@subsection Killing SXEmacs
@cindex killing SXEmacs
@end defvar
-@node Suspending SXEmacs
+@node Suspending SXEmacs, , Killing SXEmacs, Getting Out
@subsection Suspending SXEmacs
@cindex suspending SXEmacs
@end defvar
-@node System Environment
+@node System Environment, User Identification, Getting Out, System Interface
@section Operating System Environment
@cindex operating system environment
@end defun
-@node User Identification
+@node User Identification, Time of Day, System Environment, System Interface
@section User Identification
@defvar user-mail-address
@end defun
-@node Time of Day
+@node Time of Day, Time Conversion, User Identification, System Interface
@section Time of Day
This section explains how to determine the current time and the time
@end defun
-@node Time Conversion
+@node Time Conversion, Timers, Time of Day, System Interface
@section Time Conversion
These functions convert time values (lists of two or three integers)
@end defun
-@node Timers
+@node Timers, Terminal Input, Time Conversion, System Interface
@section Timers for Delayed Execution
You can set up a timer to call a function at a specified future time.
@end defun
-@node Terminal Input
+@node Terminal Input, Terminal Output, Timers, System Interface
@section Terminal Input
@cindex terminal input
@end menu
-@node Input Modes
+@node Input Modes, Translating Input, Terminal Input, Terminal Input
@subsection Input Modes
@cindex input modes
@cindex terminal input modes
@end defun
-@node Translating Input
+@node Translating Input, Recording Input, Input Modes, Terminal Input
@subsection Translating Input Events
@cindex translating input events
inputting non-ASCII Latin-1 characters.
-@node Recording Input
+@node Recording Input, , Translating Input, Terminal Input
@subsection Recording Input
@defun recent-keys &optional number
See also the @code{open-termscript} function (@pxref{Terminal Output}).
-@node Terminal Output
+@node Terminal Output, Flow Control, Terminal Input, System Interface
@section Terminal Output
@cindex terminal output
@end example
@end deffn
-@ignore Not in SXEmacs
-@node Special Keysyms
-@section System-Specific X11 Keysyms
+@c @ignore Not in SXEmacs
+@c @node Special Keysyms, Flow Control, Terminal Output, System Interface
+@c @section System-Specific X11 Keysyms
-To define system-specific X11 keysyms, set the variable
-@code{system-key-alist}.
+@c To define system-specific X11 keysyms, set the variable
+@c @code{system-key-alist}.
-@defvar system-key-alist
-This variable's value should be an alist with one element for each
-system-specific keysym. An element has this form: @code{(@var{code}
-. @var{symbol})}, where @var{code} is the numeric keysym code (not
-including the ``vendor specific'' bit, 1 << 28), and @var{symbol} is the
-name for the function key.
+@c @defvar system-key-alist
+@c This variable's value should be an alist with one element for each
+@c system-specific keysym. An element has this form: @code{(@var{code}
+@c . @var{symbol})}, where @var{code} is the numeric keysym code (not
+@c including the ``vendor specific'' bit, 1 << 28), and @var{symbol} is the
+@c name for the function key.
-For example @code{(168 . mute-acute)} defines a system-specific key used
-by HP X servers whose numeric code is (1 << 28) + 168.
+@c For example @code{(168 . mute-acute)} defines a system-specific key used
+@c by HP X servers whose numeric code is (1 << 28) + 168.
-It is not a problem if the alist defines keysyms for other X servers, as
-long as they don't conflict with the ones used by the X server actually
-in use.
+@c It is not a problem if the alist defines keysyms for other X servers, as
+@c long as they don't conflict with the ones used by the X server actually
+@c in use.
-The variable is always local to the current X terminal and cannot be
-buffer-local. @xref{Multiple Displays}.
-@end defvar
-@end ignore
+@c The variable is always local to the current X terminal and cannot be
+@c buffer-local. @xref{Multiple Displays}.
+@c @end defvar
+@c @end ignore
-@node Flow Control
+@node Flow Control, Batch Mode, Terminal Output, System Interface
@section Flow Control
@cindex flow control characters
@xref{Terminal Output}.
-@node Batch Mode
+@node Batch Mode, , Flow Control, System Interface
@section Batch Mode
@cindex batch mode
@cindex noninteractive use
The order of search can be changed at build time by specifying the
@samp{--with-package-path} option to @file{configure}, or at run-time by
-specifying the @code{EMACSPACKAGEPATH} environment variable.
-@xref{Packages,,,sxemacs}
+specifying the @code{EMACSPACKAGEPATH} environment variable
+@xref{Packages,,,sxemacs}.
Also, the location for @code{early-packages} may be set via the
@code{-user-pkgs-directory} command line argument (@pxref{Command Switches,,,sxemacs}).
@end menu
-@node Point
+@node Point, Motion, Positions, Positions
@section Point
@cindex point
@end defvar
-@node Motion
+@node Motion, Excursions, Point, Positions
@section Motion
Motion functions change the value of point, either relative to the
@end menu
-@node Character Motion
+@node Character Motion, Word Motion, Motion, Motion
@subsection Motion by Characters
These functions move point based on a count of characters.
@end deffn
-@node Word Motion
+@node Word Motion, Buffer End Motion, Character Motion, Motion
@subsection Motion by Words
These functions for parsing words use the syntax table to decide
@end defvar
-@node Buffer End Motion
+@node Buffer End Motion, Text Lines, Word Motion, Motion
@subsection Motion to an End of the Buffer
To move point to the beginning of the buffer, write:
@end deffn
-@node Text Lines
+@node Text Lines, Screen Lines, Buffer End Motion, Motion
@subsection Motion by Text Lines
@cindex lines
beginning or end of a line.
-@node Screen Lines
+@node Screen Lines, List Motion, Text Lines, Motion
@subsection Motion by Screen Lines
The line functions in the previous section count text lines, delimited
@end ignore
-@node List Motion
+@node List Motion, Skipping Characters, Screen Lines, Motion
@subsection Moving over Balanced Expressions
@cindex sexp motion
@cindex Lisp expression motion
@end defopt
-@node Skipping Characters
+@node Skipping Characters, , List Motion, Motion
@subsection Skipping Characters
@cindex skipping characters
@end defun
-@node Excursions
+@node Excursions, Narrowing, Motion, Positions
@section Excursions
@cindex excursion
@end defspec
-@node Narrowing
+@node Narrowing, , Excursions, Positions
@section Narrowing
@cindex narrowing
@cindex restriction (in a buffer)
@c ldap.texi.
@setfilename ../../info/postgresql.info
-@node PostgreSQL Support, OpenSSL Support, LDAP Support, top
+@node PostgreSQL Support, OpenSSL Support, LDAP Support, Top
@chapter PostgreSQL Support
@cindex PostgreSQL
@end menu
-@node Subprocess Creation
+@node Subprocess Creation, Synchronous Processes, Processes, Processes
@section Functions that Create Subprocesses
There are three functions that create a new subprocess in which to run
@end defopt
-@node Synchronous Processes
+@node Synchronous Processes, Asynchronous Processes, Subprocess Creation, Processes
@section Creating a Synchronous Process
@cindex synchronous subprocess
@end defun
-@node Asynchronous Processes
+@node Asynchronous Processes, Deleting Processes, Synchronous Processes, Processes
@section Creating an Asynchronous Process
@cindex asynchronous subprocess
@xref{Process Buffers}.
-@node Deleting Processes
+@node Deleting Processes, Process Information, Asynchronous Processes, Processes
@section Deleting Processes
@cindex deleting processes
@end defun
-@node Process Information
+@node Process Information, Input to Processes, Deleting Processes, Processes
@section Process Information
Several functions return information about processes.
@end defun
-@node Input to Processes
+@node Input to Processes, Signals to Processes, Process Information, Processes
@section Sending Input to Processes
@cindex process input
@end defun
-@node Signals to Processes
+@node Signals to Processes, Output from Processes, Input to Processes, Processes
@section Sending Signals to Processes
@cindex process signals
@cindex sending signals
@end deffn
-@node Output from Processes
+@node Output from Processes, Sentinels, Signals to Processes, Processes
@section Receiving Output from Processes
@cindex process output
@cindex output from processes
@end menu
-@node Process Buffers
+@node Process Buffers, Filter Functions, Output from Processes, Output from Processes
@subsection Process Buffers
A process can (and usually does) have an @dfn{associated buffer},
@end defun
-@node Filter Functions
+@node Filter Functions, Accepting Output, Process Buffers, Output from Processes
@subsection Process Filter Functions
@cindex filter function
@cindex process filter
@end ignore
-@node Accepting Output
+@node Accepting Output, , Filter Functions, Output from Processes
@subsection Accepting Output from Processes
Output from asynchronous subprocesses normally arrives only while
@end defun
-@node Sentinels
+@node Sentinels, Process Window Size, Output from Processes, Processes
@section Sentinels: Detecting Process Status Changes
@cindex process sentinel
@cindex sentinel
@c SXEmacs+XEmacs feature
-@node Process Window Size
+@node Process Window Size, Transaction Queues, Sentinels, Processes
@section Process Window Size
@cindex process window size
@end defun
-@node Transaction Queues
+@node Transaction Queues, Network, Process Window Size, Processes
@section Transaction Queues
@cindex transaction queue
@xref{Filter Functions}.
-@node Network
+@node Network, , Transaction Queues, Processes
@section Network Connections
@cindex network connection
@cindex TCP
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/range-tables.info
-@node Range Tables, Databases, Hash Tables, top
+@node Range Tables, Databases, Hash Tables, Top
@chapter Range Tables
@cindex Range Tables
@end menu
-@node Introduction to Range Tables
+@node Introduction to Range Tables, Working With Range Tables, Range Tables, Range Tables
@section Introduction to Range Tables
@defun make-range-table
@end defun
-@node Working With Range Tables
+@node Working With Range Tables, , Introduction to Range Tables, Range Tables
@section Working With Range Tables
@defun get-range-table pos range-table &optional default
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/glyphs.info
-@node Scrollbars, Drag and Drop, Gutter, top
+@node Scrollbars, Drag and Drop, Gutter, Top
@chapter Scrollbars
@cindex scrollbars
@xref{Skipping Characters}.
-@node String Search
+@node String Search, Regular Expressions, Searching and Matching, Searching and Matching
@section Searching for Strings
@cindex string search
@end deffn
-@node Regular Expressions
+@node Regular Expressions, Regexp Search, String Search, Searching and Matching
@section Regular Expressions
@cindex regular expression
@cindex regexp
@end menu
-@node Syntax of Regexps
+@node Syntax of Regexps, Regexp Example, Regular Expressions, Regular Expressions
@subsection Syntax of Regular Expressions
Regular expressions have a syntax in which a few characters are
@end defun
-@node Regexp Example
+@node Regexp Example, , Syntax of Regexps, Regular Expressions
@subsection Complex Regexp Example
Here is a complicated regexp, used by SXEmacs to recognize the end of a
@end table
-@node Regexp Search
+@node Regexp Search, POSIX Regexps, Regular Expressions, Searching and Matching
@section Regular Expression Searching
@cindex regular expression searching
@cindex regexp searching
@end defun
-@node POSIX Regexps
+@node POSIX Regexps, Search and Replace, Regexp Search, Searching and Matching
@section POSIX Regular Expression Searching
The usual regular expression functions do backtracking when necessary
@end ignore
-@node Search and Replace
+@node Search and Replace, Match Data, POSIX Regexps, Searching and Matching
@section Search and Replace
@cindex replacement
@end table
-@node Match Data
+@node Match Data, Searching and Case, Search and Replace, Searching and Matching
@section The Match Data
@cindex match data
@end menu
-@node Simple Match Data
+@node Simple Match Data, Replacing Match, Match Data, Match Data
@subsection Simple Match Data Access
This section explains how to use the match data to find out what was
character of the buffer counts as 1.)
-@node Replacing Match
+@node Replacing Match, Entire Match Data, Simple Match Data, Match Data
@subsection Replacing the Text That Matched
This function replaces the text matched by the last search with
@end defun
-@node Entire Match Data
+@node Entire Match Data, Saving Match Data, Replacing Match, Match Data
@subsection Accessing the Entire Match Data
The functions @code{match-data} and @code{set-match-data} read or
@end defun
-@node Saving Match Data
+@node Saving Match Data, , Entire Match Data, Match Data
@subsection Saving and Restoring the Match Data
When you call a function that may do a search, you may need to save
@end ignore
-@node Searching and Case
+@node Searching and Case, Standard Regexps, Match Data, Searching and Matching
@section Searching and Case
@cindex searching and case
@end defvar
-@node Standard Regexps
+@node Standard Regexps, , Searching and Case, Searching and Matching
@section Standard Regular Expressions Used in Editing
@cindex regexps used standardly in editing
@cindex standard regexps used in editing
@end menu
-@node Sequence Functions
+@node Sequence Functions, Arrays, Sequences Arrays Vectors, Sequences Arrays Vectors
@section Sequences
In SXEmacs Lisp, a @dfn{sequence} is either a list, a double-linked
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/specifiers.info
-@node Specifiers, Faces and Window-System Objects, Extents, top
+@node Specifiers, Faces and Window-System Objects, Extents, Top
@chapter Specifiers
@cindex specifier
@end menu
-@node Introduction to Specifiers
+@node Introduction to Specifiers, Simple Specifier Usage, Specifiers, Specifiers
@section Introduction to Specifiers
Perhaps the most useful way to explain specifiers is via an analogy.
@end defun
-@node Other Specification Functions
+@node Other Specification Functions, , Specifier Validation Functions, Specifiers
@section Other Functions for Working with Specifications in a Specifier
@defun copy-specifier specifier &optional dest locale tag-set exact-p how-to-add
@end menu
-@node Streams Intro
+@node Streams Intro, Input Streams, Read and Print, Read and Print
@section Introduction to Reading and Printing
@cindex Lisp reader
@cindex printing
@end menu
-@node String Basics
+@node String Basics, Predicates for Strings, Strings and Characters, Strings and Characters
@section String and Character Basics
Strings in SXEmacs Lisp are arrays that contain an ordered sequence of
table and define a case table for the 8-bit ISO Latin 1 character set.
-@node Char Tables
+@node Char Tables, , Case Tables, Strings and Characters
@section The Char Table
A char table is a table that maps characters (or ranges of characters)
@end menu
-@node Symbol Components
+@node Symbol Components, Definitions, Symbols, Symbols
@section Symbol Components
@cindex symbol components
@end defun
-@node Symbol Properties
+@node Symbol Properties, , Creating Symbols, Symbols
@section Symbol Properties
@cindex property list, symbol
@cindex plist, symbol
@end menu
-@node Syntax Basics
+@node Syntax Basics, Syntax Descriptors, Syntax Tables, Syntax Tables
@section Syntax Table Concepts
@ifinfo
@end defun
-@node Syntax Descriptors
+@node Syntax Descriptors, Syntax Table Functions, Syntax Basics, Syntax Tables
@section Syntax Descriptors
@cindex syntax classes
@end menu
-@node Syntax Class Table
+@node Syntax Class Table, Syntax Flags, Syntax Descriptors, Syntax Descriptors
@subsection Table of Syntax Classes
Here is a table of syntax classes, the characters that stand for them,
@end deffn
-@node Syntax Flags
+@node Syntax Flags, , Syntax Class Table, Syntax Descriptors
@subsection Syntax Flags
@cindex syntax flags
@end table
-@node Syntax Table Functions
+@node Syntax Table Functions, Motion and Syntax, Syntax Descriptors, Syntax Tables
@section Syntax Table Functions
In this section we describe functions for creating, accessing and
@end defun
-@node Motion and Syntax
+@node Motion and Syntax, Parsing Expressions, Syntax Table Functions, Syntax Tables
@section Motion and Syntax
This section describes functions for moving across characters in
@end defun
-@node Parsing Expressions
+@node Parsing Expressions, Standard Syntax Tables, Motion and Syntax, Syntax Tables
@section Parsing Balanced Expressions
Here are several functions for parsing and scanning balanced
exceed that many.
-@node Standard Syntax Tables
+@node Standard Syntax Tables, Syntax Table Internals, Parsing Expressions, Syntax Tables
@section Some Standard Syntax Tables
Most of the major modes in SXEmacs have their own syntax tables. Here
@end defvar
-@node Syntax Table Internals
+@node Syntax Table Internals, , Standard Syntax Tables, Syntax Tables
@section Syntax Table Internals
@cindex syntax table internals
@end menu
-@node Near Point
+@node Near Point, Buffer Contents, Text, Text
@section Examining Text Near Point
Many functions are provided to look at the characters around point.
@end defun
-@node Buffer Contents
+@node Buffer Contents, Comparing Text, Near Point, Text
@section Examining Buffer Contents
This section describes two functions that allow a Lisp program to
@end ignore
-@node Comparing Text
+@node Comparing Text, Insertion, Buffer Contents, Text
@section Comparing Text
@cindex comparing buffer text
@end defun
-@node Insertion
+@node Insertion, Commands for Insertion, Comparing Text, Text
@section Inserting Text
@cindex insertion of text
@cindex text insertion
@end defun
-@node Commands for Insertion
+@node Commands for Insertion, Deletion, Insertion, Text
@section User-Level Insertion Commands
This section describes higher-level commands for inserting text,
@end defvar
-@node Deletion
+@node Deletion, User-Level Deletion, Commands for Insertion, Text
@section Deleting Text
@cindex deletion vs killing
@end deffn
-@node User-Level Deletion
+@node User-Level Deletion, The Kill Ring, Deletion, Text
@section User-Level Deletion Commands
This section describes higher-level commands for deleting text,
@end deffn
-@node The Kill Ring
+@node The Kill Ring, Undo, User-Level Deletion, Text
@section The Kill Ring
@cindex kill ring
@end menu
-@node Kill Ring Concepts
+@node Kill Ring Concepts, Kill Functions, The Kill Ring, The Kill Ring
@subsection Kill Ring Concepts
The kill ring records killed text as strings in a list, most recent
list.
-@node Kill Functions
+@node Kill Functions, Yank Commands, Kill Ring Concepts, The Kill Ring
@subsection Functions for Killing
@code{kill-region} is the usual subroutine for killing text. Any
@end deffn
-@node Yank Commands
+@node Yank Commands, Low-Level Kill Ring, Kill Functions, The Kill Ring
@subsection Functions for Yanking
@dfn{Yanking} means reinserting an entry of previously killed text
@end deffn
-@node Low-Level Kill Ring
+@node Low-Level Kill Ring, Internals of Kill Ring, Yank Commands, The Kill Ring
@subsection Low-Level Kill Ring
These functions and variables provide access to the kill ring at a lower
@end defvar
-@node Internals of Kill Ring
+@node Internals of Kill Ring, , Low-Level Kill Ring, The Kill Ring
@subsection Internals of the Kill Ring
The variable @code{kill-ring} holds the kill ring contents, in the
@end defopt
-@node Undo
+@node Undo, Maintaining Undo, The Kill Ring, Text
@section Undo
@cindex redo
@end defun
-@node Maintaining Undo
+@node Maintaining Undo, Filling, Undo, Text
@section Maintaining Undo Lists
This section describes how to enable and disable undo information for
@end defvar
-@node Filling
+@node Filling, Margins, Maintaining Undo, Text
@section Filling
@cindex filling, explicit
@end defvar
-@node Margins
+@node Margins, Auto Filling, Filling, Text
@section Margins for Filling
@defopt fill-prefix
@end defvar
-@node Auto Filling
+@node Auto Filling, Sorting, Margins, Text
@section Auto Filling
@cindex filling, automatic
@cindex Auto Fill mode
@end defvar
-@node Sorting
+@node Sorting, Columns, Auto Filling, Text
@section Sorting Text
@cindex sorting text
@end deffn
-@node Columns
+@node Columns, Indentation, Sorting, Text
@comment node-name, next, previous, up
@section Counting Columns
@cindex columns
@end defun
-@node Indentation
+@node Indentation, Case Changes, Columns, Text
@section Indentation
@cindex indentation
@end menu
-@node Primitive Indent
+@node Primitive Indent, Mode-Specific Indent, Indentation, Indentation
@subsection Indentation Primitives
This section describes the primitive functions used to count and
@end defopt
-@node Mode-Specific Indent
+@node Mode-Specific Indent, Region Indent, Primitive Indent, Indentation
@subsection Indentation Controlled by Major Mode
An important function of each major mode is to customize the @key{TAB}
@end deffn
-@node Region Indent
+@node Region Indent, Relative Indent, Mode-Specific Indent, Indentation
@subsection Indenting an Entire Region
This section describes commands that indent all the lines in the
@end deffn
-@node Relative Indent
+@node Relative Indent, Indent Tabs, Region Indent, Indentation
@subsection Indentation Relative to Previous Lines
This section describes two commands that indent the current line
@end deffn
-@node Indent Tabs
+@node Indent Tabs, Motion by Indent, Relative Indent, Indentation
@subsection Adjustable ``Tab Stops''
@cindex tabs stops for indentation
@end defopt
-@node Motion by Indent
+@node Motion by Indent, , Indent Tabs, Indentation
@subsection Indentation-Based Motion Commands
These commands, primarily for interactive use, act based on the
@end deffn
-@node Case Changes
+@node Case Changes, Text Properties, Indentation, Text
@section Case Changes
@cindex case changes
@end deffn
-@node Text Properties
+@node Text Properties, Substitution, Case Changes, Text
@section Text Properties
@cindex text properties
@cindex attributes of text
@end menu
-@node Examining Properties
+@node Examining Properties, Changing Properties, Text Properties, Text Properties
@subsection Examining Text Properties
The simplest way to examine text properties is to ask for the value of
@end defvar
-@node Changing Properties
+@node Changing Properties, Property Search, Examining Properties, Text Properties
@subsection Changing Text Properties
The primitives for changing properties apply to a specified range of
but does not copy its properties.
-@node Property Search
+@node Property Search, Special Properties, Changing Properties, Text Properties
@subsection Property Search Functions
In typical use of text properties, most of the time several or many
@end defun
-@node Special Properties
+@node Special Properties, Saving Properties, Property Search, Text Properties
@subsection Properties with Special Meanings
The predefined properties are the same as those for extents.
@end ignore
-@node Saving Properties
+@node Saving Properties, Fields, Special Properties, Text Properties
@subsection Saving Text Properties in Files
@cindex text properties in files
@cindex saving text properties
@xref{Format Conversion}, for a related feature.
-@node Fields
+@node Fields, , Saving Properties, Text Properties
@subsection Fields
@cindex text fields
@cindex fields
@end defun
-@node Substitution
+@node Substitution, Registers, Text Properties, Text
@section Substituting for a Character Code
The following functions replace characters within a specified region
@end defun
-@node Registers
+@node Registers, Transposition, Substitution, Text
@section Registers
@cindex registers
@end ignore
-@node Transposition
+@node Transposition, Change Hooks, Registers, Text
@section Transposition of Text
This subroutine is used by the transposition commands.
@end defun
-@node Change Hooks
+@node Change Hooks, Transformations, Transposition, Text
@section Change Hooks
@cindex change hooks
@cindex hooks for text changes
@end defvar
-@node Transformations
+@node Transformations, , Change Hooks, Text
@section Textual transformations---MD5 and base64 support
@cindex MD5 digests
@cindex base64
@end menu
-@node Style Tips
+@node Style Tips, Performance Tips, Tips, Tips
@section Writing Clean Lisp Programs
Here are some tips for avoiding common errors in writing Lisp code
Manipulating Comments, sxemacs, The SXEmacs User's Manual}.
-@node Library Headers
+@node Library Headers, , Comment Tips, Tips
@section Conventional Headers for XEmacs Libraries
@cindex header comments
@cindex library header comments
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/toolbar.info
-@node Toolbar, Gutter, Dialog Boxes, top
+@node Toolbar, Gutter, Dialog Boxes, Top
@chapter Toolbar
@cindex toolbar
@end menu
-@node Toolbar Intro
+@node Toolbar Intro, Creating Toolbar, Toolbar, Toolbar
@section Toolbar Intro
A @dfn{toolbar} is a bar of icons displayed along one edge of a frame.
@end defun
-@node Other Toolbar Variables
+@node Other Toolbar Variables, , Specifying the Toolbar, Toolbar
@section Other Toolbar Variables
The variables to control the toolbar thickness, visibility status, and
@end menu
-@node Global Variables
+@node Global Variables, Constant Variables, Variables, Variables
@section Global Variables
@cindex global variable
@end example
-@node Constant Variables
+@node Constant Variables, Local Variables, Global Variables, Variables
@section Variables That Never Change
@vindex nil
@vindex t
@end example
-@node Local Variables
+@node Local Variables, Void Variables, Constant Variables, Variables
@section Local Variables
@cindex binding local variables
@cindex local variables
@end defvar
-@node Void Variables
+@node Void Variables, Defining Variables, Local Variables, Variables
@section When a Variable is ``Void''
@kindex void-variable
@cindex void variable
@end defun
-@node Defining Variables
+@node Defining Variables, Accessing Variables, Void Variables, Variables
@section Defining Global Variables
@cindex variable definition
sure to load the file before making a local binding for the variable.
-@node Accessing Variables
+@node Accessing Variables, Setting Variables, Defining Variables, Variables
@section Accessing Variable Values
The usual way to reference a variable is to write the symbol which
@end defun
-@node Setting Variables
+@node Setting Variables, Variable Scoping, Accessing Variables, Variables
@section How to Alter a Variable Value
The usual way to change the value of a variable is with the special
@end example
-@node Variable Scoping
+@node Variable Scoping, Buffer-Local Variables, Setting Variables, Variables
@section Scoping Rules for Variable Bindings
A given symbol @code{foo} may have several local variable bindings,
@end menu
-@node Scope
+@node Scope, Extent, Variable Scoping, Variable Scoping
@subsection Scope
SXEmacs Lisp uses @dfn{indefinite scope} for local variable bindings.
@end itemize
-@node Extent
+@node Extent, Impl of Scope, Scope, Variable Scoping
@subsection Extent
@dfn{Extent} refers to the time during program execution that a
closures.
-@node Impl of Scope
+@node Impl of Scope, Using Scoping, Extent, Variable Scoping
@subsection Implementation of Dynamic Scoping
@cindex deep binding
binding.
-@node Using Scoping
+@node Using Scoping, , Impl of Scope, Variable Scoping
@subsection Proper Use of Dynamic Scoping
Binding a variable in one function and using it in another is a
use short names like @code{x}.
-@node Buffer-Local Variables
+@node Buffer-Local Variables, Variable Aliases, Variable Scoping, Variables
@section Buffer-Local Variables
@cindex variables, buffer-local
@cindex buffer-local variables
@end menu
-@node Intro to Buffer-Local
+@node Intro to Buffer-Local, Creating Buffer-Local, Buffer-Local Variables, Buffer-Local Variables
@subsection Introduction to Buffer-Local Variables
A buffer-local variable has a buffer-local binding associated with a
@xref{Auto Major Mode}.
-@node Creating Buffer-Local
+@node Creating Buffer-Local, Default Value, Intro to Buffer-Local, Buffer-Local Variables
@subsection Creating and Deleting Buffer-Local Bindings
@deffn Command make-local-variable variable
or how to save it, rather than with how to edit the contents.
-@node Default Value
+@node Default Value, , Creating Buffer-Local, Buffer-Local Variables
@subsection The Default Value of a Buffer-Local Variable
@cindex default value
@end defun
-@node Variable Aliases
+@node Variable Aliases, , Buffer-Local Variables, Variables
@section Variable Aliases
@cindex variables, indirect
@cindex indirect variables
@end menu
-@node Basic Windows
+@node Basic Windows, Splitting Windows, Windows, Windows
@section Basic Concepts of Emacs Windows
@cindex window
@cindex selected window
@end menu
-@node X Selections
+@node X Selections, X Server, X-Windows, X-Windows
@section X Selections
@cindex selection (for X windows)
@end defun
-@node X Server
+@node X Server, X Miscellaneous, X Selections, X-Windows
@section X Server
This section describes how to access and change the overall status of
@end menu
-@node Resources
+@node Resources, Server Data, X Server, X Server
@subsection Resources
@defun default-x-device
@end defvar
-@node Server Data
+@node Server Data, Grabs, Resources, X Server
@subsection Data about the X Server
This section describes functions and a variable that you can use to
@end defun
-@node Grabs
+@node Grabs, , Server Data, X Server
@subsection Restricting Access to the Server by Other Apps
@defun x-grab-keyboard &optional device
@end defun
-@node X Miscellaneous
+@node X Miscellaneous, , X Server, X-Windows
@section Miscellaneous X Functions and Variables
@defvar x-bitmap-file-path
@end macro
@macro syc
-Copyright @copyright{} 2004 - 2012 @sy{}
+Copyright @copyright{} 2004 - 2016 @sy{}
@end macro
@macro sye
@end macro
@macro cver
-22.1.15
+22.1.16
@end macro
@macro nver
-22.1.16
+22.1.17
@end macro
@set EDITION First
-@set UPDATED March 14, 2011
+@set UPDATED June 13, 2015
@c Things would be a lot easier if everything supported the `@copying'
@c command, I wouldn't have to put in these conditionals. --SY.
@item
Host cloaks
-The only way to get one is to ask the project lead (JackaLX).
+The only way to get one is to ask the project lead (SteveYoungs).
@item
No IRC client
so that reasonable discussion can continue.
@end itemize
+To date, we've not ever had to resort to these. We tend to sort
+things out pretty quickly and amicably most of the time.
+
@menu
* Voting:: Deciding things via ballot
@end menu
@email{sxemacs-devel@@sxemacs.org}. This post will have the email
subject @dfn{[Vote Results] Subject of vote}.
-For an issue to be decided via vote it must receive the majority of the
-total number of votes with a minimum of four votes.
-
-@smallexample
-Issue decided:
-
- A - 5 votes
- B - 2 votes
-
-A - wins
-@end smallexample
-
-@smallexample
-Issue undecided:
-
- A - 3 votes
- B - 2 votes
-@end smallexample
-
+The issue will be decided by simple majority. For a hung vote (no
+side has a majority) the Project Lead will either decide the outcome,
+call a postponement, or even call another vote.
@node Coding Style, Patches, Dispute Resolution, Top
@comment node-name, next, previous, up
@end smallexample
Heretic people all over the world have claimed that this inconsistency
-is ... well ... inconsistent, but all right-thinking people know that
+is@dots{} well@dots{} inconsistent, but all right-thinking people know that
(a) K&R are @emph{right} and (b) K&R are right. Besides, functions are
special anyway (you can't nest them in C).
We do understand that there may be some valid reasons why you can't,
and that is okay, this section still provides a valid workflow.
+Before you do anything, we recommend that you run the
+@code{git-for-steve.sh} script which you'll find in the @code{contrib}
+directory. It will ensure that some basic git config settings are
+correct, and set up your ``for-steve'' tracking branch.
@subheading Preparing a patch from a git repo
@enumerate
@item
-@code{git pull} from your master branch to sync up with the main
+@code{git pull} from your ``for-steve'' branch to sync up with the main
SXEmacs repo.
@item
@code{git checkout -b mybugfix} to create and checkout a new branch.
@item
Test! If all is good, proceed. If not, return to the previous step.
@item
+The next step is to commit your changes, and at this point I'd like to
+note that, although not mandatory, we encourage and prefer it if
+you sign all of your commits with GnuPG. This can be easily set up
+via @code{git config commit.gpgSign true}@footnote{Already done for
+you if you ran the @code{git-for-steve.sh} script and it found your
+key}.
+
Depending on how you like to deal with change logs, and if the changes
were small and trivial or detailed and large:
indicates that you have reviewed, tested, and approved the patch. And
also, the original author has permission to submit it.
@item
-@code{git checkout master} To flip back to your master branch.
+@code{git checkout for-steve} To flip back to your for-steve branch.
@item
-@code{git merge --no-ff mybugfix} To merge the changes from the
-@dfn{mybugfix} branch into master. The @code{--no-ff} forces git to
-create a new commit object even if a fast-forward could have been used
-to carry out the merge.
+@code{git merge mybugfix} To merge the changes from the
+@dfn{mybugfix} branch into your for-steve branch.
At this point everything that was in the @dfn{mybugfix} branch is now
-in your master branch, so you no longer need it. You can safely delete
+in your for-steve branch, so you no longer need it. You can safely delete
it with @code{git branch -d mybugfix}.
Now if you have a publicly accessible repo, you should do:
@item
-@code{git push myremote master} To push the changes to your publicly
+@code{git push myremote for-steve} To push the changes to your publicly
accessible repo, @dfn{myremote}.
@end enumerate
@subheading Patch Submission
@anchor{Patch Submission}
-At this point, your changes are ready for @s{} to be incorporated into
+At this point, your changes are ready for @s{} to incorporate into
the main SXEmacs code base. All you need to do is let him know, and
-you can easily do that with the following 2 git commands:
+you can easily do that with the following 2 git commands@footnote{The
+@code{git-for-steve.sh} contrib script will set a lot of these for you.}:
@enumerate
@item
@code{git format-patch --add-header="X-Git-Repo: REPO-URL" \@*
@indent
---subject-prefix="P-Req" --numbered -o DIR origin}
+--add-header="X-Git-Branch: for-steve" \@*
+@indent
+--subject-prefix="P-Req" --minimal --numbered -o DIR origin/master}
@item
@code{git send-email \@*
@indent
If you not have have a publicly accessible repository, the SXEmacs
developers can't pull in your changesets directly from you. Instead,
-once your patch hits the mailing list and is approved, it will be
-applied manually to the SXEmacs code base.
+once your patch hits the mailing list and is approved, it will have to
+be applied manually to the SXEmacs code base.
You could, in theory, use a post-commit hook, but I'd not recommend
it. Think about the situation where you are working on something
To get the numbers for the "Developer Stats" section, first get a list
of unique committers for this release with@dots{}
-@code{git log --format=full v@cver{}..|grep Author|sort|uniq}
+@code{git log --format=full v@cver{}..|grep Author|sort -u}
And then for the number of actual commits for each developer do@dots{}
Create a diff against the previous version.
@smallexample
-git diff v@cver{}..v@nver{} | \
- gzip > ~/upload/sxemacs-@cver{}-@nver{}.diff.gz
+ git diff v@cver{}..v@nver{} > ~/upload/sxemacs-@cver{}-@nver{}.diff
@end smallexample
@item
-Create the tarball:
+Create the tarballs, md5sums, and sigs:
@smallexample
cd ~/upload
+for compressor in bzip2 gzip lzma xz; do
+ $@{compressor@} --keep sxemacs-@cver{}-@nver{}.diff
+done &&
for type in bz2 gz lzma xz; do
tar --create --owner=0 --group=0 --auto-compress --file \
- sxemacs-@nver{}.tar.$@{type@} sxemacs-@nver{}
- md5sum sxemacs-@nver{}.tar.$@{type@} > sxemacs-@nver{}.tar.$@{type@}.md5
- gpg --detach-sign --armor \
- --output sxemacs-@nver{}.tar.$@{type@}.asc sxemacs-@nver{}.tar.$@{type@}
+ sxemacs-@nver{}.tar.$@{type@} sxemacs-@nver{}
+ md5sum sxemacs-@nver{}.tar.$@{type@} > \
+ sxemacs-@nver{}.tar.$@{type@}.md5
+ md5sum sxemacs-@cver{}-@nver{}.diff.$@{type@} > \
+ sxemacs-@cver{}-@nver{}.diff.$@{type@}.md5
+ gpg --detach-sign --armor --output \
+ sxemacs-@nver{}.tar.$@{type@}.asc sxemacs-@nver{}.tar.$@{type@}
+ gpg --detach-sign --armor --output \
+ sxemacs-@cver{}-@nver{}.diff.$@{type@}.asc \
+ sxemacs-@cver{}-@nver{}.diff.$@{type@}
done
@end smallexample
@item
-Create md5 and gpg sig for diff file.
-
-See items describing this for the release tarball.
-
-@item
-Move the tarball, diff, GnuPG sigs, and md5sums to
+Move the tarballs, diffs, GnuPG sigs, and md5sums to
@uref{http://downloads.sxemacs.org/releases/, SXEmacs Download Site}.
+@smallexample
+for file in *.@{bz2,gz,lzma,xz,md5,asc@}; do
+ scp $@{file@} downloads.sxemacs.org:downloads.sxemacs.org/releases
+done
+@end smallexample
+
@item
Rename the @file{LATEST-IS-VER} file.
-@example
-mv LATEST-IS-@cver{} LATEST-IS-@nver{}
-@end example
+@smallexample
+ssh downloads.sxemacs.org \
+ mv downloads.sxemacs.org/releases/LATEST-IS-@{@cver{},@nver{}@}
+@end smallexample
@item
Update www.sxemacs.org:
Send a release announcement to @email{sxemacs-devel@@sxemacs.org,
SXEmacs Devel} and comp.emacs.xemacs.
-@item
-Make a new release and announcement on Freshmeat (our FM id: 52281)
-
@item
Commit the first patch to the next version, which would be adding a
@file{ChangeLog.d/ChangeLog-@nver}
@item
An idea with a willingness to help test any code resulting from it.
@item
-@dfn{Hey, wouldn't it be cool if...}
+``Hey, wouldn't it be cool if...''
@end enumerate
Don't be disheartened if you aren't a master programmer, quite often
bug, @xref{Bug Reports}.
If you find areas where SXEmacs is incompatible with GNU/Emacs at the
-emacs lisp level, that is an issue between GNU/Emacs and XEmacs.
+emacs lisp level, that is an issue between GNU/Emacs and XEmacs. That
+doesn't mean that we won't ever port GNU/Emacs things to SXEmacs,
+we'll just do it in a way that doesn't break compatibility with XEmacs.
@node Copyright and Licencing, Developer Recruitment, Compatibility, Top
@comment node-name, next, previous, up
git clone http://git.sxemacs.org/sxemacs
@end smallexample
-See how to patches in chapter @xref{Patches}.
+The chapter on patches @pxref{Patches} will show you how to prepare
+and send in your contributions.
@menu
* Setting up a publicly accessible repo::
user@@host ~/sxemacs $ exit
user@@localhost ~ $ git clone http://git.sxemacs.org/sxemacs
user@@localhost ~ $ cd sxemacs
-user@@localhost ~/sxemacs $ git remote add myremote \
- ssh://user@@your.host/~/sxemacs
+user@@localhost ~/sxemacs $ contrib/git-for-steve.sh
@end smallexample
And that's it! Told you it was easy, didn't I? All you have to do
now is push your local copy to your remote@dots{}
@smallexample
-git push myremote master
+git push @var{myremote} master
@end smallexample
every time you push to your publicly accessible repo, a message will be
sent to sxemacs-patches; this includes instances where you merely
are pulling the latest from mainline and mirroring. Hence, the use of
-aliases as discussed below may be preferable.
+aliases as discussed below may be preferable. We are looking into
+ways of avoiding this sort of annoyance.
@subsection Automating with Aliases
make them global if you absolutely have to. All the ones I've shown
here have been repo-specific.
+The @file{git-for-steve.sh} script in our @file{contrib} directory is
+an easy (and recommended) way to set up your git repo. It'll make
+sure that you have everything set up correctly and in an optimal way.
+
@node Setting up a private repos, Other Developers' Repositories, Setting up a publicly accessible repo, Version Control
@comment node-name, next, previous, up
@chapter Setting up a private repos
@cindex git
@cindex contributions
-Git makes it as easy to create a private repos as getting a checkout
-of the source code. In fact, all you need to do is to actually
-checkout and you have a repos:
+Git makes it as easy to create a private repo as getting a checkout
+of the source code. In fact, that is all you have to do.
@smallexample
git clone http://git.sxemacs.org/sxemacs
@end smallexample
You may want to follow some of the steps in @xref{Automating with
-Aliases}, to easy your life when sending patches if you plan to
+Aliases}, to ease your life when sending patches if you plan to
contribute frequently from this repo. Please note that in this case
you should not reference any REPO-URL.
Nelson
@item
http://git.nelsonferreira.com/sxemacs
+Horst
+@item
+http://midcom.steveyoungs.com/oss-vc/sxemacs.git
+lg
+@item
+git://github.com/zevlg/SXEmacs.git
+Rudi
+@item
+git://github.com/rudimeier/sxemacs.git
+Aidan
+@item
+http://bitbucket.org/kehoea/sxemacs/
Sebastian
@item
git://github.com/hroptatyr/sxemacs.git
@end itemize
-And that is it for now. We've only just moved to git and the
-main SXEmacs developers haven't set up their repos.
-
-@c @itemize @bullet
-@c Sebastian
-@c @item
-@c http://www.math.tu-berlin.de/~freundt/archives/sxemacs/
-@c Evgeny
-@c @item
-@c http://arch.xwem.org/2006/
-@c Norbert
-@c @item
-@c http://arafel.viteno.net:33080/arch/sxemacs/
-@c Martin K@"uhl
-@c @item
-@c http://www.informatik.uni-bremen.de/~mkhl/sxemacs-mirror/
-@c Alexey Mikhailov (karma)
-@c @item
-@c http://karma.ezunix.org/arch/2005/
-@c Hynek
-@c @item
-@c http://hynek.in-berlin.de/archive/
-@c Horst Burkhardt (PeanutHorst)
-@c @item
-@c http://midcom.steveyoungs.com/oss-vc/sxemacs/
-@c Nick Granado
-@c @item
-@c http://www.heatxsink.com/2005/
-@c @end itemize
-
And of course the main repo (Steve's) is at:
http://git.sxemacs.org/sxemacs
@unnumberedsec 1.0: Introduction
-@node Q1.0.1
+@node Q1.0.1, Q1.0.2, Introduction, Introduction
@unnumberedsec Q1.0.1: What is SXEmacs?
SXEmacs is a powerful, highly customisable open source text editor and
versions of Unix in existence.
-@node Q1.0.2
+@node Q1.0.2, Q1.0.3, Q1.0.1, Introduction
@unnumberedsec Q1.0.2: What is the current version of SXEmacs?
SXEmacs 22.1.15 is the latest released version.
The current development line will become 22.1.16.
-@node Q1.0.3
+@node Q1.0.3, Q1.0.4, Q1.0.2, Introduction
@unnumberedsec Q1.0.3: Where can I find it?
The canonical source can be found on the web at:
@end example
-@node Q1.0.4
+@node Q1.0.4, Q1.0.5, Q1.0.3, Introduction
@unnumberedsec Q1.0.4: Why another version of Emacs?
First of all, the situation got a little complicated. With SXEmacs
-@node Q1.0.5
+@node Q1.0.5, Q1.0.6, Q1.0.4, Introduction
@unnumberedsec Q1.0.5: Why haven't XEmacs/SXEmacs and GNU Emacs Merged?
There are currently irreconcilable differences in the views about
merge to take place in the short-term future.
-@node Q1.0.6
+@node Q1.0.6, Q1.0.7, Q1.0.5, Introduction
@unnumberedsec Q1.0.6: Where can I get help?
Probably the easiest way, if everything is installed, is to use Info, by
and developing issues.
-@node Q1.0.7
+@node Q1.0.7, Q1.0.8, Q1.0.6, Introduction
@unnumberedsec Q1.0.7: Where are the mailing lists archived?
The archives can be found at
@uref{http://www.sxemacs.org/mailman/listinfo}
-@node Q1.0.8
+@node Q1.0.8, Q1.0.9, Q1.0.7, Introduction
@unnumberedsec Q1.0.8: How do you pronounce SXEmacs?
The most common pronounciation is @samp{sexy macs}.
-@node Q1.0.9
+@node Q1.0.9, Q1.0.10, Q1.0.8, Introduction
@unnumberedsec Q1.0.9: What does SXEmacs look like?
Look at the screenshot section at @uref{http://www.sxemacs.org}.
-@node Q1.0.10
+@node Q1.0.10, Q1.0.11, Q1.0.9, Introduction
@unnumberedsec Q1.0.10: Is there a port of SXEmacs to Microsoft ('95 or NT)?
Of course not! The SXEmacs developers have so much fun stripping all of
the erroneous code and workaround-hacks related to Microsoft Windows.
-@node Q1.0.11
+@node Q1.0.11, Q1.0.12, Q1.0.10, Introduction
@unnumberedsec Q1.0.11: Is there a port of SXEmacs to the Macintosh?
Good question. Is there?
-@node Q1.0.12
+@node Q1.0.12, Q1.0.13, Q1.0.11, Introduction
@unnumberedsec Q1.0.12: Is there a port of SXEmacs to NextStep?
@c Carl Edman, apparently no longer at @email{cedman@@princeton.edu}, did
A what?
-@node Q1.0.13
+@node Q1.0.13, Q1.0.14, Q1.0.12, Introduction
@unnumberedsec Q1.0.13: Is there a port of SXEmacs to OS/2?
@c No, but Alexander Nikolaev <avn_1251@@mail.ru> is working on it.
hamster.
-@node Q1.0.14
+@node Q1.0.14, Q1.1.1, Q1.0.13, Introduction
@unnumberedsec Q1.0.14: Where can I obtain a printed copy of the SXEmacs User's Manual?
Pre-printed manuals are not available. If you are familiar with
@c are they?
@c HTML are, but they may be a little out of date. --SY
-@node Q1.1.1
+@node Q1.1.1, Q1.1.2, Q1.0.14, Introduction
@unnumberedsec 1.1: Policies
@unnumberedsec Q1.1.1: What is the FAQ editorial policy?
spelling and grammar and will be attributed.
-@node Q1.1.2
+@node Q1.1.2, Q1.1.3, Q1.1.1, Introduction
@unnumberedsec Q1.1.2: How do I become a beta tester?
We have no formal way. Also there are no presumptions. Just
identify problems as best they can.
-@node Q1.1.3
+@node Q1.1.3, Q1.2.1, Q1.1.2, Introduction
@unnumberedsec Q1.1.3: How do I contribute to SXEmacs itself?
Quoting a famous developer:
Gotta run.
-@node Q1.2.1
+@node Q1.2.1, Q1.2.2, Q1.1.3, Introduction
@unnumberedsec 1.2: Credits
@unnumberedsec Q1.2.1: Who wrote SXEmacs?
@c @samp{About XEmacs} option in the Help menu.
-@node Q1.2.2
+@node Q1.2.2, Q1.2.3, Q1.2.1, Introduction
@unnumberedsec Q1.2.2: Who contributed to this version of the FAQ?
The following people contributed valuable suggestions to building this
@end itemize
-@node Q1.2.3
+@node Q1.2.3, Q1.3.1, Q1.2.2, Introduction
@unnumberedsec Q1.2.3: Who contributed to the FAQ in the past?
This is only a partial list, as many names were lost in a hard disk
@end itemize
-@node Q1.3.1
+@node Q1.3.1, Q1.3.2, Q1.2.3, Introduction
@unnumberedsec 1.3: Internationalisation
@unnumberedsec Q1.3.1: What is the status of internationalisation support aka MULE (including Asian language support?
faster than MULE capable SXEmacsen.
-@node Q1.3.2
+@node Q1.3.2, Q1.3.3, Q1.3.1, Introduction
@unnumberedsec Q1.3.2: How can I help with internationalisation?
If you would like to help, you can use the usual ways to get into
@xref{Q1.1.2}.
-@node Q1.3.3
+@node Q1.3.3, Q1.3.4, Q1.3.2, Introduction
@unnumberedsec Q1.3.3: How do I type non-ASCII characters?
See question 3.5.7 (@pxref{Q3.5.7}) in part 3 of this FAQ for some
@xref{Q3.2.7}, which covers display of non-ASCII characters.
-@node Q1.3.4
+@node Q1.3.4, Q1.3.5, Q1.3.3, Introduction
@unnumberedsec Q1.3.4: Can SXEmacs messages come out in a different language?
The message-catalog support was written but is badly bit-rotted.
removing punctuation and capitalizing as above.
-@node Q1.3.5
+@node Q1.3.5, Q1.3.6, Q1.3.4, Introduction
@unnumberedsec Q1.3.5: Please explain the various input methods in MULE/SXEmacs
Mule supports a wide variety of input methods. There are three basic
Much of this information was provided by @email{morioka@@jaist.ac.jp,
MORIOKA Tomohiko}.
-@node Q1.3.6
+@node Q1.3.6, Q1.3.7, Q1.3.5, Introduction
@unnumberedsec Q1.3.6: How do I portably code for MULE/SXEmacs?
MULE has evolved rapidly over the last few years, and the original third
@end quotation
-@node Q1.3.7
+@node Q1.3.7, Q1.3.8, Q1.3.6, Introduction
@unnumberedsec Q1.3.7: How about Cyrillic Modes?
@email{ilya@@math.ohio-state.edu, Ilya Zakharevich} writes:
@end quotation
-@node Q1.3.8
+@node Q1.3.8, Q1.3.9, Q1.3.7, Introduction
@unnumberedsec Q1.3.8: Does SXEmacs support Unicode?
Partially, as an external encoding for files, processes, and terminals.
support 31-bit forms of Unicode (UTF-32 or UCS-4).
-@node Q1.3.9
+@node Q1.3.9, Q1.4.1, Q1.3.8, Introduction
@unnumberedsec Q1.3.9: How does SXEmacs display Unicode?
Mule doesn't have a Unicode charset internally, so there's nothing to
@c will it?
-@node Q1.4.1
+@node Q1.4.1, Q1.4.2, Q1.3.9, Introduction
@unnumberedsec 1.4: Getting Started, Backing up & Recovery
@unnumberedsec Q1.4.1: What is an @file{init.el} or @file{.emacs} and is there a sample one?
@key{RET}}.
-@node Q1.4.2
+@node Q1.4.2, Q1.4.3, Q1.4.1, Introduction
@unnumberedsec Q1.4.2: Can I use the same @file{init.el}/@file{.emacs} with XEmacs or GNU Emacs?
Yes. The sample @file{init.el} included in the SXEmacs
of Emacs.
-@node Q1.4.3
+@node Q1.4.3, Q1.4.4, Q1.4.2, Introduction
@unnumberedsec Q1.4.3: Any good tutorials around?
There's the SXEmacs tutorial available from the Help Menu under
the first letters of your preferred language, then type @key{RET}.
-@node Q1.4.4
+@node Q1.4.4, Q1.4.5, Q1.4.3, Introduction
@unnumberedsec Q1.4.4: May I see an example of a useful SXEmacs Lisp function?
The following function does a little bit of everything useful. It does
@code{interactive} allows you to execute the command with @kbd{M-x}.
-@node Q1.4.5
+@node Q1.4.5, Q1.4.6, Q1.4.4, Introduction
@unnumberedsec Q1.4.5: And how do I bind it to a key?
To bind to a key do:
Or interactively, @kbd{M-x global-set-key} and follow the prompts.
-@node Q1.4.6
+@node Q1.4.6, , Q1.4.5, Introduction
@unnumberedsec Q1.4.6: What's the difference between a macro and a function?
Quoting from the Lisp Reference (a.k.a @dfn{Lispref}) Manual:
@end menu
-@node Q2.0.1
+@node Q2.0.1, Q2.0.2, Installation, Installation
@unnumberedsec 2.0: Installation
@unnumberedsec Q2.0.1: Running SXEmacs without installing
space. SXEmacs is largely written in Lisp.
-@node Q2.0.2
+@node Q2.0.2, Q2.0.3, Q2.0.1, Installation
@unnumberedsec Q2.0.2: SXEmacs is too big
The space required by the installation directories can be
Another method is to do @kbd{M-x package-get-delete-package}.
-@node Q2.0.3
+@node Q2.0.3, Q2.0.4, Q2.0.2, Installation
@unnumberedsec Q2.0.3: Compiling SXEmacs with Netaudio.
What is the best way to compile SXEmacs with the netaudio system,
@uref{ftp://ftp.x.org/contrib/audio/nas/}.
-@node Q2.0.4
+@node Q2.0.4, Q2.0.5, Q2.0.3, Installation
@unnumberedsec Q2.0.4: Problems with Linux and ncurses.
@c On Linux 1.3.98 with termcap 2.0.8 and the ncurses that came with libc
There are none!
-@node Q2.0.5
+@node Q2.0.5, Q2.0.6, Q2.0.4, Installation
@unnumberedsec Q2.0.5: Do I need X11 to run SXEmacs?
No.
-@node Q2.0.6
+@node Q2.0.6, Q2.0.7, Q2.0.5, Installation
@unnumberedsec Q2.0.6: I'm having strange crashes. What do I do?
There have been a variety of reports of crashes due to compilers with
SXEmacs to read what it says about your platform.
-@node Q2.0.7
+@node Q2.0.7, Q2.0.8, Q2.0.6, Installation
@unnumberedsec Q2.0.7: Libraries in non-standard locations
I have x-faces, jpeg, xpm etc. all in different places. I've tried
@end example
-@node Q2.0.8
+@node Q2.0.8, Q2.0.9, Q2.0.7, Installation
@unnumberedsec Q2.0.8: can't resolve symbol _h_errno
Does not apply anymore.
-@node Q2.0.9
+@node Q2.0.9, Q2.0.10, Q2.0.8, Installation
@unnumberedsec Q2.0.9: Where do I find external libraries?
Oh well ... we support far too many external libraries to list them
instructions for some of the libraries you intend to use.
-@node Q2.0.10
+@node Q2.0.10, Q2.0.11, Q2.0.9, Installation
@unnumberedsec Q2.0.10: After I run configure I find a core dump, is something wrong?
@c @c WHOOOOOOOAT?!?!
Send a build report.
-@node Q2.0.11
+@node Q2.0.11, Q2.0.12, Q2.0.10, Installation
@unnumberedsec Q2.0.11: SXEmacs doesn't resolve hostnames.
This is the result of a long-standing problem with SunOS and the fact
@end quotation
-@node Q2.0.12
+@node Q2.0.12, Q2.0.13, Q2.0.11, Installation
@unnumberedsec Q2.0.12: Why can't I strip SXEmacs?
@email{cognot@@fronsac.ensg.u-nancy.fr, Richard Cognot} writes:
@end quotation
-@node Q2.0.13
+@node Q2.0.13, Q2.0.14, Q2.0.12, Installation
@unnumberedsec Q2.0.13: I don't need no steenkin' packages. Do I?
Strictly speaking, no. SXEmacs will build and install just fine
_useful_.
-@node Q2.0.14
+@node Q2.0.14, Q2.0.15, Q2.0.13, Installation
@unnumberedsec Q2.0.14: How do I figure out which packages to install?
Many people really liked the old way that packages were bundled and do
afterwards to pick up any recent updates.
-@node Q2.0.15
+@node Q2.0.15, Q2.1.1, Q2.0.14, Installation
@unnumberedsec Q2.0.15: EFS fails with "500 AUTH not understood"
A typical error: FTP Error: USER request failed; 500 AUTH not understood.
documentation.
-@node Q2.1.1
+@node Q2.1.1, Q2.1.2, Q2.0.15, Installation
@unnumberedsec 2.1: Trouble Shooting
@unnumberedsec Q2.1.1: Help! SXEmacs just crashed on me!
build-rpt}.
-@node Q2.1.2
+@node Q2.1.2, Q2.1.3, Q2.1.1, Installation
@unnumberedsec Q2.1.2: Cryptic Minibuffer messages.
When I try to use some particular option of some particular package, I
messages. This command is bound to @kbd{C-h l} by default.
-@node Q2.1.3
+@node Q2.1.3, Q2.1.4, Q2.1.2, Installation
@unnumberedsec Q2.1.3: Translation Table Syntax messages at Startup
I get tons of translation table syntax error messages during startup.
@end itemize
-@node Q2.1.4
+@node Q2.1.4, Q2.1.5, Q2.1.3, Installation
@unnumberedsec Q2.1.4: Startup warnings about deducing proper fonts?
How can I avoid the startup warnings about deducing proper fonts?
The buffer still exists; it just isn't in your face.
-@node Q2.1.5
+@node Q2.1.5, Q2.1.6, Q2.1.4, Installation
@unnumberedsec Q2.1.5: SXEmacs cannot connect to my X Terminal!
Help! I can not get SXEmacs to display on my Envizex X-terminal!
the host you are running SXEmacs from.
-@node Q2.1.6
+@node Q2.1.6, Q2.1.7, Q2.1.5, Installation
@unnumberedsec Q2.1.6: SXEmacs just locked up my Linux X server!
There have been several reports of the X server locking up under
It is possible that using a font server may also solve the problem.
-@node Q2.1.7
+@node Q2.1.7, Q2.1.8, Q2.1.6, Installation
@unnumberedsec Q2.1.7: HP Alt key as Meta.
How can I make SXEmacs recognize the Alt key of my HP workstation as a
@end example
-@node Q2.1.8
+@node Q2.1.8, Q2.1.9, Q2.1.7, Installation
@unnumberedsec Q2.1.8: got (wrong-type-argument color-instance-p nil)
@email{nataliek@@rd.scitec.com.au, Natalie Kershaw} writes:
@end quotation
-@node Q2.1.9
+@node Q2.1.9, Q2.1.10, Q2.1.8, Installation
@unnumberedsec Q2.1.9: SXEmacs causes my OpenWindows 3.0 server to crash.
The OpenWindows 3.0 server is incredibly buggy. Your best bet is to
background pixmaps.
-@node Q2.1.10
+@node Q2.1.10, Q2.1.11, Q2.1.9, Installation
@unnumberedsec Q2.1.10: Warnings from incorrect key modifiers.
The following information comes from the @file{PROBLEMS} file that comes
@end example
-@node Q2.1.11
+@node Q2.1.11, Q2.1.12, Q2.1.10, Installation
@unnumberedsec Q2.1.11: @samp{Can't instantiate image error...} in toolbar
@c New
@end quotation
-@node Q2.1.12
+@node Q2.1.12, Q2.1.13, Q2.1.11, Installation
@unnumberedsec Q2.1.12: Problems with Regular Expressions on DEC OSF1.
@c I have xemacs 19.13 running on an alpha running OSF1 V3.2 148 and ispell
Does not apply anymore.
-@node Q2.1.13
+@node Q2.1.13, Q2.1.14, Q2.1.12, Installation
@unnumberedsec Q2.1.13: HP/UX 10.10 and @code{create_process} failure.
@c @email{Dave.Carrigan@@ipl.ca, Dave Carrigan} writes:
Does not apply anymore.
-@node Q2.1.14
+@node Q2.1.14, Q2.1.15, Q2.1.13, Installation
@unnumberedsec Q2.1.14: @kbd{C-g} doesn't work for me. Is it broken?
@email{ben@@xemacs.org, Ben Wing} writes:
@end quotation
-@node Q2.1.15
+@node Q2.1.15, Q2.1.16, Q2.1.14, Installation
@unnumberedsec Q2.1.15: How to debug a SXEmacs problem with a debugger
If SXEmacs does crash on you, one of the most productive things you
@end itemize
-@node Q2.1.16
+@node Q2.1.16, Q2.1.17, Q2.1.15, Installation
@unnumberedsec Q2.1.16: SXEmacs crashes in @code{strcat} on HP/UX 10
From the problems database (through
@end example
-@node Q2.1.17
+@node Q2.1.17, Q2.1.18, Q2.1.16, Installation
@unnumberedsec Q2.1.17: @samp{Marker does not point anywhere}
As with other errors, set @code{debug-on-error} to @code{t} to get the
backtrace when the error occurs.
-@node Q2.1.18
+@node Q2.1.18, Q2.1.19, Q2.1.17, Installation
@unnumberedsec Q2.1.18: SXEmacs is outputting lots of X errors.
If this is happening, we would very much like to know what's causing
backtrace, and send them to @email{sxemacs-devel@@sxemacs.org}.
-@node Q2.1.19
+@node Q2.1.19, Q2.1.20, Q2.1.18, Installation
@unnumberedsec Q2.1.19: SXEmacs does not follow the local timezone.
When using one of the prebuilt binaries many users have observed that
Replace @code{MET} with your local timezone.
-@node Q2.1.20
+@node Q2.1.20, Q2.1.21, Q2.1.19, Installation
@unnumberedsec Q2.1.20: @samp{Symbol's function definition is void: hkey-help-show.}
This is a problem with a partially loaded hyperbole. Try adding:
where you load hyperbole and the problem should go away.
-@node Q2.1.21
+@node Q2.1.21, Q2.1.22, Q2.1.20, Installation
@unnumberedsec Q2.1.21: [This question intentionally left blank]
-@node Q2.1.22
+@node Q2.1.22, Q2.1.23, Q2.1.21, Installation
@unnumberedsec Q2.1.22: SXEmacs seems to take a really long time to do some things
@email{dmoore@@ucsd.edu, David Moore} writes:
@end quotation
-@node Q2.1.23
+@node Q2.1.23, Q2.1.24, Q2.1.22, Installation
@unnumberedsec Q2.1.23: Movemail on Linux does not work for SXEmacs
@email{steve@@xemacs.org, SL Baur} writes:
@end quotation
-@node Q2.1.24
+@node Q2.1.24, Q2.1.25, Q2.1.23, Installation
@unnumberedsec Q2.1.24: SXEmacs won't start without network.
If SXEmacs starts when you're on the network, but fails when you're not
Add that line, and SXEmacs will be happy.
-@node Q2.1.25
+@node Q2.1.25, , Q2.1.24, Installation
@unnumberedsec Q2.1.25:: After upgrading, SXEmacs won't do `foo' any more!
You have been used to doing `foo', but now when you invoke it (or click
* Q3.10.6:: Why is killing so slow?
@end menu
-@node Q3.0.1
+@node Q3.0.1, Q3.0.2, Customisation, Customisation
@unnumberedsec 3.0: Customisation -- Emacs Lisp and @file{init.el}
@unnumberedsec Q3.0.1: What version of Emacs am I running?
to @code{t} within SXEmacs. This is due to compatibility reasons.
-@node Q3.0.2
+@node Q3.0.2, Q3.0.3, Q3.0.1, Customisation
@unnumberedsec Q3.0.2: How can I evaluate Emacs-Lisp expressions?
I know I can evaluate Elisp expressions from @code{*scratch*} buffer
enter the expression to the minibuffer.
-@node Q3.0.3
+@node Q3.0.3, Q3.0.4, Q3.0.2, Customisation
@unnumberedsec Q3.0.3: @code{(setq tab-width 6)} behaves oddly.
If you put @code{(setq tab-width 6)} in your @file{init.el} file it
all-buffer-local.
-@node Q3.0.4
+@node Q3.0.4, Q3.0.5, Q3.0.3, Customisation
@unnumberedsec Q3.0.4: How can I add directories to the @code{load-path}?
Here are two ways to do that, one that puts your directories at the
@end quotation
-@node Q3.0.5
+@node Q3.0.5, Q3.0.6, Q3.0.4, Customisation
@unnumberedsec Q3.0.5: How to check if a lisp function is defined?
Use the following elisp:
trying to divine its environment from the value of one variable.
-@node Q3.0.6
+@node Q3.0.6, Q3.0.7, Q3.0.5, Customisation
@unnumberedsec Q3.0.6: Can I force the output of @code{(face-list)} to a buffer?
It would be good having it in a buffer, as the output of
buffer.
-@node Q3.0.7
+@node Q3.0.7, Q3.0.8, Q3.0.6, Customisation
@unnumberedsec Q3.0.7: Font selections in don't get saved after @code{Save Options}.
@email{mannj@@ll.mit.edu, John Mann} writes:
@end lisp
-@node Q3.0.8
+@node Q3.0.8, Q3.0.9, Q3.0.7, Customisation
@unnumberedsec Q3.0.8: How do I get a single minibuffer frame?
@email{acs@@acm.org, Vin Shelton} writes:
make it difficult or inconvenient to use.
-@node Q3.0.9
+@node Q3.0.9, Q3.1.1, Q3.0.8, Customisation
@unnumberedsec Q3.0.9: What is @code{Customize}?
Starting with XEmacs 20.2 there is new system 'Customize' for customising
Also try out with @kbd{M-x customize-browse}
-@node Q3.1.1
+@node Q3.1.1, Q3.1.2, Q3.0.9, Customisation
@unnumberedsec 3.1: X Window System & Resources
@unnumberedsec Q3.1.1: Where is a list of X resources?
legacy @file{.Xdefaults}) file if you use GNU Emacs under X11 as well.
-@node Q3.1.2
+@node Q3.1.2, Q3.1.3, Q3.1.1, Customisation
@unnumberedsec Q3.1.2: How can I detect a color display?
You can test the return value of the function @code{(device-class)}, as
@end lisp
-@node Q3.1.3
+@node Q3.1.3, Q3.1.4, Q3.1.2, Customisation
@unnumberedsec Q3.1.3: [This question intentionally left blank]
-@node Q3.1.4
+@node Q3.1.4, Q3.1.5, Q3.1.3, Customisation
@unnumberedsec Q3.1.4: [This question intentionally left blank]
-@node Q3.1.5
+@node Q3.1.5, Q3.1.6, Q3.1.4, Customisation
@unnumberedsec Q3.1.5: How can I get the icon to just say @samp{SXEmacs}?
I'd like the icon to just say @samp{SXEmacs}, and not include the name of
@end lisp
-@node Q3.1.6
+@node Q3.1.6, Q3.1.7, Q3.1.5, Customisation
@unnumberedsec Q3.1.6: How can I have the window title area display the full path?
I'd like to have the window title area display the full directory/name
That is, use the file name, or the dired-directory, or the buffer name.
-@node Q3.1.7
+@node Q3.1.7, Q3.1.8, Q3.1.6, Customisation
@unnumberedsec Q3.1.7: @samp{sxemacs -name junk} doesn't work?
When I run @samp{xterm -name junk}, I get an xterm whose class name
@end lisp
-@node Q3.1.8
+@node Q3.1.8, Q3.2.1, Q3.1.7, Customisation
@unnumberedsec Q3.1.8: @samp{-iconic} doesn't work.
When I start up SXEmacs using @samp{-iconic} it doesn't work right.
@end quotation
-@node Q3.2.1
+@node Q3.2.1, Q3.2.2, Q3.1.8, Customisation
@unnumberedsec 3.2: Textual Fonts & Colors
@unnumberedsec Q3.2.1: How can I set color options from @file{init.el}?
@end lisp
-@node Q3.2.2
+@node Q3.2.2, Q3.2.3, Q3.2.1, Customisation
@unnumberedsec Q3.2.2: How do I set the text, menu and modeline fonts?
Note that you should use @samp{Emacs.} and not @samp{Emacs*} when
instead of @samp{font}. (Sorry, there just is no simple recipe here.)
-@node Q3.2.3
+@node Q3.2.3, Q3.2.4, Q3.2.2, Customisation
@unnumberedsec Q3.2.3: How can I set the colors when highlighting a region?
How can I set the background/foreground colors when highlighting a
@end lisp
-@node Q3.2.4
+@node Q3.2.4, Q3.2.5, Q3.2.3, Customisation
@unnumberedsec Q3.2.4: How can I limit color map usage?
I'm using Netscape (or another color grabber like SXEmacs);
direct color video.
-@node Q3.2.5
+@node Q3.2.5, Q3.2.6, Q3.2.4, Customisation
@unnumberedsec Q3.2.5: My tty supports color, but SXEmacs doesn't use them.
SXEmacs tries to automatically determine whether your tty supports color,
@end lisp
-@node Q3.2.6
+@node Q3.2.6, Q3.2.7, Q3.2.5, Customisation
@unnumberedsec Q3.2.6: Can I have pixmap backgrounds in SXEmacs?
@c New
@email{jvillaci@@wahnsinnig.extreme.indiana.edu, Juan Villacis} writes:
@end quotation
-@node Q3.2.7
+@node Q3.2.7, Q3.3.1, Q3.2.6, Customisation
@unnumberedsec Q3.2.7: How do I display non-ASCII characters?
@c New
non-Mule SXEmacs, @xref{Q3.5.7}.
-@node Q3.3.1
+@node Q3.3.1, Q3.3.2, Q3.2.7, Customisation
@unnumberedsec 3.3: The Modeline
@unnumberedsec Q3.3.1: How can I make the modeline go away?
@end lisp
-@node Q3.3.2
+@node Q3.3.2, Q3.3.3, Q3.3.1, Customisation
@unnumberedsec Q3.3.2: How do you have SXEmacs display the line number in the modeline?
Add the following line to your @file{init.el} file to
Or type @kbd{M-x customize @key{RET} editing-basics @key{RET}}.
-@node Q3.3.3
+@node Q3.3.3, Q3.3.4, Q3.3.2, Customisation
@unnumberedsec Q3.3.3: How do I get SXEmacs to put the time of day on the modeline?
Add the following line to your @file{init.el}/@file{.emacs} file to
See @code{Customize} from the @code{Options} menu for customisation.
-@node Q3.3.4
+@node Q3.3.4, Q3.3.5, Q3.3.3, Customisation
@unnumberedsec Q3.3.4: How do I turn off current chapter from AUC TeX modeline?
With AUC TeX, fast typing is hard because the current chapter, section
@end quotation
-@node Q3.3.5
+@node Q3.3.5, Q3.4.1, Q3.3.4, Customisation
@unnumberedsec Q3.3.5: How can one change the modeline color based on the mode used?
You can use something like the following:
you may want to customize.
-@node Q3.4.1
+@node Q3.4.1, Q3.4.2, Q3.3.5, Customisation
@unnumberedsec 3.4: Multiple Device Support
@unnumberedsec Q3.4.1: How do I open a frame on another screen of my multi-headed display?
left to @code{gnuclient}, though.
-@node Q3.4.2
+@node Q3.4.2, Q3.5.1, Q3.4.1, Customisation
@unnumberedsec Q3.4.2: Can I really connect to a running SXEmacs after calling up over a modem? How?
Yes. Use @code{gnuclient -nw}.
Also see @ref{Q5.0.12}.
-@node Q3.5.1
+@node Q3.5.1, Q3.5.2, Q3.4.2, Customisation
@unnumberedsec 3.5: The Keyboard
@unnumberedsec Q3.5.1: How can I bind complex functions (or macros) to keys?
question 3.5.3 (@pxref{Q3.5.3}).
-@node Q3.5.2
+@node Q3.5.2, Q3.5.3, Q3.5.1, Customisation
@unnumberedsec Q3.5.2: How can I stop down-arrow from adding empty lines to the bottom of my buffers?
Add the following line to your @file{init.el} file:
This has been the default setting in SXEmacs for some time.
-@node Q3.5.3
+@node Q3.5.3, Q3.5.4, Q3.5.2, Customisation
@unnumberedsec Q3.5.3: How do I bind C-. and C-; to scroll one line up and down?
Add the following (Thanks to @email{mly@@adoc.xerox.com, Richard Mlynarik} and
(@pxref{Q3.5.1} for a better answer).
-@node Q3.5.4
+@node Q3.5.4, Q3.5.5, Q3.5.3, Customisation
@unnumberedsec Q3.5.4: Globally binding @kbd{Delete}?
I cannot manage to globally bind my @kbd{Delete} key to something other
Also see @ref{Q3.5.10}.
-@node Q3.5.5
+@node Q3.5.5, Q3.5.6, Q3.5.4, Customisation
@unnumberedsec Q3.5.5: Scrolling one line at a time.
Can the cursor keys scroll the screen a line at a time, rather than the
@kbd{M-x customize @key{RET} windows @key{RET}}.
-@node Q3.5.6
+@node Q3.5.6, Q3.5.7, Q3.5.5, Customisation
@unnumberedsec Q3.5.6: How to map @kbd{Help} key alone on Sun type4 keyboard?
The following works in GNU Emacs 19:
the null binding @code{OpenWindows.KeyboardCommand.Help:}.
-@node Q3.5.7
+@node Q3.5.7, Q3.5.8, Q3.5.6, Customisation
@unnumberedsec Q3.5.7: How can you type in special characters in SXEmacs?
@c Changed
One way is to use the package @code{x-compose}. Then you can use
non-Mule SXEmacs, @xref{Q3.2.7}.
-@node Q3.5.8
+@node Q3.5.8, Q3.5.9, Q3.5.7, Customisation
@unnumberedsec Q3.5.8: [This question intentionally left blank]
Obsolete question, left blank to avoid renumbering.
-@node Q3.5.9
+@node Q3.5.9, Q3.5.10, Q3.5.8, Customisation
@unnumberedsec Q3.5.9: How do I make the Delete key delete forward?
A solution is to set variable @code{delete-key-deletes-forward} to t.
Also see @ref{Q3.5.4}.
-@node Q3.5.10
+@node Q3.5.10, Q3.5.11, Q3.5.9, Customisation
@unnumberedsec Q3.5.10: Can I turn on @dfn{sticky} modifier keys?
Yes, with @code{(setq modifier-keys-are-sticky t)}. This will give the
of the frame and back in, it cancels all currently ``stuck'' modifiers.
@end quotation
-@node Q3.5.11
+@node Q3.5.11, Q3.6.1, Q3.5.10, Customisation
@unnumberedsec Q3.5.11: How do I map the arrow keys?
@c New
Say you want to map @kbd{C-@key{right}} to forward-word:
-@node Q3.6.1
+@node Q3.6.1, Q3.6.2, Q3.5.11, Customisation
@unnumberedsec 3.6: The Cursor
@unnumberedsec Q3.6.1: Is there a way to make the bar cursor thicker?
@end example
-@node Q3.6.2
+@node Q3.6.2, Q3.6.3, Q3.6.1, Customisation
@unnumberedsec Q3.6.2: Is there a way to get back the block cursor?
@lisp
@kbd{M-x customize @key{RET} display @key{RET}}.
-@node Q3.6.3
+@node Q3.6.3, Q3.7.1, Q3.6.2, Customisation
@unnumberedsec Q3.6.3: Can I make the cursor blink?
Yes, like this:
=> Frame Appearance => Blinking Cursor}. Remember to save options.
-@node Q3.7.1
+@node Q3.7.1, Q3.7.2, Q3.6.3, Customisation
@unnumberedsec 3.7: The Mouse and Highlighting
@unnumberedsec Q3.7.1: How can I turn off Mouse pasting?
@end lisp
-@node Q3.7.2
+@node Q3.7.2, Q3.7.3, Q3.7.1, Customisation
@unnumberedsec Q3.7.2: How do I set control/meta/etc modifiers on mouse buttons?
Use, for instance, @code{[(meta button1)]}. For example, here is a common
@end lisp
-@node Q3.7.3
+@node Q3.7.3, Q3.7.4, Q3.7.2, Customisation
@unnumberedsec Q3.7.3: Clicking the left button does not do anything in buffer list.
I do @kbd{C-x C-b} to get a list of buffers and the entries get
Use the middle mouse button.
-@node Q3.7.4
+@node Q3.7.4, Q3.7.5, Q3.7.3, Customisation
@unnumberedsec Q3.7.4: How can I get a list of buffers when I hit mouse button 3?
The following code will replace the default popup on button3:
@end lisp
-@node Q3.7.5
+@node Q3.7.5, Q3.7.6, Q3.7.4, Customisation
@unnumberedsec Q3.7.5: Why does cut-and-paste not work between SXEmacs and a cmdtool?
We don't know. It's a bug. There does seem to be a work-around,
even if you exit it..
-@node Q3.7.6
+@node Q3.7.6, Q3.7.7, Q3.7.5, Customisation
@unnumberedsec Q3.7.6: How I can set SXEmacs up so that it pastes where the text cursor is?
By default SXEmacs pastes X selections where the mouse pointer is. How
customize @key{RET} mouse @key{RET}}.
-@node Q3.7.7
+@node Q3.7.7, Q3.7.8, Q3.7.6, Customisation
@unnumberedsec Q3.7.7: How do I select a rectangular region?
Just select the region normally, then use the rectangle commands (e.g.
@end example
-@node Q3.7.8
+@node Q3.7.8, Q3.8.1, Q3.7.7, Customisation
@unnumberedsec Q3.7.8: Why does @kbd{M-w} take so long?
It actually doesn't. It leaves the region visible for a second so that
delay for a second if you let it.
-@node Q3.8.1
+@node Q3.8.1, Q3.8.2, Q3.7.8, Customisation
@unnumberedsec 3.8: The Menubar and Toolbar
@unnumberedsec Q3.8.1: How do I get rid of the menu (or menubar)?
@end lisp
-@node Q3.8.2
+@node Q3.8.2, Q3.8.3, Q3.8.1, Customisation
@unnumberedsec Q3.8.2: Can I customise the basic menubar?
For an extensive menubar, add this line to your @file{init.el}:
package.
-@node Q3.8.3
+@node Q3.8.3, Q3.8.4, Q3.8.2, Customisation
@unnumberedsec Q3.8.3: How do I control how many buffers are listed in the menu @code{Buffers List}?
Add the following to your @file{init.el} (suit to fit):
type @kbd{M-x customize @key{RET} buffers-menu @key{RET}}.
-@node Q3.8.4
+@node Q3.8.4, Q3.8.5, Q3.8.3, Customisation
@unnumberedsec Q3.8.4: Resources like @code{Emacs*menubar*font} are not working?
I am trying to use a resource like @code{Emacs*menubar*font} to set the
@end example
-@node Q3.8.5
+@node Q3.8.5, Q3.9.1, Q3.8.4, Customisation
@unnumberedsec Q3.8.5: How can I bind a key to a function to toggle the toolbar?
Try something like:
@end lisp
-@node Q3.9.1
+@node Q3.9.1, Q3.9.2, Q3.8.5, Customisation
@unnumberedsec 3.9: Scrollbars
@unnumberedsec Q3.9.1: How can I disable the scrollbar?
@end lisp
-@node Q3.9.2
+@node Q3.9.2, Q3.9.3, Q3.9.1, Customisation
@unnumberedsec Q3.9.2: How can one use resources to change scrollbar colors?
Here's a recap of how to use resources to change your scrollbar colors:
Note the capitalisation of @code{Scrollbar} for the Athena widget.
-@node Q3.9.3
+@node Q3.9.3, Q3.9.4, Q3.9.2, Customisation
@unnumberedsec Q3.9.3: Moving the scrollbar can move the point; can I disable this?
When I move the scrollbar in a SXEmacs window, it moves the point as
This cannot be changed.
-@node Q3.9.4
+@node Q3.9.4, Q3.10.1, Q3.9.3, Customisation
@unnumberedsec Q3.9.4: How can I turn off automatic horizontal scrolling in specific modes?
Do @code{(setq truncate-lines t)} in the mode-hooks for any modes
the package specifically asked for them.
-@node Q3.10.1
+@node Q3.10.1, Q3.10.2, Q3.9.4, Customisation
@unnumberedsec 3.10: Text Selections
@unnumberedsec Q3.10.1: How can I turn off or change highlighted selections?
the menubar.
-@node Q3.10.2
+@node Q3.10.2, Q3.10.3, Q3.10.1, Customisation
@unnumberedsec Q3.10.2: How do I get that typing on an active region removes it?
I want to change things so that if I select some text and start typing,
more portable.
-@node Q3.10.3
+@node Q3.10.3, Q3.10.4, Q3.10.2, Customisation
@unnumberedsec Q3.10.3: Can I turn off the highlight during isearch?
I do not like my text highlighted while I am doing isearch as I am not
solution consists of customizing the @code{isearch} face.
-@node Q3.10.4
+@node Q3.10.4, Q3.10.5, Q3.10.3, Customisation
@unnumberedsec Q3.10.4: How do I turn off highlighting after @kbd{C-x C-p} (mark-page)?
Put this in your @file{init.el}:
Also see @ref{Q3.10.1}.
-@node Q3.10.5
+@node Q3.10.5, Q3.10.6, Q3.10.4, Customisation
@unnumberedsec Q3.10.5: The region disappears when I hit the end of buffer while scrolling.
Does not apply anymore.
-@node Q3.10.6
+@node Q3.10.6, , Q3.10.5, Customisation
@unnumberedsec Q3.10.6: Why is killing so slow?
This actually is an X Windows question, although you'll notice it with
* Q4.7.7:: Can I edit files on other hosts?
@end menu
-@node Q4.0.1
+@node Q4.0.1, Q4.0.2, Subsystems, Subsystems
@unnumberedsec 4.0: Reading Mail with VM
@unnumberedsec Q4.0.1: How do I set up VM to retrieve mail from a remote site using POP?
Of course substitute your actual password for MYPASS.
-@node Q4.0.2
+@node Q4.0.2, Q4.0.3, Q4.0.1, Subsystems
@unnumberedsec Q4.0.2: How do I get VM to filter mail for me?
One possibility is to use procmail to split your mail before it gets to
@c was dead.
-@node Q4.0.3
+@node Q4.0.3, Q4.0.4, Q4.0.2, Subsystems
@unnumberedsec Q4.0.3: How can I get VM to automatically check for new mail?
@email{turner@@lanl.gov, John Turner} writes:
@end quotation
-@node Q4.0.4
+@node Q4.0.4, Q4.0.5, Q4.0.3, Subsystems
@unnumberedsec Q4.0.4: [This question intentionally left blank]
Obsolete question, left blank to avoid renumbering.
-@node Q4.0.5
+@node Q4.0.5, Q4.0.6, Q4.0.4, Subsystems
@unnumberedsec Q4.0.5: How do I get my outgoing mail archived?
@lisp
@end lisp
-@node Q4.0.6
+@node Q4.0.6, Q4.0.7, Q4.0.5, Subsystems
@unnumberedsec Q4.0.6: I have various addresses at which I receive mail. How can I tell VM to ignore them when doing a "reply-all"?
Set @code{vm-reply-ignored-addresses} to a list, like
Note that each string is a regular expression.
-@node Q4.0.7
+@node Q4.0.7, Q4.0.8, Q4.0.6, Subsystems
@unnumberedsec Q4.0.7: Is there a mailing list or FAQ for VM?
A FAQ for VM exists at @uref{http://www.wonderworks.com/vm/FAQ.html}.
VM has its own newsgroups gnu.emacs.vm.info and gnu.emacs.vm.bug.
-@node Q4.0.8
+@node Q4.0.8, Q4.0.9, Q4.0.7, Subsystems
@unnumberedsec Q4.0.8: Remote mail reading with VM.
My mailbox lives at the office on a big honkin server. My regular INBOX
@end quotation
-@node Q4.0.9
+@node Q4.0.9, Q4.0.10, Q4.0.8, Subsystems
@unnumberedsec Q4.0.9: rmail or VM gets an error incorporating new mail.
Quoting the SXEmacs PROBLEMS file:
@end quotation
-@node Q4.0.10
+@node Q4.0.10, Q4.0.11, Q4.0.9, Subsystems
@unnumberedsec Q4.0.10: How do I make VM stay in a single frame?
John.@email{Cooper@@Eng.Sun.COM, John S Cooper} writes:
@end quotation
-@node Q4.0.11
+@node Q4.0.11, Q4.0.12, Q4.0.10, Subsystems
@unnumberedsec Q4.0.11: How do I make VM or mh-e display graphical smilies?
@c Changed June
For mh-e use the following:
@end lisp
-@node Q4.0.12
+@node Q4.0.12, Q4.1.1, Q4.0.11, Subsystems
@unnumberedsec Q4.0.12: Customisation of VM not covered in the manual, or here.
@email{boffi@@hp735.stru.polimi.it, giacomo boffi} writes:
@end quotation
-@node Q4.1.1
+@node Q4.1.1, Q4.1.2, Q4.0.12, Subsystems
@unnumberedsec 4.1: Web browsing with W3
@unnumberedsec Q4.1.1: What is W3?
@uref{http://www.cs.indiana.edu/elisp/w3/docs.html}.
-@node Q4.1.2
+@node Q4.1.2, Q4.1.3, Q4.1.1, Subsystems
@unnumberedsec Q4.1.2: How do I run W3 from behind a firewall?
There is a long, well-written, detailed section in the W3 manual that
describes how to do this. Look in the section entitled "Firewalls".
-@node Q4.1.3
+@node Q4.1.3, Q4.2.1, Q4.1.2, Subsystems
@unnumberedsec Q4.1.3: Is it true that W3 supports style sheets and tables?
Yes, and much more. W3, as distributed with the latest SXEmacs is a
full-featured web browser.
-@node Q4.2.1
+@node Q4.2.1, Q4.2.2, Q4.1.3, Subsystems
@unnumberedsec 4.2: Reading Netnews and Mail with Gnus
@unnumberedsec Q4.2.1: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia Gnus, Pterodactyl Gnus, Oort Gnus, argh!
@end example
-@node Q4.2.2
+@node Q4.2.2, Q4.2.3, Q4.2.1, Subsystems
@unnumberedsec Q4.2.2: This question intentionally left blank.
Obsolete question, left blank to avoid renumbering.
-@node Q4.2.3
+@node Q4.2.3, Q4.2.4, Q4.2.2, Subsystems
@unnumberedsec Q4.2.3: How do I make Gnus stay within a single frame?
The toolbar code to start Gnus opens the new frame---and it's a feature
@code{gnus}, without all the fancy frame stuff.
-@node Q4.2.4
+@node Q4.2.4, Q4.3.1, Q4.2.3, Subsystems
@unnumberedsec Q4.2.4: How do I customize the From: line?
How do I change the @code{From:} line? I have set gnus-user-from-line
@end quotation
-@node Q4.3.1
+@node Q4.3.1, Q4.3.2, Q4.2.4, Subsystems
@unnumberedsec 4.3: Other Mail & News
@unnumberedsec Q4.3.1: How can I read and/or compose MIME messages?
@c Changed June
@uref{http://www.cinti.net/~rmoody/rmime/index.html}.
-@node Q4.3.2
+@node Q4.3.2, Q4.3.3, Q4.3.1, Subsystems
@unnumberedsec Q4.3.2: What is TM and where do I get it?
TM stands for @dfn{Tools for MIME} and not Tiny MIME. TM integrates
@end quotation
-@node Q4.3.3
+@node Q4.3.3, Q4.3.4, Q4.3.2, Subsystems
@unnumberedsec Q4.3.3: Why isn't this @code{movemail} program working?
Ben Wing @email{ben@@xemacs.org} writes:
@end quotation
-@node Q4.3.4
+@node Q4.3.4, Q4.3.5, Q4.3.3, Subsystems
@unnumberedsec Q4.3.4: Movemail is also distributed by Netscape? Can that cause problems?
@email{steve@@xemacs.org, Steve Baur} writes:
SXEmacs.
-@node Q4.3.5
+@node Q4.3.5, Q4.4.1, Q4.3.4, Subsystems
@unnumberedsec Q4.3.5: Where do I find pstogif (required by tm)?
pstogif is part of the latex2html package.
@uref{ftp://ftp.cdrom.com/pub/tex/ctan/support/latex2html/}.
-@node Q4.4.1
+@node Q4.4.1, Q4.5.1, Q4.3.5, Subsystems
@unnumberedsec 4.4: Sparcworks, EOS, and WorkShop
@unnumberedsec Q4.4.1: What is SPARCworks, EOS, and WorkShop?
@end quotation
-@node Q4.5.1
+@node Q4.5.1, Q4.6.1, Q4.4.1, Subsystems
@unnumberedsec 4.5: Energize
@unnumberedsec Q4.5.1: What is/was Energize?
@end quotation
-@node Q4.6.1
+@node Q4.6.1, Q4.7.1, Q4.5.1, Subsystems
@unnumberedsec 4.6: Infodock
@unnumberedsec Q4.6.1: What is Infodock?
step-by-step installation instructions.
-@node Q4.7.1
+@node Q4.7.1, Q4.7.2, Q4.6.1, Subsystems
@unnumberedsec 4.7: Other Unbundled Packages
@unnumberedsec Q4.7.1: What is AUC TeX? Where do you get it?
@uref{http://sunsite.dk/auctex/}.
-@node Q4.7.2
+@node Q4.7.2, Q4.7.3, Q4.7.1, Subsystems
@unnumberedsec Q4.7.2: Are there any Emacs Lisp Spreadsheets?
Yes. Check out @dfn{dismal} (which stands for Dis' Mode Ain't Lotus) at
@uref{ftp://cs.nyu.edu/pub/local/fox/dismal/}.
-@node Q4.7.3
+@node Q4.7.3, Q4.7.4, Q4.7.2, Subsystems
@unnumberedsec Q4.7.3: [This question intentionally left blank]
-@node Q4.7.4
+@node Q4.7.4, Q4.7.5, Q4.7.3, Subsystems
@unnumberedsec Q4.7.4: Problems installing AUC TeX.
@email{vroonhof@@math.ethz.ch, Jan Vroonhof} writes:
@end itemize
-@node Q4.7.5
+@node Q4.7.5, Q4.7.6, Q4.7.4, Subsystems
@unnumberedsec Q4.7.5: Is there a reason for an Emacs package not to be included in SXEmacs?
The reason for an Emacs package not to be included in SXEmacs is
@end enumerate
-@node Q4.7.6
+@node Q4.7.6, Q4.7.7, Q4.7.5, Subsystems
@unnumberedsec Q4.7.5: Is there a MatLab mode?
Yes, a matlab mode and other items are available at the
MathWorks' emacs_add_ons ftp directory}.
-@node Q4.7.7
+@node Q4.7.7, , Q4.7.6, Subsystems
@unnumberedsec Q4.7.7: Can I edit files on other hosts?
Yes. Of course SXEmacs can use any network file system (such as NFS)
@end menu
-@node Q5.0.1
+@node Q5.0.1, Q5.0.2, Miscellaneous, Miscellaneous
@unnumberedsec 5.0: Major & Minor Modes
@unnumberedsec Q5.0.1: How can I do source code highlighting using font-lock?
Remember to save options.
-@node Q5.0.2
+@node Q5.0.2, Q5.0.3, Q5.0.1, Miscellaneous
@unnumberedsec Q5.0.2: I do not like cc-mode. How do I use the old c-mode?
Well, first off, consider if you really want to do this. cc-mode is
c++-mode.
-@node Q5.0.3
+@node Q5.0.3, Q5.0.4, Q5.0.2, Miscellaneous
@unnumberedsec Q5.0.3: How do I get @samp{More} Syntax Highlighting on by default?
Use the following code in your @file{init.el}:
Remember to save options.
-@node Q5.0.4
+@node Q5.0.4, Q5.0.5, Q5.0.3, Miscellaneous
@unnumberedsec Q5.0.4: How can I enable auto-indent and/or Filladapt?
Put the following line in your @file{init.el}:
Please note that the @code{fa-extras} package is no longer useful.
-@node Q5.0.5
+@node Q5.0.5, Q5.0.6, Q5.0.4, Miscellaneous
@unnumberedsec Q5.0.5: How can I get SXEmacs to come up in text/auto-fill mode by default?
Try the following lisp in your @file{init.el}:
some programming language).
-@node Q5.0.6
+@node Q5.0.6, Q5.0.7, Q5.0.5, Miscellaneous
@unnumberedsec Q5.0.6: How do I start up a second shell buffer?
In the @code{*shell*} buffer:
a new shell is made
-@node Q5.0.7
+@node Q5.0.7, Q5.0.8, Q5.0.6, Miscellaneous
@unnumberedsec Q5.0.7: Telnet from shell filters too much
I'm using the Emacs @kbd{M-x shell} function, and I would like to invoke
installed.
-@node Q5.0.8
+@node Q5.0.8, Q5.0.9, Q5.0.7, Miscellaneous
@unnumberedsec Q5.0.8: Why does edt emulation not work?
We don't know, but you can use tpu-edt emulation instead, which works
@end lisp
-@node Q5.0.9
+@node Q5.0.9, Q5.0.10, Q5.0.8, Miscellaneous
@unnumberedsec Q5.0.9: How can I emulate VI and use it as my default mode?
Our recommended VI emulator is viper. To make viper-mode the default,
@end quotation
-@node Q5.0.10
+@node Q5.0.10, Q5.0.11, Q5.0.9, Miscellaneous
@unnumberedsec Q5.0.10: [This question intentionally left blank]
Obsolete question, left blank to avoid renumbering
-@node Q5.0.11
+@node Q5.0.11, Q5.0.12, Q5.0.10, Miscellaneous
@unnumberedsec Q5.0.11: [This question intentionally left blank]
Obsolete question, left blank to avoid renumbering
-@node Q5.0.12
+@node Q5.0.12, Q5.0.13, Q5.0.11, Miscellaneous
@unnumberedsec Q5.0.12: How do I disable gnuserv from opening a new frame?
If you set the @code{gnuserv-frame} variable to the frame that should be
@kbd{M-x customize @key{RET} gnuserv @key{RET}}.
-@node Q5.0.13
+@node Q5.0.13, Q5.0.14, Q5.0.12, Miscellaneous
@unnumberedsec Q5.0.13: How do I start gnuserv so that each subsequent SXEmacs is a client?
Put the following in your @file{init.el} file to start the server:
See also man page of gnuclient.
-@node Q5.0.14
+@node Q5.0.14, Q5.0.15, Q5.0.13, Miscellaneous
@unnumberedsec Q5.0.14: Strange things are happening in Shell Mode.
Sometimes (i.e. it's not repeatable, and I can't work out why it
@end quotation
-@node Q5.0.15
+@node Q5.0.15, Q5.0.16, Q5.0.14, Miscellaneous
@unnumberedsec Q5.0.15: Where do I get the latest CC Mode?
See @uref{http://cc-mode.sourceforge.net/}.
-@node Q5.0.16
+@node Q5.0.16, Q5.0.17, Q5.0.15, Miscellaneous
@unnumberedsec Q5.0.16: I find auto-show-mode disconcerting. How do I turn it off?
@code{auto-show-mode} controls whether or not a horizontal scrollbar
@end lisp
-@node Q5.0.17
+@node Q5.0.17, Q5.0.18, Q5.0.16, Miscellaneous
@unnumberedsec Q5.0.17: How can I get two instances of info?
Good question.
-@node Q5.0.18
+@node Q5.0.18, Q5.0.19, Q5.0.17, Miscellaneous
@unnumberedsec Q5.0.18: [This question intentionally left blank]
-@node Q5.0.19
+@node Q5.0.19, Q5.0.20, Q5.0.18, Miscellaneous
@unnumberedsec Q5.0.19: Is there something better than LaTeX mode?
@email{dak@@fsnif.neuroinformatik.ruhr-uni-bochum.de, David Kastrup} writes:
@end quotation
-@node Q5.0.20
+@node Q5.0.20, Q5.1.1, Q5.0.19, Miscellaneous
@unnumberedsec Q5.0.20: Is there a way to start a new SXEmacs if there's no gnuserv running, and otherwise use gnuclient?
@email{vroonhof@@math.ethz.ch, Jan Vroonhof} writes:
@end quotation
-@node Q5.1.1
+@node Q5.1.1, Q5.1.2, Q5.0.20, Miscellaneous
@unnumberedsec 5.1: Emacs Lisp Programming Techniques
@unnumberedsec Q5.1.1: What is the difference in key sequences between XEmacs/SXEmacs and GNU Emacs?
you use. The function is available under all Emacsen.
-@node Q5.1.2
+@node Q5.1.2, Q5.1.3, Q5.1.1, Miscellaneous
@unnumberedsec Q5.1.2: Can I generate "fake" keyboard events?
I wonder if there is an interactive function that can generate
@end lisp
-@node Q5.1.3
+@node Q5.1.3, Q5.1.4, Q5.1.2, Miscellaneous
@unnumberedsec Q5.1.3: Could you explain @code{read-kbd-macro} in more detail?
The @code{read-kbd-macro} function returns the internal Emacs
@end quotation
-@node Q5.1.4
+@node Q5.1.4, Q5.1.5, Q5.1.3, Miscellaneous
@unnumberedsec Q5.1.4: What is the performance hit of @code{let}?
In most cases, not noticeable. Besides, there's no avoiding
provide the clearest code.
-@node Q5.1.5
+@node Q5.1.5, Q5.1.6, Q5.1.4, Miscellaneous
@unnumberedsec Q5.1.5: What is the recommended use of @code{setq}?
@itemize @bullet
@end itemize
-@node Q5.1.6
+@node Q5.1.6, Q5.1.7, Q5.1.5, Miscellaneous
@unnumberedsec Q5.1.6: What is the typical misuse of @code{setq} ?
A typical misuse is probably @code{setq}ing a variable that was meant to
@end lisp
-@node Q5.1.7
+@node Q5.1.7, Q5.1.8, Q5.1.6, Miscellaneous
@unnumberedsec Q5.1.7: I like the @code{do} form of cl, does it slow things down?
It shouldn't. Here is what Dave Gillespie has to say about cl.el
@end quotation
-@node Q5.1.8
+@node Q5.1.8, Q5.1.9, Q5.1.7, Miscellaneous
@unnumberedsec Q5.1.8: I like recursion, does it slow things down?
Yes. Emacs byte-compiler cannot do much to optimize recursion. But
gain. It's not usually worth it.
-@node Q5.1.9
+@node Q5.1.9, Q5.1.10, Q5.1.8, Miscellaneous
@unnumberedsec Q5.1.9: How do I put a glyph as annotation in a buffer?
Here is a solution that will insert the glyph annotation at the
@code{(point-min)}.
-@node Q5.1.10
+@node Q5.1.10, Q5.1.11, Q5.1.9, Miscellaneous
@unnumberedsec Q5.1.10: @code{map-extents} won't traverse all of my extents!
I tried to use @code{map-extents} to do an operation on all the extents
@end lisp
-@node Q5.1.11
+@node Q5.1.11, Q5.2.1, Q5.1.10, Miscellaneous
@unnumberedsec Q5.1.11: My elisp program is horribly slow. Is there
an easy way to find out where it spends time?
@c New
@end quotation
-@node Q5.2.1
+@node Q5.2.1, Q5.2.2, Q5.1.11, Miscellaneous
@unnumberedsec Q5.2.1: How do I turn off the sound?
@c hehe, this is neat
@c should i mention that if nothing's done, sound is off entirely?
customize @key{RET} sound @key{RET}}.
-@node Q5.2.2
+@node Q5.2.2, Q5.2.3, Q5.2.1, Miscellaneous
@unnumberedsec Q5.2.2: How do I get funky sounds instead of a boring beep?
Make sure your SXEmacs was compiled with audio and media support, and
@end lisp
-@node Q5.2.3
+@node Q5.2.3, Q5.2.4, Q5.2.2, Miscellaneous
@unnumberedsec Q5.2.3: What's NAS, how do I get it?
@xref{Q2.0.3}, for an explanation of the @dfn{Network Audio System}.
-@node Q5.2.4
+@node Q5.2.4, Q5.3.1, Q5.2.3, Miscellaneous
@unnumberedsec Q5.2.4: Sunsite sounds don't play.
I'm having some trouble with sounds I've downloaded from sunsite. They
@end quotation
-@node Q5.3.1
+@node Q5.3.1, Q5.3.2, Q5.2.4, Miscellaneous
@unnumberedsec 5.3: Miscellaneous
@unnumberedsec Q5.3.1: How do you make SXEmacs indent CL if-clauses correctly?
@end lisp
-@node Q5.3.2
+@node Q5.3.2, Q5.3.3, Q5.3.1, Miscellaneous
@unnumberedsec Q5.3.2: [This question intentionally left blank]
Obsolete question, left blank to avoid renumbering.
-@node Q5.3.3
+@node Q5.3.3, Q5.3.4, Q5.3.2, Miscellaneous
@unnumberedsec Q5.3.3: How can I print WYSIWYG a font-locked buffer?
Font-lock looks nice. How can I print (WYSIWYG) the highlighted
being the default location of an installed ps-print package.
-@node Q5.3.4
+@node Q5.3.4, Q5.3.5, Q5.3.3, Miscellaneous
@unnumberedsec Q5.3.4: Getting @kbd{M-x lpr} to work with postscript printer.
My printer is a Postscript printer and @code{lpr} only works for
versions of a2ps require a @samp{-Pprinter} to ensure spooling.
-@node Q5.3.5
+@node Q5.3.5, Q5.3.6, Q5.3.4, Miscellaneous
@unnumberedsec Q5.3.5: How do I specify the paths that SXEmacs uses for finding files?
You can specify what paths to use by using a number of different flags
file.
-@node Q5.3.6
+@node Q5.3.6, Q5.3.7, Q5.3.5, Miscellaneous
@unnumberedsec Q5.3.6: [This question intentionally left blank]
Obsolete question, left blank to avoid renumbering.
-@node Q5.3.7
+@node Q5.3.7, Q5.3.8, Q5.3.6, Miscellaneous
@unnumberedsec Q5.3.7: Can I have the end of the buffer delimited in some way?
Say, with: @samp{[END]}?
We leave that as an exercise for the reader.
-@node Q5.3.8
+@node Q5.3.8, Q5.3.9, Q5.3.7, Miscellaneous
@unnumberedsec Q5.3.8: How do I insert today's date into a buffer?
Like this:
@end lisp
-@node Q5.3.9
+@node Q5.3.9, Q5.3.10, Q5.3.8, Miscellaneous
@unnumberedsec Q5.3.9: Are only certain syntactic character classes available for abbrevs?
@c @email{gutschk@@uni-muenster.de, Markus Gutschke} writes:
Does not apply anymore.
-@node Q5.3.10
+@node Q5.3.10, Q5.3.11, Q5.3.9, Miscellaneous
@unnumberedsec Q5.3.10: How can I get those oh-so-neat X-Face lines?
Firstly there is an ftp site which describes X-faces and has the
Vegard Vesterheim
-@node Q5.3.11
+@node Q5.3.11, Q5.3.12, Q5.3.10, Miscellaneous
@unnumberedsec Q5.3.11: How do I add new Info directories?
You use something like:
@end quotation
-@node Q5.3.12
+@node Q5.3.12, , Q5.3.11, Miscellaneous
@unnumberedsec Q5.3.12: What do I need to change to make printing work?
For regular printing there are two variables that can be customized.
* Q6.0.1:: Why did SXEmacs cut all support for Windows?
@end menu
-@node Q6.0.1
+@node Q6.0.1, , MS Windows, MS Windows
@unnumberedsec Q6.0.1: Why did SXEmacs cut all support for Windows?
Short answer:
windows concept into account.
-@node Current Events, , MS Windows, Top
+@node Current Events, , MS Windows, Top
@unnumbered 7 What the Future Holds
This is part 7 of the SXEmacs Frequently Asked Questions list. This
* Q7.0.6:: What's new in SXEmacs 22.1.4?
@end menu
-@node Q7.0.1
+@node Q7.0.1, Q7.0.2, Current Events, Current Events
@unnumberedsec Q7.0.1: What new features will be in SXEmacs soon?
@strong{YOU} tell @strong{ME}!
-@node Q7.0.2
+@node Q7.0.2, Q7.0.3, Q7.0.1, Current Events
@unnumberedsec Q7.0.2: What's new in SXEmacs 22.1.0?
This is the first release of SXEmacs. It is a fork of XEmacs
the code it descended from, XEmacs 21.4.16, are purely renaming
"XEmacs" to "SXEmacs".
-@node Q7.0.3
+@node Q7.0.3, Q7.0.4, Q7.0.2, Current Events
@unnumberedsec Q7.0.3: What's new in SXEmacs 22.1.1?
@itemize @bullet
@end itemize
-@node Q7.0.4
+@node Q7.0.4, Q7.0.5, Q7.0.3, Current Events
@unnumberedsec Q7.0.4: What's new in SXEmacs 22.1.2?
@itemize @bullet
@end itemize
-@node Q7.0.5
+@node Q7.0.5, Q7.0.6, Q7.0.4, Current Events
@unnumberedsec Q7.0.5: What's new in SXEmacs 22.1.3?
@itemize @bullet
@end itemize
-@node Q7.0.6
+@node Q7.0.6, , Q7.0.5, Current Events
@unnumberedsec Q7.0.6: What's new in SXEmacs 22.1.4?
@itemize @bullet
behavior of SXEmacs.
@end menu
-@node Minor Modes
+@node Minor Modes, Variables, Customization, Customization
@section Minor Modes
@cindex minor modes
as you type them. For example, @samp{amd} might expand to @samp{abbrev
mode}. @xref{Abbrevs}, for full information.
-@node Variables
+@node Variables, Keyboard Macros, Minor Modes, Customization
@section Variables
@cindex variable
@cindex option
* File Variables:: How files can specify variable values.
@end menu
-@node Examining
+@node Examining, Easy Customization, Variables, Variables
@subsection Examining and Setting Variables
@cindex setting variables
Setting variables in this way, like all means of customizing Emacs
except where explicitly stated, affects only the current Emacs session.
-@node Easy Customization
+@node Easy Customization, Edit Options, Examining, Variables
@subsection Easy Customization Interface
@findex customize
options, faces, or groups.
@end menu
-@node Customization Groups
+@node Customization Groups, Changing an Option, Easy Customization, Easy Customization
@subsubsection Customization Groups
@cindex customization groups
that group and its contents, just that option, or just that face.
This is the way to set values in it.
-@node Changing an Option
+@node Changing an Option, Face Customization, Customization Groups, Easy Customization
@subsubsection Changing an Option
Here is an example of what a user option looks like in the
other fields performs an operation---set, save or reset---on each of the
items in the buffer that could meaningfully be set, saved or reset.
-@node Face Customization
+@node Face Customization, Specific Customization, Changing an Option, Easy Customization
@subsubsection Customizing Faces
@cindex customizing faces
@cindex bold font
@c you don't want to change that attribute. Type @samp{none} if you want
@c to clear out the attribute.
-@node Specific Customization
+@node Specific Customization, , Face Customization, Easy Customization
@subsubsection Customizing Specific Items
Instead of finding the options you want to change by moving down
saved. Use @kbd{M-x customize-customized} to look at the options and
faces that you have set but not saved.
-@node Edit Options
+@node Edit Options, Locals, Easy Customization, Variables
@subsection Editing Variable Values
@table @kbd
Move to the next or previous variable.
@end table
-@node Locals
+@node Locals, File Variables, Edit Options, Variables
@subsection Local Variables
@table @kbd
(default-value 'fill-column)
@end example
-@node File Variables
+@node File Variables, , Locals, Variables
@subsection Local Variables in Files
@cindex local variables in files
The command @code{M-x normal-mode} always obeys local variables lists
and ignores this variable.
-@node Keyboard Macros
+@node Keyboard Macros, Key Bindings, Variables, Customization
@section Keyboard Macros
@cindex keyboard macros
* Kbd Macro Query:: Keyboard macros that do different things each use.
@end menu
-@node Basic Kbd Macro
+@node Basic Kbd Macro, Save Kbd Macro, Keyboard Macros, Keyboard Macros
@subsection Basic Use
@kindex C-x (
to plain @kbd{C-x (} followed by retyping the whole definition so far. As
a consequence it re-executes the macro as previously defined.
-@node Save Kbd Macro
+@node Save Kbd Macro, Kbd Macro Query, Basic Kbd Macro, Keyboard Macros
@subsection Naming and Saving Keyboard Macros
@findex name-last-kbd-macro
keyboard macro, so that the macro is reassigned the same keys when you
load the file.
-@node Kbd Macro Query
+@node Kbd Macro Query, , Save Kbd Macro, Keyboard Macros
@subsection Executing Macros With Variations
@kindex C-x q
execution, the recursive edit gives you a chance to do some particularized
editing. @xref{Recursive Edit}.
-@node Key Bindings
+@node Key Bindings, Syntax, Keyboard Macros, Customization
@section Customizing Key Bindings
This section deals with the @dfn{keymaps} that define the bindings
beginners from surprises.
@end menu
-@node Keymaps
+@node Keymaps, Rebinding, Key Bindings, Key Bindings
@subsection Keymaps
@cindex keymap
for @kbd{C-x} commands contains @code{nil}, the definition from the global
keymap for @kbd{C-x} commands is used.@refill
-@node Rebinding
+@node Rebinding, Disabling, Keymaps, Key Bindings
@subsection Changing Key Bindings
@cindex key rebinding, this session
@cindex rebinding keys, this session
* Key Bindings Using Strings:: Using Strings for Changing Key Bindings
@end menu
-@node Interactive Rebinding
+@node Interactive Rebinding, Programmatic Rebinding, Rebinding, Rebinding
@subsubsection Changing Key Bindings Interactively
@findex global-set-key
@findex local-set-key
redefines in that keymap all keys that were previously defined with the
old definition to have the new definition instead.
-@node Programmatic Rebinding
+@node Programmatic Rebinding, Key Bindings Using Strings, Interactive Rebinding, Rebinding
@subsubsection Changing Key Bindings Programmatically
You can use the functions @code{global-set-key} and @code{define-key}
@comment ;;
@comment (global-set-key "\^J" 'my-command)
-@node Key Bindings Using Strings
+@node Key Bindings Using Strings, , Programmatic Rebinding, Rebinding
@subsubsection Using Strings for Changing Key Bindings
For backward compatibility, you can still use strings to represent
control @@ control space
@end example
-@node Disabling
+@node Disabling, , Rebinding, Key Bindings
@subsection Disabling Commands
@cindex disabled command
Disabling a command has no effect on calling it as a function from Lisp
programs.
-@node Syntax
+@node Syntax, Init File, Key Bindings, Customization
@section The Syntax Table
@cindex syntax table
* Change: Syntax Change. How to change the information.
@end menu
-@node Syntax Entry
+@node Syntax Entry, Syntax Change, Syntax, Syntax
@subsection Information About Each Character
The syntax table entry for a character is a number that encodes six
appear where there is no comment, for example, in Lisp mode where the
comment terminator is a newline but not every newline ends a comment.
-@node Syntax Change
+@node Syntax Change, , Syntax Entry, Syntax
@subsection Altering Syntax Information
It is possible to alter a character's syntax table entry by storing a new
@code{modify-syntax-entry} to set up that character's current syntax,
and some English to explain that string if necessary.
-@node Init File
+@node Init File, Audible Bell, Syntax, Customization
@section The Init File
@cindex init file
@cindex init directory
* Terminal Init:: Each terminal type can have an init file.
@end menu
-@node Init Syntax
+@node Init Syntax, Init Examples, Init File, Init File
@subsection Init File Syntax
The init file contains one or more Lisp function call
Write a single-quote (') followed by the Lisp object you want.
@end table
-@node Init Examples
+@node Init Examples, Terminal Init, Init Syntax, Init File
@subsection Init File Examples
Here are some examples of doing certain commonly desired things with
@end example
@end itemize
-@node Terminal Init
+@node Terminal Init, , Init Examples, Init File
@subsection Terminal-Specific Initialization
Each terminal type can have a Lisp library to be loaded into Emacs when
override part of any of the terminal-specific libraries and to define
initializations for terminals that do not have a library.@refill
-@node Audible Bell
+@node Audible Bell, Faces, Init File, Customization
@section Changing the Bell Sound
@cindex audible bell, changing
@cindex bell, changing
@end table
@comment node-name, next, previous, up
-@node Faces
+@node Faces, Frame Components, Audible Bell, Customization
@section Faces
SXEmacs has objects called extents and faces. An @dfn{extent}
@var{frame} argument is provided, the face is changed only in that
frame; otherwise, it is changed in all frames.
-@node Frame Components
+@node Frame Components, X Resources, Faces, Customization
@section Frame Components
You can control the presence and position of most frame components, such
@ref{Menubar,,,lispref,}, @ref{Toolbar Intro,,,lispref,}, and
@ref{Gutter Intro,,,lispref,}.
-@node X Resources
+@node X Resources, , Frame Components, Customization
@section X Resources
@cindex X resources
@findex x-create-frame
* Menubar Resources:: Specifying resources for the menubar.
@end menu
-@node Geometry Resources
+@node Geometry Resources, Iconic Resources, X Resources, X Resources
@subsection Geometry Resources
To make the default size of all Emacs frames be 80 columns by 55 lines,
intuitive behavior with respect to the default sizes and positions of
frames created in various ways.
-@node Iconic Resources
+@node Iconic Resources, Resource List, Geometry Resources, X Resources
@subsection Iconic Resources
Analogous to @code{-geometry}, the @code{-iconic} command-line option
However, it is possible to set the iconic flag on particular frames (by
name) by using the @code{Emacs*FRAME-NAME.iconic} resource.
-@node Resource List
+@node Resource List, Face Resources, Iconic Resources, X Resources
@subsection Resource List
Emacs frames accept the following resources:
@code{x-pointer-foreground-color} and @code{x-pointer-background-color}.
@end table
-@node Face Resources
+@node Face Resources, Widgets, Resource List, X Resources
@subsection Face Resources
The attributes of faces are also per-frame. They can be specified as:
should use those forms. See the man pages for @samp{X(1)},
@samp{xlsfonts(1)}, and @samp{xfontsel(1)}.
-@node Widgets
+@node Widgets, Menubar Resources, Face Resources, X Resources
@subsection Widgets
There are several structural widgets between the terminal EmacsFrame
SXEmacs executable (usually @samp{sxemacs}), and
@samp{x-emacs-application-class} is generally @samp{Emacs}.
-@node Menubar Resources
+@node Menubar Resources, , Widgets, X Resources
@subsection Menubar Resources
As the menubar is implemented as a widget which is not a part of SXEmacs
operations.
@end menu
-@node File Menu
+@node File Menu, Edit Menu, Pull-down Menus, Pull-down Menus
@subsection The File Menu
@cindex File menu
The Help menu also gives access to UNIX online manual pages via the
@b{UNIX Manual Page} option.
-@node Menu Customization
+@node Menu Customization, , Help Menu, Pull-down Menus
@subsection Customizing SXEmacs Menus
You can customize any of the pull-down menus by adding or removing menu
* List Tags:: Listing and finding tags defined in a file.
@end menu
-@node Tag Syntax
+@node Tag Syntax, Create Tags Table, Tags, Tags
@subsection Source File Tag Syntax
Here is how tag syntax is defined for the most popular languages:
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).
-@end ignore Permission is granted to copy and distribute modified
+@end ignore
+Permission is granted to copy and distribute modified
versions of this manual under the conditions for verbatim copying,
provided also that the sections entitled ``Distribution'' and ``GNU
General Public License'' are included exactly as in the original, and
SXEmacs is the extensible, customizable, self-documenting real-time
display editor. This Info file describes how to edit with Emacs
and some of how to customize it, but not how to extend it. It
-corresponds to: v22.1.15
+corresponds to: v22.1.16
Although, it hasn't had a complete rewrite for quite some time.
int retcode = popmail(inname + 3, outname, poppass);
exit(retcode);
}
- setuid(getuid());
+ if (0 != setuid(getuid())) {
+ exit(1);
+ }
#endif /* MAIL_USE_POP */
#ifndef DISABLE_DIRECT_ACCESS
if (fork() == 0) {
- setuid(getuid());
+ if (0 != setuid(getuid())) {
+ exit(1);
+ }
VERBOSE(("opening input file\n"));
build-rpt.el byte-optimize.el bytecomp-runtime.el bytecomp.el \
callers-of-rpt.el cl-compat.el cl-extra.el cl-macs.el cl-seq.el \
cl.el cmdloop.el code-cmds.el code-files.el code-process.el \
- coding.el compat.el config.el console.el cus-dep.el \
- cus-edit.el cus-face.el cus-file.el cus-load.el cus-start.el \
- custom.el derived.el device.el dialog-items.el dialog.el \
- disass.el disp-table.el dragdrop.el easy-mmode.el easymenu.el \
- emod-utils.el etags.el events.el extents.el faces.el ffi.el \
- files-nomule.el files.el fill.el float-sup.el font-lock.el \
- font-menu.el font.el fontl-hooks.el format.el frame.el \
- glyphs.el gnuserv.el gpm.el gui.el gutter-items.el gutter.el \
- help-macro.el help-nomule.el help.el hyper-apropos.el indent.el \
- info.el isearch-mode.el iso8859-1.el issue-tracker.el \
+ coding.el compat.el config.el console.el const-aliases.el \
+ cus-dep.el cus-edit.el cus-face.el cus-file.el cus-load.el \
+ cus-start.el custom.el derived.el device.el dialog-items.el \
+ dialog.el disass.el disp-table.el dragdrop.el easy-mmode.el \
+ easymenu.el emod-utils.el etags.el events.el extents.el \
+ faces.el ffi.el files-nomule.el files.el fill.el float-sup.el \
+ font-lock.el font-menu.el font.el fontl-hooks.el format.el \
+ frame.el glyphs.el gnuserv.el gpm.el gui.el gutter-items.el \
+ gutter.el help-macro.el help-nomule.el help.el hyper-apropos.el \
+ indent.el info.el isearch-mode.el iso8859-1.el issue-tracker.el \
itimer-autosave.el itimer.el keydefs.el keymap.el ldap.el \
lib-complete.el lisp-initd.el lisp-mnt.el lisp-mode.el lisp.el \
list-mode.el loaddefs.el loadhist.el map-ynp.el \
;; to sort the stuff below, use M-x sort-regexp-fields RET
;; ^.*$ RET (\([a-z]*\) RET
(adrian "Adrian Aichner" "adrian@xemacs.org")
+ (aidan "Aidan Kehoe" "aidan@xemacs.org")
(aj "Andreas Jaeger" "aj@xemacs.org")
(ajc "Andrew Cosgriff" "ajc@xemacs.org")
(alastair "Alastair Houghton" "alastair@xemacs.org")
(defvar about-current-release-maintainers
;; this list should not necessarily be in sorted order.
- '(steve hroptatyr njsf lg horst))
+ '(steve njsf horst hroptatyr lg))
(defvar about-other-current-hackers '(erik hynek))
(rossini . "http://faculty.washington.edu/rossini/")
(steve . "http://www.steveyoungs.com/")
(steve-emchat . "http://www.emchat.org/")
- (steve-g+ . "http://plus.steveyoungs.com/about/")
+ (steve-g+ . "https://plus.google.com/u/0/+SteveYoungs")
+ (steve-fb . "https://facebook.com/steve.r.youngs/")
+ (steve-li . "http://www.linkedin.com/in/steveyoungs")
(steve-inits . "http://bastard.steveyoungs.com/~steve/SXEmacs/htmlinits/")
- (steve-twit . "https://twitter.com/#!/SteveYoungs")
+ (steve-twit . "https://twitter.com/SteveYoungs")
(stigb . "http://www.tihlde.hist.no/~stigb/")
(sxemacs . "http://www.sxemacs.org/")
(sxemacs-shop . "http://store.sxemacs.org/")
XEmacs will speak Scheme.\n"))
(steve
(widget-insert "
-I live in Brisbane, Australia with my wife, Michelle, our daughter,
-Kaitlyn, and our son, Blake.
+I live in Brisbane, Australia with my wife, Michelle, and our children,
+Kaitlyn and Blake.
-In past lives, I've been a bank officer, car salesman, insurance
-agent, managed a computer firm and owned and operated my own
-business. I now divide my time between my family, planning my
-next business, and maintaining a few open source projects.
-
-I am also having delusions of grandeur over becoming an honest to
-goodness author of fiction. You know... books 'n' stories 'n' shit.
+In past lives, I've been a bank officer, car salesman, insurance agent,
+managed a computer firm and owned and operated my own business. I now
+divide my time between my family, planning my next business, writing,
+and maintaining a few open source projects.
"
(about-with-face "My current open source obsessions are:"
(about-with-face
"More of me on the Interwebz:\n\n"
'font-lock-warning-face))
- (widget-insert (about-with-face " My Blog:\t\t"
+ ; (widget-insert (about-with-face " My Blog:\t\t"
+ ; 'font-lock-string-face))
+ ; (about-url-link 'steve nil "Visit my infrequently updated blog")
+ (widget-insert (about-with-face " Facebook:\t\t"
'font-lock-string-face))
- (about-url-link 'steve nil "Visit my infrequently updated blog")
+ (about-url-link 'steve-fb nil "My Facebook Profile")
(widget-insert (about-with-face "\n Google+:\t\t"
'font-lock-string-face))
(about-url-link 'steve-g+ nil "My Google+ Profile")
+ (widget-insert (about-with-face "\n LinkedIn:\t\t"
+ 'font-lock-string-face))
+ (about-url-link 'steve-li nil "My LinkedIn Profile")
(widget-insert (about-with-face "\n Twitter:\t\t"
'font-lock-string-face))
(about-url-link 'steve-twit nil "Follow me on Twitter")
(let ((begin (point)))
(forward-sexp)
(forward-line 1)
- (princ (buffer-substring begin (point)) outbuf)))
+ (princ (buffer-substring begin (point)) outbuf))
+ (setq autoloads-done (cons '<immediate> autoloads-done)))
(t
(princ (buffer-substring
(progn
directories)
(mapfam
#'(lambda (f)
- (let ((d (car (last (split-string-by-char (file-dirname f) ?/) 2))))
+ (let ((d (file-basename (file-dirname f))))
(unless (bloom-owns-p dir-bloom d)
(bloom-add dir-bloom d)
(setq directories (cons d directories)))))
--- /dev/null
+;;; const-aliases --- define alias for C defconsts to allow let-bind
+
+;; Copyright (C) 2015 Nelson Ferreira
+
+;; Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+;; Maintainer: SXEmacs Development Team
+;; Keywords: internal
+
+;; This file is part of SXEmacs.
+
+;; SXEmacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; SXEmacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Synched up with: Not synched with FSF.
+
+;;; Commentary:
+
+;; The following code is required at startup to define all the
+;; necessary defconst alias for C DEFVAR_CONST that we wish to
+;; allow let-bind to succeed.
+
+\f
+;;; Code:
+
+(when (featurep 'bigfr)
+ (defconst pi bigfr-pi "The value of Pi (3.1415926...)")
+ (defconst e euler "The value of e (2.7182818...)"))
+
+(provide 'const-aliases)
+
(defvar curl:download-history nil
"History for `curl:download' and `curl:download&'.")
-(define-ffi-callback curl:cb-write-to-buffer int
- ((ptr pointer) (size int) (nmemb int) (stream pointer))
- "Writer to STREAM buffer."
- (let ((buf (ffi-pointer-to-lisp-object stream))
- (rsz (* size nmemb)))
- (when (and (positivep rsz) (buffer-live-p buf))
- (with-current-buffer buf
- (insert (ffi-get ptr :type (cons 'c-data rsz)))))
- rsz))
+(ignore-errors
+ (define-ffi-callback curl:cb-write-to-buffer int
+ ((ptr pointer) (size int) (nmemb int) (stream pointer))
+ "Writer to STREAM buffer."
+ (let ((buf (ffi-pointer-to-lisp-object stream))
+ (rsz (* size nmemb)))
+ (when (and (positivep rsz) (buffer-live-p buf))
+ (with-current-buffer buf
+ (insert (ffi-get ptr :type (cons 'c-data rsz)))))
+ rsz)))
;;;###autoload
(defun curl:download (url file-or-buffer &rest options)
(setq options (list :header t :nobody t))))
(let* ((ctx (curl:easy-init))
- (bufferp (bufferp file-or-buffer))
+ (bufferp (when (bufferp file-or-buffer)
+ (or (boundp 'curl:cb-write-to-buffer)
+ (error 'unimplemented 'ffi-make-callback
+ "for this architecture"))))
(fs (if bufferp
(ffi-lisp-object-to-pointer file-or-buffer)
(c:fopen (expand-file-name file-or-buffer) "w"))))
(if (featurep 'workers)
(let* ((ctx (curl:easy-init))
- (bufferp (bufferp file-or-buffer))
+ (bufferp (when (bufferp file-or-buffer)
+ (or (boundp 'curl:cb-write-to-buffer)
+ (error 'unimplemented 'ffi-make-callback
+ "for this architecture"))))
(fs (if bufferp
(ffi-lisp-object-to-pointer file-or-buffer)
(c:fopen (expand-file-name file-or-buffer) "w"))))
;;}}}
;;{{{ Custom collations
-(define-ffi-callback sqlite-generic-collation 'int
- ((user-data 'pointer) (len1 'int) (str1 'pointer)
- (len2 'int) (str2 'pointer))
- (let ((fun (ffi-pointer-to-lisp-object user-data))
- (s1 (ffi-get str1 :type (cons 'c-data len1)))
- (s2 (ffi-get str2 :type (cons 'c-data len2))))
- (funcall fun s1 s2)))
+(ignore-errors
+ (define-ffi-callback sqlite-generic-collation 'int
+ ((user-data 'pointer) (len1 'int) (str1 'pointer)
+ (len2 'int) (str2 'pointer))
+ (let ((fun (ffi-pointer-to-lisp-object user-data))
+ (s1 (ffi-get str1 :type (cons 'c-data len1)))
+ (s2 (ffi-get str2 :type (cons 'c-data len2))))
+ (funcall fun s1 s2))))
(defun sqlite-create-collation (db name compare-function)
"For DB register new collation named NAME.
COMPARE-FUNCTION must get exactly two string arguments and return:
-1 if first string is less then second
0 if strings are equal
- 1 if first string is greater then second"
- (let* ((ccolls (get db 'custom-collations))
- (colla (assoc name ccolls)))
- (if colla
- (setcdr colla compare-function)
- (put db 'custom-collations
- (cons (cons name compare-function) ccolls))))
- (sqlite-check-result
- (sqlite:create-collation
- db name sqlite-UTF-8
- (ffi-lisp-object-to-pointer compare-function)
- (ffi-callback-fo 'sqlite-generic-collation))
- (sqlite:errmsg db)))
+ 1 if first string is greater then second.
+
+Currently, this is only available on i386."
+ (if (not (boundp 'sqlite-generic-collation))
+ (error 'unimplemented 'ffi-make-callback
+ "for this architecture")
+ (let* ((ccolls (get db 'custom-collations))
+ (colla (assoc name ccolls)))
+ (if colla
+ (setcdr colla compare-function)
+ (put db 'custom-collations
+ (cons (cons name compare-function) ccolls))))
+ (sqlite-check-result
+ (sqlite:create-collation
+ db name sqlite-UTF-8
+ (ffi-lisp-object-to-pointer compare-function)
+ (ffi-callback-fo 'sqlite-generic-collation))
+ (sqlite:errmsg db))))
(defun sqlite-remove-collation (db name)
"For DB remove collation by NAME."
:type 'boolean
:group 'find-file)
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defcustom find-directory-functions '(cvs-dired-noselect dired-noselect)
+ "*List of functions to try in sequence to visit a directory.
+Each function is called with the directory name as the sole argument
+and should return either a buffer or nil."
+ :type '(hook :options (cvs-dired-noselect dired-noselect))
+ :group 'find-file)
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+
;;;It is not useful to make this a local variable.
;;;(put 'find-file-not-found-hooks 'permanent-local t)
(defvar find-file-not-found-hooks nil
(t
(setq default-directory dir))))
+(defun file-name-join (dirname basename)
+ "Return the filename defined by the concatenation of DIRNAME and BASENAME.
+Only one path component separator will ever be used in the result formation.
+
+Can be use to reassemble a file name separated by `file-name-directory'
+`file-name-nondirectory' and `file-dirname' `file-basename'."
+ (when (and (or (null dirname) (equal 0 (length dirname)))
+ (or (null basename) (equal 0 (length basename))))
+ (error "Both dirname (%S) and basename (%S) empty." dirname basename))
+ (let* ((dir (if (and dirname (> (length dirname) 0))
+ (if (equal "/" (substring dirname -1))
+ (substring dirname 0 -1)
+ dirname)
+ "."))
+ (base (if (and basename (> (length basename) 0))
+ (if (equal "/" (substring basename 0 1))
+ (substring basename 1)
+ basename)
+ (if (equal dir ".") "." ""))))
+ (if (and (equal 0 (length base))
+ (> (length dir) 0))
+ (concat dir)
+ (concat dir "/" base))))
+
(defun cd (dir)
"Make DIR become the current buffer's default directory.
If your environment includes a `CDPATH' variable, try each one of that
(make-frame-visible frame)
buffer))
-(defun find-file (filename &optional codesys)
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defun switch-to-next-buffer (&optional n)
+ "Switch to the next-most-recent buffer.
+This essentially rotates the buffer list forward.
+N (interactively, the prefix arg) specifies how many times to rotate
+forward, and defaults to 1. Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+ ;; Here is a different interactive spec. Look up the function
+ ;; `interactive' (i.e. `C-h f interactive') to understand how this
+ ;; all works.
+ (interactive "p")
+ (dotimes (n (or n 1))
+ (loop
+ do (bury-buffer (car (buffer-list)))
+ while (funcall buffers-tab-omit-function (car (buffer-list))))
+ (switch-to-buffer (car (buffer-list)))))
+
+(defun switch-to-previous-buffer (&optional n)
+ "Switch to the previously most-recent buffer.
+This essentially rotates the buffer list backward.
+N (interactively, the prefix arg) specifies how many times to rotate
+backward, and defaults to 1. Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+ (interactive "p")
+ (dotimes (n (or n 1))
+ (loop
+ do (switch-to-buffer (car (last (buffer-list))))
+ while (funcall buffers-tab-omit-function (car (buffer-list))))))
+
+;;; FIXME: Could this looping be done with #'mapfam in a nicer way.
+(defun switch-to-next-buffer-in-group (&optional n)
+ "Switch to the next-most-recent buffer in the current group.
+This essentially rotates the buffer list forward.
+N (interactively, the prefix arg) specifies how many times to rotate
+forward, and defaults to 1. Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+ (interactive "p")
+ (dotimes (n (or n 1))
+ (let ((curbuf (car (buffer-list))))
+ (loop
+ do (bury-buffer (car (buffer-list)))
+ while (or (funcall buffers-tab-omit-function (car (buffer-list)))
+ (not (mapcar
+ #'(lambda (f)
+ (funcall f curbuf (car (buffer-list))))
+ buffers-tab-filter-functions)))))
+ (switch-to-buffer (car (buffer-list)))))
+
+;;; FIXME: Could this looping be done with #'mapfam in a nicer way.
+(defun switch-to-previous-buffer-in-group (&optional n)
+ "Switch to the previously most-recent buffer in the current group.
+This essentially rotates the buffer list backward.
+N (interactively, the prefix arg) specifies how many times to rotate
+backward, and defaults to 1. Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+ (interactive "p")
+ (dotimes (n (or n 1))
+ (let ((curbuf (car (buffer-list))))
+ (loop
+ do (switch-to-buffer (car (last (buffer-list))))
+ while (or (funcall buffers-tab-omit-function (car (buffer-list)))
+ (not (mapcar
+ #'(lambda (f)
+ (funcall f curbuf (car (buffer-list))))
+ buffers-tab-filter-functions)))))))
+
+(defmacro find-file-create-switch-thunk (switch-function)
+ "Mark buffer modified if needed, then call SWITCH-FUNCTION.
+
+The buffer will be marked modified if the file associated with the buffer
+does not exist. This means that \\[find-file] on a non-existent file will
+create a modified buffer, making \\[save-buffer] sufficient to create the
+file.
+
+SWITCH-FUNCTION should be `switch-to-buffer' or a related function. This
+function (that is, `find-file-create-switch-thunk') is implemented as a macro
+because we don't have built-in lexical scope, a closure created with
+`lexical-let' will always run as interpreted code. Though functions created
+by this macro are unlikely to be called in performance-critical contexts.
+
+This function may be called from functions related to `find-file', as well
+as `find-file' itself."
+ `(function
+ (lambda (buffer)
+ (unless (and (buffer-file-name buffer)
+ (file-exists-p (buffer-file-name buffer)))
+ ;; XEmacs: nonexistent file--qualifies as a modification to the
+ ;; buffer.
+ (set-buffer-modified-p t buffer))
+ (,switch-function buffer))))
+
+(defun find-file (filename &optional codesys wildcards)
"Edit file FILENAME.
-Switch to a buffer visiting file FILENAME,
-creating one if none already exists.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
- (interactive "FFind file: \nZCoding system: ")
- (if codesys
- (let ((coding-system-for-read
- (get-coding-system codesys)))
- (switch-to-buffer (find-file-noselect filename)))
- (switch-to-buffer (find-file-noselect filename))))
-
-(defun find-file-other-window (filename &optional codesys)
+Switch to a buffer visiting file FILENAME, creating one if none already
+exists. Optional second argument specifies the coding system to use when
+decoding the file. Interactively, with a prefix argument, you will be
+prompted for the coding system.
+
+If you do not explicitly specify a coding system, the coding system
+is determined as follows:
+
+1. `coding-system-for-read', if non-nil. (This is used by Lisp programs to
+ temporarily set an overriding coding system and should almost never
+ apply here in `find-file'.)
+2. The result of `insert-file-contents-pre-hook', if non-nil. (This is a
+ complex interface for handling special cases.)
+3. The matching value for this filename from `file-coding-system-alist',
+ if any. (This lets you specify the coding system to be used for
+ files with particular extensions, names, etc.)
+4. `buffer-file-coding-system-for-read', if non-nil. (This is the global
+ default -- normally `undecided', so the built-in auto-detection
+ mechanism can do its thing.)
+5. The coding system 'raw-text.
+
+See `insert-file-contents' for more details about how the process of
+determining the coding system works.
+
+Interactively, or if WILDCARDS is non-nil in a call from Lisp,
+expand wildcards (if any) and visit multiple files. Wildcard expansion
+can be suppressed by setting `find-file-wildcards' to `nil'."
+ (interactive (list (read-file-name "Find file: ")
+ (and current-prefix-arg
+ (read-coding-system "Coding system: "))
+ t))
+ (and codesys (setq codesys (check-coding-system codesys)))
+ (let* ((coding-system-for-read (or codesys coding-system-for-read))
+ (value (find-file-noselect filename nil nil wildcards))
+ (thunk (find-file-create-switch-thunk switch-to-buffer)))
+ (if (listp value)
+ (mapcar thunk (nreverse value))
+ (funcall thunk value))))
+
+(defun find-file-other-window (filename &optional codesys wildcards)
"Edit file FILENAME, in another window.
-May create a new window, or reuse an existing one.
-See the function `display-buffer'.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
- (interactive "FFind file in other window: \nZCoding system: ")
- (if codesys
- (let ((coding-system-for-read
- (get-coding-system codesys)))
- (switch-to-buffer-other-window (find-file-noselect filename)))
- (switch-to-buffer-other-window (find-file-noselect filename))))
-
-(defun find-file-other-frame (filename &optional codesys)
+May create a new window, or reuse an existing one. See the function
+`display-buffer'. Optional second argument specifies the coding system to
+use when decoding the file. Interactively, with a prefix argument, you
+will be prompted for the coding system."
+ (interactive (list (read-file-name "Find file in other window: ")
+ (and current-prefix-arg
+ (read-coding-system "Coding system: "))
+ t))
+ (and codesys (setq codesys (check-coding-system codesys)))
+ (let* ((coding-system-for-read (or codesys coding-system-for-read))
+ (value (find-file-noselect filename nil nil wildcards))
+ (list (and (listp value) (nreverse value)))
+ (other-window-thunk (find-file-create-switch-thunk
+ switch-to-buffer-other-window)))
+ (if list
+ (cons
+ (funcall other-window-thunk (car list))
+ (mapcar (find-file-create-switch-thunk switch-to-buffer) (cdr list)))
+ (funcall other-window-thunk value))))
+
+(defun find-file-other-frame (filename &optional codesys wildcards)
"Edit file FILENAME, in a newly-created frame.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
- (interactive "FFind file in other frame: \nZCoding system: ")
- (if codesys
- (let ((coding-system-for-read
- (get-coding-system codesys)))
- (switch-to-buffer-other-frame (find-file-noselect filename)))
- (switch-to-buffer-other-frame (find-file-noselect filename))))
-
-(defun find-file-read-only (filename &optional codesys)
+Optional second argument specifies the coding system to use when decoding
+the file. Interactively, with a prefix argument, you will be prompted for
+the coding system."
+ (interactive (list (read-file-name "Find file in other frame: ")
+ (and current-prefix-arg
+ (read-coding-system "Coding system: "))
+ t))
+ (and codesys (setq codesys (check-coding-system codesys)))
+ (let* ((coding-system-for-read (or codesys coding-system-for-read))
+ (value (find-file-noselect filename nil nil wildcards))
+ (list (and (listp value) (nreverse value)))
+ (other-frame-thunk (find-file-create-switch-thunk
+ switch-to-buffer-other-frame)))
+ (if list
+ (cons
+ (funcall other-frame-thunk (car list))
+ (mapcar (find-file-create-switch-thunk switch-to-buffer) (cdr list)))
+ (funcall other-frame-thunk value))))
+
+;; No need to keep this macro around in the dumped executable.
+(unintern 'find-file-create-switch-thunk)
+
+(defun find-file-read-only (filename &optional codesys wildcards)
"Edit file FILENAME but don't allow changes.
Like \\[find-file] but marks buffer as read-only.
Use \\[toggle-read-only] to permit editing.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
- (interactive "fFind file read-only: \nZCoding system: ")
- (if codesys
- (let ((coding-system-for-read
- (get-coding-system codesys)))
- (find-file filename))
- (find-file filename))
- (setq buffer-read-only t)
- (current-buffer))
-
-(defun find-file-read-only-other-window (filename &optional codesys)
+Optional second argument specifies the coding system to use when decoding
+the file. Interactively, with a prefix argument, you will be prompted for
+the coding system."
+ (interactive (list (read-file-name "Find file read-only: ")
+ (and current-prefix-arg
+ (read-coding-system "Coding system: "))
+ t))
+ (let ((value (find-file filename codesys wildcards)))
+ (mapc #'(lambda (buffer)
+ (set-symbol-value-in-buffer 'buffer-read-only t buffer))
+ (if (listp value) value (list value)))
+ value))
+
+(defun find-file-read-only-other-window (filename &optional codesys wildcards)
"Edit file FILENAME in another window but don't allow changes.
Like \\[find-file-other-window] but marks buffer as read-only.
Use \\[toggle-read-only] to permit editing.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
- (interactive "fFind file read-only other window: \nZCoding system: ")
- (if codesys
- (let ((coding-system-for-read
- (get-coding-system codesys)))
- (find-file-other-window filename))
- (find-file-other-window filename))
+Optional second argument specifies the coding system to use when decoding
+the file. Interactively, with a prefix argument, you will be prompted for
+the coding system."
+ (interactive (list (read-file-name "Find file read-only other window: ")
+ (and current-prefix-arg
+ (read-coding-system "Coding system: "))
+ t))
+ (find-file-other-window filename codesys wildcards)
(setq buffer-read-only t)
(current-buffer))
-(defun find-file-read-only-other-frame (filename &optional codesys)
+(defun find-file-read-only-other-frame (filename &optional codesys wildcards)
"Edit file FILENAME in another frame but don't allow changes.
Like \\[find-file-other-frame] but marks buffer as read-only.
Use \\[toggle-read-only] to permit editing.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
- (interactive "fFind file read-only other frame: \nZCoding system: ")
- (if codesys
- (let ((coding-system-for-read
- (get-coding-system codesys)))
- (find-file-other-frame filename))
- (find-file-other-frame filename))
+Optional second argument specifies the coding system to use when decoding
+the file. Interactively, with a prefix argument, you will be prompted for
+the coding system."
+ (interactive (list (read-file-name "Find file read-only other frame: ")
+ (and current-prefix-arg
+ (read-coding-system "Coding system: "))
+ t))
+ (find-file-other-frame filename codesys wildcards)
(setq buffer-read-only t)
(current-buffer))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
(defun find-alternate-file-other-window (filename &optional codesys)
"Find file FILENAME as a replacement for the file in the next window.
"Find entry in `find-file-magic-files-alist' that matches FILENAME."
(find filename find-file-magic-files-alist :key #'car
:test #'(lambda (fn predicate)
- (and (file-exists-p fn)
- (funcall predicate fn)))))
-
-(defun find-file-noselect (filename &optional nowarn rawfile)
+ (and (file-exists-p fn)
+ (funcall predicate fn)))))
+
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defcustom find-file-wildcards t
+ "*Non-nil means file-visiting commands should handle wildcards.
+For example, if you specify `*.c', that would visit all the files
+whose names match the pattern."
+ :group 'files
+; :version "20.4"
+ :type 'boolean)
+
+(defcustom find-file-suppress-same-file-warnings nil
+ "*Non-nil means suppress warning messages for symlinked files.
+When nil, Emacs prints a warning when visiting a file that is already
+visited, but with a different name. Setting this option to t
+suppresses this warning."
+ :group 'files
+; :version "21.1"
+ :type 'boolean)
+
+;;; FIXME: the #'loop here is generating one of those 'variable G26164
+;;; bound but not referenced' warnings you get from cl loops. Might
+;;; be able to fix this by using #'mapfam instead. --SY.
+(defun find-file-noselect (filename &optional nowarn rawfile wildcards)
"Read file FILENAME into a buffer and return the buffer.
If a buffer exists visiting FILENAME, return that one, but
verify that the file has not changed since visited or saved.
If NOWARN is non-nil, warning messages will be suppressed.
If RAWFILE is non-nil, the file is read literally."
(setq filename (abbreviate-file-name (expand-file-name filename)))
- ;; Try magic files first
+ ;; SXEmacs addition:: Try magic files first
(let ((mfa-item (find-file-find-magic filename)))
(if mfa-item
(funcall (cdr mfa-item) filename)
-
- (let* ((buf (get-file-buffer filename))
- (truename (abbreviate-file-name (file-truename filename)))
- (number (nthcdr 10 (file-attributes truename)))
+ ;; End SXEmacs magic
+ (if (file-directory-p filename)
+ (or (and find-file-run-dired
+ (loop for fn in find-directory-functions
+ for x = (and (fboundp fn)
+ (funcall fn
+ (if find-file-use-truenames
+ (abbreviate-file-name
+ (file-truename filename))
+ filename)))
+ if x
+ return x))
+ (error "%s is a directory" filename))
+ (if (and wildcards
+ find-file-wildcards
+ (not (string-match "\\`/:" filename))
+ (string-match "[[*?]" filename))
+ (let ((files (condition-case nil
+ (file-expand-wildcards filename t)
+ (error (list filename))))
+ (find-file-wildcards nil))
+ (if (null files)
+ (find-file-noselect filename)
+ (mapcar #'find-file-noselect files)))
+ (let* ((buf (get-file-buffer filename))
+ (truename (abbreviate-file-name (file-truename filename)))
+ (number (nthcdr 10 (file-attributes truename)))
; ;; Find any buffer for a file which has same truename.
; (other (and (not buf) (find-buffer-visiting filename)))
- (error nil))
-
-; ;; Let user know if there is a buffer with the same truename.
-; (if (and (not buf) same-truename (not nowarn))
-; (message "%s and %s are the same file (%s)"
-; filename (buffer-file-name same-truename)
-; truename)
-; (if (and (not buf) same-number (not nowarn))
-; (message "%s and %s are the same file"
-; filename (buffer-file-name same-number))))
-; ;; Optionally also find that buffer.
-; (if (or find-file-existing-other-name find-file-visit-truename)
-; (setq buf (or same-truename same-number)))
-
- (when (and buf
- (or find-file-compare-truenames find-file-use-truenames)
- (not nowarn))
- (save-excursion
- (set-buffer buf)
- (if (not (string-equal buffer-file-name filename))
- (message "%s and %s are the same file (%s)"
- filename buffer-file-name
- buffer-file-truename))))
-
- (if buf
- (or nowarn
- (verify-visited-file-modtime buf)
- (cond ((not (file-exists-p filename))
- (error "File %s no longer exists!" filename))
- ;; Certain files should be reverted automatically
- ;; if they have changed on disk and not in the buffer.
- ((and (not (buffer-modified-p buf))
- (dolist (rx revert-without-query nil)
- (when (string-match rx filename)
- (return t))))
- (with-current-buffer buf
- (message "Reverting file %s..." filename)
- (revert-buffer t t)
- (message "Reverting file %s... done" filename)))
- ((yes-or-no-p
- (if (string= (file-name-nondirectory filename)
- (buffer-name buf))
- (format
- (if (buffer-modified-p buf)
- (gettext "File %s changed on disk. Discard your edits? ")
- (gettext "File %s changed on disk. Reread from disk? "))
- (file-name-nondirectory filename))
- (format
- (if (buffer-modified-p buf)
- (gettext "File %s changed on disk. Discard your edits in %s? ")
- (gettext "File %s changed on disk. Reread from disk into %s? "))
- (file-name-nondirectory filename)
- (buffer-name buf))))
- (with-current-buffer buf
- (revert-buffer t t)))))
- ;; Else: we must create a new buffer for filename
- (save-excursion
-;;; The truename stuff makes this obsolete.
-;;; (let* ((link-name (car (file-attributes filename)))
-;;; (linked-buf (and (stringp link-name)
-;;; (get-file-buffer link-name))))
-;;; (if (bufferp linked-buf)
-;;; (message "Symbolic link to file in buffer %s"
-;;; (buffer-name linked-buf))))
- (setq buf (create-file-buffer filename))
- ;; Catch various signals, such as QUIT, and kill the buffer
- ;; in that case.
- (condition-case data
+ )
+
+; ;; Let user know if there is a buffer with the same truename.
+; (if other
+; (progn
+; (or nowarn
+; find-file-suppress-same-file-warnings
+; (string-equal filename (buffer-file-name other))
+; (message "%s and %s are the same file"
+; filename (buffer-file-name other)))
+; ;; Optionally also find that buffer.
+; (if (or find-file-existing-other-name find-file-visit-truename)
+; (setq buf other))))
+
+ (when (and buf
+ (or find-file-compare-truenames find-file-use-truenames)
+ (not find-file-suppress-same-file-warnings)
+ (not nowarn))
+ (save-excursion
+ (set-buffer buf)
+ (if (not (string-equal buffer-file-name filename))
+ (message "%s and %s are the same file (%s)"
+ filename buffer-file-name
+ buffer-file-truename))))
+
+ (if buf
(progn
- (set-buffer-major-mode buf)
- (set-buffer buf)
- (erase-buffer)
- (condition-case ()
- (if rawfile
- (insert-file-contents-literally filename t)
- (insert-file-contents filename t))
- (file-error
- (when (and (file-exists-p filename)
- (not (file-readable-p filename)))
- (signal 'file-error (list "File is not readable" filename)))
- (if rawfile
- ;; Unconditionally set error
- (setq error t)
- (or
- ;; Run find-file-not-found-hooks until one returns non-nil.
- (run-hook-with-args-until-success 'find-file-not-found-hooks)
- ;; If they fail too, set error.
- (setq error t)))))
- ;; Find the file's truename, and maybe use that as visited name.
- ;; automatically computed in XEmacs, unless jka-compr was used!
- (unless buffer-file-truename
- (setq buffer-file-truename truename))
- (setq buffer-file-number number)
- (and find-file-use-truenames
- ;; This should be in C. Put pathname
- ;; abbreviations that have been explicitly
- ;; requested back into the pathname. Most
- ;; importantly, strip out automounter /tmp_mnt
- ;; directories so that auto-save will work
- (setq buffer-file-name (abbreviate-file-name buffer-file-name)))
- ;; Set buffer's default directory to that of the file.
- (setq default-directory (file-name-directory buffer-file-name))
- ;; Turn off backup files for certain file names. Since
- ;; this is a permanent local, the major mode won't eliminate it.
- (and (not (funcall backup-enable-predicate buffer-file-name))
- (progn
- (make-local-variable 'backup-inhibited)
- (setq backup-inhibited t)))
- (if rawfile
- ;; #### FSF 20.3 sets buffer-file-coding-system to
- ;; `no-conversion' here. Should we copy? It also
- ;; makes `find-file-literally' a local variable
- ;; and sets it to t.
- nil
- (after-find-file error (not nowarn))
- (setq buf (current-buffer))))
- (t
- (kill-buffer buf)
- (signal (car data) (cdr data))))
- ))
- buf))))
-\f
-;; FSF has `insert-file-literally' and `find-file-literally' here.
+ (or nowarn
+ (verify-visited-file-modtime buf)
+ (cond ((not (file-exists-p filename))
+ (error "File %s no longer exists!" filename))
+ ;; Certain files should be reverted automatically
+ ;; if they have changed on disk and not in the buffer.
+ ((and (not (buffer-modified-p buf))
+ (dolist (rx revert-without-query nil)
+ (when (string-match rx filename)
+ (return t))))
+ (with-current-buffer buf
+ (message "Reverting file %s..." filename)
+ (revert-buffer t t)
+ (message "Reverting file %s... done" filename)))
+ ((yes-or-no-p
+ (if (string= (file-name-nondirectory filename)
+ (buffer-name buf))
+ (format
+ (if (buffer-modified-p buf)
+ (gettext "File %s changed on disk. Discard your edits? ")
+ (gettext "File %s changed on disk. Reread from disk? "))
+ (file-name-nondirectory filename))
+ (format
+ (if (buffer-modified-p buf)
+ (gettext "File %s changed on disk. Discard your edits in %s? ")
+ (gettext "File %s changed on disk. Reread from disk into %s? "))
+ (file-name-nondirectory filename)
+ (buffer-name buf))))
+ (with-current-buffer buf
+ (revert-buffer t t)))))
+ (when (not (eq rawfile (not (null find-file-literally))))
+ (with-current-buffer buf
+ (if (buffer-modified-p)
+ (if (y-or-n-p (if rawfile
+ "Save file and revisit literally? "
+ "Save file and revisit non-literally? "))
+ (progn
+ (save-buffer)
+ (find-file-noselect-1 buf filename nowarn
+ rawfile truename number))
+ (if (y-or-n-p (if rawfile
+ "Discard your edits and revisit file literally? "
+ "Discard your edits and revisit file non-literally? "))
+ (find-file-noselect-1 buf filename nowarn
+ rawfile truename number)
+ (error (if rawfile "File already visited non-literally"
+ "File already visited literally"))))
+ (if (y-or-n-p (if rawfile
+ "Revisit file literally? "
+ "Revisit file non-literally? "))
+ (find-file-noselect-1 buf filename nowarn
+ rawfile truename number)
+ (error (if rawfile "File already visited non-literally"
+ "File already visited literally"))))))
+ ;; Return the buffer we are using.
+ buf)
+ ;; Create a new buffer.
+ (setq buf (create-file-buffer filename))
+ ;; Catch various signals, such as QUIT, and kill the buffer
+ ;; in that case.
+ (condition-case data
+ (progn
+ (set-buffer-major-mode buf)
+ ;; find-file-noselect-1 may use a different buffer.
+ (find-file-noselect-1 buf filename nowarn
+ rawfile truename number))
+ (t
+ (kill-buffer buf)
+ (signal (car data) (cdr data)))))))))))
+
+(defun find-file-noselect-1 (buf filename nowarn rawfile truename number)
+ (let ((inhibit-read-only t)
+ error)
+ (with-current-buffer buf
+ (kill-local-variable 'find-file-literally)
+ ;; Needed in case we are re-visiting the file with a different
+ ;; text representation.
+ (kill-local-variable 'buffer-file-coding-system)
+ (erase-buffer)
+; (and (default-value 'enable-multibyte-characters)
+; (not rawfile)
+; (set-buffer-multibyte t))
+ (condition-case ()
+ (if rawfile
+ (insert-file-contents-literally filename t)
+ (insert-file-contents filename t))
+ (file-error
+ (when (and (file-exists-p filename)
+ (not (file-readable-p filename)))
+ (signal 'file-error (list "File is not readable" filename)))
+ (if rawfile
+ ;; Unconditionally set error
+ (setq error t)
+ (or
+ ;; Run find-file-not-found-hooks until one returns non-nil.
+ (run-hook-with-args-until-success 'find-file-not-found-hooks)
+ ;; If they fail too, set error.
+ (setq error t)))))
+ ;; Find the file's truename, and maybe use that as visited name.
+ ;; automatically computed in XEmacs, unless jka-compr was used!
+ (unless buffer-file-truename
+ (setq buffer-file-truename truename))
+ (setq buffer-file-number number)
+ (and find-file-use-truenames
+ ;; This should be in C. Put pathname
+ ;; abbreviations that have been explicitly
+ ;; requested back into the pathname. Most
+ ;; importantly, strip out automounter /tmp_mnt
+ ;; directories so that auto-save will work
+ (setq buffer-file-name (abbreviate-file-name buffer-file-name)))
+ ;; Set buffer's default directory to that of the file.
+ (setq default-directory (file-name-directory buffer-file-name))
+ ;; Turn off backup files for certain file names. Since
+ ;; this is a permanent local, the major mode won't eliminate it.
+ (and (not (funcall backup-enable-predicate buffer-file-name))
+ (progn
+ (make-local-variable 'backup-inhibited)
+ (setq backup-inhibited t)))
+ (if rawfile
+ (progn
+ (setq buffer-file-coding-system 'no-conversion)
+ (make-local-variable 'find-file-literally)
+ (setq find-file-literally t))
+ (after-find-file error (not nowarn))
+ (setq buf (current-buffer)))
+ (current-buffer))))
+
+(defun insert-file-literally (filename)
+ "Insert contents of file FILENAME into buffer after point with no conversion.
+
+This function is meant for the user to run interactively.
+Don't call it from programs! Use `insert-file-contents-literally' instead.
+\(Its calling sequence is different; see its documentation)."
+ (interactive "*fInsert file literally: ")
+ (if (file-directory-p filename)
+ (signal 'file-error (list "Opening input file" "file is a directory"
+ filename)))
+ (let ((tem (insert-file-contents-literally filename)))
+ (push-mark (+ (point) (car (cdr tem))))))
+
+(defvar find-file-literally nil
+ "Non-nil if this buffer was made by `find-file-literally' or equivalent.
+This is a permanent local.")
+(put 'find-file-literally 'permanent-local t)
+
+(defun find-file-literally (filename)
+ "Visit file FILENAME with no conversion of any kind.
+Format conversion and character code conversion are both disabled,
+and multibyte characters are disabled in the resulting buffer.
+The major mode used is Fundamental mode regardless of the file name,
+and local variable specifications in the file are ignored.
+Automatic uncompression and adding a newline at the end of the
+file due to `require-final-newline' is also disabled.
+
+You cannot absolutely rely on this function to result in
+visiting the file literally. If Emacs already has a buffer
+which is visiting the file, you get the existing buffer,
+regardless of whether it was created literally or not.
+
+In a Lisp program, if you want to be sure of accessing a file's
+contents literally, you should create a temporary buffer and then read
+the file contents into it using `insert-file-contents-literally'."
+ (interactive "FFind file literally: ")
+ (switch-to-buffer (find-file-noselect filename nil t)))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+\f
(defvar after-find-file-from-revert-buffer nil)
(defun after-find-file (&optional error warn noauto
:type 'string
:group 'dired)
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defun file-expand-wildcards (pattern &optional full)
+ "Expand wildcard pattern PATTERN.
+This returns a list of file names which match the pattern.
+
+If PATTERN is written as an absolute relative file name,
+the values are absolute also.
+
+If PATTERN is written as a relative file name, it is interpreted
+relative to the current default directory, `default-directory'.
+The file names returned are normally also relative to the current
+default directory. However, if FULL is non-nil, they are absolute."
+ (let* ((nondir (file-name-nondirectory pattern))
+ (dirpart (file-name-directory pattern))
+ ;; A list of all dirs that DIRPART specifies.
+ ;; This can be more than one dir
+ ;; if DIRPART contains wildcards.
+ (dirs (if (and dirpart (string-match "[[*?]" dirpart))
+ (mapcar 'file-name-as-directory
+ (file-expand-wildcards (directory-file-name dirpart)))
+ (list dirpart)))
+ contents)
+ (while dirs
+ (when (or (null (car dirs)) ; Possible if DIRPART is not wild.
+ (file-directory-p (directory-file-name (car dirs))))
+ (let ((this-dir-contents
+ ;; Filter out "." and ".."
+ (nset-difference (directory-files (or (car dirs) ".") full
+ (wildcard-to-regexp nondir))
+ '("." "..") :test #'equal)))
+ (setq contents
+ (nconc
+ (if (and (car dirs) (not full))
+ (mapcar (function (lambda (name) (concat (car dirs) name)))
+ this-dir-contents)
+ this-dir-contents)
+ contents))))
+ (setq dirs (cdr dirs)))
+ contents))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+
(defun list-directory (dirname &optional verbose)
"Display a list of files in or matching DIRNAME, a la `ls'.
DIRNAME is globbed by the shell if necessary.
(let ((wildcard (not (file-directory-p dirname))))
(insert-directory dirname switches wildcard (not wildcard)))))))
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defun shell-quote-wildcard-pattern (pattern)
+ "Quote characters special to the shell in PATTERN, leave wildcards alone.
+
+PATTERN is assumed to represent a file-name wildcard suitable for the
+underlying filesystem. For Unix and GNU/Linux, the characters from the
+set [ \\t\\n;<>&|()#$] are quoted with a backslash; for DOS/Windows, all
+the parts of the pattern which don't include wildcard characters are
+quoted with double quotes.
+Existing quote characters in PATTERN are left alone, so you can pass
+PATTERN that already quotes some of the special characters."
+ (save-match-data
+ (cond
+ ((memq system-type '(ms-dos windows-nt))
+ ;; DOS/Windows don't allow `"' in file names. So if the
+ ;; argument has quotes, we can safely assume it is already
+ ;; quoted by the caller.
+ (if (or (string-match "[\"]" pattern)
+ ;; We quote [&()#$'] in case their shell is a port of a
+ ;; Unixy shell. We quote [,=+] because stock DOS and
+ ;; Windows shells require that in some cases, such as
+ ;; passing arguments to batch files that use positional
+ ;; arguments like %1.
+ (not (string-match "[ \t;&()#$',=+]" pattern)))
+ pattern
+ (let ((result "\"")
+ (beg 0)
+ end)
+ (while (string-match "[*?]+" pattern beg)
+ (setq end (match-beginning 0)
+ result (concat result (substring pattern beg end)
+ "\""
+ (substring pattern end (match-end 0))
+ "\"")
+ beg (match-end 0)))
+ (concat result (substring pattern beg) "\""))))
+ (t
+ (let ((beg 0))
+ (while (string-match "[ \t\n;<>&|()#$]" pattern beg)
+ (setq pattern
+ (concat (substring pattern 0 (match-beginning 0))
+ "\\"
+ (substring pattern (match-beginning 0)))
+ beg (1+ (match-end 0)))))
+ pattern))))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+
(defvar insert-directory-program "ls"
"Absolute or relative name of the `ls' program used by `insert-directory'.")
("US (Main XEmacs Site)"
"ftp.xemacs.org" "pub/xemacs/packages" "ftp")
;; In alphabetical order of Country, our mirrors...
+ ;; Timing out
("Belgium (be.xemacs.org)"
"ftp.be.xemacs.org" "xemacs/packages" "ftp")
("Canada (ca.xemacs.org)"
"ftp.dk.xemacs.org" "xemacs/packages" "ftp")
("France (fr.xemacs.org)"
"ftp.fr.xemacs.org" "pub/xemacs/packages" "ftp")
+ ;; Temporary errors?
("France (mirror.cict.fr)"
"mirror.cict.fr" "xemacs/packages" "ftp")
("France (pasteur.fr)"
"ftp.pasteur.fr" "pub/computing/xemacs/packages" "ftp")
+ ;; Very outdated, experimental not updated since 2013
("Germany (de.xemacs.org)"
"ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/packages" "ftp")
+ ;; Timing out
("Greece (gr.xemacs.org)"
"ftp.gr.xemacs.org" "mirrors/XEmacs/ftp/packages" "ftp")
("Ireland (heanet.ie)"
"ftp.heanet.ie" "mirrors/ftp.xemacs.org/packages" "ftp")
+ ;; Timing out
("Italy (it.xemacs.org)"
"ftp.it.xemacs.org" "unix/packages/XEMACS/packages" "ftp")
+ ;; Timing out
("Japan (dti.ad.jp)"
"ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages" "ftp")
("Norway (no.xemacs.org)"
"ftp.no.xemacs.org" "pub/xemacs/packages" "ftp")
("Portugal (pt.xemacs.org)"
"ftp.pt.xemacs.org" "pub/MIRRORS/ftp.xemacs.org/packages" "ftp")
+ ;; Timing out
+ ("Russia (ru.xemacs.org)"
+ "ftp.ru.xemacs.org" "pub/emacs/xemacs/packages" "ftp")
("Saudi Arabia (sa.xemacs.org)"
"ftp.sa.xemacs.org" "pub/xemacs.org/packages" "ftp")
("Sweden (se.xemacs.org)"
host-name directory url-scheme))
:group 'package-get)
-;;; Dead Sites (normal release)
- ; Unknown host
- ;("Argentina (xmundo.net)" "xemacs.xmundo.net" "pub/mirrors/xemacs/packages")
- ; No longer carries XEmacs releases or packages
- ;("Australia (aarnet.edu.au)" "mirror.aarnet.edu.au" "pub/xemacs/packages")
- ; Unknown host
- ;("Australia (au.xemacs.org)" "ftp.au.xemacs.org" "pub/xemacs/packages")
- ; No longer carries XEmacs releases or packages
- ;("Austria (at.xemacs.org)" "ftp.at.xemacs.org" "editors/xemacs/packages")
- ; No longer carries XEmacs releases or packages
- ;("Brazil (br.xemacs.org)" "ftp.br.xemacs.org" "pub/xemacs/packages")
- ; Connection problems, can't list in either passive or not
- ;("Canada (nrc.ca)" "ftp.nrc.ca" "pub/packages/editors/xemacs/packages")
- ;; no anonymous ftp available, uncomment when updating website
- ;; with
- ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-; ("Chile (cl.xemacs.org)" "ftp.cl.xemacs.org" "packages")
- ; Unknown host
- ;("China (ftp.cn.xemacs.org)" "ftp.cn.xemacs.org" "pub/xemacs/packages")
- ; XEmacs directory exists, but is empty
- ;("Czech Republic (cz.xemacs.org)" "ftp.cz.xemacs.org" "MIRRORS/ftp.xemacs.org/pub/xemacs/packages")
- ; Exists, but is 3 years out of date
- ;("Finland (fi.xemacs.org)" "ftp.fi.xemacs.org" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages")
- ; Site exists, but has no content
- ;("Hong Kong (hk.xemacs.org)" "ftp.hk.xemacs.org" "pub/xemacsftp/packages")
- ; Can't connect, times out.
- ;("Ireland (ie.xemacs.org)" "ftp.ie.xemacs.org" "mirrors/ftp.xemacs.org/pub/xemacs/packages")
-; ("Japan (jaist.ac.jp)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages")
- ; Unknown host
- ;("Japan (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/text/xemacs/packages")
-; ("Japan (nucba.ac.jp)" "mirror.nucba.ac.jp" "mirror/xemacs/packages")
- ; Can't connect, times out.
- ;("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" "pub/tools/emacs/xemacs/packages")
- ; No anonymous ftp available
- ;("Netherlands (nl.xemacs.org)" "ftp.nl.xemacs.org" "pub/xemacs/ftp/packages")
- ;; no anonymous ftp available, uncomment when updating website
- ;; with
- ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-; ("Netherlands (xemacsftp.digimirror.nl)" "xemacsftp.digimirror.nl" "packages")
- ; Times out
- ;("Russia (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/emacs/xemacs/packages")
- ; Unknown host
- ;("US (us.xemacs.org)" "ftp.us.xemacs.org" "pub/mirrors/xemacs/packages")
-
;;;###autoload
(defcustom package-get-pre-release-download-sites
`(,@(when package-get-have-curl
("US Pre-Releases (Main XEmacs Site)" "ftp.xemacs.org"
"pub/xemacs/beta/experimental/packages" "ftp")
;; In alphabetical order of Country, our mirrors...
+ ;; Timing out
("Belgium Pre-Releases (be.xemacs.org)" "ftp.be.xemacs.org"
"xemacs/beta/experimental/packages" "ftp")
("Canada Pre-Releases (ca.xemacs.org)" "ftp.ca.xemacs.org"
"xemacs/beta/experimental/packages" "ftp")
("France Pre-Releases (pasteur.fr)" "ftp.pasteur.fr"
"pub/computing/xemacs/beta/experimental/packages" "ftp")
+ ;; Very outdated, experimental not updated since 2013
("Germany Pre-Releases (de.xemacs.org)" "ftp.de.xemacs.org"
"pub/ftp.xemacs.org/tux/xemacs/beta/experimental/packages" "ftp")
+ ;; Timing out
("Greece Pre-Releases (gr.xemacs.org)" "ftp.gr.xemacs.org"
"mirrors/XEmacs/ftp/beta/experimental/packages" "ftp")
("Ireland Pre-Releases (heanet.ie)" "ftp.heanet.ie"
"mirrors/ftp.xemacs.org/beta/experimental/packages" "ftp")
+ ;; Timing out
("Italy Pre-Releases (it.xemacs.org)" "ftp.it.xemacs.org"
"unix/packages/XEMACS/beta/experimental/packages" "ftp")
; Was out of date as at 2013-04-12. Hopefully not a sign they are
; no longer updating.
+ ;; Timing out
("Japan Pre-Releases (dti.ad.jp)" "ftp.dti.ad.jp"
"pub/unix/editor/xemacs/beta/experimental/packages" "ftp")
("Norway Pre-Releases (no.xemacs.org)" "ftp.no.xemacs.org"
host-name directory url-scheme))
:group 'package-get)
-;;; Dead sites (pre-release)
- ; Unknown host
- ;("Argentina Pre-Releases (xmundo.net)" "xemacs.xmundo.net"
- ; "pub/mirrors/xemacs/beta/experimental/packages")
- ; No longer carries XEmacs releases or packages
- ;("Australia Pre-Releases (aarnet.edu.au)" "mirror.aarnet.edu.au"
- ; "pub/xemacs/beta/experimental/packages")
- ; Unknown host
- ;("Australia Pre-Releases (au.xemacs.org)" "ftp.au.xemacs.org"
- ; "pub/xemacs/beta/experimental/packages")
- ; No longer carries XEmacs releases or packages
- ;("Austria Pre-Releases (at.xemacs.org)" "ftp.at.xemacs.org"
- ; "editors/xemacs/beta/experimental/packages")
- ; No longer carries XEmacs releases or packages
- ;("Brazil Pre-Releases (br.xemacs.org)" "ftp.br.xemacs.org"
- ; "pub/xemacs/xemacs-21.5/experimental/packages")
- ; Connection problems, can't list in either passive or not
- ;("Canada Pre-Releases (nrc.ca)" "ftp.nrc.ca"
- ; "pub/packages/editors/xemacs/beta/experimental/packages")
- ;; no anonymous ftp available, uncomment when updating website
- ;; with
- ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-; ("Chile Pre-Releases (cl.xemacs.org)" "ftp.cl.xemacs.org"
-; "beta/experimental/packages")
- ; Unknown host
- ;("China Pre-Releases (ftp.cn.xemacs.org)" "ftp.cn.xemacs.org"
- ; "pub/xemacs/beta/experimental/packages")
- ; XEmacs directory exists, but is empty
- ;("Czech Republic Pre-Releases (cz.xemacs.org)" "ftp.cz.xemacs.org"
- ; "MIRRORS/ftp.xemacs.org/pub/xemacs/xemacs-21.5/experimental/packages")
- ; Exists, but is 3 years out of date
- ;("Finland Pre-Releases (fi.xemacs.org)" "ftp.fi.xemacs.org"
- ; "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/beta/experimental/packages")
- ; Site exists, but has no content
- ;("Hong Kong Pre-Releases (hk.xemacs.org)" "ftp.hk.xemacs.org"
- ; "pub/xemacsftp/beta/experimental/packages")
- ; Can't connect, times out.
- ;("Ireland Pre-Releases (ie.xemacs.org)" "ftp.ie.xemacs.org"
- ; "mirrors/ftp.xemacs.org/pub/xemacs/beta/experimental/packages")
-; ("Japan Pre-Releases (jaist.ac.jp)" "ftp.jaist.ac.jp"
-; "pub/GNU/xemacs/beta/experimental/packages")
- ; Unknown host
- ;("Japan Pre-Releases (jp.xemacs.org)" "ftp.jp.xemacs.org"
- ; "pub/text/xemacs/beta/experimental/packages")
- ; Can't connect, times out.
- ;("Korea Pre-Releases (kr.xemacs.org)" "ftp.kr.xemacs.org"
- ; "pub/tools/emacs/xemacs/beta/experimental/packages")
- ; No anonymous ftp available
- ;("Netherlands Pre-Releases (nl.xemacs.org)" "ftp.nl.xemacs.org"
- ; "pub/xemacs/ftp/beta/experimental/packages")
- ;; no anonymous ftp available, uncomment when updating website
- ;; with
- ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-; ("Netherlands Pre-Releases (xemacsftp.digimirror.nl)" "xemacsftp.digimirror.nl"
-; "beta/experimental/packages")
- ; Times out
- ;("Russia Pre-Releases (ru.xemacs.org)" "ftp.ru.xemacs.org"
- ; "pub/emacs/xemacs/beta/experimental/packages")
- ; Unknown host
- ;("US Pre-Releases (us.xemacs.org)" "ftp.us.xemacs.org"
- ; "pub/mirrors/xemacs/beta/experimental/packages")
-
-
;;;###autoload
(defcustom package-get-site-release-download-sites nil
"*List of remote sites available for downloading \"Site Release\" packages.
(intern (substring (symbol-name pkg) 0 (match-beginning 0))))
t)))
-;; This is obsolete now that #'package-get can use #'curl:download
-;;(defun pui-bootstrap ()
-;; "Bootstrap the SXEmacs Package Tools.
-
-;;The Package Tools, under normal circumstances, cannot work until a
-;;couple of packages are pre-installed by hand. This function eliminates
-;;the need to do that. It uses FFI and libcurl to download and install
-;;the lastest package index file, the EFS and xemacs-base packages.
-
-;;Obviously you can't use this if you didn't enable FFI support in your
-;;SXEmacs or if you don't have libffi on your system.
-
-;;This isn't designed to replace the existing Package Tools so after
-;;you have run `pui-bootstrap' once you should then use the normal PUI
-;;tools, `pui-list-packages' etc."
-;; (interactive)
-;; ;; A little sanity checking never hurt anybody
-;; (when (featurep '(and efs-autoloads xemacs-base-autoloads))
-;; (error 'invalid-operation "PUI doesn't need bootstrapping"))
-;; (when (and (fboundp 'ffi-defun)
-;; (not (featurep '(and ffi ffi-curl))))
-;; (require 'ffi-curl))
-;; (unless (featurep 'ffi)
-;; (error 'unimplemented "FFI"))
-;; ;; One last check... has `package-get-remote' been set?
-;; (if (not (cdr package-get-remote))
-;; (when (y-or-n-p "You haven't set a download site, do you need help ")
-;; (declare-fboundp (Info-goto-node "(sxemacs)Bootstrapping PUI")))
-;; ;; We should be good to go
-;; (let* ((site (car package-get-remote))
-;; (dir (cadr package-get-remote))
-;; (scheme (third package-get-remote))
-;; (url (concat scheme "://" site "/" dir "/"))
-;; (dldir (temp-directory))
-;; (index (expand-file-name package-get-base-filename
-;; package-get-package-index-file-location))
-;; xemacs-base-pkg
-;; efs-pkg
-;; ;status)
-;; )
-;; ;; Grab the index
-;; (message "Retrieving index, please be patient")
-;; (declare-fboundp (curl:download (concat url package-get-base-filename) index))
-;; (message "Retrieving index, done!")
-;; ;; Update the db
-;; (set-buffer (find-file-noselect index))
-;; (package-get-update-base-from-buffer)
-;; (kill-buffer (current-buffer))
-;; ;; Get xemacs-base, EFS
-;; (setq xemacs-base-pkg (package-get-info 'xemacs-base 'filename))
-;; (setq efs-pkg (package-get-info 'efs 'filename))
-;; (message "Retrieving %s, please be patient" xemacs-base-pkg)
-;; (declare-fboundp (curl:download (concat url xemacs-base-pkg)
-;; (expand-file-name xemacs-base-pkg dldir)))
-;; (message "Retrieving %s, please be patient" efs-pkg)
-;; (declare-fboundp (curl:download (concat url efs-pkg)
-;; (expand-file-name efs-pkg dldir)))
-;; (message "Download complete.")
-;; ;; Install xemacs-base
-;; (if (equal (package-get-info 'xemacs-base 'md5sum)
-;; (with-temp-buffer
-;; (insert-file-contents-literally
-;; (expand-file-name xemacs-base-pkg dldir))
-;; (md5 (current-buffer))))
-;; (progn
-;; (package-admin-add-binary-package
-;; (expand-file-name xemacs-base-pkg dldir)
-;; (package-admin-get-install-dir 'xemacs-base))
-;; (push (file-name-as-directory
-;; (expand-file-name "lisp/xemacs-base"
-;; (package-admin-get-install-dir 'xemacs-base)))
-;; load-path)
-;; (load-file (expand-file-name "lisp/xemacs-base/_pkg.el"
-;; (package-admin-get-install-dir 'xemacs-base)))
-;; (load-file (expand-file-name "lisp/xemacs-base/auto-autoloads.el"
-;; (package-admin-get-install-dir 'xemacs-base)))
-;; (message "xemacs-base package installed"))
-;; (delete-file (expand-file-name xemacs-base-pkg dldir))
-;; (error "MD5 mismatch, %s deleted" (expand-file-name xemacs-base-pkg dldir)))
-;; ;; Install EFS
-;; (if (equal (package-get-info 'efs 'md5sum)
-;; (with-temp-buffer
-;; (insert-file-contents-literally
-;; (expand-file-name efs-pkg dldir))
-;; (md5 (current-buffer))))
-;; (progn
-;; (package-admin-add-binary-package
-;; (expand-file-name efs-pkg dldir)
-;; (package-admin-get-install-dir 'efs))
-;; (push (file-name-as-directory
-;; (expand-file-name "lisp/efs"
-;; (package-admin-get-install-dir 'efs)))
-;; load-path)
-;; (load-file (expand-file-name "lisp/efs/_pkg.el"
-;; (package-admin-get-install-dir 'efs)))
-;; (load-file (expand-file-name "lisp/efs/auto-autoloads.el"
-;; (package-admin-get-install-dir 'efs)))
-;; (message "efs package installed"))
-;; (delete-file (expand-file-name efs-pkg dldir))
-;; (error "MD5 mismatch, %s deleted" (expand-file-name efs-pkg dldir)))
-;; (when (y-or-n-p "Install more packages? ")
-;; (declare-fboundp (pui-list-packages))))))
-
(provide 'package-get)
;; On-load forms
When SXEmacs searches for a file in the load path, it will ignore FILE
if FORM evaluates to non-nil."
(setq load-suppress-alist
- (acons (expand-file-name file (file-dirname load-file-name)) form
+ (acons (expand-file-name file
+ (file-dirname (expand-file-name load-file-name)))
+ form
load-suppress-alist)))
(defun package-require (name version)
;;; Load user's init file and default ones.
(defun load-init-file ()
+
+ (require 'const-aliases)
+
(run-hooks 'before-init-hook)
;; Run the site-start library if it exists. The point of this file is
syntax-error
invalid-read-syntax
invalid-regexp
+ scan-error
structure-formation-error
list-formation-error
malformed-list
SXEmacs generates the documentation during the build process.])
exit 1
fi
+ SXE_MSG_CHECKING([makeinfo version])
+ makeinfo_ver=`eval "$MAKEINFO" --version 2> /dev/null | head -n 1`
+ SXE_MSG_RESULT([${makeinfo_ver}])
+ AC_DEFINE_UNQUOTED(MAKEINFO_VERSION, "${makeinfo_ver}",
+ [the makeinfo command version])
+ case `echo "$makeinfo_ver" | $SED -e 's/^.* \([[0-9.]]*\).*/\1/'` in
+ [[1234]].*)
+ AC_MSG_ERROR([
+Your makeinfo program is too old. Please install 5.x or later.])
+ exit 1
+ ;;
+ esac
AC_SUBST(MAKEINFO)
+ AC_SUBST(MAKEINFO_VERSION)
])dnl SXE_PROG_MAKEINFO
SXE_MSG_CHECKING([if bison is recent enough])
sxe_cv_feat_bison_version="$(${BISON} --version | head -n1)"
case "$sxe_cv_feat_bison_version" in
- *\ 1.875 | *\ 2.*)
+ *\ 2.7* | *\ 3.*)
;;
*)
have_bison="no"
AC_CHECK_HEADERS([lzma.h])
- SXE_PC_CHECK_VERSION_ATLEAST([lzma], [4.999])
- SXE_PC_CHECK_CPPFLAGS([lzma])
- SXE_PC_CHECK_LDFLAGS([lzma])
- SXE_PC_CHECK_LIBS([lzma])
+ SXE_PC_CHECK_EXISTS([lzma])
+ if test "$sxe_cv_pc_lzma_exists" = "yes"; then
+ SXE_PC_CHECK_VERSION_ATLEAST([lzma], [4.999])
+ SXE_PC_CHECK_CPPFLAGS([lzma])
+ SXE_PC_CHECK_LDFLAGS([lzma])
+ SXE_PC_CHECK_LIBS([lzma])
+ else
+ SXE_PC_CHECK_EXISTS([liblzma])
+ sxe_cv_pc_lzma_exists="$sxe_cv_pc_liblzma_exists"
+
+ if test "$sxe_cv_pc_liblzma_exists" = "yes"; then
+ SXE_PC_CHECK_VERSION_ATLEAST([liblzma], [4.999])
+ sxe_cv_pc_lzma_recent_enough_p="$sxe_cv_pc_liblzma_recent_enough_p"
+ SXE_PC_CHECK_CPPFLAGS([liblzma])
+ SXE_PC_CHECK_LDFLAGS([liblzma])
+ SXE_PC_CHECK_LIBS([liblzma])
+
+ LZMA_CPPFLAGS=$LIBLZMA_CPPFLAGS
+ LZMA_LDFLAGS=$LIBLZMA_LDFLAGS
+ LZMA_LIBS=$LIBLZMA_LIBS
+
+ AC_SUBST([LZMA_CPPFLAGS])
+ AC_SUBST([LZMA_LDFLAGS])
+ AC_SUBST([LZMA_LIBS])
+ fi
+ fi
SXE_MSG_CHECKING([for lzma support])
if test "$ac_cv_header_lzma_h" = "yes" -a \
else
sxe_cv_feat_lzma="no"
fi
- SXE_MSG_RESULT([$sxe_cv_feat_lzma])
- AC_SUBST([LZMA_CPPFLAGS])
- AC_SUBST([LZMA_LDFLAGS])
- AC_SUBST([LZMA_LIBS])
+ SXE_MSG_RESULT([$sxe_cv_feat_lzma])
AM_CONDITIONAL([HAVE_LZMA], [test "$sxe_cv_feat_lzma" = "yes"])
AC_MSG_RESULT([$OPENSSL_VERSION])
AC_MSG_CHECKING([whether OpenSSL version is recent enough])
- ## we allow 0.9.7e-?, 0.9.8* and 0.9.9*
- allowed_versions="0.9.7[e-z] 0.9.8* 0.9.9* 1.0.0*"
+ ## we allow 0.9.8z*, 1.0.0[n-z]* 1.0.1[mz]* 1.0.2*
+ ## As vulnerabilities are uncovered we should update this
+ allowed_versions="0.9.8z 1.0.0[[n-z]] 1.0.1[[m-z]] 1.0.2[[d-z]]"
OPENSSL_SANE_P=no
for ver in $allowed_versions; do
if echo "$OPENSSL_VERSION" | ${GREP-grep} -q "$ver"; then
SXE_APPEND_UNDUP([$OPENSSL_LDFLAGS], [LDFLAGS])
## check again
+ SXE_CHECK_HEADERS([openssl/opensslconf.h])
+ SXE_CHECK_HEADERS([openssl/evp.h])
+ SXE_CHECK_HEADERS([openssl/rand.h openssl/hmac.h])
+ SXE_CHECK_HEADERS([openssl/rsa.h openssl/dsa.h])
+ SXE_CHECK_HEADERS([openssl/ec.h openssl/ecdh.h])
+ SXE_CHECK_HEADERS([openssl/ecdsa.h openssl/dh.h])
SXE_CHECK_HEADERS([openssl/crypto.h])
SXE_CHECK_HEADERS([openssl/x509.h openssl/pem.h])
SXE_CHECK_HEADERS([openssl/ssl.h openssl/bio.h])
dnl Look for these standard header file locations
OPENSSL_LIBS="-lssl -lcrypto"
+ SXE_CHECK_HEADERS([openssl/opensslconf.h])
+ SXE_CHECK_HEADERS([openssl/evp.h])
+ SXE_CHECK_HEADERS([openssl/rand.h openssl/hmac.h])
+ SXE_CHECK_HEADERS([openssl/rsa.h openssl/dsa.h])
+ SXE_CHECK_HEADERS([openssl/ec.h openssl/ecdh.h])
+ SXE_CHECK_HEADERS([openssl/ecdsa.h openssl/dh.h])
SXE_CHECK_HEADERS([openssl/crypto.h])
SXE_CHECK_HEADERS([openssl/x509.h openssl/pem.h])
SXE_CHECK_HEADERS([openssl/ssl.h openssl/bio.h])
AC_DEFINE([OPENSSL_NO_DH], [1], [Description here!])
fi
+ AC_CHECK_TYPES([SSL], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+ ])
+ AC_CHECK_TYPES([SSL_METHOD], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+ ])
+ AC_CHECK_TYPES([SSL_CTX], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+ ])
+ AC_CHECK_TYPES([BIO], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+#if defined HAVE_OPENSSL_BIO_H
+# include <openssl/bio.h>
+#endif
+ ])
+ AC_CHECK_TYPES([X509], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+#if defined HAVE_OPENSSL_X509_H
+# include <openssl/x509.h>
+#endif
+ ])
+ AC_CHECK_TYPES([EVP_PKEY], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_EVP_H
+# include <openssl/evp.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+#if defined HAVE_OPENSSL_X509_H
+# include <openssl/x509.h>
+#endif
+ ])
dnl check for libssl support
AC_CHECK_LIB([ssl], [SSL_new], [openssl_ssl=yes], [openssl_ssl=no])
- if test "$openssl_ssl" = "yes"; then
- AC_DEFINE([OPENSSL_SSL], [1], [Description here!])
+ AC_MSG_CHECKING([for openssl types sufficent])
+ if test "x$ac_cv_type_EVP_PKEY" = xyes -a \
+ "x$ac_cv_type_X509" = xyes -a \
+ "x$ac_cv_type_BIO" = xyes -a \
+ "x$ac_cv_type_SSL" = xyes -a \
+ "x$ac_cv_type_SSL_METHOD" = xyes -a \
+ "x$ac_cv_type_SSL_CTX" = xyes; then
+ AC_MSG_RESULT([yes])
+ if test "$openssl_ssl" = "yes"; then
+ AC_DEFINE([OPENSSL_SSL], [1], [Description here!])
+ fi
+ else
+ have_openssl=no
+ AC_MSG_RESULT([no])
fi
])dnl SXE_CHECK_OPENSSL_FEATURES
sxe_cv_feat_ffi="no"
MM_FAIL
else
- FFI_CPPFLAGS=$($PKG_CONFIG --cflags libffi)
- FFI_LIBS=$($PKG_CONFIG --libs libffi)
+ SXE_CHECK_HEADERS([ffi.h])
+ SXE_PC_CHECK_EXISTS([libffi])
+ SXE_PC_CHECK_VERSION([libffi])
+ SXE_PC_CHECK_CPPFLAGS([libffi])
+ SXE_PC_CHECK_LDFLAGS([libffi])
+ SXE_PC_CHECK_LIBS([libffi])
SXE_DUMP_LIBS
CPPFLAGS="$CPPFLAGS $FFI_CPPFLAGS"
- SXE_CHECK_HEADERS([ffi.h])
if test "$ac_cv_header_ffi_h" = "yes"; then
AC_CHECK_LIB([ffi], [ffi_call], [dnl
sxe_cv_feat_ffi="yes"
#define FOLLOW_FREE_STRATEGY 1
#define FOLLOW_REALLOC_STRATEGY 1
+#define FOLLOW_DOUBLE_CALL_STRATEGY 1
int owner_of_object_returned_by_realpath()
{
char p[8] = "/bin/sh\000";
r = (void*)realpath(p, NULL);
+#if FOLLOW_DOUBLE_CALL_STRATEGY
+ {
+ char p[8] = "/bin/cp\000";
+
+ if (r == (void*)realpath(p, NULL)) {
+ /* System owns when 2 calls yield same pointer */
+ return 1;
+ }
+ }
+#endif
#if FOLLOW_REALLOC_STRATEGY
/* reallocation would help already */
r = realloc(r, 4096);
fi
])dnl SXE_CHECK_DIRNAME
-AC_DEFUN([_SXE_CHECK_DIRNAME_SIDE_EFFECT], [dnl
- ## defines sxe_func_dirname_side_effect
- ## and DIRNAME_SIDE_EFFECT
- pushdef([resvar], [sxe_func_dirname_side_effect])
-
- AC_MSG_CHECKING([whether dirname modifies its argument by side-effect])
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#ifdef HAVE_LIBGEN_H
-# include <libgen.h>
-#endif
-
-int dirname_modifies_argument()
-{
- char p[11] = "somefile\000";
- dirname(p);
- return ((p[0] == '.' && p[1] == '\0') == 0);
-}
-
-int main()
-{
- return dirname_modifies_argument();
-}
- ]])],
- resvar[=yes],
- resvar[=no],
- resvar[=no])
- AC_MSG_RESULT([$]resvar)
-
- if test "$[]resvar[]" = "yes"; then
- AC_DEFINE([DIRNAME_SIDE_EFFECT], [1],
- [Whether dirname() operates by side effect])
- fi
-
- popdef([resvar])
-])dnl _SXE_CHECK_DIRNAME_SIDE_EFFECT
-
AC_DEFUN([_SXE_CHECK_DIRNAME_RETVAL], [dnl
## arg #1 is the return type, char* by default
## arg #2 is the final test,
popdef([rettest])
])dnl _SXE_CHECK_DIRNAME_RETVAL
-AC_DEFUN([_SXE_CHECK_DIRNAME_RETVAL_OWNER], [dnl
- ## defines sxe_func_dirname_retval_owner,
- ## values are either "sys" or "user"
- pushdef([resvar], [sxe_func_dirname_retval_owner])
-
- malloc_check=${MALLOC_CHECK_}
- ## Turn off the stupid glibc 2.5 stack trace check. We *know* we may
- ## do something bad here :-)
- MALLOC_CHECK_=0
- export MALLOC_CHECK_
- ## this test is especially critical, because some systems do not
- ## allocate memory for the user when the return value is "."
- ## instead they point to a static const char somewhere in their
- ## guts which, of course, must not be furtherly modified, free'd or
- ## anything ... took me fucking ages to find out what's going on
- ## so let's drink to the morons responsible for THAT!
- AC_MSG_CHECKING([to whom belongs the object returned by dirname])
- if test "$opsys" = "darwin" ; then
- resvar=sys
- else
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#ifdef HAVE_LIBGEN_H
-# include <libgen.h>
-#endif
-
-#define FOLLOW_FREE_STRATEGY 1
-#define FOLLOW_REALLOC_STRATEGY 1
-
-int owner_of_object_returned_by_dirname()
-{
- void *r; /* any pointer is just fine */
- char p[11] = "./somefile\000";
-
- r = (void*)dirname(p);
-#if FOLLOW_REALLOC_STRATEGY
- /* reallocation would help already */
- r = realloc(r, 4096);
-#endif
-#if FOLLOW_FREE_STRATEGY
- /* if r was ours we should be able to free it */
- free(r);
-#endif
-#if FOLLOW_FREE_STRATEGY || FOLLOW_REALLOC_STRATEGY
- return 0;
-#else
- return 1;
-#endif
-}
-
-int main()
-{
- return owner_of_object_returned_by_dirname();
-}
- ]])],
- resvar[=user],
- resvar[=sys],
- resvar[=sys])
- fi
- if test "${malloc_check}" = "" ; then
- unset MALLOC_CHECK_
- else
- MALLOC_CHECK_=${malloc_check}
- fi
- AC_MSG_RESULT([$]resvar)
-
- if test "$[]resvar[]" = "user"; then
- AC_DEFINE([DIRNAME_USER_OWNS_RETVAL], [1],
- [Whether the user space owns the retval of dirname()])
- elif test "$[]resvar[]" = "sys"; then
- AC_DEFINE([DIRNAME_SYS_OWNS_RETVAL], [1],
- [Whether the system owns the retval of dirname()])
- fi
-
- popdef([resvar])
-])dnl _SXE_CHECK_DIRNAME_RETVAL_OWNER
-
-AC_DEFUN([_SXE_CHECK_DIRNAME_ON_PROTECTED_MEMORY], [dnl
- ## defines sxe_func_dirname_accepts_protmem
- pushdef([resvar], [sxe_func_dirname_accepts_protmem])
-
- AC_MSG_CHECKING([whether dirname can operate on protected mem blocks])
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#ifdef HAVE_LIBGEN_H
-# include <libgen.h>
-#endif
-
-int dirname_can_operate_on_protected_mem_blocks()
-{
- dirname("./somefile");
- return 0;
-}
-
-int main()
-{
- return dirname_can_operate_on_protected_mem_blocks();
-}
- ]])],
- resvar[=yes],
- resvar[=no],
- resvar[=no])
- AC_MSG_RESULT([$]resvar)
-
- if test "$[]resvar[]" = "yes"; then
- AC_DEFINE([DIRNAME_ACCEPTS_PROTMEM], [1],
- [Whether dirname() accepts protected memory blocks])
- fi
-
- popdef([resvar])
-])dnl _SXE_CHECK_DIRNAME_ON_PROTECTED_MEMORY
-
AC_DEFUN([_SXE_CHECK_DIRNAME_ON_C99_RESTRICT_MEMORY], [dnl
## defines sxe_func_dirname_accepts_restrmem
pushdef([resvar], [sxe_func_dirname_accepts_restrmem])
AC_MSG_CHECKING([whether dirname can operate on C99 restrict mem blocks])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#ifdef HAVE_STDIO_H
-# inlcude <stdio.h>
+# include <stdio.h>
#endif
#ifdef HAVE_LIBGEN_H
# include <libgen.h>
AC_DEFUN([SXE_CHECK_BROKEN_DIRNAME], [dnl
## defines 3 vars, look in the sub macros to see which ones
- _SXE_CHECK_DIRNAME_SIDE_EFFECT
- _SXE_CHECK_DIRNAME_ON_PROTECTED_MEMORY
_SXE_CHECK_DIRNAME_ON_C99_RESTRICT_MEMORY
_SXE_CHECK_DIRNAME_RETVAL
- _SXE_CHECK_DIRNAME_RETVAL_OWNER
])dnl SXE_CHECK_BROKEN_DIRNAME
pushdef([ACTION_IF_NOT_FOUND], [$2])
sxe_cv_feat_ffmpeg=
- ## we can't use that one since we have to check multiple headers
-dnl _SXE_MM_CHECK_pkgconfig_based([ffmpeg], [libavformat], [49.0.0], [dnl
-dnl av_open_input_file av_close_input_file av_find_stream_info dnl
-dnl url_fopen av_probe_input_format avcodec_find_decoder dnl
-dnl avcodec_open av_read_frame av_seek_frame av_register_all dnl
-dnl avcodec_decode_audio avcodec_decode_audio2], [avformat.h],
-dnl [sxe_cv_feat_ffmpeg=yes], [sxe_cv_feat_ffmpeg=no])
-dnl Dropped in favour of sxe-pkgconfig.m4 macros
-dnl _SXE_CHECK_pkgconfig_based([ffmpeg], [libavformat], [49.0.0])
-
- SXE_PC_CHECK_VERSION_ATLEAST([libavformat], [51.0.0])
+ ## Minimum versions required matches FFmpeg stable v2.0.1
+ ## released 2013-08-13
+ SXE_PC_CHECK_VERSION_ATLEAST([libavformat], [55.12.100])
+ SXE_PC_CHECK_VERSION_ATLEAST([libavcodec], [55.18.102])
+ SXE_PC_CHECK_VERSION_ATLEAST([libavutil], [52.38.100])
SXE_CHECK_FFMPEG_HEADERS
SXE_CHECK_FFMPEG_LIBS
"$ac_cv_header_ffmpeg_avformat_h" = "yes" -o \
"$ac_cv_header_libavformat_avformat_h" = "yes"; then
sxe_cv_feat_ffmpeg_headers="yes"
+ else
+ sxe_cv_feat_ffmpeg_headers="no"
fi
- ## make sure either decode_audio or decode_audio2 is there
- if test "$ac_cv_lib_avformat_avcodec_decode_audio2" = "yes" -o \
- "$ac_cv_lib_avformat_avcodec_decode_audio" = "yes"; then
- sxe_cv_feat_ffmpeg_decoders="yes"
+
+ if test "$sxe_cv_feat_ffmpeg_headers" = "yes"; then
+ if test "$ac_cv_header_avcodec_h" = "yes" -o \
+ "$ac_cv_header_ffmpeg_avcodec_h" = "yes" -o \
+ "$ac_cv_header_libavcodec_avcodec_h" = "yes"; then
+ sxe_cv_feat_ffmpeg_headers="yes"
+ else
+ sxe_cv_feat_ffmpeg_headers="no"
+ fi
+ fi
+
+ if test "$sxe_cv_feat_ffmpeg_headers" = "yes"; then
+ if test "$ac_cv_header_ffmpeg_dict_h" = "yes" -o \
+ "$ac_cv_header_libavutil_dict_h" = "yes"; then
+ sxe_cv_feat_ffmpeg_headers="yes"
+ else
+ sxe_cv_feat_ffmpeg_headers="no"
+ fi
fi
- ## make sure we can either use av_register_protocol()
- ## or register_protocol()
- if test "$ac_cv_lib_avformat_av_register_protocol" = "yes" -o \
- "$ac_cv_lib_avformat_register_protocol" = "yes"; then
- sxe_cv_feat_ffmpeg_proto_reg="yes"
+
+ if test "$sxe_cv_feat_ffmpeg_headers" = "yes"; then
+ if test "$ac_cv_header_ffmpeg_time_h" = "yes" -o \
+ "$ac_cv_header_libavutil_time_h" = "yes"; then
+ sxe_cv_feat_ffmpeg_headers="yes"
+ else
+ sxe_cv_feat_ffmpeg_headers="no"
+ fi
fi
- ## make sure this bloody av context allocator is there
- if test "$ac_cv_lib_avformat_avformat_alloc_context" = "yes" -o \
- "$ac_cv_lib_avformat_av_alloc_format_context" = "yes"; then
- sxe_cv_feat_ffmpeg_avformat_alloc="yes"
+
+ ## make sure either decode_audio is there
+ if test "$ac_cv_lib_avcodec_avcodec_decode_audio" = "yes" -o \
+ "$ac_cv_lib_avcodec_avcodec_decode_audio2" = "yes" -o \
+ "$ac_cv_lib_avcodec_avcodec_decode_audio3" = "yes"; then
+ sxe_cv_feat_ffmpeg_decoders="yes"
fi
+
if test "$sxe_cv_feat_ffmpeg_headers" = "yes" -a \
"$sxe_cv_feat_ffmpeg_decoders" = "yes" -a \
- "$sxe_cv_feat_ffmpeg_proto_reg" = "yes" -a \
- "$sxe_cv_feat_ffmpeg_avformat_alloc" = "yes" -a \
- "$ac_cv_lib_avformat_av_close_input_file" = "yes" -a \
- "$ac_cv_lib_avformat_av_find_stream_info" = "yes" -a \
- "$ac_cv_lib_avformat_av_open_input_file" = "yes" -a \
+ "$ac_cv_lib_avformat_avformat_alloc_context" = "yes" -a \
+ "$ac_cv_lib_avformat_avformat_free_context" = "yes" -a \
+ "$ac_cv_lib_avformat_avio_alloc_context" = "yes" -a \
+ "$ac_cv_lib_avformat_avio_size" = "yes" -a \
+ "$ac_cv_lib_avformat_avio_feof" = "yes" -a \
+ "$ac_cv_lib_avformat_avformat_open_input" = "yes" -a \
+ "$ac_cv_lib_avformat_avformat_close_input" = "yes" -a \
+ "$ac_cv_lib_avformat_avformat_find_stream_info" = "yes" -a \
"$ac_cv_lib_avformat_av_probe_input_format" = "yes" -a \
+ "$ac_cv_lib_avformat_av_iformat_next" = "yes" -a \
"$ac_cv_lib_avformat_av_read_frame" = "yes" -a \
- "$ac_cv_lib_avformat_av_register_all" = "yes" -a \
"$ac_cv_lib_avformat_av_seek_frame" = "yes" -a \
- "$ac_cv_lib_avformat_avcodec_find_decoder" = "yes" -a \
- "$ac_cv_lib_avformat_avcodec_open" = "yes" -a \
- "$ac_cv_lib_avformat_url_fopen" = "yes"; then
+ "$ac_cv_lib_avformat_av_register_all" = "yes" -a \
+ "$ac_cv_lib_avformat_av_dump_format" = "yes" -a \
+ "$ac_cv_lib_avformat_av_get_sample_fmt_string" = "yes" -a \
+ "$ac_cv_lib_avformat_av_get_bytes_per_sample" = "yes" -a \
+ "$ac_cv_lib_avcodec_avcodec_find_decoder" = "yes" -a \
+ "$ac_cv_lib_avcodec_avcodec_open2" = "yes" -a \
+ "$ac_cv_lib_avutil_av_dict_get" = "yes"; then
sxe_cv_feat_ffmpeg="yes"
else
sxe_cv_feat_ffmpeg="no"
fi
- ## newer ffmpegs want a bioctx** in url_fopen, check that
- AC_MSG_CHECKING([what url_fopen() needs])
- sxe_cv_tmp_ffmpeg_url_fopen="uncertain"
-
- SXE_DUMP_LIBS
- CPPFLAGS="$CPPFLAGS ${FFMPEG_CPPFLAGS}"
- SXE_LANG_WERROR([off])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#if defined HAVE_ERRNO_H
-# include <errno.h>
-#endif
-#if defined HAVE_LIBAVFORMAT_AVFORMAT_H
-# include <libavformat/avformat.h>
-#elif defined HAVE_FFMPEG_AVFORMAT_H
-# include <ffmpeg/avformat.h>
-#elif defined HAVE_AVFORMAT_H
-# include <avformat.h>
-#endif
-
-extern int foobar(void);
-int foobar(void)
-{
- ByteIOContext *bioctx = 0;
-
- url_fopen(&bioctx, "/foobar", URL_RDONLY);
- return 0;
-}
- ]])], [sxe_cv_tmp_ffmpeg_url_fopen="ByteIOContext**"], [:])
- SXE_RESTORE_LIBS
-
- SXE_DUMP_LIBS
- CPPFLAGS="$CPPFLAGS ${FFMPEG_CPPFLAGS}"
- SXE_LANG_WERROR([on])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#if defined HAVE_ERRNO_H
-# include <errno.h>
-#endif
-#if defined HAVE_LIBAVFORMAT_AVFORMAT_H
-# include <libavformat/avformat.h>
-#elif defined HAVE_FFMPEG_AVFORMAT_H
-# include <ffmpeg/avformat.h>
-#elif defined HAVE_AVFORMAT_H
-# include <avformat.h>
-#endif
-
-extern int foobar(void);
-int foobar(void)
-{
- ByteIOContext *bioctx = 0;
-
- url_fopen(bioctx, "/foobar", URL_RDONLY);
- return 0;
-}
- ]])], [sxe_cv_tmp_ffmpeg_url_fopen="ByteIOContext*"], [:])
- SXE_RESTORE_LIBS
-
- ## post the result
- AC_MSG_RESULT([$sxe_cv_tmp_ffmpeg_url_fopen])
-
- if test "$sxe_cv_tmp_ffmpeg_url_fopen" = "ByteIOContext**"; then
- AC_DEFINE([FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR], [1],
- [Whether url_fopen want a ByteIOContext**])
- elif test "$sxe_cv_tmp_ffmpeg_url_fopen" = "ByteIOContext*"; then
- AC_DEFINE([FFMPEG_URL_FOPEN_BIOCTX_STAR], [1],
- [Whether url_fopen want a ByteIOContext*])
- else
- sxe_cv_feat_ffmpeg="no"
- fi
-
if test "$sxe_cv_feat_ffmpeg" = "yes"; then
:
ACTION_IF_FOUND
])dnl SXE_MM_CHECK_FFMPEG
AC_DEFUN([SXE_CHECK_FFMPEG_HEADERS], [dnl
- FFMPEG_CPPFLAGS="$(${PKG_CONFIG} --cflags libavformat)"
+ FFMPEG_CPPFLAGS="$(${PKG_CONFIG} --cflags libavformat libavcodec libavutil)"
## backup current configuration
SXE_DUMP_LIBS
CPPFLAGS="${CPPFLAGS} ${FFMPEG_CPPFLAGS}"
- AC_CHECK_HEADERS([avformat.h ffmpeg/avformat.h libavformat/avformat.h])
+ AC_CHECK_HEADERS([avformat.h avcodec.h])
+ AC_CHECK_HEADERS([ffmpeg/avformat.h ffmpeg/avcodec.h])
+ AC_CHECK_HEADERS([ffmpeg/dict.h ffmpeg/time.h])
+ AC_CHECK_HEADERS([libavformat/avformat.h libavcodec/avcodec.h])
+ AC_CHECK_HEADERS([libavutil/dict.h libavutil/time.h])
+
## restore configuration
SXE_RESTORE_LIBS
])dnl SXE_CHECK_FFMPEG_HEADERS
AC_DEFUN([SXE_CHECK_FFMPEG_LIBS], [dnl
- FFMPEG_LDFLAGS="$(${PKG_CONFIG} --libs-only-other libavformat) \
- $(${PKG_CONFIG} --libs-only-L libavformat)"
- FFMPEG_LIBS="$(${PKG_CONFIG} --libs-only-l libavformat)"
+ FFMPEG_LDFLAGS="$(${PKG_CONFIG} --libs-only-other libavformat libavcodec libavutil) \
+ $(${PKG_CONFIG} --libs-only-L libavformat libavcodec libavutil)"
+ FFMPEG_LIBS="$(${PKG_CONFIG} --libs-only-l libavformat libavcodec libavutil)"
## backup current configuration
SXE_DUMP_LIBS
LDFLAGS="${LDFLAGS} ${FFMPEG_LDFLAGS}"
- AC_CHECK_LIB([avformat], [av_open_input_file], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [av_close_input_file], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [av_find_stream_info], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [url_fopen], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avcodec], [avcodec_find_decoder], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avcodec], [avcodec_open2], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avcodec], [avcodec_decode_audio], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avcodec], [avcodec_decode_audio2], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avcodec], [avcodec_decode_audio3], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avcodec], [avcodec_decode_audio4], [:], [:], [${FFMPEG_LIBS}])
+
+ AC_CHECK_LIB([avformat], [avformat_open_input], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [avformat_close_input], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [avformat_find_stream_info], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [av_iformat_next], [:], [:], [${FFMPEG_LIBS}])
AC_CHECK_LIB([avformat], [av_probe_input_format], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [avcodec_find_decoder], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [avcodec_open], [:], [:], [${FFMPEG_LIBS}])
AC_CHECK_LIB([avformat], [av_read_frame], [:], [:], [${FFMPEG_LIBS}])
AC_CHECK_LIB([avformat], [av_seek_frame], [:], [:], [${FFMPEG_LIBS}])
AC_CHECK_LIB([avformat], [av_register_all], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [avcodec_decode_audio], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [avcodec_decode_audio2], [:], [:], [${FFMPEG_LIBS}])
-
- AC_CHECK_LIB([avformat], [av_alloc_format_context], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [av_dump_format], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [av_get_bytes_per_sample], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [av_get_sample_fmt_string], [:], [:], [${FFMPEG_LIBS}])
AC_CHECK_LIB([avformat], [avformat_alloc_context], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [register_protocol], [:], [:], [${FFMPEG_LIBS}])
- AC_CHECK_LIB([avformat], [av_register_protocol], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [avformat_free_context], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [avio_alloc_context], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [avio_size], [:], [:], [${FFMPEG_LIBS}])
+ AC_CHECK_LIB([avformat], [avio_feof], [:], [:], [${FFMPEG_LIBS}])
- if test "$ac_cv_lib_avformat_av_alloc_format_context" = "yes"; then
- AC_DEFINE([HAVE_AV_ALLOC_FORMAT_CONTEXT], [1], [Description here!])
- fi
- if test "$ac_cv_lib_avformat_avformat_alloc_context" = "yes"; then
- AC_DEFINE([HAVE_AVFORMAT_ALLOC_CONTEXT], [1], [Description here!])
- fi
+ AC_CHECK_LIB([avutil], [av_dict_get], [:], [:], [${FFMPEG_LIBS}])
- if test "$ac_cv_lib_avformat___avcodec_decode_audio2" = "yes" -o \
- "$ac_cv_lib_avformat_avcodec_decode_audio2" = "yes"; then
- AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO2], [1], [Description here!])
+ if test "$ac_cv_lib_avcodec_avcodec_decode_audio" = "yes"; then
+ AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO], [1],
+ [Define to 1 if avcodec_decode_audio is usable.])
fi
- if test "$ac_cv_lib_avformat___avcodec_decode_audio" = "yes" -o \
- "$ac_cv_lib_avformat_avcodec_decode_audio" = "yes"; then
- AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO], [1], [Description here!])
+ if test "$ac_cv_lib_avcodec_avcodec_decode_audio2" = "yes"; then
+ AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO2], [1],
+ [Define to 1 if avcodec_decode_audio2 is usable.])
fi
-
- if test "$ac_cv_lib_avformat_av_register_protocol" = "yes"; then
- AC_DEFINE([HAVE_AV_REGISTER_PROTOCOL], [1], [Description here!])
+ if test "$ac_cv_lib_avcodec_avcodec_decode_audio3" = "yes"; then
+ AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO3], [1],
+ [Define to 1 if avcodec_decode_audio is usable.])
fi
- if test "$ac_cv_lib_avformat_register_protocol" = "yes"; then
- AC_DEFINE([HAVE_REGISTER_PROTOCOL], [1], [Description here!])
+ if test "$ac_cv_lib_avcodec_avcodec_decode_audio4" = "yes"; then
+ AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO4], [1],
+ [Define to 1 if avcodec_decode_audio is usable.])
fi
## restore configuration
])
])dnl SXE_CHECK_PKGCONFIG
+AC_DEFUN([SXE_PC_CHECK_EXISTS], [dnl
+ ## arg1 is the module
+ ## defines sxe_cv_pc_<$1>_exists
+ pushdef([mod], [$1])
+ pushdef([shmod], translit([]mod[], [+-.], [___]))
+ pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
+ pushdef([existsvar], [sxe_cv_pc_]shmod[_exists])
+
+ AC_REQUIRE([SXE_CHECK_PKGCONFIG])
+ SXE_MSG_CHECKING([whether pkg-config for ]mod[ exists ])
+ if $PKG_CONFIG --exists []mod[]; then
+ existsvar[]="yes"
+ else
+ existsvar[]="no"
+ fi
+ SXE_MSG_RESULT([$]existsvar[])
+
+ popdef([existsvar])
+ popdef([shmod])
+ popdef([MOD])
+ popdef([mod])
+])dnl SXE_PC_CHECK_EXISTS
+
AC_DEFUN([SXE_PC_CHECK_VERSION_ATLEAST], [dnl
## arg1 is the module
## arg2 is the version we want to see
## sxe_cv_pc_<$1>_recent_enough_p
pushdef([mod], [$1])
pushdef([ver], [$2])
- pushdef([shmod], translit([mod], [+-.], [___]))
- pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+ pushdef([shmod], translit([]mod[], [+-.], [___]))
+ pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
pushdef([vervar], [sxe_cv_pc_]shmod[_version])
pushdef([verrecp], [sxe_cv_pc_]shmod[_recent_enough_p])
SXE_MSG_CHECKING([for ]mod['s actual version])
vervar[]=$($PKG_CONFIG --modversion []mod[])
- MOD[_VERSION]=[$]vervar[]
+ []MOD[]_VERSION=[$]vervar[]
SXE_MSG_RESULT([$]vervar[])
- AC_SUBST(MOD[_VERSION])
+ AC_SUBST([]MOD[]_VERSION)
popdef([verrecp])
popdef([vervar])
## sxe_cv_pc_<$1>_recent_enough_p
pushdef([mod], [$1])
pushdef([ver], [$2])
- pushdef([shmod], translit([mod], [+-.], [___]))
- pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+ pushdef([shmod], translit([]mod[], [+-.], [___]))
+ pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
pushdef([vervar], [sxe_cv_pc_]shmod[_version])
pushdef([veroldp], [sxe_cv_pc_]shmod[_old_enough_p])
SXE_MSG_CHECKING([for ]mod['s actual version])
vervar[]=$($PKG_CONFIG --modversion []mod[])
- MOD[_VERSION]=[$]vervar[]
+ []MOD[]_VERSION=[$]vervar[]
SXE_MSG_RESULT([$]vervar[])
- AC_SUBST(MOD[_VERSION])
+ AC_SUBST([]MOD[]_VERSION)
popdef([verrecp])
popdef([vervar])
## arg1 is the module
## defines sxe_cv_pc_<$1>_version
pushdef([mod], [$1])
- pushdef([shmod], translit([mod], [+-.], [___]))
- pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+ pushdef([shmod], translit([]mod[], [+-.], [___]))
+ pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
pushdef([vervar], [sxe_cv_pc_]shmod[_version])
AC_REQUIRE([SXE_CHECK_PKGCONFIG])
SXE_MSG_CHECKING([for ]mod[ version])
vervar[]=$($PKG_CONFIG --modversion []mod[])
- MOD[_VERSION]=[$]vervar[]
+ []MOD[]_VERSION=[$]vervar[]
SXE_MSG_RESULT([$]vervar[])
- AC_SUBST(MOD[_VERSION])
+ AC_SUBST([]MOD[]_VERSION)
popdef([vervar])
popdef([shmod])
## arg1 is the module
## defines sxe_cv_pc_<$1>_libs
pushdef([mod], [$1])
- pushdef([shmod], translit([mod], [+-.], [___]))
- pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+ pushdef([shmod], translit([]mod[], [+-.], [___]))
+ pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
pushdef([libvar], [sxe_cv_pc_]shmod[_libs])
AC_REQUIRE([SXE_CHECK_PKGCONFIG])
SXE_MSG_CHECKING([for ]mod[ libraries])
libvar[]=$($PKG_CONFIG --libs-only-l []mod[])
- MOD[_LIBS]=[$]libvar[]
+ []MOD[]_LIBS=[$]libvar[]
SXE_MSG_RESULT([$]libvar[])
- AC_SUBST(MOD[_LIBS])
+ AC_SUBST([]MOD[]_LIBS)
popdef([libvar])
popdef([shmod])
## arg1 is the module
## defines sxe_cv_pc_<$1>_ldflags
pushdef([mod], [$1])
- pushdef([shmod], translit([mod], [+-.], [___]))
- pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+ pushdef([shmod], translit([]mod[], [+-.], [___]))
+ pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
pushdef([ldfvar], [sxe_cv_pc_]shmod[_ldflags])
AC_REQUIRE([SXE_CHECK_PKGCONFIG])
SXE_MSG_CHECKING([for ]mod[ ldflags])
ldfvar[]=$($PKG_CONFIG --libs-only-L []mod[])
- MOD[_LDFLAGS]=[$]ldfvar[]
+ []MOD[]_LDFLAGS=[$]ldfvar[]
SXE_MSG_RESULT([$]ldfvar[])
- AC_SUBST(MOD[_LDFLAGS])
+ AC_SUBST([]MOD[]_LDFLAGS)
popdef([ldfvar])
popdef([shmod])
## arg1 is the module
## defines sxe_cv_pc_<$1>_cppflags
pushdef([mod], [$1])
- pushdef([shmod], translit([mod], [+-.], [___]))
- pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+ pushdef([shmod], translit([]mod[], [+-.], [___]))
+ pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
pushdef([cfvar], [sxe_cv_pc_]shmod[_cppflags])
AC_REQUIRE([SXE_CHECK_PKGCONFIG])
SXE_MSG_CHECKING([for ]mod[ cppflags])
cfvar[]=$($PKG_CONFIG --cflags []mod[])
- MOD[_CPPFLAGS]=[$]cfvar[]
+ []MOD[]_CPPFLAGS=[$]cfvar[]
SXE_MSG_RESULT([$]cfvar[])
- AC_SUBST(MOD[_CPPFLAGS])
+ AC_SUBST([]MOD[]_CPPFLAGS)
popdef([cfvar])
popdef([shmod])
-f "$sxe_blddir/sxemacs_version.m4"; then
AC_MSG_RESULT([yes])
srcdir_equals_blddir_p=yes
+ AC_MSG_ERROR([Building "in-tree" is not supported]
+ [Please create a new directory completely outside of the]
+ [source tree, and run $progbasename from there.])
else
AC_MSG_RESULT([no. Good Boy!])
srcdir_equals_blddir_p=no
echo "
TTY:"
-test "$with_ncurses" = yes && echo " Compiling in support for ncurses."
-test "$with_curses" = yes && echo " Compiling in support for curses."
-test "$with_terminfo" = yes && echo " Compiling in support for terminfo ."
-test "$with_termlib" = yes && echo " Compiling in support for termlib."
-test "$with_termcap" = yes && echo " Compiling in support for termcap."
+test "$with_ncurses" = yes && echo " Compiling in support for ncurses."
+test "$with_curses" = yes && echo " Compiling in support for curses."
+test "$with_tinfo" = yes && echo " Compiling in support for tinfo."
+test "$with_terminfo" = yes && echo " Compiling in support for terminfo."
+test "$with_termlib" = yes && echo " WARNING! Compiling in support for termlib." \
+ && echo " Consider installing ncurses."
+test "$with_termcap" = yes && echo " WARNING! Compiling in support for termcap." \
+ && echo " Consider installing ncurses." \
+ && echo " You may need to set TERMCAP or have the file /etc/termcap."
+test "$with_builtin_tty" = yes && echo " WARNING! Using (brittle) builtin TTY." \
+ && echo " Consider installing ncurses." \
+ && echo " You WILL need to set TERMCAP or have the file /etc/termcap."
test "$with_gpm" = yes && echo " Compiling in support for GPM (General Purpose Mouse)."
echo "
if DESCEND_CL
SUBDIRS += cl
endif
-if DESCEND_DBUS
-SUBDIRS += dbus
-endif
+# if DESCEND_DBUS
+# SUBDIRS += dbus
+# endif
## ldap is fucking broken, we dont add it
### handled in master Makefile.am
return result;
}
-/* accessors */
-inline Lisp_Object
-ase_neighbourhood_point(ase_neighbourhood_t n)
-{
- return n->point;
-}
-
-inline Lisp_Object
-ase_neighbourhood_radius(ase_neighbourhood_t n)
-{
- return n->radius;
-}
-
-/* Measures */
-static inline void
-_ase_neighbourhood_update_lebesgue(ase_neighbourhood_t n)
-{
- if (n && NILP(n->lebesgue_measure)) {
- Lisp_Object i = n->ldata;
- n->lebesgue_measure = Fase_interval_lebesgue_measure(i);
- }
- return;
-}
-
-static inline Lisp_Object
-_ase_neighbourhood_lebesgue(ase_neighbourhood_t n)
-{
- return n->lebesgue_measure;
-}
-
-inline Lisp_Object
-ase_neighbourhood_lebesgue_measure(ase_neighbourhood_t n)
-{
- _ase_neighbourhood_update_lebesgue(n);
- return _ase_neighbourhood_lebesgue(n);
-}
-
-static inline void
-_ase_neighbourhood_update_rational(ase_neighbourhood_t n)
-{
- if (n && NILP(n->rational_measure)) {
- Lisp_Object i = n->ldata;
- n->rational_measure = Fase_interval_rational_measure(i);
- }
- return;
-}
-
-static inline Lisp_Object
-_ase_neighbourhood_rational(ase_neighbourhood_t n)
-{
- return n->rational_measure;
-}
-
-inline Lisp_Object
-ase_neighbourhood_rational_measure(ase_neighbourhood_t n)
-{
- _ase_neighbourhood_update_rational(n);
- return _ase_neighbourhood_rational(n);
-}
-
\f
/* lisp level */
DEFUN("ase-neighbourhoodp", Fase_neighbourhoodp, 1, 1, 0, /*
extern Lisp_Object ase_neighbourhood_interior(Lisp_Object nbh);
/* predicates */
-static inline bool
+extern_inline bool
ase_neighbourhood_contains_obj_p(ase_neighbourhood_t, Lisp_Object);
-static inline bool
+extern_inline bool
ase_neighbourhood_contains_nbh_p(ase_neighbourhood_t, ase_neighbourhood_t);
-static inline bool ase_neighbourhood_open_p(ase_neighbourhood_t);
-static inline bool ase_neighbourhood_closed_p(ase_neighbourhood_t);
-static inline bool
+extern_inline bool ase_neighbourhood_open_p(ase_neighbourhood_t);
+extern_inline bool ase_neighbourhood_closed_p(ase_neighbourhood_t);
+extern_inline bool
ase_neighbourhood_less_obj_p(ase_neighbourhood_t, Lisp_Object);
-static inline bool
+extern_inline bool
ase_neighbourhood_less_nbh_p(ase_neighbourhood_t, ase_neighbourhood_t);
-static inline bool
+extern_inline bool
ase_neighbourhood_greater_obj_p(ase_neighbourhood_t, Lisp_Object);
-static inline bool
+extern_inline bool
ase_neighbourhood_greater_nbh_p(ase_neighbourhood_t, ase_neighbourhood_t);
-static inline Lisp_Object
+extern_inline Lisp_Object
ase_neighbourhood_point(ase_neighbourhood_t);
-static inline Lisp_Object
+extern_inline Lisp_Object
ase_neighbourhood_radius(ase_neighbourhood_t);
/* measures */
-static inline Lisp_Object
+extern_inline Lisp_Object
ase_neighbourhood_lebesgue_measure(ase_neighbourhood_t);
-static inline Lisp_Object
+extern_inline Lisp_Object
ase_neighbourhood_rational_measure(ase_neighbourhood_t);
/* inlines */
-static inline bool
+extern_inline Lisp_Object
+ase_neighbourhood_point(ase_neighbourhood_t n)
+{
+ return n->point;
+}
+
+extern_inline Lisp_Object
+ase_neighbourhood_radius(ase_neighbourhood_t n)
+{
+ return n->radius;
+}
+
+/* Measures */
+extern_inline void
+_ase_neighbourhood_update_rational(ase_neighbourhood_t n)
+{
+ if (n && NILP(n->rational_measure)) {
+ Lisp_Object i = n->ldata;
+ n->rational_measure = Fase_interval_rational_measure(i);
+ }
+ return;
+}
+
+extern_inline Lisp_Object
+_ase_neighbourhood_rational(ase_neighbourhood_t n)
+{
+ return n->rational_measure;
+}
+
+extern_inline Lisp_Object
+ase_neighbourhood_rational_measure(ase_neighbourhood_t n)
+{
+ _ase_neighbourhood_update_rational(n);
+ return _ase_neighbourhood_rational(n);
+}
+
+extern_inline void
+_ase_neighbourhood_update_lebesgue(ase_neighbourhood_t n)
+{
+ if (n && NILP(n->lebesgue_measure)) {
+ Lisp_Object i = n->ldata;
+ n->lebesgue_measure = Fase_interval_lebesgue_measure(i);
+ }
+ return;
+}
+
+extern_inline Lisp_Object
+_ase_neighbourhood_lebesgue(ase_neighbourhood_t n)
+{
+ return n->lebesgue_measure;
+}
+
+extern_inline Lisp_Object
+ase_neighbourhood_lebesgue_measure(ase_neighbourhood_t n)
+{
+ _ase_neighbourhood_update_lebesgue(n);
+ return _ase_neighbourhood_lebesgue(n);
+}
+
+
+
+extern_inline bool
ase_neighbourhood_contains_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
{
/* we _know_ atm that n->ldata points to an ase_interval_t */
return !NILP(Fase_interval_contains_p(intv, obj));
}
-static inline bool
+extern_inline bool
ase_neighbourhood_contains_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
{
/* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
return !NILP(Fase_interval_contains_p(i1, i2));
}
-static inline bool
+extern_inline bool
ase_neighbourhood_open_p(ase_neighbourhood_t n)
{
return n->open_p;
}
-static inline bool
+extern_inline bool
ase_neighbourhood_closed_p(ase_neighbourhood_t n)
{
return !n->open_p;
}
-static inline bool
+extern_inline bool
ase_neighbourhood_less_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
{
/* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
return (_ase_less_p(a->upper, obj) || _ase_equal_p(a->upper, obj));
}
-static inline bool
+extern_inline bool
ase_neighbourhood_less_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
{
/* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
_ase_equal_p(a1->upper, a2->lower));
}
-static inline bool
+extern_inline bool
ase_neighbourhood_greater_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
{
/* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
return (_ase_less_p(obj, a->lower) || _ase_equal_p(obj, a->lower));
}
-static inline bool
+extern_inline bool
ase_neighbourhood_greater_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
{
/* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
%}
-%name-prefix="cl_loop_yy"
-%pure_parser
+%define api.prefix "cl_loop_yy"
+%define api.pure full
%defines
%parse-param {Lisp_Object *yyscanner}
\f
/* ###autoload */
DEFUN("cl:loop-sentence", Fcl_loop_sentence, 0, UNEVALLED, 0, /*
-The Common Lisp loop macro.
-*/
+Part of The Common Lisp loop macro.
+See: `cl:loop'
+ */
(args))
{
Lisp_Object loop_sentence = cl_loop_make_sentence();
}
DEFUN("cl:loop", Fcl_loop, 0, UNEVALLED, 0, /*
-The Common Lisp loop macro.
-*/
+(loop CLAUSE...): The Common Lisp loop macro.
+
+Overview of valid clauses:
+ for VAR from/upfrom/downfrom NUM to/upto/downto/above/below NUM by NUM,
+ for VAR in LIST by FUNC, for VAR on LIST by FUNC, for VAR = INIT then EXPR,
+ for VAR across ARRAY, repeat NUM, with VAR = INIT, while COND, until COND,
+ always COND, never COND, thereis COND, collect EXPR into VAR,
+ append EXPR into VAR, nconc EXPR into VAR, sum EXPR into VAR,
+ count EXPR into VAR, maximize EXPR into VAR, minimize EXPR into VAR,
+ if COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...],
+ unless COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...],
+ do EXPRS..., initially EXPRS..., finally EXPRS..., return EXPR,
+ finally return EXPR, named NAME.
+
+The loop macro consists of a series of clauses, which do things like
+iterate variables, set conditions for exiting the loop, accumulating values
+to be returned as the return value of the loop, and executing arbitrary
+blocks of code. Each clause is proceed in turn, and the loop executes its
+body repeatedly until an exit condition is hit.
+
+It's important to understand that loop clauses such as `for' and `while',
+which look like loop-establishing constructs, don't actually *establish* a
+loop; the looping is established by the `loop' clause itself, which will
+repeatedly process its body until told to stop. `while' merely establishes
+a condition which, when true, causes the loop to finish, and `for' sets a
+variable to different values on each iteration (e.g. successive elements of
+a list) and sets an exit condition when there are no more values. This
+means, for example, that if two `for' clauses appear, you don't get two
+nested loops, but instead two variables that are stepped in parallel, and
+two exit conditions, either of which, if triggered, will cause the loop to
+end. Similarly for a loop with a `for' and a `while' clause. For example:
+
+(loop
+ for x in list
+ while x
+ do ...)
+
+In each successive iteration, X is set to the next element of the list. If
+there are no more elements, or if any element is nil (the `while' clause),
+the loop exits. Otherwise, the block of code following `do' is executed.)
+
+This example also shows that some clauses establish variable bindings --
+essentially like a `let' binding -- and that following clauses can
+reference these variables. Furthermore, the entire loop is surrounded by a
+block named nil (unless the `named' clause is given), so you can return
+from the loop using the macro `return'. (The other way to exit the loop is
+through the macro `loop-finish'. The difference is that some loop clauses
+establish or accumulate a value to be returned, and `loop-finish' returns
+this. `return', however, can only return an explicitly-specified value.
+NOTE CAREFULLY: There is a loop clause called `return' as well as a
+standard Lisp macro called `return'. Normally they work similarly; but if
+you give the loop a name with `named', you will need to use the macro
+`return-from'.)
+
+Another extremely useful feature of loops is called "destructuring". If,
+in place of VAR, a list (possibly dotted, possibly a tree of arbitary
+complexity) is given, the value to be assigned is assumed to have a similar
+structure to the list given, and variables in the list will be matched up
+with corresponding elements in the structure. For example:
+
+(loop
+ for (x y) in '((foo 1) (bar 2) (baz 3))
+ do (puthash x y some-hash-table))
+
+will add three elements to a hash table, mapping foo -> 1, bar -> 2, and
+baz -> 3. As other examples, you can conveniently process alists using
+
+(loop for (x . y) in alist do ...)
+
+and plists using
+
+(loop for (x y) on plist by #'cddr do ...)
+
+Destructuring is forgiving in that mismatches in the number of elements on
+either size will be handled gracefully, either by ignoring or initializing
+to nil.
+
+If you don't understand how a particular loop clause works, create an
+example and use `macroexpand-sexp' to expand the macro.
+
+In greater detail, valid clauses are:
+
+(NOTE: Keywords in lowercase; slashes separate different possibilities
+for keywords, some of which are synonymous; brackets indicate optional
+parts of the clause. In all of the clauses with `being', the word `being',
+the words `each' or `the', and the difference between singular and plural
+keywords are all just syntactic sugar. Stylistically, you should write
+either `being each foo' or `being the foos'.)
+
+ for VAR from/upfrom/downfrom NUM1 to/upto/downto/above/below NUM2 [by NUMSTEP]
+ Step VAR across numbers. `upfrom', `upto', and `below' explicitly
+ indicate upward stepping; `downfrom', `downto', and `above' explicitly
+ indicate downward stepping. (If none of these is given, the default is
+ upward.) `to', `upto', and `downto' cause stepping to include NUM2 as
+ the last iteration, while `above' and `below' stop just before reaching
+ NUM2. `by' can be given to indicate a stepping increment other than 1.
+
+ for VAR in LIST [by FUNC]
+ Step VAR over elements of a LIST. FUNC specifies how to get successive
+ sublists and defaults to `cdr'.
+
+ for VAR on LIST [by FUNC]
+ Step VAR over tails of a LIST. FUNC specifies how to get successive
+ sublists and defaults to `cdr'.
+
+ for VAR in-ref LIST [by FUNC]
+ Step VAR over elements of a LIST, like `for ... in', except the VAR is
+ bound using `symbol-macrolet' instead of `let'. In essence, VAR is set
+ to a "reference" to the list element instead of the element itself;
+ this us, you can destructively modify the list using `setf' on VAR, and
+ any changes to the list will "magically" reflect themselves in
+ subsequent uses of VAR.
+
+ for VAR = INIT [then EXPR]
+ Set VAR on each iteration of the loop. If only INIT is given, use it
+ on each iteration. Otherwise, use INIT on the first iteration and EXPR
+ on subsequent ones.
+
+ for VAR across/across-ref ARRAY
+ Step VAR across a sequence other than a list (string, vector, bit
+ vector). If `across-ref' is given, VAR is bound using
+ `symbol-macrolet' instead of `let' -- see above.
+
+ for VAR being each/the element/elements in/of/in-ref/of-ref SEQUENCE [using (index INDEX-VAR)]
+ Step VAR across any sequence. A variable can be specified with a
+ `using' phrase to receive the index, starting at 0. If `in-ref' or
+ `of-ref' is given, VAR is bound using `symbol-macrolet' instead of
+ `let' -- see above.
+
+ for VAR being each/the hash-key/hash-keys/hash-value/hash-values in/of HASH-TABLE [using (hash-value/hash-key OTHER-VAR)]
+
+ for VAR being each/the hash-key/hash-keys/hash-value/hash-values in/of HASH-TABLE [using (hash-value/hash-key OTHER-VAR)]
+ Map VAR over a hash table. The various keywords are synonymous except
+ those that distinguish between keys and values. The `using' phrase is
+ optional and allows both key and value to be bound.
+
+ for VAR being each/the symbol/present-symbol/external-symbol/symbols/present-symbols/external-symbols in/of OBARRAY
+ Map VAR over the symbols in an obarray. All symbol keywords are
+ currently synonymous.
+
+ for VAR being each/the extent/extents [in/of BUFFER-OR-STRING] [from POS] [to POS]
+ Map VAR over the extents in a buffer or string, defaulting to the
+ current buffer, the beginning and the end, respectively.
+
+ for VAR being each/the interval/intervals [in/of BUFFER-OR-STRING] [property PROPERTY] [from POS] [to POS]
+ Map VAR over the intervals without property change in a buffer or
+ string, defaulting to the current buffer, the beginning and the end,
+ respectively. If PROPERTY is given, iteration occurs using
+ `next-single-property-change'; otherwise, using
+ `next-property-change'.
+
+ for VAR being each/the window/windows [in/of FRAME]
+ Step VAR over the windows in FRAME, defaulting to the selected frame.
+
+ for VAR being each/the frame/frames
+ Step VAR over all frames.
+
+ for VAR being each/the buffer/buffers [by FUNC]
+ Step VAR over all buffers. This is actually equivalent to
+ `for VAR in (buffer-list) [by FUNC]'.
+
+ for VAR being each/the key-code/key-codes/key-seq/key-seqs/key-binding/key-bindings in KEYMAP [using (key-code/key-codes/key-seq/key-seqs/key-binding/key-bindings OTHER-VAR)]
+ Map VAR over the entries in a keymap. Keyword `key-seq' causes
+ recursive mapping over prefix keymaps occurring in the keymap, with VAR
+ getting the built-up sequence (a vector). Otherwise, mapping does not
+ occur recursively. `key-code' and `key-seq' refer to what is bound
+ (second argument of `define-key'), and `key-binding' what it's bound to
+ (third argument of `define-key').
+
+ as VAR ...
+ `as' is a synonym for `for'.
+
+ and VAR ...
+ `and' clauses have the same syntax as `for' clauses except that the
+ variables in the clause are bound in parallel with a preceding
+ `and'/`for' clause instead of in series.
+
+ with VAR = INIT
+ Set VAR to INIT once, before doing any iterations.
+
+ repeat NUM
+ Exit the loop if more than NUM iterations have occurred.
+
+ while COND
+ Exit the loop if COND isn't true.
+
+ until COND
+ Exit the loop if COND is true.
+
+ collect EXPR [into VAR]
+ Push EXPR onto the end of a list of values -- stored either in VAR or a
+ temporary variable that will be returned as the return value of the
+ loop if it terminates through an exit condition or a call to
+ `loop-finish'.
+
+ append EXPR [into VAR]
+ Append EXPR (a list) onto the end of a list of values, like `collect'.
+
+ nconc EXPR [into VAR]
+ Nconc EXPR (a list) onto the end of a list of values, like `collect'.
+
+ concat EXPR [into VAR]
+ Concatenate EXPR (a string) onto the end of a string of values, like
+ `collect'.
+
+ vconcat EXPR [into VAR]
+ Concatenate EXPR (a vector) onto the end of a vector of values, like
+ `collect'.
+
+ bvconcat EXPR [into VAR]
+ Concatenate EXPR (a bit vector) onto the end of a bit vector of values,
+ like `collect'.
+
+ sum EXPR [into VAR]
+ Add EXPR to a value, like `collect'.
+
+ count EXPR [into VAR]
+ If EXPR is true, increment a value by 1, like `collect'.
+
+ maximize EXPR [into VAR]
+ IF EXPR is greater than a value, replace the value with EXPR, like
+ `collect'.
+
+ minimize EXPR [into VAR]
+ IF EXPR is less than a value, replace the value with EXPR, like
+ `collect'.
+
+ always COND
+ If COND is true, continue the loop and set the loop return value (the
+ same value that's manipulated by `collect' and friends and is returned
+ by a normal loop exit or an exit using `loop-finish') to t; otherwise,
+ exit the loop and return nil. The effect is to determine and return
+ whether a condition is true "always" (all iterations of the loop).
+
+ never COND
+ If COND is false, continue the loop and set the loop return value (like
+ `always') to t; otherwise, exit the loop and return nil. The effect
+ is to determine and return whether a condition is "never" true (all
+ iterations of the loop).
+
+ thereis COND
+ If COND is true, exit the loop and return COND.
+
+ if/when COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...]
+ If COND is true, execute the directly following clause(s); otherwise,
+ execute the clauses following `else'.
+
+ unless COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...]
+ If COND is false, execute the directly following clause(s); otherwise, execute the clauses following `else'.
+
+ do EXPRS...
+ Execute the expressions (any Lisp forms).
+
+ initially EXPRS...
+ Execute EXPR once, before doing any iterations, and after values have
+ been set using `with'.
+
+ finally EXPRS...
+ Execute EXPR once, directly before the loop terminates. This will not
+ be executed if the loop terminates prematurely as a result of `always',
+ `never', `thereis', or `return'.
+
+ return EXPR
+ Exit from the loop and return EXPR.
+
+ finally return EXPR
+ Specify the value to be returned when the loop exits. (Unlike `return',
+ this doesn't cause the loop to immediately exit; it will exit whenever
+ it normally would have.) This takes precedence over a return value
+ specified with `collect' and friends or `always' and friends.
+
+ named NAME
+ Specify the name for block surrounding the loop, in place of nil.
+ (See `block'.)
+ */
(args))
{
Lisp_Object loop_sentence = Qnil;
/* ###autoload */
DEFUN("cl:do*", Fcl_doX, 2, UNEVALLED, 0, /*
-The Common Lisp `do' loop.
+The Common Lisp `do*' loop.
Format is: (do* ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)
*/
(args))
/* ###autoload */
+
DEFUN("cl:dotimes", Fcl_dotimes, 1, UNEVALLED, 0, /*
The Common Lisp `dotimes' loop.
Format is: (dotimes (VAR COUNT [RESULT]) BODY...)
-*/
+
+Loop a certain number of times. Evaluate BODY with VAR bound to
+successive integers from 0, inclusive,to COUNT, exclusive. Then
+evaluate RESULT to get return value, default nil.
+ */
(args))
{
/* This function can GC */
DEFUN("cl:dolist", Fcl_dolist, 1, UNEVALLED, 0, /*
The Common Lisp `dolist' loop.
Format is: (dolist (VAR LIST [RESULT]) BODY...)
-*/
+loop over a list.
+Evaluate BODY with VAR bound to each `car' from LIST, in turn.
+Then evaluate RESULT to get return value, default nil.
+ */
(args))
{
/* This function can GC */
DEFUN("cl:do-symbols", Fcl_do_symbols, 1, UNEVALLED, 0, /*
The Common Lisp `dolist' loop.
Format is: (do-symbols (VAR [OBARRAY [RESULT]]) BODY...)
-*/
+loop over all symbols.
+Evaluate BODY with VAR bound to each interned symbol, or to each symbol
+from OBARRAY.
+ */
(args))
{
/* This function can GC */
\f
/* ###autoload */
DEFUN("cl:pop", Fcl_pop, 1, UNEVALLED, 0, /*
-*/
+(pop PLACE): remove and return the head of the list stored in PLACE.
+Analogous to (prog1 (car PLACE) (setf PLACE (cdr PLACE))), though more
+careful about evaluating each argument only once and in the right order.
+PLACE may be a symbol, or any generalized variable allowed by `setf'.
+ */
(args))
{
/* This function can GC */
/* ###autoload */
DEFUN("cl:push", Fcl_push, 2, UNEVALLED, 0, /*
-*/
+(push X PLACE): insert X at the head of the list stored in PLACE.
+Analogous to (setf PLACE (cons X PLACE)), though more careful about
+evaluating each argument only once and in the right order. PLACE may
+be a symbol, or any generalized variable allowed by `setf'; that is,
+it does not necessarily have to be a list, though `push' is most often
+used on lists.
+ */
(args))
{
/* This function can GC */
/* ###autoload */
DEFUN("cl:pushnew", Fcl_pushnew, 2, UNEVALLED, 0, /*
-*/
+(pushnew X PLACE): insert X at the head of the list stored in PLACE.
+Like (push X PLACE), except that the list is unmodified if X is `eql'
+to an element already on the list.
+Keywords supported: :test :test-not :key
+ */
(args))
{
/* This function can GC */
/* ###autoload */
DEFUN("cl:eql", Fcl_eql, 2, 2, 0, /*
-*/
+Return t if the two args are the same Lisp object.
+Floating-point numbers of equal value are `eql', but they may not be `eq'.
+ */
(a, b))
{
if (EMOD_CL_EQL(a, b))
/* ###autoload */
DEFUN("cl:list*", Fcl_list_, 1, MANY, 0, /*
-*/
+Return a new list with specified args as elements, cons'd to last arg.
+Thus, `(list* A B C D)' is equivalent to `(nconc (list A B C) D)', or to
+`(cons A (cons B (cons C D)))'.
+ */
(int nargs, Lisp_Object *args))
{
if (nargs == 1)
/* ###autoload */
DEFUN("cl:tailp", Fcl_tailp, 2, 2, 0, /*
-*/
+Return true if SUBLIST is a tail of LIST.
+ */
(list, object))
{
Lisp_Object trav1 = Qnil, trav2 = Qnil;
/* ###autoload */
DEFUN("cl:ldiff", Fcl_ldiff, 2, 2, 0, /*
-*/
+Return a copy of LIST with the tail SUBLIST removed.
+ */
(list, object))
{
Lisp_Object result = Qnil, tmp1 = Qnil, tmp2 = Qnil;
#ifdef EF_USE_COMPRE
s->compre = Qnil;
#endif
- set_string_data(s, (Bufbyte*)contents);
+ set_string_data(s, contents);
set_string_length(s, length);
XSETSTRING(val, s);
/* Failure for failure, lets try using the external
format anyway..
*/
- pwd_internal=pwd;
+ pwd_internal=(Bufbyte*)pwd;
}
if( pwd_internal == NULL ) {
Lisp_Object args;
orig_fun = fun = XCAR(op);
+ SXE_SET_UNUSED(orig_fun);
+
args = XCDR(op);
if (SYMBOLP (fun) && !EQ(fun, Qunbound) &&
(fun = XSYMBOL(fun)->function, SYMBOLP(fun)))
if (!noninteractive &&
(!CONSOLEP(Vselected_console) ||
CONSOLE_STREAM_P(XCONSOLE(Vselected_console)))) {
- fprintf(stderr, "ni:%d CONSP(Vsel):%d CONSSTRP(XCONS(...)):%d\n",
+ fprintf(stderr,
+ "\nFATAL error starting up initial console\n "
+ "noninteractive:%d CONSP(Vselected_console):%d "
+ "CONSOLE_STREAM_P(XCONSOLE(...)):%d",
noninteractive,
CONSOLEP(Vselected_console),
CONSOLE_STREAM_P(XCONSOLE(Vselected_console)));
{
char *result = xmalloc_atomic(4096);
- if ( realpath(file, result) == NULL ) {
+ if ( xrealpath(file, result) == NULL ) {
xfree(result);
result = NULL;
}
}
pdump_struct_table.list[pdump_struct_table.count].list.first = 0;
pdump_struct_table.list[pdump_struct_table.count].list.align =
- ALIGNOF(max_align_t);
+ ALIGNOF(sxe_max_align_t);
pdump_struct_table.list[pdump_struct_table.count].list.count = 0;
pdump_struct_table.list[pdump_struct_table.count].sdesc = sdesc;
{
int align;
- for (align = ALIGNOF(max_align_t); align; align >>= 1) {
+ for (align = ALIGNOF(sxe_max_align_t); align; align >>= 1) {
size_t i;
pdump_entry_list_elt *elt;
pdump_object_table = xnew_array(pdump_entry_list, lrecord_type_count);
pdump_alert_undump_object = xnew_array(int, lrecord_type_count);
- assert(ALIGNOF(max_align_t) <= pdump_align_table[0]);
+ assert(ALIGNOF(sxe_max_align_t) <= pdump_align_table[0]);
for (i = 0; i < countof(pdump_align_table); i++)
- if (pdump_align_table[i] > ALIGNOF(max_align_t))
- pdump_align_table[i] = ALIGNOF(max_align_t);
+ if (pdump_align_table[i] > ALIGNOF(sxe_max_align_t))
+ pdump_align_table[i] = ALIGNOF(sxe_max_align_t);
flush_all_buffer_local_cache();
for (i = 0; i < lrecord_type_count; i++) {
pdump_object_table[i].first = 0;
- pdump_object_table[i].align = ALIGNOF(max_align_t);
+ pdump_object_table[i].align = ALIGNOF(sxe_max_align_t);
pdump_object_table[i].count = 0;
pdump_alert_undump_object[i] = 0;
}
pdump_struct_table.size = -1;
pdump_opaque_data_list.first = 0;
- pdump_opaque_data_list.align = ALIGNOF(max_align_t);
+ pdump_opaque_data_list.align = ALIGNOF(sxe_max_align_t);
pdump_opaque_data_list.count = 0;
depth = 0;
header.nb_root_struct_ptrs = Dynarr_length(pdump_root_struct_ptrs);
header.nb_opaques = Dynarr_length(pdump_opaques);
- cur_offset = ALIGN_SIZE(sizeof(header), ALIGNOF(max_align_t));
+ cur_offset = ALIGN_SIZE(sizeof(header), ALIGNOF(sxe_max_align_t));
max_size = 0;
pdump_scan_by_alignment(pdump_allocate_offset);
- cur_offset = ALIGN_SIZE(cur_offset, ALIGNOF(max_align_t));
+ cur_offset = ALIGN_SIZE(cur_offset, ALIGNOF(sxe_max_align_t));
header.stab_offset = cur_offset;
pdump_buf = xmalloc_atomic(max_size);
} else {
fwrite(&header, sizeof(header), 1, pdump_out);
- PDUMP_ALIGN_OUTPUT(max_align_t);
+ PDUMP_ALIGN_OUTPUT(sxe_max_align_t);
pdump_scan_by_alignment(pdump_dump_data);
/* Callbacks */
#define FFI_CC_CDECL 0
+void* ffi_make_callback_x86(Lisp_Object data, int cc_type);
+
#if defined __i386__
static void
ffi_callback_call_x86(Lisp_Object cbk_info, char *arg_buffer)
ptr = Fmake_ffi_object(Qpointer, Qnil);
#ifdef __i386__
XEFFIO(ptr)->fop.ptr = ffi_make_callback_x86(data, XINT(cctype));
+#else
+#ifdef SXEMACS
+ error("FFI Callbacks not supported on this configuration");
+#else
+ signal_ferror(Qinternal_error,
+ "FFI Callbacks not supported on this configuration");
+#endif /* SXEMACS */
#endif /* __i386__ */
return ptr;
}
/* various system shared libraries have been built and linked with */
/* GCC >= 2.8. -slb */
#if defined(GNU_MALLOC)
+#if defined(HAVE_MORECORE_HOOK)
static void voodoo_free_hook(void *mem)
{
+ /* If it no longer works, we'll know about it. For now there is really no
+ good alternatic. Shut the warning off
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+
/* Disable all calls to free() when SXEmacs is exiting and it doesn't */
/* matter. */
__free_hook =
(__typeof__(__free_hook))
#endif
voodoo_free_hook;
+#pragma GCC diagnostic pop
}
+#endif
#endif /* GNU_MALLOC */
DEFUN("kill-emacs", Fkill_emacs, 0, 1, "P", /*
shut_down_emacs(0, STRINGP(arg) ? arg : Qnil, 0);
#if defined(GNU_MALLOC)
+#if defined(HAVE_MORECORE_HOOK)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
__free_hook =
#if defined __GNUC__ || defined __INTEL_COMPILER
/* prototype of __free_hook varies with glibc version */
(__typeof__(__free_hook))
#endif
voodoo_free_hook;
+#pragma GCC diagnostic pop
+#endif
#endif
exit(INTP(arg) ? XINT(arg) : 0);
garbage_collect_1();
#ifdef PDUMP
+ SXE_SET_UNUSED(symfile_ext);
pdump(filename_ext);
#else
#define enter_debugger()
+void debug_backtrace();
+
void
assert_failed(const char *file, int line, const char *expr)
{
extern Lisp_Object Qzero, Qone;
#if defined HAVE_MPZ && (defined WITH_GMP || defined WITH_MP)
+extern Lisp_Object make_bigz(long);
#define make_integer(x) \
(NUMBER_FITS_IN_AN_EMACS_INT(x) ? make_int(x) : make_bigz(x))
#else
\f
Lisp_Object Veuler;
Lisp_Object Veuler_mascheroni;
-Lisp_Object Vpi;
+Lisp_Object Vbigfr_pi;
bigfr ent_scratch_bigfr;
static ase_nullary_operation_f Qent_mpfr_zero, Qent_mpfr_one;
Veuler_mascheroni = make_bigfr(0.0, 2048UL);
mpfr_const_euler(XBIGFR_DATA(Veuler_mascheroni), GMP_RNDN);
- Vpi = make_bigfr(0.0, 2048UL);
- mpfr_const_pi(XBIGFR_DATA(Vpi), GMP_RNDN);
+ Vbigfr_pi = make_bigfr(0.0, 2048UL);
+ mpfr_const_pi(XBIGFR_DATA(Vbigfr_pi), GMP_RNDN);
}
void syms_of_ent_mpfr(void)
/* just some dummy values atm, to make the dumper smile */
Veuler = make_int(1L);
Veuler_mascheroni = make_int(1L);
- Vpi = make_int(1L);
+ Vbigfr_pi = make_int(1L);
DEFVAR_CONST_LISP("euler", &Veuler /*
The value of Euler's constant e (2.7182818...).
DEFVAR_CONST_LISP("euler-mascheroni", &Veuler_mascheroni /*
The value of the Euler-Mascheroni constant (0.5772156...).
*/);
- DEFVAR_CONST_LISP("pi", &Vpi /*
+ DEFVAR_CONST_LISP("bigfr-pi", &Vbigfr_pi /*
The value of pi (3.1415926...).
*/);
extern Lisp_Object Veuler;
extern Lisp_Object Veuler_mascheroni;
-extern Lisp_Object Vpi;
+extern Lisp_Object Vbigfr_pi;
\f
typedef struct Lisp_Bigfr Lisp_Bigfr;
}
#if defined(HAVE_FPFLOAT) || defined(HAVE_MPFR) && defined WITH_MPFR
-DEFUN("log", Flog, 1, 3, 0, /*
-Return the natural logarithm of NUMBER.
-If second optional argument BASE is given, return the logarithm of
-NUMBER using that base.
-If third optional argument PRECISION is given, use its value
+
+#define RETURN_WHEN_INDEF(number) \
+ if (INDEFP(number)) { \
+ if (XINDEF_DATA(number) == POS_INFINITY) { \
+ return number; \
+ } else if (XINDEF_DATA(number) == NEG_INFINITY) { \
+ return make_indef(NOT_A_NUMBER); \
+ } else { \
+ return number; \
+ } \
+ }
+
+DEFUN("log10", Flog10, 1, 2, 0, /*
+Return the logarithm base 10 of NUMBER.
+If second optional argument PRECISION is given, use its value
(an integer) as precision.
*/
- (number, base, precision))
+ (number, precision))
{
+ RETURN_WHEN_INDEF(number);
+
#if defined HAVE_MPFR && defined WITH_MPFR
Lisp_Object bfrnumber;
- if (!NILP(base)) {
- Lisp_Object _logn, _logb;
- _logn = Flog(number, Qnil, precision);
- if (UNLIKELY(INDEFP(_logn))) {
- return _logn;
- }
- _logb = Flog(base, Qnil, precision);
- return ent_binop(ASE_BINARY_OP_QUO, _logn, _logb);
- }
-
- if (INDEFP(number)) {
- if (XINDEF_DATA(number) == POS_INFINITY) {
- return number;
- } else if (XINDEF_DATA(number) == NEG_INFINITY) {
- return make_indef(NOT_A_NUMBER);
- } else {
- return number;
- }
- }
-
bigfr_set_prec(ent_scratch_bigfr,
internal_get_precision(precision));
bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
- bigfr_log(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
+ bigfr_log10(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
return make_bigfr_bfr(ent_scratch_bigfr);
#else /* !HAVE_MPFR */
- if (INDEFP(number)) {
- goto indefcase;
- }
-
number = ent_lift(number, FLOAT_T, NULL);
+ RETURN_WHEN_INDEF(number);
+
if (FLOATP(number)) {
fpfloat d;
- d = log(XFLOAT_DATA(number));
+#if HAVE_LOG10
+ d = log10(XFLOAT_DATA(number));
return make_float(d);
- } else if (INDEFP(number)) {
- indefcase:
- if (XINDEF_DATA(number) == POS_INFINITY) {
- return number;
- } else if (XINDEF_DATA(number) == NEG_INFINITY) {
- return make_indef(NOT_A_NUMBER);
- } else {
- return number;
- }
+#elif HAVE_LOG2
+ static const fpflot log2_10 = log2(10);
+ d = log2(XFLOAT_DATA(number));
+ RETURN_WHEN_INDEF(d);
+ return make_float(d/log2_10);
+#elif HAVE_LOG
+ static const fpflot log_10 - log(10);
+ d = log(XFLOAT_DATA(number));
+ RETURN_WHEN_INDEF(d);
+ return make_float(d/log_10);
+#else
+ return ase_unary_operation_undefined(number);
+#endif
}
Fsignal(Qarith_error, list1(number));
#endif /* HAVE_MPFR */
}
-DEFUN("log10", Flog10, 1, 2, 0, /*
-Return the logarithm base 10 of NUMBER.
+DEFUN("log2", Flog2, 1, 2, 0, /*
+Return the logarithm base 2 of NUMBER.
If second optional argument PRECISION is given, use its value
(an integer) as precision.
*/
(number, precision))
{
+ RETURN_WHEN_INDEF(number);
+
#if defined HAVE_MPFR && defined WITH_MPFR
- Lisp_Object bfrnumber;
+ Lisp_Object bfrnumber;
- if (INDEFP(number)) {
- if (XINDEF_DATA(number) == POS_INFINITY)
- return number;
- else if (XINDEF_DATA(number) == NEG_INFINITY)
- return make_indef(NOT_A_NUMBER);
- else
- return number;
+ bigfr_set_prec(ent_scratch_bigfr,
+ internal_get_precision(precision));
+
+ bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
+ bigfr_log2(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
+ return make_bigfr_bfr(ent_scratch_bigfr);
+#else
+ number = ent_lift(number, FLOAT_T, NULL);
+
+ RETURN_WHEN_INDEF(number);
+
+ if (FLOATP(number)) {
+ fpfloat d;
+#if HAVE_LOG2
+ d = log2(XFLOAT_DATA(number));
+ return make_float(d);
+#elif HAVE_LOG
+ static const fpflot log_2 - log(2);
+ d = log(XFLOAT_DATA(number));
+ RETURN_WHEN_INDEF(d);
+ return make_float(d/log_2);
+#else
+ return ase_unary_operation_undefined(number);
+#endif
+ }
+
+ Fsignal(Qarith_error, list1(number));
+ return Qnil;
+
+ if (NILP(precision));
+#endif /* HAVE_MPFR */
+}
+
+DEFUN("log", Flog, 1, 3, 0, /*
+Return the natural logarithm of NUMBER.
+If second optional argument BASE is given, return the logarithm of
+NUMBER using that base.
+If third optional argument PRECISION is given, use its value
+(an integer) as precision.
+*/
+ (number, base, precision))
+{
+ RETURN_WHEN_INDEF(number);
+
+ if (INTEGERP(base)) {
+ switch(XINT(base)) {
+ case 2 : return Flog2 (number, precision);
+ case 10: return Flog10(number, precision);
+ default: break; /* Intentional Fall through */
+ }
+ }
+
+
+#if defined HAVE_MPFR && defined WITH_MPFR
+ if (!NILP(base)) {
+ /* Not all bignumber libs optimize log2, for instance MPFR
+ implements log2 in function of log. */
+ Lisp_Object _logn, _logb;
+ _logn = Flog(number, Qnil, precision);
+ RETURN_WHEN_INDEF(_logn);
+ _logb = Flog(base, Qnil, precision);
+ return ent_binop(ASE_BINARY_OP_QUO, _logn, _logb);
}
+ Lisp_Object bfrnumber;
+
bigfr_set_prec(ent_scratch_bigfr,
- internal_get_precision(precision));
+ internal_get_precision(precision));
bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
- bigfr_log10(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
+ bigfr_log(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
return make_bigfr_bfr(ent_scratch_bigfr);
#else /* !HAVE_MPFR */
- if (INDEFP(number)) {
- goto indefcase;
+ if (!NILP(base)) {
+ /* Processor implementations tend to give an edge to log2 */
+ Lisp_Object _logn, _logb;
+ _logn = Flog2(number, precision);
+ RETURN_WHEN_INDEF(_logn);
+ _logb = Flog2(base, precision);
+ return ent_binop(ASE_BINARY_OP_QUO, _logn, _logb);
}
number = ent_lift(number, FLOAT_T, NULL);
+ RETURN_WHEN_INDEF(number);
+
if (FLOATP(number)) {
- fpfloat d;
- d = log10(XFLOAT_DATA(number));
- return make_float(d);
- } else if (INDEFP(number)) {
- indefcase:
- if (XINDEF_DATA(number) == POS_INFINITY)
- return number;
- else if (XINDEF_DATA(number) == NEG_INFINITY)
- return make_indef(NOT_A_NUMBER);
- else
- return number;
+ fpfloat d;
+ d = log(XFLOAT_DATA(number));
+ return make_float(d);
}
Fsignal(Qarith_error, list1(number));
#endif /* HAVE_MPFR */
}
-#if defined HAVE_MPFR && defined WITH_MPFR
-DEFUN("log2", Flog2, 1, 2, 0, /*
-Return the logarithm base 2 of NUMBER.
-If second optional argument PRECISION is given, use its value
-(an integer) as precision.
-*/
- (number, precision))
-{
- Lisp_Object bfrnumber;
-
- if (INDEFP(number)) {
- if (XINDEF_DATA(number) == POS_INFINITY)
- return number;
- else if (XINDEF_DATA(number) == NEG_INFINITY)
- return make_indef(NOT_A_NUMBER);
- else
- return number;
- }
-
- bigfr_set_prec(ent_scratch_bigfr,
- internal_get_precision(precision));
-
- bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
- bigfr_log2(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
- return make_bigfr_bfr(ent_scratch_bigfr);
-}
-#endif /* HAVE_MPFR */
-
+#undef RETURN_WHEN_INDEF
DEFUN("sqrt", Fsqrt, 1, 2, 0, /*
Return the square root of NUMBER.
#endif
#if defined(HAVE_FPFLOAT) || defined(HAVE_MPFR) && defined WITH_MPFR
DEFSUBR(Flog);
-#if defined HAVE_MPFR && defined WITH_MPFR
DEFSUBR(Flog2);
-#endif /* HAVE_MPFR */
DEFSUBR(Flog10);
DEFSUBR(Fsqrt);
DEFSUBR(Fcube_root);
WITH_DLLIST_TRAVERSE(
eq_queue(eq),
if (!command_event_p((Lisp_Object)dllist_item)) {
- eqev = (Lisp_Object)dllist_pop_inner(eq_queue(eq), _el);
+ void *eqev_p=dllist_pop_inner(eq_queue(eq), _el);
+ eqev = (Lisp_Object)eqev_p;
break;
});
Return nil if FILENAME does not include a directory.
Otherwise return a directory spec.
Given a Unix syntax file name, returns a string ending in slash.
+
+Concatenating the return of file-name-directory and the string
+returned by file-name-nondirectory yields a complete pathname.
+
+Samples:
+filename file-name-directory file-name-nondirectory
+"/usr/lib" "/usr/" "lib"
+"/usr/lib/" "/usr/lib/" ""
+"/usr/" "/usr/" ""
+"/usr" "/" "usr"
+"usr" nil "usr"
+"/" "/" ""
+"." nil "."
+"./" "./" ""
+".." nil ".."
+
*/
(filename))
{
For example, in a Unix-syntax file name,
this is everything after the last slash,
or the entire name if it contains no slash.
+
+Concatenating the return of file-name-directory and the string
+returned by file-name-nondirectory yields a complete pathname.
+
+It is equivalent to the GNU version of basename.
+
+Samples:
+filename file-name-directory file-name-nondirectory
+"/usr/lib" "/usr/" "lib"
+"/usr/lib/" "/usr/lib/" ""
+"/usr/" "/usr/" ""
+"/usr" "/" "usr"
+"usr" nil "usr"
+"/" "/" ""
+"." nil "."
+"./" "./" ""
+".." nil ".."
+
*/
(filename))
{
DEFUN("file-basename", Ffile_basename, 1, 2, 0, /*
Return the basename of FILENAME sans its base directory.
-If EXTENSION is non-nil the extension is also removed if it matches the regexp.
-EXTENSION can be a list of regexps.
-For example, in a Unix-syntax file name,
-this is everything after the last slash,
-or the entire name if it contains no slash.
-It ignores trailing slash.
+
+If EXTENSION is non-nil the extension is also removed if it matches
+the regexp. EXTENSION can be a list of regexps.
+
+For example, in a Unix-syntax file name, this is everything after the
+last slash, or the entire name if it contains no slash.
+It ignores trailing slash unless filename is '/' in which case it
+returns '/'.
+
+Concatenating the string returned by file-dirname, a "/", and the
+string returned by file-basename yields a complete pathname.
+
+Sample returns (POSIX 1003.1 compliant):
+
+filename file-dirname file-basename
+/usr/lib /usr lib
+/usr/lib/ /usr lib
+/usr/ / usr
+usr . usr
+/ / /
+. . .
+./ . .
+.. . ..
+
*/
(filename, extension))
{
beg = XSTRING_DATA(filename);
end = p = beg + XSTRING_LENGTH(filename);
if ( IS_ANY_SEP(p[-1]) ) {
- p--;
- end--;
+ p--;
+ end--;
+ if (p == beg) {
+ return filename;
+ }
}
while (p != beg && !IS_ANY_SEP(p[-1]))
p--;
DEFUN("file-dirname", Ffile_dirname, 1, 1, 0, /*
-Return the directory component in file name FILENAME.
-Return nil if FILENAME does not include a directory.
-Otherwise return a directory spec.
-Given a Unix syntax file name, returns a string ending in slash.
-It ignores the trailing slash in FILENAME.
+Return the directory component in file name FILENAME as a directory
+spec.
+
+Given a Unix syntax file name, returns a string ending in slash. It
+ignores the trailing slash in FILENAME.
+
+Concatenating the string returned by file-dirname, a "/", and the
+string returned by file-basename yields a complete pathname.
+
+Sample returns (POSIX 1003.1 compliant):
+
+filename file-dirname file-basename
+/usr/lib /usr lib
+/usr/lib/ /usr lib
+/usr/ / usr
+usr . usr
+/ / /
+. . .
+./ . .
+.. . ..
+
*/
(filename))
{
/* This function can GC. GC checked 2000-07-28 ben */
- Bufbyte *beg, *p, *end;
- Lisp_Object handler;
-
+ Lisp_Object handler, result;
+ const char *res;
CHECK_STRING(filename);
/* If the file name has special constructs in it,
return call2_check_string_or_nil(handler, Qfile_dirname,
filename);
- beg = XSTRING_DATA(filename);
- end = p = beg + XSTRING_LENGTH(filename);
- if ( IS_ANY_SEP(p[-1]) ) {
- p--;
- end--;
- }
- while (p != beg && !IS_ANY_SEP(p[-1])
- )
- p--;
-
- if ( beg == p )
- return Qnil;
- return make_string(beg, p-beg);
+ res = xdirname((char*)XSTRING_DATA(filename));
+ result = make_string((const Bufbyte*)res, xstrlen(res));
+ xfree(res);
+ return result;
}
/* the old SXEmacs general includes and utility macros moved here: */
#include "sxe-utils.h"
+#include "sxe-memory.h"
/* ------------------------ dynamic arrays ------------------- */
(CONSP (hare) ? ((elt = XCAR (hare)), 1) : \
(NILP (hare) ? 0 : \
(signal_malformed_list_error (list), 0))); \
- \
- (hare = XCDR (hare)), \
+ (hare = XCDR (hare)), SXE_SET_UNUSED(elt), \
(void)((++len > suspicion_length) && \
((void)(((len & 1) != 0)&& \
((tortoise = XCDR (tortoise)), 0)), \
#define PRIVATE_EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, \
hare, tortoise, suspicion_length) \
+SXE_SET_UNUSED(elt_car),SXE_SET_UNUSED(elt_cdr); \
PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise, \
suspicion_length) \
if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1) \
{
return ALIGN_SIZE(offsetof(struct lstream_s, data) +
lstream_type_specific_size,
- ALIGNOF(max_align_t));
+ ALIGNOF(sxe_max_align_t));
}
static inline size_t
Lstream_data_count byte_count;
int flags;
- max_align_t data[1];
+ sxe_max_align_t data[1];
};
#define LSTREAM_TYPE_P(lstr, type) \
new_media_ffmpeg_rewind, NULL);
\f
+#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE
+#define AVCODEC_MAX_AUDIO_FRAME_SIZE 19200
+#endif
+
static int
media_ffmpeg_bitrate(AVCodecContext *enc)
{
char *media_ffmpeg_streaminfo(Lisp_Media_Stream *ms)
{
- AVFormatContext *avfc = NULL;
- char *out;
- int chars_left = 4095;
+ AVFormatContext *avfc = NULL;
+ AVDictionaryEntry *curr = NULL;
+ char *out = NULL;
+ int chars_left = 4095;
avfc = media_stream_data(ms);
out = xmalloc_atomic(chars_left+1);
- out[0] = '\0';
+ if (! out)
+ return out;
+
+ out[0] = '\0';
out[chars_left] = '\0';
/* cannot use ffmpeg on corrupt streams */
if (media_stream_driver(ms) != MYSELF || avfc == NULL)
return out;
-
- if (avfc->author && *avfc->author) {
- strncat(out, " :author \"", chars_left);
- chars_left -= 10;
- strncat(out, avfc->author, chars_left);
- chars_left -= strlen(avfc->author);
- strncat(out, "\"", chars_left--);
- }
- if (avfc->title && *avfc->title) {
- strncat(out, " :title: \"", chars_left);
- chars_left -= 10;
- strncat(out, avfc->title, chars_left);
- chars_left -= strlen(avfc->title);
- strncat(out, "\"", chars_left--);
- }
- if (avfc->year) {
- char year[12];
- int sz = snprintf(year, sizeof(year), "%d", avfc->year);
- assert(sz>=0 && sz<sizeof(year));
- strncat(out, " :year ", chars_left);
- chars_left -= 7;
- strncat(out, year, chars_left);
+
+ if (! avfc->metadata)
+ return out;
+
+ {
+ static const char *keys[] = { "author", "title", "date" };
+ static const size_t nkeys = sizeof(keys)/sizeof(keys[0]);
+ int i = 0;
+
+ for (i = 0; i < nkeys; ++i ) {
+ curr = av_dict_get(avfc->metadata,
+ keys[i],
+ curr,
+ AV_DICT_IGNORE_SUFFIX);
+ if (! curr)
+ continue;
+
+ strncat(out, " :", chars_left);
+ chars_left -= 2;
+ if (chars_left < 0)
+ break;
+
+ strncat(out, curr->key, chars_left);
+ chars_left -= strlen(curr->key);
+ if (chars_left < 0)
+ break;
+
+ strncat(out, " \"", chars_left);
+ chars_left -= 2;
+ if (chars_left < 0)
+ break;
+
+ strncat(out, curr->value, chars_left);
+ chars_left -= strlen(curr->value);
+ if (chars_left < 0)
+ break;
+
+ strncat(out, "\"", chars_left);
+ chars_left -= 1;
+ if (chars_left < 0)
+ break;
+ }
}
return out;
static AVFormatContext*
media_ffmpeg_open_file(const char *file)
{
-#if defined HAVE_AVFORMAT_ALLOC_CONTEXT
- AVFormatContext *avfc = avformat_alloc_context();
-#elif defined HAVE_AV_ALLOC_FORMAT_CONTEXT
- /* deprecated already, but `people' like Horst still use this */
- AVFormatContext *avfc = av_alloc_format_context();
-#else
-# error "Your ffmpeg library is too old. Adopt a new one."
-#endif /* HAVE_AVFORMAT_ALLOC_CONTEXT */
+ AVFormatContext *avfc = NULL;
/* open the file */
- if (av_open_input_file(&avfc, file, NULL, 0, NULL) < 0) {
+ if (avformat_open_input(&avfc, file, NULL, NULL) < 0) {
FFMPEG_DEBUG_AVF("opening file failed.\n");
- if (avfc)
- xfree(avfc);
return NULL;
}
/* Retrieve stream information */
- if (av_find_stream_info(avfc) < 0) {
+ if (avformat_find_stream_info(avfc, NULL) < 0) {
FFMPEG_DEBUG_AVS("opening stream inside file failed.\n");
- av_close_input_file(avfc);
- if (avfc)
- xfree(avfc);
+ avformat_close_input(&avfc);
return NULL;
}
\f
static int
-media_ffmpeg_vio_open(URLContext *h, const char *filename, int flags)
-{
- return 0;
-}
-
-static int
-media_ffmpeg_vio_read(URLContext *h, unsigned char *buf, int size)
+media_ffmpeg_vio_read(void *h, unsigned char *buf, int size)
{
- media_data *sd = (media_data*)h->priv_data;
+ media_data *sd = (media_data*)h;
FFMPEG_DEBUG_AVS("reading %d bytes to 0x%x, respecting seek %ld\n",
size, (unsigned int)buf, sd->seek);
return size;
}
-static int
-media_ffmpeg_vio_write(URLContext *h, unsigned char *buf, int size)
-{
- return -1;
-}
-
static int64_t
-media_ffmpeg_vio_seek(URLContext *h, int64_t pos, int whence)
+media_ffmpeg_vio_seek(void *h, int64_t pos, int whence)
{
- media_data *sd = (media_data*)h->priv_data;
+ media_data *sd = (media_data*)h;
FFMPEG_DEBUG_AVS("seeking to %ld via %d\n", (long int)pos, whence);
return sd->seek;
}
-static int
-media_ffmpeg_vio_close(URLContext *h)
-{
- if (h->priv_data)
- xfree(h->priv_data);
- h->priv_data = NULL;
- return 0;
-}
-
-/* this is a memory-i/o protocol in case we have to deal with string data */
-static URLProtocol media_ffmpeg_protocol = {
- "SXEmff",
- media_ffmpeg_vio_open,
- media_ffmpeg_vio_read,
- media_ffmpeg_vio_write,
- media_ffmpeg_vio_seek,
- media_ffmpeg_vio_close,
-};
-
/** Size of probe buffer, for guessing file type from file contents. */
#define PROBE_BUF_MIN 2048
#define PROBE_BUF_MAX 131072
AVFormatContext*
media_ffmpeg_open_data(char *data, size_t size)
{
-#if defined HAVE_AVFORMAT_ALLOC_CONTEXT
- AVFormatContext *avfc = avformat_alloc_context();
-#elif defined HAVE_AV_ALLOC_FORMAT_CONTEXT
- /* deprecated already, but `people' like Horst still use this */
- AVFormatContext *avfc = av_alloc_format_context();
-#else
-# error "Your ffmpeg library is too old. Adopt a new one."
-#endif /* HAVE_AVFORMAT_ALLOC_CONTEXT */
- AVProbeData *pd = NULL;
- ByteIOContext *bioctx = NULL;
- AVInputFormat *fmt = NULL;
- char file[] = "SXEmff:SXEmacs.mp3\000";
- media_data *sd = NULL;
-
- /* register our virtual i/o */
-#if defined HAVE_AV_REGISTER_PROTOCOL
- av_register_protocol(&media_ffmpeg_protocol);
-#elif defined HAVE_REGISTER_PROTOCOL
- register_protocol(&media_ffmpeg_protocol);
-#else
-# error "Get a recent ffmpeg or get a life."
-#endif
+ AVFormatContext *avfc = NULL;
+ AVIOContext *avio = NULL;
+ media_data *sd = NULL;
+ unsigned char *buffer = NULL;
+ static const int bufsize = 65536;
+
+ /* initialise our media_data. Note that we need to use
+ * ffmpeg's malloc because it will free it on cleaning of the
+ * context and we don't want allocators corrupting each other.
+ */
+ sd = av_malloc(sizeof(media_data));
+ if (!sd)
+ return NULL;
- /* initialise our media_data */
- sd = xnew_and_zero(media_data);
sd->length = size;
sd->seek = 0;
sd->data = data;
- /* register ffmpeg byteio */
- bioctx = xnew_and_zero(ByteIOContext);
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
- url_fopen(&bioctx, file, URL_RDONLY);
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
- url_fopen(bioctx, file, URL_RDONLY);
-#endif
- /* erm, register us at the byteio context */
- ((URLContext*)(bioctx->opaque))->priv_data = sd;
-
- /* take a probe */
- pd = xnew_and_zero(AVProbeData);
- pd->filename = file;
- pd->buf = NULL;
- pd->buf_size = 0;
-
- pd->buf = (void*)sd->data;
- pd->buf_size = PROBE_BUF_MIN;
- fmt = av_probe_input_format(pd, 1);
-
- /* if still no format found, error */
- if (!fmt) {
- xfree(pd);
- xfree(bioctx);
- xfree(sd);
- xfree(avfc);
+ /* allocate the buffer */
+ buffer = av_malloc(bufsize);
+ if (!buffer)
return NULL;
- }
- /* open the file */
- if (av_open_input_stream(&avfc, bioctx, file, fmt, NULL) < 0) {
- xfree(pd);
- xfree(bioctx);
- xfree(sd);
- xfree(avfc);
+ /* create ffmpeg avio context. Note that at this point thea
+ * AVIOContext has lifetime control of the previously
+ * allocated sd and buffer.
+ */
+ avio = avio_alloc_context(buffer,
+ bufsize,
+ 0, /* No writes */
+ sd,
+ media_ffmpeg_vio_read,
+ NULL,
+ media_ffmpeg_vio_seek);
+
+ /* create format context, and make it use the avio above.
+ Note that at this point avfc has lifetime control of avio,
+ through avformat_free_context */
+ avfc = avformat_alloc_context();
+ avfc->pb = avio;
+ avfc->flags = AVFMT_FLAG_CUSTOM_IO;
+
+ /* open the input */
+ if (avformat_open_input(&avfc, NULL, NULL, NULL) < 0) {
+ FFMPEG_DEBUG_AVF("opening file failed.\n");
+ /* Abundance of caution, as on failure open input
+ should clear the context, but when it does it also
+ sets avfc to NULL so this is safe. */
+ avformat_free_context(avfc);
return NULL;
}
-
+
/* Retrieve stream information */
- if (av_find_stream_info(avfc) < 0) {
- xfree(pd);
- xfree(bioctx);
- xfree(sd);
- xfree(avfc);
+ if (avformat_find_stream_info(avfc,NULL) < 0) {
+ avformat_close_input(&avfc);
return NULL;
}
FFMPEG_DEBUG_AVF("closing AVFormatContext: 0x%lx\n",
(long unsigned int)avfc);
if (avfc && avfc->iformat)
- av_close_input_file(avfc);
+ avformat_close_input(&avfc);
}
static void
mtap->samplerate = avcc->sample_rate;
mtap->bitrate = media_ffmpeg_bitrate(avcc);
+ int sample_bytes =
+ av_get_bytes_per_sample(avcc->sample_fmt);
+ mtap->samplewidth = 8 * sample_bytes;
+ mtap->framesize = mtap->channels * sample_bytes;
/* samplewidth and framesize */
switch (avcc->sample_fmt) {
- case SAMPLE_FMT_U8:
- mtap->samplewidth = 8;
- mtap->framesize = mtap->channels * 1;
+ case AV_SAMPLE_FMT_U8:
+ assert(sample_bytes == 1);
mtap->msf = sxe_msf_U8;
break;
- case SAMPLE_FMT_S16:
- mtap->samplewidth = 16;
- mtap->framesize = mtap->channels * 2;
+ case AV_SAMPLE_FMT_S16:
+ assert(sample_bytes == 2);
mtap->msf = sxe_msf_S16;
break;
-#if defined SAMPLE_FMT_S24
- case SAMPLE_FMT_S24:
- mtap->samplewidth = 32;
- mtap->framesize = mtap->channels * 4;
- mtap->msf = sxe_msf_S24;
- break;
-#endif /* SAMPLE_FMT_S24 */
- case SAMPLE_FMT_S32:
- mtap->samplewidth = 32;
- mtap->framesize = mtap->channels * 4;
+ case AV_SAMPLE_FMT_S32:
+ assert(sample_bytes == 4);
mtap->msf = sxe_msf_S32;
break;
- case SAMPLE_FMT_FLT:
- mtap->samplewidth = 8*sizeof(float);
- mtap->framesize = mtap->channels * sizeof(float);
+ case AV_SAMPLE_FMT_FLT:
+ assert(sample_bytes == sizeof(float));
mtap->msf = sxe_msf_FLT;
break;
- case SAMPLE_FMT_NONE:
- default:
+ case AV_SAMPLE_FMT_DBL:
+ assert(sample_bytes == sizeof(double));
+ mtap->msf = sxe_msf_DBL;
+ break;
+ case AV_SAMPLE_FMT_NONE:
mtap->samplewidth = 0;
break;
+ default:
+ {
+ char fmt_name[128];
+ error(("Unsupported sample format: "
+ "%s (%d), %d bytes/sample"),
+ av_get_sample_fmt_string(
+ fmt_name,
+ sizeof(fmt_name),
+ avcc->sample_fmt),
+ avcc->sample_fmt,
+ sample_bytes);
+ }
}
}
mtap->endianness = 0;
mkfp = media_stream_kind_properties(ms).fprops;
TO_EXTERNAL_FORMAT(LISP_STRING, mkfp->filename,
ALLOCA, (file, file_len), Qnil);
+ SXE_SET_UNUSED(file_len);
+
avfc = media_ffmpeg_open_file(file);
if (!avfc) {
media_stream_set_meths(ms, NULL);
}
/* store the filesize */
- mkfp->filesize = avfc->file_size;
+ mkfp->filesize = avio_size(avfc->pb);
break;
}
case MKIND_STRING: {
avcc = avst->codec;
if (avcc &&
avcc->codec_id != CODEC_ID_NONE &&
- avcc->codec_type != CODEC_TYPE_DATA &&
+ avcc->codec_type != AVMEDIA_TYPE_DATA &&
(avc = avcodec_find_decoder(avcc->codec_id)) &&
- (avc && (avcodec_open(avcc, avc) >= 0))) {
+ (avc && (avcodec_open2(avcc, avc, NULL) >= 0))) {
/* create a substream */
mss = make_media_substream_append(ms);
switch ((unsigned int)avcc->codec_type) {
- case CODEC_TYPE_VIDEO:
+ case AVMEDIA_TYPE_VIDEO:
/* assign substream props */
media_substream_type(mss) = MTYPE_VIDEO;
media_ffmpeg_analyse_video(mss, avfc, st);
break;
- case CODEC_TYPE_AUDIO:
+ case AVMEDIA_TYPE_AUDIO:
/* assign substream props */
media_substream_type(mss) = MTYPE_AUDIO;
media_ffmpeg_analyse_audio(mss, avfc, st);
/* set some stream handlers */
media_stream_set_meths(ms, media_ffmpeg);
break;
- case CODEC_TYPE_DATA:
+ case AVMEDIA_TYPE_DATA:
media_substream_type(mss) = MTYPE_IMAGE;
break;
default:
AVFormatContext *avfc;
AVStream *avst;
AVCodecContext *avcc;
- AVCodec *avc;
+ const AVCodec *avc;
AVPacket pkt;
/* buffering */
/* the size we present here, is _not_ the size we want, however
avst = avfc->streams[si];
avcc = avst->codec;
avc = avcc->codec;
+ SXE_SET_UNUSED(avc);
/* unpack the substream */
if ((mtap = media_substream_type_properties(mss).aprops) == NULL) {
dec = pkt.size;
/* decode the demuxed packet */
-#ifdef HAVE_AVCODEC_DECODE_AUDIO2
+#ifdef HAVE_AVCODEC_DECODE_AUDIO3
+/* prefer decode_audio3() if available */
+ size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
+ declen = avcodec_decode_audio3(
+ avcc, (void*)((char*)outbuf+bufseek),
+ &size, &pkt);
+#elif HAVE_AVCODEC_DECODE_AUDIO2
/* prefer decode_audio2() if available */
size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
declen = avcodec_decode_audio2(
(long long int)pkt.pts,
(long long int)pkt.dts,
pkt.size, size, declen);
+ /* Because FFMPEG_DEBUG_AVF may expand to nothing ... */
+ SXE_SET_UNUSED(declen);
/* memcpy(outbuf+bufseek, (char*)buffer, size); */
bufseek += size;
/* since we have only one decoding thread, we can use a global
variable instead of a thread local variable */
-static VideoState *global_video_state;
AVPacket flush_pkt;
/* packet queue handling */
static uint64_t global_video_pkt_pts = AV_NOPTS_VALUE;
static int
-my_get_buffer(struct AVCodecContext *c, AVFrame *pic)
+my_get_buffer(struct AVCodecContext *c, AVFrame *pic, int flags)
{
- int ret= avcodec_default_get_buffer(c, pic);
+ int ret= avcodec_default_get_buffer2(c, pic, flags);
uint64_t *pts= av_malloc(sizeof(uint64_t));
*pts= global_video_pkt_pts;
pic->opaque= pts;
return ret;
}
-static void
-my_release_buffer(struct AVCodecContext *c, AVFrame *pic)
-{
- if(pic) av_freep(&pic->opaque);
- avcodec_default_release_buffer(c, pic);
-}
-
-
static int
stream_component_open(VideoState *is, int stream_index, Lisp_Media_Stream *ms)
{
enc = ic->streams[stream_index]->codec;
/* prepare audio output */
- if (enc->codec_type == CODEC_TYPE_AUDIO) {
+ if (enc->codec_type == AVMEDIA_TYPE_AUDIO) {
#if 0
wanted_spec.freq = enc->sample_rate;
wanted_spec.format = AUDIO_S16SYS;
enc->error_resilience = FF_ER_CAREFUL; /* error_resilience; */
#endif
enc->error_concealment = 3; /* error_concealment; */
+ if (1 /* thread_count */ > 1)
+ enc->thread_count = 1 /* thread_count */;
+
if (!codec ||
- avcodec_open(enc, codec) < 0)
+ avcodec_open2(enc, codec, NULL) < 0)
return -1;
- if (1 /* thread_count */ > 1)
- avcodec_thread_init(enc, 1 /*thread_count*/);
- enc->thread_count= 1 /* thread_count */;
/* create a substream */
mss = make_media_substream_append(ms);
switch ((unsigned int)enc->codec_type) {
- case CODEC_TYPE_AUDIO:
+ case AVMEDIA_TYPE_AUDIO:
is->audio_stream = stream_index;
is->audio_st = ic->streams[stream_index];
is->audio_buf_size = 0;
media_substream_type(mss) = MTYPE_AUDIO;
media_ffmpeg_analyse_audio(mss, is->ic, stream_index);
break;
- case CODEC_TYPE_VIDEO:
+ case AVMEDIA_TYPE_VIDEO:
is->video_stream = stream_index;
is->video_st = ic->streams[stream_index];
packet_queue_init(&is->videoq);
is->video_tid = 0 /* SDL_CreateThread(video_thread, is) */;
- enc-> get_buffer= my_get_buffer;
- enc->release_buffer= my_release_buffer;
-
+ enc->get_buffer2 = my_get_buffer;
media_substream_type(mss) = MTYPE_VIDEO;
+
media_ffmpeg_analyse_video(mss, is->ic, stream_index);
break;
- case CODEC_TYPE_SUBTITLE:
+ case AVMEDIA_TYPE_SUBTITLE:
is->subtitle_stream = stream_index;
is->subtitle_st = ic->streams[stream_index];
packet_queue_init(&is->subtitleq);
enc = ic->streams[stream_index]->codec;
switch ((unsigned int)enc->codec_type) {
- case CODEC_TYPE_AUDIO:
+ case AVMEDIA_TYPE_AUDIO:
packet_queue_abort(&is->audioq);
#if 0
SDL_CloseAudio();
#endif
packet_queue_end(&is->audioq);
break;
- case CODEC_TYPE_VIDEO:
+ case AVMEDIA_TYPE_VIDEO:
packet_queue_abort(&is->videoq);
/* note: we also signal this mutex to make sure we deblock the
#endif
packet_queue_end(&is->videoq);
break;
- case CODEC_TYPE_SUBTITLE:
+ case AVMEDIA_TYPE_SUBTITLE:
packet_queue_abort(&is->subtitleq);
/* note: we also signal this mutex to make sure we deblock the
avcodec_close(enc);
switch ((unsigned int)enc->codec_type) {
- case CODEC_TYPE_AUDIO:
+ case AVMEDIA_TYPE_AUDIO:
is->audio_st = NULL;
is->audio_stream = -1;
break;
- case CODEC_TYPE_VIDEO:
+ case AVMEDIA_TYPE_VIDEO:
is->video_st = NULL;
is->video_stream = -1;
break;
- case CODEC_TYPE_SUBTITLE:
+ case AVMEDIA_TYPE_SUBTITLE:
is->subtitle_st = NULL;
is->subtitle_stream = -1;
break;
static void
dump_stream_info(const AVFormatContext *s)
{
- if (s->track != 0)
- fprintf(stderr, "Track: %d\n", s->track);
- if (s->title[0] != '\0')
- fprintf(stderr, "Title: %s\n", s->title);
- if (s->author[0] != '\0')
- fprintf(stderr, "Author: %s\n", s->author);
- if (s->copyright[0] != '\0')
- fprintf(stderr, "Copyright: %s\n", s->copyright);
- if (s->comment[0] != '\0')
- fprintf(stderr, "Comment: %s\n", s->comment);
- if (s->album[0] != '\0')
- fprintf(stderr, "Album: %s\n", s->album);
- if (s->year != 0)
- fprintf(stderr, "Year: %d\n", s->year);
- if (s->genre[0] != '\0')
- fprintf(stderr, "Genre: %s\n", s->genre);
+ static const char *keys[] = {
+ "track", "title", "author", "copyright", "comment",
+ "album", "date", "genre"
+ };
+ static const size_t nkeys = sizeof(keys)/sizeof(keys[0]);
+ int i = 0;
+ AVDictionaryEntry *curr = NULL;
+ if (! s->metadata) {
+ fprintf(stderr, "No metadata\n");
+ return;
+ }
+
+ for (i = 0; i < nkeys; ++i ) {
+ curr = av_dict_get(s->metadata,
+ keys[i],
+ curr,
+ AV_DICT_IGNORE_SUFFIX);
+ if (curr)
+ fprintf(stderr, "%s: %s\n", curr->key, curr->value);
+ }
}
enum {
static VideoState *
stream_open(char *filename, size_t filelen)
{
- VideoState *is = xnew(VideoState);
- AVFormatParameters params, *ap = ¶ms;
- int err = 0;
+ VideoState *is = xnew(VideoState);
+ AVDictionary *options = NULL;
+ int err = 0;
is->filename = filename;
is->filelen = filelen;
is->av_sync_type = AV_SYNC_AUDIO_MASTER;
is->parse_tid = 0; /* SDL_CreateThread(decode_thread, is); */
- memset(ap, 0, sizeof(*ap));
+#if 0
/* we force a pause when starting an RTSP stream */
ap->initial_pause = 1;
ap->height= 0; /* frame_height; */
ap->time_base= (AVRational){1, 25};
ap->pix_fmt = PIX_FMT_NONE; /* frame_pix_fmt; */
+#endif
- err = av_open_input_file(&is->ic, is->filename, is->iformat, 0, ap);
+ err = avformat_open_input(&is->ic, is->filename, is->iformat, &options);
if (UNLIKELY(err < 0)) {
FFMPEG_DEBUG_AVF("Could not open \"%s\" (errno %d)\n",
is->filename, err);
}
if (!use_play) {
- err = av_find_stream_info(vs->ic);
+ err = avformat_find_stream_info(vs->ic, NULL);
if (err < 0) {
FFMPEG_DEBUG_AVF("\"%s\": "
"could not find codec parameters\n",
}
/* FIXME hack,
* ffplay maybe should not use url_feof() to test for the end */
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
vs->ic->pb->eof_reached = 0;
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
- vs->ic->pb.eof_reached = 0;
-#endif
}
/* now we can begin to play (RTSP stream only) */
av_read_play(vs->ic);
if (use_play) {
- err = av_find_stream_info(vs->ic);
+ err = avformat_find_stream_info(vs->ic, NULL);
if (err < 0) {
FFMPEG_DEBUG_AVF("\"%s\": "
"could not find codec parameters\n",
for (size_t i = 0; i < vs->ic->nb_streams; i++) {
AVCodecContext *enc = vs->ic->streams[i]->codec;
switch ((unsigned int)enc->codec_type) {
- case CODEC_TYPE_AUDIO:
+ case AVMEDIA_TYPE_AUDIO:
if ((audio_index < 0 || wanted_audio_stream-- > 0)) {
audio_index = i;
}
break;
- case CODEC_TYPE_VIDEO:
+ case AVMEDIA_TYPE_VIDEO:
if ((video_index < 0 || wanted_video_stream-- > 0)) {
video_index = i;
}
}
}
if (1 /* show_status */) {
- dump_format(vs->ic, 0, vs->filename, 0);
+ av_dump_format(vs->ic, 0, vs->filename, 0);
dump_stream_info(vs->ic);
}
if (is->audioq.size > MAX_AUDIOQ_SIZE ||
is->videoq.size > MAX_VIDEOQ_SIZE ||
is->subtitleq.size > MAX_SUBTITLEQ_SIZE ||
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
- url_feof(is->ic->pb)
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
- url_feof(&is->ic->pb)
-#endif
- ) {
+ avio_feof(is->ic->pb)) {
/* wait 10 ms */
usleep(10);
continue;
}
ret = av_read_frame(is->ic, pkt);
if (ret < 0) {
- if (url_ferror(
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
- is->ic->pb
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
- &is->ic->pb
-#endif
- ) == 0) {
+ if (is->ic->pb->error == 0) {
usleep(100); /* wait for user event */
continue;
} else
}
ret = 0;
- /* disable interrupting */
- global_video_state = NULL;
/* close each stream */
if (is->audio_stream >= 0)
if (is->subtitle_stream >= 0)
stream_component_close(is, is->subtitle_stream);
if (is->ic) {
- av_close_input_file(is->ic);
+ avformat_close_input(&is->ic);
is->ic = NULL; /* safety */
}
+
+#if 0
url_set_interrupt_cb(NULL);
+#endif
if (ret != 0) {
#if 0
media_ffmpeg_available_formats(void)
{
Lisp_Object formats;
- AVInputFormat *avif;
+ AVInputFormat *avif = NULL;
formats = Qnil;
av_register_all();
- avif = first_iformat;
+ avif = av_iformat_next(avif);
while (avif) {
if (avif->name) {
Fintern(build_string(avif->name), Qnil);
formats = Fcons(fmtname, formats);
}
- avif = avif->next;
+ avif = av_iformat_next(avif);
}
return formats;
#define INCLUDED_media_ffmpeg_h_
#include "media.h"
+
#if defined HAVE_LIBAVFORMAT_AVFORMAT_H
# include <libavformat/avformat.h>
#elif defined HAVE_FFMPEG_AVFORMAT_H
# include <avformat.h>
#endif
+#if defined HAVE_LIBAVCODEC_AVCODEC_H
+# include <libavcodec/avcodec.h>
+#elif defined HAVE_FFMPEG_AVCODEC_H
+# include <ffmpeg/avcodec.h>
+#elif defined HAVE_AVCODEC_H
+# include <avcodec.h>
+#endif
+
+#if defined HAVE_LIBAVUTIL_DICT_H
+# include <libavutil/dict.h>
+#elif defined HAVE_FFMPEG_DICT_H
+# include <ffmpeg/dict.h>
+#endif
+
+#if defined HAVE_LIBAVUTIL_TIME_H
+# include <libavutil/time.h>
+#elif defined HAVE_FFMPEG_TIME_H
+# include <ffmpeg/time.h>
+#endif
+
/* Newer ffmpeg do not declare this macro... */
#ifndef DECLARE_ALIGNED
#ifdef __ICC
mkfp = media_stream_kind_properties(ms).fprops;
TO_EXTERNAL_FORMAT(LISP_STRING, mkfp->filename,
ALLOCA, (file, file_len), Qnil);
+ SXE_SET_UNUSED(file_len);
+
if (file == NULL || (fd = open(file, O_RDONLY, 0)) < 0) {
xfree(data);
return;
/* fetch framesize */
framesize = mtap->framesize;
+ SXE_SET_UNUSED(framesize);
/* prepare mad */
mads = madd->stream;
mkfp = media_stream_kind_properties(ms).fprops;
TO_EXTERNAL_FORMAT(LISP_STRING, mkfp->filename,
ALLOCA, (file, file_len), Qnil);
+ SXE_SET_UNUSED(file_len);
+
if ( file != NULL ) {
sf = sf_open(file, SFM_READ, sfinfo);
}
return;
}
+DEFINE_MEDIA_SAMPLE_FORMAT_SIMPLE(sxe_msf_DBL);
+
+static void
+sxe_msf_DBL_up(void *d, void *s, size_t len)
+{
+ /* convert double samples to internal format (S24in32) */
+ size_t i;
+ int32_t *dst = d;
+ double *src = s;
+
+ /* len is the number of samples (== #frame * #channels) */
+ MEDIA_DEBUG_FMT("upsampling DBL->internal: %u samples\n", len);
+
+ for (i = 0; i < len; i++) {
+ dst[i] = (int32_t)(src[i] * SXE_MAX_S24);
+ }
+ MEDIA_DEBUG_FMT("s00:%f d00:%d s01:%f d01:%d\n",
+ src[0], dst[0], src[1], dst[1]);
+
+ return;
+}
+
+static void
+sxe_msf_DBL_down(void *d, void *s, size_t len)
+{
+ /* convert samples from internal format (S24in32) to double */
+ int i;
+ float *dst = d;
+ int32_t *src = s;
+
+ /* len is the number of samples (== #frame * #channels) */
+ MEDIA_DEBUG_FMT("downsampling internal->DBL: %u samples\n", len);
+
+ for (i = len-1; i >= 0; i--) {
+ dst[i] = (double)(src[i]) / SXE_MAX_S24;
+ }
+ MEDIA_DEBUG_FMT("d00:%f d01:%f\n", dst[0], dst[1]);
+
+ return;
+}
+
/* `effects' */
DEFINE_MEDIA_SAMPLE_EFFECT(sxe_mse_1ch_to_2ch, _sxe_mse_1ch_to_2ch);
DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_U8);
DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_S16);
DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_FLT);
+DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_DBL);
DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_S32);
DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_S24); /* format internally used */
SXE_MUTEX_LOCK(&aj->mtx);
sasd = audio_job_device_data(aj);
+ SXE_SET_UNUSED(sasd);
+
if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
SXE_MUTEX_UNLOCK(&aj->mtx);
return;
SXE_MUTEX_LOCK(&aj->mtx);
sasd = audio_job_device_data(aj);
+ SXE_SET_UNUSED(sasd);
+
if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
SXE_MUTEX_UNLOCK(&aj->mtx);
return;
\f
/* pull one channel out of a multi-channel stream */
static size_t
+demux_internal(float *dst, char *src,
+ size_t n, int chan, sound_jack_aj_data_t *f);
+static size_t
demux_internal(float *dst, char *src,
size_t n, int chan, sound_jack_aj_data_t *f)
{
SXE_MUTEX_LOCK(&aj->mtx);
sasd = audio_job_device_data(aj);
+ SXE_SET_UNUSED(sasd);
+
if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
SXE_MUTEX_UNLOCK(&aj->mtx);
return;
aj = userdata;
SXE_MUTEX_LOCK(&aj->mtx);
mss = aj->substream;
+ SXE_SET_UNUSED(mss);
+
sjsd = audio_job_device_data(aj);
buffer = aj->buffer;
+ SXE_SET_UNUSED(buffer);
#ifdef EF_USE_ASYNEQ
/* stuff on the event queue? */
SXE_MUTEX_LOCK(&aj->mtx);
sasd = audio_job_device_data(aj);
+ SXE_SET_UNUSED(sasd);
+
if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
SXE_MUTEX_UNLOCK(&aj->mtx);
return;
/* Checks that aliasee names a coding-system */
real_coding_system = Fget_coding_system(aliasee);
+ SXE_SET_UNUSED(real_coding_system);
/* Check for coding system alias loops */
if (EQ(alias, aliasee))
void
autodetect_real_coding_system(lstream_t stream, Lisp_Object * codesys_in_out,
- eol_type_t * eol_type_in_out)
+ eol_type_t * eol_type_in_out);
+
+void
+autodetect_real_coding_system(lstream_t stream, Lisp_Object * codesys_in_out,
+ eol_type_t * eol_type_in_out)
{
- static const char mime_name_valid_chars[] =
+ static const char mime_name_valid_chars[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789"
while (*p == ' ' || *p == '\t') {
p++;
}
-
+
/* Get coding system name */
save = *suffix;
*suffix = '\0';
}
break;
}
+ /* Try " coding:" */
+ if (NILP(coding_system)) {
+ for (p = local_vars_beg, scan_end = suffix - LENGTH(" coding:?");
+ p <= scan_end; p++) {
+ Extbyte save;
+ int n;
+
+ if (memcmp(" coding:", p, LENGTH(" coding:")) != 0) {
+ continue;
+ }
+ if (p != local_vars_beg && strchr(" \t;", *p) == NULL ) {
+ continue;
+ }
+ p += LENGTH(" coding:");
+ while (*p == ' ' || *p == '\t') {
+ p++;
+ }
+
+ /* Get coding system name */
+ save = *suffix;
+ *suffix = '\0';
+ /* Characters valid in a MIME charset
+ name (rfc 1521), and in a Lisp
+ symbol name. */
+ n = strspn((char *)p, mime_name_valid_chars);
+ *suffix = save;
+ if (n > 0) {
+ save = p[n];
+ p[n] = '\0';
+ coding_system = Ffind_coding_system(
+ intern((char *)p));
+ p[n] = save;
+ }
+ break;
+ }
+ }
break;
}
break;
} \
} \
} \
+ SXE_SET_UNUSED(bytes); \
} while (0)
/* Read one byte from the current input buffer into Rth register. */
aligned_sizeof_opaque(size_t opaque_size)
{
return ALIGN_SIZE(offsetof(Lisp_Opaque, data) + opaque_size,
- ALIGNOF(max_align_t));
+ ALIGNOF(sxe_max_align_t));
}
static size_t sizeof_opaque(const void *header)
typedef struct Lisp_Opaque {
struct lcrecord_header header;
size_t size;
- max_align_t data[1];
+ sxe_max_align_t data[1];
} Lisp_Opaque;
DECLARE_LRECORD(opaque, Lisp_Opaque);
Lisp_Object Qssl2, Qssl23, Qssl3, Qtls1;
+/* Problem Ciphers */
+Lisp_Object QAES_256_XTS, QAES_128_XTS, Qid_aes256_CCM, Qid_aes256_GCM;
+Lisp_Object Qid_aes192_CCM, Qid_aes192_GCM, Qid_aes128_CCM;
+Lisp_Object Qid_aes128_GCM, Qid_aes256_wrap, Qid_aes192_wrap;
+Lisp_Object Qid_aes128_wrap, QCAMELLIA_256_CFB8, QCAMELLIA_192_CFB8;
+Lisp_Object QCAMELLIA_128_CFB8, QCAMELLIA_256_CFB1, QCAMELLIA_192_CFB1;
+Lisp_Object QCAMELLIA_128_CFB1, QDES_EDE3_CFB8, QDES_EDE3_CFB1, QDES_CFB8;
+Lisp_Object QDES_CFB1, QAES_256_CFB8, QAES_192_CFB8, QAES_128_CFB8;
+Lisp_Object QAES_256_CFB1, QAES_192_CFB1, QAES_128_CFB1;
+Lisp_Object Qid_smime_alg_CMS3DESwrap;
+Lisp_Object Vossl_cipher_blacklist;
+int ossl_check_cipher(Lisp_Object);
+
extern Lisp_Object Qfile_readable_p;
extern Lisp_Object Qfile_writable_p;
return digests;
}
+int
+ossl_check_cipher(Lisp_Object cipher)
+{
+ if (!NILP(Fmember(cipher, Vossl_cipher_blacklist))) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
DEFUN("ossl-available-ciphers", Fossl_available_ciphers, 0, 0, 0, /*
Return a list of cipher algorithms in the underlying crypto library.
/* is there a better way to get the size of the nid list? */
for (nid = 10000; nid >= 0; --nid) {
const EVP_CIPHER *cipher = EVP_get_cipherbynid(nid);
- if (cipher) {
+ if (cipher &&
+ (ossl_check_cipher(intern(OBJ_nid2sn(nid))) == 0)) {
ciphers = Fcons(intern(OBJ_nid2sn(nid)), ciphers);
}
}
int size = ossl_digest_size(digest);
if (size < 0)
- error ("no such cipher");
+ error ("no such digest");
return make_int(size);
}
do { \
int __kl; \
const EVP_CIPHER *__ciph; \
- \
+ \
+ if (ossl_check_cipher(var) != 0) \
+ error("use of blacklisted cipher prohibited"); \
+ \
OpenSSL_add_all_ciphers(); \
\
__ciph = EVP_get_cipherbyname( \
mdctx = xnew(EVP_MD_CTX);
EVP_MD_CTX_init(mdctx);
md_blocksize = (unsigned int)(EVP_MD_block_size(md) / 8);
+ SXE_SET_UNUSED(md_blocksize);
EVP_DigestInit_ex(mdctx, md, NULL);
CHECK_SYMBOL(digest);
CHECK_NATNUM(count);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
if (!XINT(count))
error ("count has to be a non-zero positive integer");
CHECK_STRING(key);
CHECK_STRING(iv);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
TO_EXTERNAL_FORMAT(LISP_STRING, string,
C_STRING_ALLOCA, string_ext, OSSL_CODING);
string_len = OSSL_STRING_LENGTH(string);
CHECK_STRING(key);
CHECK_STRING(iv);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
if (!NILP(outfile)) {
CHECK_STRING(outfile);
outfile = Fexpand_file_name(outfile, Qnil);
CHECK_STRING(key);
CHECK_STRING(iv);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
TO_EXTERNAL_FORMAT(LISP_STRING, string,
C_STRING_ALLOCA, string_ext, OSSL_CODING);
string_len = OSSL_STRING_LENGTH(string);
CHECK_STRING(key);
CHECK_STRING(iv);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
if (!NILP(outfile)) {
CHECK_STRING(outfile);
outfile = Fexpand_file_name(outfile, Qnil);
CHECK_EVPPKEY(pkey);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
pk[0] = (XEVPPKEY(pkey))->evp_pkey;
if (!ossl_pkey_has_public_data(pk[0])) {
error ("cannot seal, key has no public key data");
CHECK_STRING(ekey);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
pk = (XEVPPKEY(pkey))->evp_pkey;
if (!ossl_pkey_has_private_data(pk))
error ("cannot open, key has no private key data");
pk = XEVPPKEY(pkey)->evp_pkey;
pk509 = XEVPPKEY(pkey)->x509;
+ SXE_SET_UNUSED(pk509);
if ((fp = fopen((char *)XSTRING_DATA(file), "w")) == NULL)
error ("error opening file.");
pk = XEVPPKEY(pkey)->evp_pkey;
pk509 = XEVPPKEY(pkey)->x509;
+ SXE_SET_UNUSED(pk509);
if (!ossl_pkey_has_private_data(pk))
return Fossl_pem_write_public_key(file, pkey);
CHECK_SYMBOL(cipher);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
OpenSSL_add_all_algorithms();
if (NILP(cipher)) {
CHECK_SYMBOL(cipher);
+ if (ossl_check_cipher(cipher) != 0)
+ error("use of blacklisted cipher prohibited");
+
OpenSSL_add_all_algorithms();
if (NILP(cipher)) {
static Lisp_Object
ossl_ssl_prepare_cmeth(Lisp_Object method)
{
- SSL_METHOD *meth = NULL;
+ SSL_METHOD *meth = NULL;
Lisp_SSL_CONN *lisp_ssl_conn;
/* start preparing the conn object */
SSL_library_init();
SSL_load_error_strings();
+ /* I would love to make 'meth' const SSL_METHOD* as well as the
+ 'ssl_meth' member of 'Lisp_SSL_CONN' unfortunately not all
+ supported versions of OpenSSL then take const SSL_METHOD*
+ as arguments, so turning off the cast qualifier warning and
+ store non-const is a more reasonable solution.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
if (0) {
} else if (EQ(method, Qssl2)) {
#if HAVE_SSLV2_CLIENT_METHOD
error("default tlsv1 client method not supported");
#endif
}
+#pragma GCC diagnostic pop
if (!RAND_status())
error("OSSL: not enough random data");
SSL_library_init();
SSL_load_error_strings();
+ /* I would love to make 'meth' const SSL_METHOD* as well as the
+ 'ssl_meth' member of 'Lisp_SSL_CONN' unfortunately not all
+ supported versions of OpenSSL then take const SSL_METHOD*
+ as arguments, so turning off the cast qualifier warning and
+ store non-const is a more reasonable solution.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
if (0) {
} else if (EQ(method, Qssl2)) {
#if HAVE_SSLV2_SERVER_METHOD
error("default sslv23 client method not supported");
#endif
}
+#pragma GCC diagnostic pop
if (!RAND_status())
error("OSSL: not enough random data");
error("SSL connection dead");
conn = XSSLCONN(ssl_conn)->ssl_conn;
+ SXE_SET_UNUSED(conn);
+
process = XSSLCONN(ssl_conn)->parent;
/* Make sure the process is really alive. */
/* store the original process filter */
proc_filter = XPROCESS(process)->filter;
+ SXE_SET_UNUSED(proc_filter);
ret = Lstream_write(out, XSTRING_DATA(string), XSTRING_LENGTH(string));
Lstream_flush(out);
DEFSUBR(Fossl_x509_not_before);
DEFSUBR(Fossl_x509_not_after);
DEFSUBR(Fossl_x509_signature_type);
+
+/* Problem ciphers */
+ defsymbol(&QAES_256_XTS, "AES-256-XTS");
+ defsymbol(&QAES_128_XTS, "AES-128-XTS");
+ defsymbol(&Qid_aes256_CCM, "id-aes256-CCM");
+ defsymbol(&Qid_aes256_GCM, "id-aes256-GCM");
+ defsymbol(&Qid_aes192_CCM, "id-aes192-CCM");
+ defsymbol(&Qid_aes192_GCM, "id-aes192-GCM");
+ defsymbol(&Qid_aes128_CCM, "id-aes128-CCM");
+ defsymbol(&Qid_aes128_GCM, "id-aes128-GCM");
+ defsymbol(&Qid_aes256_wrap, "id-aes256-wrap");
+ defsymbol(&Qid_aes192_wrap, "id-aes192-wrap");
+ defsymbol(&Qid_aes128_wrap, "id-aes128-wrap");
+ defsymbol(&QCAMELLIA_256_CFB8, "CAMELLIA-256-CFB8");
+ defsymbol(&QCAMELLIA_192_CFB8, "CAMELLIA-192-CFB8");
+ defsymbol(&QCAMELLIA_128_CFB8, "CAMELLIA-128-CFB8");
+ defsymbol(&QCAMELLIA_256_CFB1, "CAMELLIA-256-CFB1");
+ defsymbol(&QCAMELLIA_192_CFB1, "CAMELLIA-192-CFB1");
+ defsymbol(&QCAMELLIA_128_CFB1, "CAMELLIA-128-CFB1");
+ defsymbol(&QDES_EDE3_CFB8, "DES-EDE3-CFB8");
+ defsymbol(&QDES_EDE3_CFB1, "DES-EDE3-CFB1");
+ defsymbol(&QDES_CFB8, "DES-CFB8");
+ defsymbol(&QDES_CFB1, "DES-CFB1");
+ defsymbol(&QAES_256_CFB8, "AES-256-CFB8");
+ defsymbol(&QAES_192_CFB8, "AES-192-CFB8");
+ defsymbol(&QAES_128_CFB8, "AES-128-CFB8");
+ defsymbol(&QAES_256_CFB1, "AES-256-CFB1");
+ defsymbol(&QAES_192_CFB1, "AES-192-CFB1");
+ defsymbol(&QAES_128_CFB1, "AES-128-CFB1");
+ defsymbol(&Qid_smime_alg_CMS3DESwrap, "id-smime-alg-CMS3DESwrap");
}
void vars_of_openssl(void)
{
+ DEFVAR_LISP("ossl-cipher-blacklist", &Vossl_cipher_blacklist /*
+A list of ciphers that are blacklisted against use.
+
+These are ciphers that are known to cause problems with the SXEmacs
+OpenSSL code that can result in data corruption. If you find that you
+need to use one or more of the ciphers on this list, you can do so by
+removing it from this list first. Do we need to mention that this is
+probably not a good idea and that you are well and truly on your own
+here? But hey, it's your data...
+ */);
+
+ Lisp_Object badCiphers[28] = {
+ QAES_256_XTS, QAES_128_XTS, Qid_aes256_CCM, Qid_aes256_GCM,
+ Qid_aes192_CCM, Qid_aes192_GCM, Qid_aes128_CCM, Qid_aes128_GCM,
+ Qid_aes256_wrap, Qid_aes192_wrap, Qid_aes128_wrap,
+ QCAMELLIA_256_CFB8, QCAMELLIA_192_CFB8, QCAMELLIA_128_CFB8,
+ QCAMELLIA_256_CFB1, QCAMELLIA_192_CFB1, QCAMELLIA_128_CFB1,
+ QDES_EDE3_CFB8, QDES_EDE3_CFB1, QDES_CFB8, QDES_CFB1,
+ QAES_256_CFB8, QAES_192_CFB8, QAES_128_CFB8, QAES_256_CFB1,
+ QAES_192_CFB1, QAES_128_CFB1, Qid_smime_alg_CMS3DESwrap };
+ Vossl_cipher_blacklist = Flist(28, badCiphers);
+
Fprovide(Qopenssl);
#ifndef OPENSSL_NO_RSA
#define INCLUDED_openssl_h_ 1
/* this is to determine what has been configured */
+#ifdef HAVE_OPENSSL_OPENSSLCONF_H
#include <openssl/opensslconf.h>
+#endif
+#ifdef HAVE_OPENSSL_EVP_H
#include <openssl/evp.h>
+#endif
+
+#ifdef HAVE_OPENSSL_RAND_H
#include <openssl/rand.h>
+#endif
+
+#ifdef HAVE_OPENSSL_HMAC_H
#include <openssl/hmac.h>
+#endif
/* special asymmetric crypto systems */
+#ifdef HAVE_OPENSSL_RSA_H
#ifndef OPENSSL_NO_RSA
#include <openssl/rsa.h>
#endif
+#endif
+#ifdef HAVE_OPENSSL_DSA_H
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
+#endif
+#ifdef HAVE_OPENSSL_EC_H
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
+#endif
+#ifdef HAVE_OPENSSL_ECDH_H
#ifndef OPENSSL_NO_ECDH
#include <openssl/ecdh.h>
#endif
+#endif
+#ifdef HAVE_OPENSSL_ECDSA_H
#ifndef OPENSSL_NO_ECDSA
#include <openssl/ecdsa.h>
#endif
+#endif
+#ifdef HAVE_OPENSSL_DH
#ifndef OPENSSL_NO_DH
#include <openssl/dh.h>
#endif
+#endif
#if defined HAVE_OPENSSL_X509_H
# include <openssl/x509.h>
#define CHECK_EVPPKEY(x) CHECK_RECORD (x, evp_pkey)
#define wrap_evppkey(p) wrap_object(p)
-
-#if !defined(OPENSSL_NO_SSL2) || !defined(OPENSSL_NO_SSL3)
/* opaque SSL_CONN object structure
* this is just an ssl-ish wrap around the process object
*/
#define OSSL_DEBUG_FLAG
#endif
-#endif /* !OPENSSL_NO_SSL2 || !OPENSSL_NO_SSL3 */
#endif /* INCLUDED_openssl_h_ */
Lisp_Object Vfloat_output_format;
+void float_to_string(char *buf, fpfloat data, int maxlen);
+
/*
* This buffer should be at least as large as the max string size of the
* largest float, printed in the biggest notation. This is undoubtedly
/* If it's a relative pathname use getcwd for starters. */
if (abslen == 0) {
- getcwd(new_path, PATH_MAX - 1);
- new_path += strlen(new_path);
- if (!IS_DIRECTORY_SEP(new_path[-1]))
- *new_path++ = DIRECTORY_SEP;
+ void *ok = getcwd(new_path, PATH_MAX - 1);
+ if (ok) {
+ new_path += strlen(new_path);
+ if (!IS_DIRECTORY_SEP(new_path[-1]))
+ *new_path++ = DIRECTORY_SEP;
+ } else {
+ return NULL;
+ }
} else {
/* Copy first directory sep. */
strncpy(new_path, path, abslen);
# undef REL_ALLOC
#endif
+#include "sxe-utils.h"
+
/* The `emacs' switch turns on certain matching commands
that make sense only in Emacs. */
#ifdef emacs
string2, size2); \
DEBUG_PRINT1("'\n"); \
\
- pat = (unsigned char *) POP_FAILURE_POINTER(); \
+ pat = (const unsigned char*)POP_FAILURE_POINTER(); \
DEBUG_PRINT2 (" Popping pattern %p: ", pat); \
DEBUG_PRINT_COMPILED_PATTERN(bufp, pat, pend); \
\
/* fuck, p isnt const thanks to that
* unified range table function below */
#ifdef MULE
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
p = (unsigned char*)fail_stack.
stack[--fail_stack.avail].pointer;
+#pragma GCC diagnostic pop
#else
p = fail_stack.stack[--fail_stack.avail]
.pointer;
dummy_low_reg, dummy_high_reg,
reg_dummy, reg_dummy,
reg_info_dummy);
+ SXE_SET_UNUSED(pdummy), SXE_SET_UNUSED(sdummy);
}
/* Note fall through. */
if (!FAIL_STACK_EMPTY()) {
/* A restart point is known. Restore to that state. */
DEBUG_PRINT1("\nFAIL:\n");
- POP_FAILURE_POINT(d, p, lowest_active_reg,
+
+ const unsigned char* cpat = p;
+
+ POP_FAILURE_POINT(d, cpat, lowest_active_reg,
highest_active_reg, regstart, regend,
reg_info);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+ p = (unsigned char*)cpat;
+#pragma GCC diagnostic pop
/* If this failure point is a dummy, try the next one. */
if (!p)
return with failure...
*/
return -1;
- newnonreloc = alloca(length);
- memcpy((void*)newnonreloc, (void*)XSTRING_DATA(reloc), length);
+ Bufbyte *copy = alloca(length);
+ memcpy((void*)copy,
+ (const void*)XSTRING_DATA(reloc),
+ length);
+ newnonreloc = copy;
}
}
Lisp_Object fallback;
/* type-specific extra data attached to a specifier */
- max_align_t data[1];
+ sxe_max_align_t data[1];
};
typedef struct Lisp_Specifier Lisp_Specifier;
--- /dev/null
+/* Utility definitions for C code of SXEmacs for handling memory
+
+ Copyright (C) 1985-1987, 1992-1995 Free Software Foundation, Inc.
+ Copyright (C) 1993-1996 Richard Mlynarik.
+ Copyright (C) 1995, 1996, 2000 Ben Wing.
+ Copyright (C) 2004 Steve Youngs.
+ Copyright (C) 2011 Nelson Ferreira.
+
+This file is part of SXEmacs
+
+SXEmacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+SXEmacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* NOT synched with FSF */
+#ifndef INCLUDED_sxe_memory_h_
+#define INCLUDED_sxe_memory_h_
+
+\f
+/* generally useful */
+#define xnew(type) ((type *) xmalloc (sizeof (type)))
+#define xnew_atomic(type) ((type *) xmalloc_atomic (sizeof (type)))
+#define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
+#define xnew_atomic_array(type, len) \
+ ((type*)xmalloc_atomic((len) * sizeof(type)))
+#define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
+#define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
+#define xnew_array_and_zero(type, len) \
+ ((type*)xmalloc_and_zero ((len) * sizeof (type)))
+#define xrealloc_array(ptr, type, len) \
+ ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
+#define XREALLOC_ARRAY xrealloc_array
+#define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type)))
+
+/************************************************************************/
+/* Memory */
+/************************************************************************/
+
+#ifdef ALL_DEBUG_FLAGS
+#undef GC_DEBUG_FLAG
+#define GC_DEBUG_FLAG
+#endif
+
+#if !defined GC_DEBUG_FLAG
+# define SXE_DEBUG_GC(args...)
+#else
+# define SXE_DEBUG_GC(args...) __SXE_DEBUG__("[gc] " args)
+#endif
+#define SXE_DEBUG_GC_PT(args...) SXE_DEBUG_GC("[pthread]: " args)
+#define SXE_CRITICAL_GC(args...) __SXE_DEBUG__("[gc] CRITICAL: " args)
+
+void malloc_warning(const char *);
+
+#if defined HAVE_BDWGC && defined EF_USE_BDWGC
+# if defined HAVE_THREADS
+# if !defined GC_PTHREADS
+# define GC_PTHREADS 1
+# endif /* !GC_PTHREADS */
+# if !defined GC_THREADS
+# define GC_THREADS 1
+# endif /* !GC_THREADS */
+# endif /* HAVE_THREADS */
+
+# undef GC_DEBUG
+# if defined GC_DEBUG_FLAG
+# define GC_DEBUG 1
+# endif /* GC_DEBUG_FLAG */
+# if defined HAVE_GC_GC_H
+# include <gc/gc.h>
+# elif defined HAVE_GC_H
+# include <gc.h>
+# else
+# error "Take less of those pills!"
+# endif
+
+# if defined GC_DEBUG_FLAG
+# define zmalloc GC_MALLOC_IGNORE_OFF_PAGE
+# define zcalloc(n, m) GC_MALLOC((n)*(m))
+# define zmalloc_atomic GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE
+# define zmalloc_and_zero GC_MALLOC
+# define zrealloc GC_REALLOC
+# define zstrdup GC_STRDUP
+# undef zfree
+# define zfree(x) GC_FREE(x)
+# else /* !GC_DEBUG_FLAG */
+# define zmalloc GC_malloc_ignore_off_page
+# define zcalloc(n, m) GC_malloc((n)*(m))
+# define zmalloc_atomic GC_malloc_atomic_ignore_off_page
+# define zmalloc_and_zero GC_malloc
+# define zrealloc GC_realloc
+# define zstrdup GC_strdup
+# undef zfree
+# define zfree(x)
+# endif /* GC_DEBUG_FLAG */
+
+#else /* !BDWGC */
+#define zmalloc F&^!
+#define zcalloc F&^!
+#define zmalloc_atomic F&^!
+#define zmalloc_and_zero F&^!
+#define zrealloc F&^!
+#define zstrdrup F&^!
+#endif /* BDWGC */
+
+/* also define libc mem funs */
+#define ymalloc malloc
+#define ycalloc(n, m) calloc(n, m)
+#define ymalloc_atomic(n) ycalloc(1, n)
+#define ymalloc_and_zero(x) ycalloc(1, x)
+#define yrealloc realloc
+#define ystrdup strdup
+#define yfree(x) free(x)
+/* and their convenience companions */
+#define ynew(type) ((type*)ymalloc(sizeof(type)))
+#define ynew_array(type, len) ((type*)ymalloc((len) * sizeof(type)))
+#define ynew_and_zero(type) ((type*)ymalloc_and_zero(sizeof(type)))
+#define ynew_array_and_zero(type, len) \
+ ((type*)ymalloc_and_zero((len) * sizeof(type)))
+#define YREALLOC_ARRAY(ptr, type, len) \
+ ((void)(ptr = (type *)yrealloc(ptr, (len) * sizeof (type))))
+
+#if defined HAVE_BDWGC && defined EF_USE_BDWGC
+/* and now the x* series */
+# define xmalloc zmalloc
+# define xcalloc zcalloc
+# define xmalloc_atomic zmalloc_atomic
+# define xmalloc_and_zero zmalloc_and_zero
+# define xrealloc zrealloc
+# define xstrdup zstrdup
+# if defined ERROR_CHECK_MALLOC
+# define xfree(args...) zfree(args)
+# else /* !ERROR_CHECK_MALLOC */
+# define xfree(args...)
+# endif /* ERROR_CHECK_MALLOC */
+
+#else /* !BDWGC */
+void *xmalloc(size_t size);
+void *xmalloc_atomic(size_t size);
+void *xmalloc_and_zero(size_t size);
+void *xrealloc(void *, size_t size);
+char *xstrdup(const char *);
+# if defined ERROR_CHECK_MALLOC
+# if SIZEOF_VOID_P == 4
+# define xfree(lvalue) \
+ do { \
+ void *volatile *xfree_ptr = \
+ (void *volatile*) \
+ ((volatile void*)&(lvalue)); \
+ assert(*xfree_ptr != (void*)0xB00BB4BE); \
+ yfree(*xfree_ptr); \
+ *xfree_ptr = (void*)0xB00BB4BE; \
+ } while (0)
+# elif SIZEOF_VOID_P == 8
+# define xfree(lvalue) \
+ do { \
+ void *volatile *xfree_ptr = \
+ (void *volatile*) \
+ ((volatile void*)&(lvalue)); \
+ assert(*xfree_ptr != (void*)0xCAFEBABEDEADBEEF); \
+ yfree(*xfree_ptr); \
+ *xfree_ptr = (void*)0xCAFEBABEDEADBEEF; \
+ } while (0)
+# else /* huh? */
+# error "Strange-arse system detected. Watch a movie, it\'s more fun!"
+# endif
+# else /* !ERROR_CHECK_MALLOC */
+# define xfree(args...) yfree(args)
+# endif /* ERROR_CHECK_MALLOC */
+#endif /* BDWGC */
+
+
+#endif
#else
# define SXE_UNUSED(x) x
#endif
+
#ifdef UNUSED
#undef UNUSED
#define UNUSED(x) SXE_UNUSED(x)
#endif
+#ifdef SXE_SET_UNUSED
+#else
+# define SXE_SET_UNUSED(x) ((void)(x))
+#endif
+
#ifdef WEAK_EXTERN
#elif defined(__GNUC__)
# define WEAK_EXTERN extern __attribute__((weak))
#else
#define LIKELY(_x) __builtin_expect(!!(_x), 1)
#endif
+
#ifdef UNLIKELY
#else
#define UNLIKELY(_x) __builtin_expect(!!(_x), 0)
#define SXE_CRITICAL(args...) __SXE_DEBUG__("CRITICAL: " args)
-
/* We define assert iff USE_ASSERTIONS or DEBUG_SXEMACS is defined.
Otherwise we define it to be empty. Quantify has shown that the
time the assert checks take is measurable so let's not include them
in production binaries. */
-#ifdef USE_ASSERTIONS
+#if defined(USE_ASSERTIONS) && defined(emacs)
/* Highly dubious kludge */
/* (thanks, Jamie, I feel better now -- ben) */
void assert_failed(const char *, int, const char *);
# ifdef DEBUG_SXEMACS
# define assert(x) ((x) ? (void) 0 : (void) abort ())
# else
-# define assert(x)
+# define assert(x) ((void)0)
# endif
#endif
#endif
\f
-/* generally useful */
#define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
-#define xnew(type) ((type *) xmalloc (sizeof (type)))
-#define xnew_atomic(type) ((type *) xmalloc_atomic (sizeof (type)))
-#define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
-#define xnew_atomic_array(type, len) \
- ((type*)xmalloc_atomic((len) * sizeof(type)))
-#define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
-#define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
-#define xnew_array_and_zero(type, len) \
- ((type*)xmalloc_and_zero ((len) * sizeof (type)))
-#define xrealloc_array(ptr, type, len) \
- ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
-#define XREALLOC_ARRAY xrealloc_array
-#define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type)))
#if !defined HAVE_DECL_STRDUP
extern char *strdup(const char *s);
#endif
\f
-/* No type has a greater alignment requirement than max_align_t.
+/* No type has a greater alignment requirement than sxe_max_align_t.
(except perhaps for types we don't use, like long double) */
typedef union {
struct {
struct {
double d;
} d;
-} max_align_t;
+} sxe_max_align_t;
#ifndef ALIGNOF
# if defined (__GNUC__) && (__GNUC__ >= 2)
#define DECLARE_NOTHING struct nosuchstruct
#endif
-\f
-/************************************************************************/
-/* Memory */
-/************************************************************************/
-
-#ifdef ALL_DEBUG_FLAGS
-#undef GC_DEBUG_FLAG
-#define GC_DEBUG_FLAG
-#endif
-
-#if !defined GC_DEBUG_FLAG
-# define SXE_DEBUG_GC(args...)
-#else
-# define SXE_DEBUG_GC(args...) __SXE_DEBUG__("[gc] " args)
-#endif
-#define SXE_DEBUG_GC_PT(args...) SXE_DEBUG_GC("[pthread]: " args)
-#define SXE_CRITICAL_GC(args...) __SXE_DEBUG__("[gc] CRITICAL: " args)
-
-void malloc_warning(const char *);
-
-#if defined HAVE_BDWGC && defined EF_USE_BDWGC
-# if defined HAVE_THREADS
-# if !defined GC_PTHREADS
-# define GC_PTHREADS 1
-# endif /* !GC_PTHREADS */
-# if !defined GC_THREADS
-# define GC_THREADS 1
-# endif /* !GC_THREADS */
-# endif /* HAVE_THREADS */
-
-# undef GC_DEBUG
-# if defined GC_DEBUG_FLAG
-# define GC_DEBUG 1
-# endif /* GC_DEBUG_FLAG */
-# if defined HAVE_GC_GC_H
-# include <gc/gc.h>
-# elif defined HAVE_GC_H
-# include <gc.h>
-# else
-# error "Take less of those pills!"
-# endif
-
-# if defined GC_DEBUG_FLAG
-# define zmalloc GC_MALLOC_IGNORE_OFF_PAGE
-# define zcalloc(n, m) GC_MALLOC((n)*(m))
-# define zmalloc_atomic GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE
-# define zmalloc_and_zero GC_MALLOC
-# define zrealloc GC_REALLOC
-# define zstrdup GC_STRDUP
-# undef zfree
-# define zfree(x) GC_FREE(x)
-# else /* !GC_DEBUG_FLAG */
-# define zmalloc GC_malloc_ignore_off_page
-# define zcalloc(n, m) GC_malloc((n)*(m))
-# define zmalloc_atomic GC_malloc_atomic_ignore_off_page
-# define zmalloc_and_zero GC_malloc
-# define zrealloc GC_realloc
-# define zstrdup GC_strdup
-# undef zfree
-# define zfree(x)
-# endif /* GC_DEBUG_FLAG */
-
-#else /* !BDWGC */
-#define zmalloc F&^!
-#define zcalloc F&^!
-#define zmalloc_atomic F&^!
-#define zmalloc_and_zero F&^!
-#define zrealloc F&^!
-#define zstrdrup F&^!
-#endif /* BDWGC */
-
-/* also define libc mem funs */
-#define ymalloc malloc
-#define ycalloc(n, m) calloc(n, m)
-#define ymalloc_atomic(n) ycalloc(1, n)
-#define ymalloc_and_zero(x) ycalloc(1, x)
-#define yrealloc realloc
-#define ystrdup strdup
-#define yfree(x) free(x)
-/* and their convenience companions */
-#define ynew(type) ((type*)ymalloc(sizeof(type)))
-#define ynew_array(type, len) ((type*)ymalloc((len) * sizeof(type)))
-#define ynew_and_zero(type) ((type*)ymalloc_and_zero(sizeof(type)))
-#define ynew_array_and_zero(type, len) \
- ((type*)ymalloc_and_zero((len) * sizeof(type)))
-#define YREALLOC_ARRAY(ptr, type, len) \
- ((void)(ptr = (type *)yrealloc(ptr, (len) * sizeof (type))))
-
-#if defined HAVE_BDWGC && defined EF_USE_BDWGC
-/* and now the x* series */
-# define xmalloc zmalloc
-# define xcalloc zcalloc
-# define xmalloc_atomic zmalloc_atomic
-# define xmalloc_and_zero zmalloc_and_zero
-# define xrealloc zrealloc
-# define xstrdup zstrdup
-# if defined ERROR_CHECK_MALLOC
-# define xfree(args...) zfree(args)
-# else /* !ERROR_CHECK_MALLOC */
-# define xfree(args...)
-# endif /* ERROR_CHECK_MALLOC */
-
-#else /* !BDWGC */
-void *xmalloc(size_t size);
-void *xmalloc_atomic(size_t size);
-void *xmalloc_and_zero(size_t size);
-void *xrealloc(void *, size_t size);
-char *xstrdup(const char *);
-# if defined ERROR_CHECK_MALLOC
-# if SIZEOF_VOID_P == 4
-# define xfree(lvalue) \
- do { \
- void *volatile *xfree_ptr = \
- (void *volatile*) \
- ((volatile void*)&(lvalue)); \
- assert(*xfree_ptr != (void*)0xB00BB4BE); \
- yfree(*xfree_ptr); \
- *xfree_ptr = (void*)0xB00BB4BE; \
- } while (0)
-# elif SIZEOF_VOID_P == 8
-# define xfree(lvalue) \
- do { \
- void *volatile *xfree_ptr = \
- (void *volatile*) \
- ((volatile void*)&(lvalue)); \
- assert(*xfree_ptr != (void*)0xCAFEBABEDEADBEEF); \
- yfree(*xfree_ptr); \
- *xfree_ptr = (void*)0xCAFEBABEDEADBEEF; \
- } while (0)
-# else /* huh? */
-# error "Strange-arse system detected. Watch a movie, it\'s more fun!"
-# endif
-# else /* !ERROR_CHECK_MALLOC */
-# define xfree(args...) yfree(args)
-# endif /* ERROR_CHECK_MALLOC */
-#endif /* BDWGC */
-
\f
/* str funs */
#define xstrlen strlen
#if defined USE_SXEMACS_CONFIG_H
# include "config.h"
#endif
-#include "sxe-utils.h"
+
#include "lisp.h"
#include "sysfile.h"
*/
(subr))
{
- const char *name;
+ const char *name;
if (!SUBRP (subr))
wrong_type_argument (Qsubrp, subr);
name = XSUBR (subr)->name;
- return make_string ((Bufbyte *)name, strlen (name));
+ return make_string ((const Bufbyte *)name, strlen (name));
}
Lisp_Object Vsyntax_designator_chars_string;
+Lisp_Object Qscan_error;
+
/* This is the internal form of the parse state used in parse-partial-sexp. */
struct lisp_parse_state {
enum syntaxcode code;
int syncode;
int min_depth = depth; /* Err out if depth gets less than this. */
+ Bufpos last_good = from;
if (depth > 0)
min_depth = 0;
c = BUF_FETCH_CHAR(buf, from);
syncode = SYNTAX_CODE_FROM_CACHE(mirrortab, c);
code = SYNTAX_FROM_CODE(syncode);
+ if (depth == min_depth)
+ last_good = from;
from++;
/* a 1-char comment start sequence */
if (depth < min_depth) {
if (noerror)
return Qnil;
- error("Containing expression "
- "ends prematurely");
+ signal_type_error_2(Qscan_error,
+ "Containing expression "
+ "ends prematurely",
+ make_int(last_good),
+ make_int(from));
}
break;
if (noerror) {
return Qnil;
}
- error("Containing expression "
- "ends prematurely");
+ signal_type_error_2(Qscan_error,
+ "Containing expression "
+ "ends premeturely",
+ make_int(last_good),
+ make_int(from));
}
break;
lose:
if (!noerror)
- error("Unbalanced parentheses");
+ signal_type_error_2(Qscan_error, "Unbalanced parentheses",
+ make_int(last_good), make_int(from));
return Qnil;
}
DEFSUBR(Fscan_sexps);
DEFSUBR(Fbackward_prefix_chars);
DEFSUBR(Fparse_partial_sexp);
+
+ DEFERROR_STANDARD(Qscan_error, Qsyntax_error);
}
void vars_of_syntax(void)
input_fd = CONSOLE_TTY_DATA(con)->infd;
output_fd = CONSOLE_TTY_DATA(con)->outfd;
+ SXE_SET_UNUSED(output_fd);
emacs_get_tty(input_fd, &CONSOLE_TTY_DATA(con)->old_tty);
tty = CONSOLE_TTY_DATA(con)->old_tty;
input_fd = CONSOLE_TTY_DATA(con)->infd;
output_fd = CONSOLE_TTY_DATA(con)->outfd;
+ SXE_SET_UNUSED(output_fd);
#if defined (IBMR2AIX) && defined (AIXHFT)
{
extern_inline void
x__dirname(char *restrict res, const char *file, size_t len)
__attribute__((always_inline));
-#if defined(HAVE_DIRNAME) && defined(DIRNAME_SIDE_EFFECT)
+#if defined(HAVE_DIRNAME)
extern_inline void
x__dirname(char *restrict res, const char *file, size_t len)
{
- /* assumes res is malloc'd of size LEN */
- xstrncpy(res, file, len);
- dirname(res);
- return;
-}
-#elif defined(HAVE_DIRNAME) && !defined(DIRNAME_ACCEPTS_PROTMEM)
-extern_inline void
-x__dirname(char *restrict res, const char *file, size_t len)
-{
- /* assumes res is malloc'd of size LEN */
- char *result;
- xstrncpy(res, file, len);
- /* if we were using side effects we woulda matched the above cond */
- result = dirname(res);
- xstrncpy(res, result, len);
- return;
-}
-#elif defined(HAVE_DIRNAME)
-extern_inline void
-x__dirname(char *restrict res, const char *file, size_t len)
-{
- /* assumes res is malloc'd of size LEN */
- char *result = dirname(res);
- xstrncpy(res, result, len);
- return;
+ /* assumes res is malloc'd of size LEN */
+ char *result;
+ xstrncpy(res, file, len);
+ result = dirname(res);
+ if (res == result) {
+ return;
+ }
+ if (result < res || result >= (res+len)) {
+ xstrncpy(res, result, len);
+ } else {
+ /* Use memmove if result overlaps res */
+ memmove(res, result, strlen(result)+1);
+ }
+ return;
}
#endif
#endif
#endif
-/* These headers #define all kinds of common words like "columns"...
- What a bunch of losers. If we were to include them, we'd have to
- include them last to prevent them from messing up our own header
- files (struct slot names, etc.). But it turns out that there are
- other conflicts as well on some systems, so screw it: we'll just
- re-declare the routines we use and assume the code in this file is
- invoking them correctly. */
-/* # include <curses.h> */
-/* # include <term.h> */
-#ifndef CURSES_H_FILE
+#ifdef HAVE_TERM_H
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#endif
+
+#ifndef HAVE_TGETENT_PROTOTYPE
EXTERN_C int tgetent(const char *, const char *);
+#endif
+
+#ifndef HAVE_TGETFLAG_PROTOTYPE
EXTERN_C int tgetflag(const char *);
+#endif
+
+#ifndef HAVE_TGETNUM_PROTOTYPE
EXTERN_C int tgetnum(const char *);
+#endif
+
+#ifndef HAVE_TGETSTR_PROTOTYPE
EXTERN_C char *tgetstr(const char *, char **);
#endif
-#ifndef TERMCAP_H_FILE
+#ifndef HAVE_TPUTS_PROTOTYPE
EXTERN_C void tputs(const char *, int, int (*)(int));
#endif
#endif /* not emacs */
+#ifdef HAVE_TERMIO_H
+#include <termio.h>
+#endif
+
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+
/* BUFSIZE is the initial size allocated for the buffer
for reading the termcap file.
It is not a limit.
is equally lame in that it supplies "fixed" headers for curses.h
but not term.h.) However, it seems to work to just not include
term.h under Solaris, so we try that. KLUDGE! */
-#ifdef TERN_H_FILE
+#ifdef HAVE_TERM_H
+#ifdef TERM_H_FILE
#if !(defined (__GNUC__) && defined (SOLARIS2))
#include TERM_H_FILE
#endif
#endif
+#endif
extern void *xmalloc_atomic(int size);
-#if 0 /* If this isn't declared somewhere, too bad */
+#ifndef HAVE_TPARM_PROTOTYPE
+/* Canonical for one, in their infinite wisdom ships the tinfo library without
+ any headers of which we'd need for proper tparm prototype.
+ If it is not defined, let's define it here, since if we are linking this
+ configure has determined we have a linkable tparm
+*/
extern char *tparm(const char *string, int arg1, int arg2, int arg3,
int arg4, int arg5, int arg6, int arg7, int arg8, int arg9);
#endif
int arg2, int arg3, int arg4, int arg5, int arg6, int arg7,
int arg8, int arg9)
{
- char *temp;
size_t slen = len;
- temp = (char *)tparm((char *)string, arg1, arg2, arg3, arg4, arg5, arg6, arg7,
- arg8, arg9);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+ char *paramstring = (char *)string;
+ char *temp = (char *)
+ tparm(paramstring, arg1, arg2, arg3, arg4, arg5, arg6, arg7,
+ arg8, arg9);
+#pragma GCC diagnostic pop
+
+
if (outstring == 0) {
slen = strlen(temp)+1;
outstring = (char *)xmalloc_atomic( slen );
{
Display *dpy = get_x_display(device);
int ndirs_return;
- const char **directories =
- (const char **)XGetFontPath(dpy, &ndirs_return);
+ const char * const *directories =
+ (const char * const *)XGetFontPath(dpy, &ndirs_return);
Lisp_Object font_path = Qnil;
if (!directories)
}
}
+ SXE_SET_UNUSED(title);
+
if (NILP(question))
syntax_error("Dialog descriptor provides no question", keys);
[modifier_index * mkpm + modifier_key];
for (int column = 0; column < 4; column += 2) {
- KeySym sym = code
#ifdef HAVE_XKBKEYCODETOKEYSYM
- ? XkbKeycodeToKeysym(dspl, code, 0, column)
+ KeySym sym = code
+ ? XkbKeycodeToKeysym(dspl, code, 0, column)
+ : 0;
#else
- ? XKeycodeToKeysym(dspl, code, column)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ KeySym sym = code
+ ? XKeycodeToKeysym(dspl, code, column)
+ : 0;
+#pragma GCC diagnostic pop
#endif
- : 0;
if (LIKELY(sym == last_sym)) {
continue;
(XtPointer) (XtInputReadMask /* | XtInputExceptMask */ ),
Xt_what_callback, 0);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
XtAppSetTypeConverter(Xt_app_con, XtRString, XtRPixel,
EmacsXtCvtStringToPixel,
(XtConvertArgList)colorConvertArgs,
2, XtCacheByDisplay, EmacsFreePixel);
+#pragma GCC diagnostic pop
#ifdef XIM_XLIB
XtAppSetTypeConverter(Xt_app_con, XtRString, XtRXimStyles,
struct device *d = XDEVICE(device);
Lisp_Object frame = DOMAIN_FRAME(domain);
struct frame *f = XFRAME(frame);
- char *nm = 0;
+ char *nm = 0; // unused
Widget wid;
Arg al[32];
int ac = 0;
LISP_STRING_TO_EXTERNAL(IMAGE_INSTANCE_WIDGET_TEXT(ii), nm,
Qnative);
+ SXE_SET_UNUSED(nm);
+
ii->data = xnew_and_zero(struct x_subwindow_data);
/* Create a clip window to contain the subwidget. Incredibly the
if (NILP(pgui->style)) {
Bufbyte *intname = NULL;
Bytecount intlen;
+
/* If the callback is nil, treat this item like unselectable text.
This way, dashes will show up as a separator. */
if (!wv->enabled)
wv->type = BUTTON_TYPE;
TO_INTERNAL_FORMAT(C_STRING, wv->name,
ALLOCA, (intname, intlen), Qlwlib_encoding);
+
+ SXE_SET_UNUSED(intlen);
+
if (intname != NULL && separator_string_p(intname)) {
wv->type = SEPARATOR_TYPE;
wv->value =
ALLOCA, (name_str, name_len),
Qx_atom_name_encoding);
+ SXE_SET_UNUSED(name_len);
+
name = (name_str ? intern((char *)name_str) : Qnil);
if (name_str &&
(atom == XA_FONT ||
while (row >= height)
row =
InterlacedOffset
- [++pass];
+ [++pass];
}
eip =
unwind.eimage +
composite.children[0];
else
mw = (XlwMenuWidget) widget;
+
+ SXE_SET_UNUSED(mw);
+
XtSetArg(al[0], XtNmenu, val);
XtSetValues(widget, al, 1); /* #### mw unused! */
}
#define INCLUDED_lwlib_internal_h_
#include "lwlib.h"
-
-#ifdef USE_ASSERTIONS
-/* Highly dubious kludge */
-/* (thanks, Jamie, I feel better now -- ben) */
-void assert_failed(const char *, int, const char *);
-# define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
-# define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
-#else
-# ifdef DEBUG_XEMACS
-# define assert(x) ((x) ? (void) 0 : (void) abort ())
-# else
-# define assert(x)
-# endif
-#endif
+#include "sxe-utils.h"
/* This represents a single widget within a widget tree. All the
widgets in a widget tree are chained through the `next' field.
return (s1 && s2) ? strcmp(s1, s2) : s1 ? False : !!s2;
}
+
+/* We only expect to use the following max function */
+#ifdef max
+#undef max
+#endif
+
static change_type max(change_type i1, change_type i2)
{
return (int)i1 > (int)i2 ? i1 : i2;
#include "ui/X11/xmu.h"
#include "xlwcheckboxP.h"
+#include "sxe-utils.h"
+
/* by using the same size for the checkbox as for the diamond box,
* we can let the Radio widget do the vast majority of the work.
*/
pts[5].y = -s;
XFillPolygon(dpy, win, bot, pts, 6, Nonconvex, CoordModePrevious);
#else
+ SXE_SET_UNUSED(bw);
XDrawRectangle(dpy, win, gc, bx + s, by + s, bsz, bsz);
#endif
hgt = gw->core.width;
}
+ SXE_SET_UNUSED(hgt);
+
/* if the gauge is selected, signify by drawing the background
* in a contrasting color.
*/
#include "lwlib-internal.h"
#include <sxe-utils.h>
+#include <sxe-memory.h>
#ifdef USE_DEBUG_MALLOC
#include <dmalloc.h>
#endif
-
-/* simple, naive integer maximum */
-#ifndef max
-#define max(a,b) ((a)>(b)?(a):(b))
-#endif
-
static char
xlwMenuTranslations[] = "<BtnDown>: start()\n\
<BtnMotion>: drag()\n\
tab =
(TabsConstraints) (*childP)->core.
constraints;
+ SXE_SET_UNUSED(tab);
bw = (*childP)->core.border_width;
/* Don't do anything if we can't see any of the child. */
if (ch >= bw * 2 && ch > 0 && cw >= bw * 2
aligned_sizeof_specifier(size_t specifier_type_specific_size)
{
return ALIGN_SIZE(offsetof(Lisp_Specifier, data)
- + specifier_type_specific_size, ALIGNOF(max_align_t));
+ + specifier_type_specific_size, ALIGNOF(sxe_max_align_t));
}
static size_t sizeof_specifier(const void *header)
testdir = $(srcdir)
testautomdir = $(testdir)/automated
tests_environment = $(BATCHENV) \
- $(SXEMACS) -batch -l ${testautomdir}/test-harness.el \
+ $(SXEMACS) -batch -vanilla -l ${testautomdir}/test-harness.el \
-f batch-test-emacs $(testautomdir)
## Use our former check target
$(tests_environment)
check-formats: $(SXEMACS) $(SXEDMP)
- $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+ $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
-f batch-test-emacs $(testautomdir)/format-tests.el
check-map: $(SXEMACS) $(SXEDMP)
- $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+ $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
-f batch-test-emacs $(testautomdir)/map-tests.el
check-skiplists: $(SXEMACS) $(SXEDMP)
- $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+ $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
-f batch-test-emacs $(testautomdir)/skiplist-tests.el
check-%: $(SXEMACS) $(SXEDMP)
- $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+ $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
-f batch-test-emacs $(testautomdir)/$*-tests.el
;; Check all-completions ignore element start with space.
(Assert (not (all-completions "" '((" hidden" . "object")))))
(Assert (all-completions " " '((" hidden" . "object"))))
+
+
+;; Check filename/path manipulations
+(let ((cases '(("/usr/lib" "/usr/" "lib" "/usr" "lib" "/usr/lib")
+ ("/usr/lib/" "/usr/lib/" "" "/usr" "lib" "/usr/lib")
+ ("/usr/" "/usr/" "" "/" "usr" "/usr")
+ ("/usr" "/" "usr" "/" "usr" "/usr")
+ ("usr" nil "usr" "." "usr" "./usr")
+ ("/" "/" "" "/" "/" "/")
+ ("." nil "." "." "." "./.")
+ ("./" "./" "" "." "." "./.")
+ (".." nil ".." "." ".." "./.."))))
+ (mapcar #'(lambda (case)
+ (let* ((path (car case))
+ (directory (file-name-directory path))
+ (nondirectory (file-name-nondirectory path))
+ (dirname (file-dirname path))
+ (basename (file-basename path)))
+ (Assert (equal directory (nth 1 case)))
+ (Assert (equal nondirectory (nth 2 case)))
+ (Assert (equal dirname (nth 3 case)))
+ (Assert (equal basename (nth 4 case)))
+ (Assert (equal path (concat directory nondirectory)))
+ (Assert (equal (file-name-join directory nondirectory)
+ (file-name-join dirname basename)))
+ (Assert (equal (file-name-join directory nondirectory) (nth 5 case)))
+ (Assert (equal (file-name-join dirname basename) (nth 5 case)))))
+ cases))
(Assert (member 'AES-192-CFB (ossl-available-ciphers)))
(Assert (member 'AES-192-OFB (ossl-available-ciphers)))
+ ;; blacklisted ciphers should give us an error
+ (mapc-internal
+ #'(lambda (cipher)
+ (Check-Error-Message error "use of blacklisted cipher prohibited"
+ (ossl-cipher-mode cipher)))
+ ossl-cipher-blacklist)
+
;; first we check the key generator
(let ((encstrs
(list "foo string test bar"
"\n"))
(salts
(list nil "salt" "" "toomuchsalt"))
- (ciphers
- (let (ciphers)
- (mapc-internal
- #'(lambda (cipher)
- (let ((ciphmode (substring (symbol-name cipher) -2)))
- ;; Never use CFB1 and CFB8 modes.
- ;; Both modes tend to mangle the result strings which
- ;; yields an assertion error.
- ;; Bug in openssl?
- ;; -hroptatyr
- (unless (or (< (ossl-cipher-bits cipher) 128)
- (string= "B1" ciphmode)
- (string= "B8" ciphmode))
- (setq ciphers
- (cons cipher ciphers)))))
- (ossl-available-ciphers))
- ciphers))
- (digests
- (let (digests)
- (mapc-internal
- #'(lambda (digest)
- (let ((digestname (symbol-name digest)))
- ;; only use digests without a dash in their names
- (unless (string-match "-" digestname)
- (setq digests
- (cons digest digests)))))
- (ossl-available-digests))
- digests))
+ (ciphers (ossl-available-ciphers))
+ (digests (ossl-available-digests))
key iv
enc dec)
iv (get key 'iv))
(setq dec ;; the encrypted text
(ossl-decrypt cipher enc key iv))
-
(eval `(Assert (string-equal ,dec ,str)))
;; let's doubly-encrypt something