Didier Verna's scientific blog: Lisp, Emacs, LaTeX and random stuff.

## Tag - software

Thursday, December 16 2010

## DoX 2.2 is released

Hello, I'm happy to announce the release of DoX v2.2. DoX is a set of extensions to the Doc package, for LaTeX2e class and style authors.

New in this release: the ability to create new control-sequence based documentation items (for instance LaTeX lengths).

Tuesday, December 14 2010

## CurVe 1.16 is out

Hello,

I'm happy to announce the release of CurVe 1.16. CurVe is a CV class for LaTeX2e.

New in this release:

- An examples directory
- New \text macro to insert plain text in the middle of rubrics,
- Support for openbib option which was implicit before
- Fix incompatibilities with the splitbib package
- Handle the bibentry/hyperref incompatibility directly
- Implement old font commands letting packages using them (e.g. fancyhdr) work correctly

Friday, December 3 2010

## FiNK 2.2 is out

Hello,

I'm happy to announce the release of FiNK 2.2. FiNK is the LaTeX2e File Name Keeper. New in this release: FiNK is now compatible with the memoir class.

Grab it here

Tuesday, November 30 2010

## Clon v1.0b16 now supports CLISP

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 16.
Most notable news for this release is the support for CLISP, which comes at the expense on one dependency (over cffi).

Grab it here.

Thursday, November 18 2010

## Clon v1.0b15 now supports ECL

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 15.
Most notable news for this release is the support for ECL.

Grab it here

Thursday, November 11 2010

## Clon v1.0b12 now supports CCL

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 12.
Most notable news for this release is the support for CCL.

Grab it here.

Tuesday, November 9 2010

## Clon 1.0b11 now supports CMU-CL

Hello,

I'm happy to annouce the release of Clon version 1.0 beta 11.
Most notable news for this release is the support for CMU-CL.

Grab it here.

Tuesday, September 21 2010

## Declt version 1.0b1 - first public release

Hello,

I'm happy to announce the first public release of Declt.

Declt (pronounce dec'let) is a reference manual generator for Common Lisp. It extracts and formats documentation from ASDF systems, including the system itself and its components, the packages defined in the system and definitions like constants, special variables, macros, functions, generic functions and methods, conditions, structures and classes.

Reference manuals are generated in Texinfo format which can be subsequently converted into info, HTML, DVI, PostScript or PDF. The generated manuals are fully indexed and provide a complete set of cross-references between documentation elements. For instance, files and packages point to the definitions they provide, and those definitions point back to package and file in which they can be found.

Get it at:
http://www.lrde.epita.fr/~didier/softwa ... .php#declt

Declt requires SBCL to work (if you're interested in porting it, grep
PORTME in the sources). Also, ASDF 2 has not been tested yet.

Tuesday, August 31 2010

## Clon: the Command-Line Options Nuker library for Common Lisp

I'm happy to announce the first public release of Clon, the Command-Line Options Nuker library for Common Lisp.

Clon currently requires SBCL to work. If you want to help porting it to other implementations, 'grep PORTME **/*' in the sources.

Get it here.

Clon is a library for managing command-line options in standalone Common Lisp applications. It provides a unified option syntax with both short and long names, automatic completion of partial names and automatic retrieval/conversion of option arguments from the command-line, associated environment variables, fallback or default values. Clon comes with a set of extensible option types (switches, paths, strings etc.). Clon also provides automatic generation and formatting of help strings, with support for highlighting on tty's through ISO/IEC 6429 SGR. This formatting is customizable through "themes".

Thursday, February 25 2010

## Translucent XEmacs coming in hot !!

I'm uploading a set of changes to the XEmacs 21.5 Mercurial repository right now. These changes implement a new face property named "background-placement" which makes an XEmacs frame "slide" over a face's background pixmap when the property is set to 'absolute.

If you do this on the default face, then you can achieve some sort of pseudo-translucency, for example by using the same (or a darkened version of) the root window's background pixmap.

Here are a couple of screenshots that illustrate this.

Monday, February 15 2010

## RT for Emacs Lisp, version 1.0

I'm happy to announce the first public version of RT for Emacs Lisp, a port of the original Common Lisp regression testing package.

Grab it here.

Monday, September 21 2009

## FiXme 4.0 is out !

I'm happy to announce FiXme version 4.0

#### WARNING: this is a major release containing many new features and heavy
#### internals refactoring. FiXme 4.0 comes with unprecedented flexibiity,
#### unrivalled extensibility and unchallenged backward-INcompatibility.

What's new in version 4.0
=========================
* Support for collaborative annotations
suggested by Michael Kubovy
** Support for "targeted" notes and environments
(highlighting a portion of text), suggested by Mark Edgington.
** Support for "floating" notes
(not specific to any portion of text), suggested by Rasmus Villemoes.
** Support for alternate layout autoswitch in TeX's inner mode
suggested by Will Robertson.
** Support for automatic language tracking in multilingual documents
** Support for themes
** Extended support for user-provided layouts
** Support for key=value argument syntax in the whole user interface
** New command \fxsetup
** Homogenize log and console messages
** Heavy internals refactoring

Description
===========
FiXme is a collaborative annotation tool for LaTeX documents. Annotating a
document refers here to inserting meta-notes, that is, notes that do not
belong to the document itself, but rather to its development or reviewing
process. Such notes may involve things of different importance levels, ranging
from simple "fix the spelling" flags to critical "this paragraph is a lie"
mentions. Annotations like this should be visible during the development or
reviewing phase, but should normally disapear in the final version of the
document.

FiXme is designed to ease and automate the process of managing collaborative
annotations, by offering a set of predefined note levels and layouts, the
possibility to register multiple note authors, to reference annotations by
listing and indexing etc. FiXme is extensible, giving you the possibility to
create new layouts or even complete "themes", and also comes with support for
AUC-TeX.

FiXme homepage: http://www.lrde.epita.fr/~didier/softwa ... .php#fixme

## DoX v2.0 (2009/09/21) is out

I'm happy to announce the release of DoX v2.0 (2009/09/21).

New in this version:
* Optional argument to \doxitem idxtype option to change the item's index type

* Optional argument to \Describe<Item> and the <Item> environment
noprint option to avoid marginal printing
noindex option to avoid item indexing

* Extend \DescribeMacro, \DescribeEnv and their corresponding environments with the same features

The doc package provides LaTeX developers with means to describe the usage and the definition of new commands and environments. However, there is no simple way to extend this functionality to other items (options or counters for instance). DoX is designed to circumvent this limitation, and provides some improvements over the existing functionality as well.

Monday, September 14 2009

## DoX version 1.0 (2009/09/11) is now available

I'm happy to annouce the first public version of the DoX package for LaTeX2e.

The doc package provides LaTeX developers with means to describe the usage and the definition of new macros and environments. However, there is no simple way to extend this functionality to other items (options or counters for instance). The dox package is designed to circumvent this limitation.

Wednesday, July 22 2009

## FiXme 3.4 is out

I'm happy to announce the next edition of FiXme: version 3.4

New in this release:
** \fixme, \fxerror, \fxwarning and \fxnote are now robust
** Fix incompatibility with KOMA-Script classes when the lox file is inexistent

FiXme provides you with a way of inserting fixme notes in documents. Such notes can appear in the margin of the document, as index entries, in the log file and as warnings on stdout. It is also possible to summarize them in a list, and in the index. When you switch from draft to final mode, any remaining fixme note will be logged, but removed from the document's body. Additionally, critical notes will abort compilation with an informative message. FiXme also comes with support for AUC-TeX.

Wednesday, April 1 2009

## :o( Smilisp :o) A new and revolutionary dialect of Lisp

Today, I just released :o( Smilisp :o), a new dialect of Lisp featuring a new paradigm called "Emotional Programming". This is truely a revolution in the Lisp world...

The logo is not exactly like that, but my blogging software wants to put smileys everwhere...

Get it here and enjoy !

:-)

Tuesday, July 1 2008

## CCL Objective C bridge code indentation

A whole bunch of CCL Cocoa coding involves calls to ObjC methods. For instance, the following ObjC code:
[cell drawWithFrame: frame inView: view];
will translate into this in CLL:
(#/drawWithFrame:inView: cell frame view)
. Indeed, Objective C is designed around the record-based model (methods belong to classes), so the cell object receives the drawWithFrame:inView: message via the funny bracket syntax. On the other hand, the Lisp translation involves a generic function call with the usual funcall syntax. The dispatch occurs on the first argument (the cell), and the rest is actual arguments to the message.

This layout is obviously not optimal for readability. One could define a bracket reader-macro to simulate ObjC's message passing syntax in Lisp, but I prefer to stick to the "Lisp Way". The first argument should still be considered "special" though.

For readability (especially when the method name is long), I like to put the arguments to the message (not the receiver!) on subsequent lines. However, XEmacs's cl-indent-function will indent this as an ordinary function call, like this:
(#/drawWithFrame:inView: cell                         frame view
which is awfull. What I want is the following indentation:
(#/drawWithFrame:inView: cell  frame view
This kind of indentation is normally achieved by putting a common-lisp-indent-function property of 1 on the function symbol. However, you don't want to do that on all possible ObjC message by hand (and you don't know them all in advance anyway). The following advice on common-lisp-indent-function (from the cl-indent package does the trick. It dynamically puts the property on each relevant symbol every time it is subject to indentation. A bit brute force, but it works smoothly.
(defadvice common-lisp-indent-function (before ccl-objc-bridge activate)  "Improve indentation scheme of the CCL Objective-C bridge.Currently, this does the following:- All (#/doThis:withThat: ...) forms are indented as per alisp-indent-function property of 1. This effectively treats the first argument(an object or a class) as special. The indentation you get is:  (#/function arg1        instead of:        (#/function arg1    arg2 ...)				                 arg2 ...)"  (let ((containing-form-start (elt state 1)))    (save-excursion      (goto-char containing-form-start)      (forward-char 1)      (cond ((looking-at "#/\$$\\w\\|:\$$*:")	     ;; We're looking at a (#/doThis:withThat: ...) form. In its holy	     ;; brokenness, common-lisp-indent-function with the help of	     ;; parse-partial-sexp will consider that the function name in	     ;; this form is "/functioncall:". Our trick here is to	     ;; dynamically put a lisp-indent-function property of 1 on this	     ;; symbol, so that the subsequent (original) indenting function	     ;; will handle it.	     (let* ((beg (progn (forward-char 1) (point)))		    (sym (progn			   (forward-sexp 1)			   (intern (downcase (buffer-substring beg							       (point)))))))	       (put sym 'common-lisp-indent-function 1)))))))

One last thing and I'll be happy: I want to indent CCL's slet and slet* constructs just as let:
(put 'slet 'common-lisp-indent-function      '((&whole 4 &rest (&whole 1 1 2)) &body))(put 'slet* 'common-lisp-indent-function     '((&whole 4 &rest (&whole 1 1 2)) &body))

Et voilà !

Wednesday, June 4 2008

## Beamer blocks and the Listings package

For many of my lectures, I use the Listings package for typesetting code excerpts, and include them in Beamer blocks. Providing nice shortcuts for doing that is not trivial if you want to preserve control over Listings options, and add a new one for the block's title. Here is a way to nicely wrap a call to \lstinputlisting inside a Beamer block.

First, let's use the xkeyval package to create a "title" option:
\define@cmdkey[dvl]{lst}[@dvl@lst@]{title}{}

Next, a low-level listing input command. This macro takes 4 arguments: an overlay specification, a title for the block, a list of options passed to Listings, and a file name for input:
%% \dvlinputlisting{overlay}{title}{lstoption=,...}{file}\newcommand\dvlinputlisting[4]{%  \begin{block}#1{#2}    %% #### WARNING: I need this hack because keyval-style options    %% mess up the parsing.    \expandafter\lstinputlisting\expandafter[#3]{#4}  \end{block}}

And now, you can define all sorts of specialized versions for different languages. For example, here is one for Common Lisp code. The block title is "Lisp" by default, and a "lisp" extension is automatically added to the file name:
%% Language-specific shortcuts:%% The title option is used for the beamer block's title.%% All other options are passed to listings.%% \XXXinputlisting<overlay>[title=,lstoption=,...]{file}\newcommand<>\clinputlisting[2][]{%  \def\@dvl@lst@title{Lisp}%  \setkeys*[dvl]{lst}{#1}%  \edef\@dvl@lst@options{language=lisp,\XKV@rm}%  \dvlinputlisting{#3}{\@dvl@lst@title}{\@dvl@lst@options}{#2.lisp}}

Which you could call like this:
\clinputlisting<2->[title={Example 1}, gobble=2]{ex1}

As you can see, "title" is an option for the Beamer block, and all the others are dispatched to Listings. Cool.

Now, things are getting more complicated when you want nice shortcuts for inline environments, because nesting Beamer blocks with listings doesn't work. Fortunately, I figured out a trick based on the Verbatim package to simulate that. The idea is to store the contents of the listing environment in a temporary file, and use \lstinputlisting as before to include it. Clever right ?
:-)
Here is a generic environment for doing that. In the opening, we read the environment's contents and store it in the file \jobname.dvl. In the ending, we call our previous macro \dvlinputlisting on that file (actually, on a dynamically created argument list called \@dvl@args:
\usepackage{verbatim}\newwrite\lstvrb@out\def\@dvllisting{%  \begingroup  \@bsphack  \immediate\openout\lstvrb@out\jobname.dvl  \let\do\@makeother\dospecials\catcode\^^M\active  \def\verbatim@processline{%    \immediate\write\lstvrb@out{\the\verbatim@line}}%  \verbatim@start}\def\@enddvllisting{%  \immediate\closeout\lstvrb@out  \@esphack  \endgroup  \expandafter\dvlinputlisting\@dvl@args}

And now, we can define all sorts of specialized versions for every language we're insterested in. Again, here is one for Common Lisp.
\newenvironment<>{cllisting}[1][]{%  \def\@dvl@lst@title{Lisp}%  \setkeys*[dvl]{lst}{#1}%  \edef\@dvl@lst@options{language=lisp,\XKV@rm}%  \xdef\@dvl@args{{#2}{\@dvl@lst@title}{\@dvl@lst@options}{%    \jobname.dvl}}  \@dvllisting}{%  \@enddvllisting}

Which you can use like this:
\begin{cllinsting}<2->[title={Example 1},gobble=2]  (defun foo (x) (* 2 x))\end{cllisting}`

Don't forget that frames containing code excerpts like this are fragile!

Wednesday, February 27 2008

## Patcher 3.10 is released

I'm happy to announce the release of Patcher 3.10. Patcher is an XEmacs package for automating the maintenance of version control system based projects. Patcher is the official tool for XEmacs development.

What's new in this version:

** New feature: provide built-in themes for some revision control systems
These are PRCS, CVS, Subversion, Darcs and Mercurial. Also coming with
whitespace-resistant counterparts.
** Documentation: a chapter on how to setup Patcher for XEmacs development
** Bugfixes:
*** Cleanup the log messages wrt trailing whitespaces
*** Correctly display a missing theme name in error message

## FiNK 2.1.1 is released

I'm happy to announce the release of FiNK 2.1.1. This is a bugfix/documentation only release.

FiNK is a LaTeX2e package that keeps track of the files included (\input or \include) in your documents.

What's new in this version:
** Fix trailing whitespace in \fink@restore