%% card.tex --- Reference Card for Rudel 0.2
%
% Copyright (c) 1987, 1992 Free Software Foundation, Inc.
% Copyright (c) 2009 Jan Moringen
%
% Author: Stephen Gildea <gildea@erl.mit.edu> (refcard.tex format)
%         Dave Gillespie <daveg@synaptics.com> (Calc reference card)
%         Jan Moringen <scymtym@users.sourceforge.net> (Rudel)
%
% This file is part of Rudel.
%
% Rudel 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.
%
% Rudel 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 rudel. If not, see <http://www.gnu.org/licenses>.


%% Commentary:
%
% The format for this file is adapted from the GNU Emacs reference
% card version 1.9, by Stephen Gildea and the GNU Calc reference card
% by Dave Gillespie.
%
% This file is intended to be processed by plain TeX.
% Typical command to format: pdftex -t landscape card.tex
% Typical command to print:  tex card.tex
%                            dvips -t landscape card.dvi


%% Constants
%

\def\versionnumber{0.2}
\def\versiondate{September 2009}
\def\year{2009}

\def\copyrightnotice{
\vskip 1ex plus 2 fill\begingroup\small
\centerline{Copyright \copyright\ \year\ Jan Moringen}
\centerline{written by Jan Moringen}
\centerline{for Rudel version \versionnumber\ (\versiondate)}

Permission is granted to make and distribute copies of
this card provided the copyright notice and this permission notice
are preserved on all copies.

%For copies of the GNU Emacs Calc manual, write to the Free Software
%Foundation, Inc., 675 Massachusetts Ave, Cambridge MA 02139.

\endgroup}



%% Header
%

% make \bye not \outer so that the \def\bye in the \else clause below
% can be scanned without complaint.
\def\bye{\par\vfill\supereject\end}

\newdimen\intercolumnskip
\newbox\columna
\newbox\columnb

\def\scaledmag#1{ scaled \magstep #1}

% This format was designed by Stephen Gildea in October 1986.
\hsize 3.2in
\vsize 7.95in
\hoffset -.75in
\voffset -.745in
\font\titlefont=cmbx10 \scaledmag2
\font\headingfont=cmbx10 \scaledmag1
\font\subheadingfont=cmbx10 \scaledmag0
\font\smallfont=cmr6
\font\smallsy=cmsy6
\font\eightrm=cmr8
\font\eightbf=cmbx8
\font\eightit=cmti8
\font\eighttt=cmtt8
\font\eightsy=cmsy8
\textfont0=\eightrm
\textfont2=\eightsy
\font\notefont=cmti7
\def\rm{\eightrm}
\def\bf{\eightbf}
\def\it{\eightit}
\def\tt{\eighttt}
\normalbaselineskip=.8\normalbaselineskip
\normallineskip=.8\normallineskip
\normallineskiplimit=.8\normallineskiplimit
\normalbaselines\rm		%make definitions take effect

\let\maxcolumn=c
\nopagenumbers

\intercolumnskip=.46in
\def\abc{a}
\output={%
  % This next line is useful when designing the layout.
  %\immediate\write16{Column \folio\abc\space starts with \firstmark}
  \if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
  \else\if a\abc
  \global\setbox\columna\columnbox \global\def\abc{b}
  %% in case we never use \columnb (two-column mode)
  \global\setbox\columnb\hbox to -\intercolumnskip{}
  \else
  \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}

\def\multicolumnformat{\shipout\vbox{\makeheadline
  \hbox{\box\columna\hskip\intercolumnskip
  \box\columnb\hskip\intercolumnskip\columnbox}
  \makefootline}\advancepageno}
\def\columnbox{\leftline{\pagebody}}

\def\bye{\par\vfill\supereject
  \if a\abc \else\null\vfill\eject\fi
  \if a\abc \else\null\vfill\eject\fi
  \end}

% we won't be using math mode much, so redefine some of the characters
% we might want to talk about
\catcode`\^=12
\catcode`\_=12

\chardef\\=`\\
\chardef\{=`\{
\chardef\}=`\}

\parindent 0pt
\parskip 1ex plus .5ex minus .5ex

\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}

\outer\def\newcolumn{\vfill\eject}

\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex}

\outer\def\section#1{\par\filbreak
  \vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}%
  \vskip 2ex plus 1ex minus 1.5ex}

\outer\def\subsection#1{\par\filbreak
  \vskip 3ex plus 2ex minus 2ex {\subheadingfont #1}\mark{#1}%
  \vskip 2ex plus 1ex minus 1.5ex}

\newdimen\keyindent

\def\beginindentedkeys{\keyindent=1em}
\def\endindentedkeys{\keyindent=0em}
\endindentedkeys

\def\paralign{\vskip\parskip\halign}

\def\<#1>{$\langle${\rm #1}$\rangle$}

\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows

\def\key#1#2{\leavevmode\hbox to \hsize{\vtop
  {\hsize=.75\hsize\rightskip=1em
  \hskip\keyindent\relax#1}\kbd{#2}\hfil}}

\newbox\metaxbox
\setbox\metaxbox\hbox{\kbd{M-x }}
\newdimen\metaxwidth
\metaxwidth=\wd\metaxbox

% Redefine to make spaces a bit smaller
\let\wkbd=\kbd
\def\kbd#1{{\spaceskip=.37em\tt#1}\null}

\def\wkey#1#2{\leavevmode\hbox to \hsize{\vtop
  {\hsize=.75\hsize\rightskip=1em
  \hskip\keyindent\relax#1}\wkbd{#2}\hfil}}

\def\ccc{C-c\ c\ }
\def\,{{\rm ,\hskip.55em}\ignorespaces}
\def\lesssectionskip{\vskip-1.5ex}

\def\iline#1{\par\line{\hskip1em\relax #1\hfill}\par}

\font\eighti=cmmi8
\textfont1=\eighti


%% Document
%

\title{Rudel Reference Card}\vskip-1ex
\centerline{\tt http://rudel.sourceforge.net}\vskip1ex
\centerline{(for Rudel version \versionnumber\ of \versiondate)}

\section{Key Bindings}

\lesssectionskip
{\notefont All key bindings are only available when the global Rudel
minor mode is active. See ``Minor Modes'' below.}

\subsection{Hosting and Joining}

\wkey{Join a Rudel session}{\ccc j}
\wkey{Leave a Rudel session}{\ccc e}

\wkey{Host a Rudel session}{\ccc h}

\subsection{In a Session}

The following commands are available once a Rudel session has been
joined:

\key{Change color}{\ccc c}

\key{Create and publish document for buffer}{\ccc p}
\key{Subscribe to a document}{\ccc s}

The following commands are only available if the current buffer has an
associated document (achieved by publishing or subscribing):

\key{Detach buffer from document (unsubscribe)}{\ccc u}

\section{Minor Modes}

\subsection{Global Rudel Minor Mode}

The global Rudel minor mode global-rudel-minor-mode is responsible for
installing the Rudel menu and keymap.

\subsection{Participants in Header Line}

The mode ({\tt rudel-header-subscriptions-minor-mode}) shows
subscribed users in the header line of the buffer.

The associated global mode ({\tt global-rudel-header-subscriptions
mode}) turns the mode on or off in all suitable buffers.

\subsection{Buffer Status in Mode Line}

The mode ({\tt rudel-mode-line-publish-state-minor-mode}) shows the
publication state of the buffer in its mode line ({\tt P}: published,
{\tt -}: not published)

The associated global mode ({\tt
global-rudel-mode-line-publish-state-mode}) turns the mode on or off
in all suitable buffers.

\eject

\section{Backends}

\lesssectionskip
In Rudel, various kinds of backends are used to provide multiple
pluggable implementations of functionalities like communication
protocols, network transport, session initiation and parts of the user
interface.

\subsection{Protocol}

{\bf Obby}

This backend implements the obby protocol used by the Gobby
collaborative editor until (including) version 4.9.

\subsection{Session Initiation}

{\bf Configured Sessions}

Frequently used sessions can be configured permanently using the {\tt
rudel-configured-sessions} customization variable. When there are
configured sessions, connecting to one of these session is offered
when joining a session using \kbd{\ccc j}.

{\bf Zeroconf}

The Zeroconf backends discovers collaboration sessions which are
advertised using, well Zeroconf. Currently, it works for Rudel (obby
backend) and Obby servers. When there are Zeroconf-advertised
sessions, using \kbd{\ccc j} to join a session will display these
sessions.

\section{Examples}

\subsection{Joining a Session with the obby backend}

{\bf Without Zeroconf Discovery}

\kbd{\ccc j}\hfil\break
{\tt Server: }{\it SERVER} \kbd{RET}\hfil\break
{\tt Port (default 6522): } \kbd{RET}\hfil\break
{\tt Username: }{\it NAME} \kbd{RET}\hfil\break
{\tt Color: }{\it COLOR} \kbd{RET}\hfil\break
{\notefont (use bright colors like yellow)}\hfil\break
{\it When connecting to a Rudel server:}\hfil\break
-\hskip2ex {\tt Use Encryption (yes or no): }{\it NO} \kbd{RET}\hfil\break
{\it When connecting to a Gobby server:}\hfil\break
-\hskip2ex {\tt Use Encryption (yes or no): }{\it YES} \kbd{RET}\hfil\break
{\tt Global Password: }{\it PASSWORD} \kbd{RET}\hfil\break
{\it This password controls access to the session; just \kbd{RET} for
none}\hfil\break
{\tt User Password: }{\it PASSWORD} \kbd{RET}\hfil\break
{\it This password prevents name stealing; just \kbd{RET} for
none}\hfil\break

{\bf With Zeroconf Discovery}

\kbd{\ccc j}\hfil\break
{\tt Choose Session: }Zeroconf advertised session {\it
"NAME"}\kbd{RET}\hfil\break
{\notefont (Note: by choosing "ask-protocol" here, you can still get the
above behavior)}\hfil\break
{\tt Username: }{\it NAME} \kbd{RET}\hfil\break
{\tt Color: }{\it COLOR} \kbd{RET}\hfil\break
{\tt Global Password: }{\it PASSWORD} \kbd{RET}\hfil\break
{\tt User Password: }{\it PASSWORD} \kbd{RET}\hfil

\copyrightnotice

\bye

% Local variables:
% mode: plain-TeX; eval: (tex-pdf-mode);
% End:
