From e83296ee82e9d2b1847f6a624a27e5c66aa348cc Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Tue, 20 Apr 2010 13:58:07 +0200 Subject: [PATCH 1/1] Add initial framework for talk. --- Makefile | 40 ++++ atbegshi.sty | 635 +++++++++++++++++++++++++++++++++++++++++++++++++++ preamble.tex | 4 + talk.fmt | 2 + talk.lhs | 35 +++ 5 files changed, 716 insertions(+) create mode 100644 Makefile create mode 100644 atbegshi.sty create mode 100644 preamble.tex create mode 100644 talk.fmt create mode 100644 talk.lhs diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..60513da --- /dev/null +++ b/Makefile @@ -0,0 +1,40 @@ +FILE = talk +LHS2TEX = lhs2TeX -v --tt +LATEXMK = latexmk -pdf +RM = rm -f +RSVG = rsvg-convert --format=pdf + +LHSRCS = \ + +LHFORMATS = \ + talk.fmt + +TEXSRCS = \ + preamble.tex + +SVGFIGURES = \ + +default: $(FILE) + +$(FILE): texs figs $(TEXSRCS) $(LHFORMATS) $(FILE).tex + $(LATEXMK) $(FILE); \ + open $(FILE).pdf; \ + $(RM) $(LHSRCS:.lhs=.tex) + +texs : $(LHSRCS:.lhs=.tex) +%.tex : %.lhs + $(LHS2TEX) $< > $@ + +figs : $(SVGFIGURES:.svg=.pdf) +%.pdf : %.svg + $(RSVG) $< > $@ + +clean: + latexmk -C talk + $(RM) $(SVGFIGURES:.svg=.pdf) + $(RM) $(FILE).tex + $(RM) $(FILE).ptb + $(RM) $(FILE).synctex.gz + $(RM) $(FILE).nav + $(RM) $(FILE).snm + $(RM) *.hi *.o *.aux diff --git a/atbegshi.sty b/atbegshi.sty new file mode 100644 index 0000000..2232389 --- /dev/null +++ b/atbegshi.sty @@ -0,0 +1,635 @@ +%% +%% This is file `atbegshi.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% atbegshi.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2007 by Heiko Oberdiek +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% This Current Maintainer of this work is Heiko Oberdiek. +%% +%% This work consists of the main source file atbegshi.dtx +%% and the derived files +%% atbegshi.sty, atbegshi.pdf, atbegshi.ins, atbegshi.drv, +%% atbegshi-example.tex, atbegshi-test1.tex, +%% atbegshi-test2.tex, atbegshi-test3.tex. +%% +\begingroup + \catcode44 12 % , + \catcode45 12 % - + \catcode46 12 % . + \catcode58 12 % : + \catcode64 11 % @ + \expandafter\let\expandafter\x\csname ver@atbegshi.sty\endcsname + \ifcase 0% + \ifx\x\relax % plain + \else + \ifx\x\empty % LaTeX + \else + 1% + \fi + \fi + \else + \catcode35 6 % # + \catcode123 1 % { + \catcode125 2 % } + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{atbegshi}{The package is already loaded}% + \endgroup + \expandafter\endinput + \fi +\endgroup +\begingroup + \catcode35 6 % # + \catcode40 12 % ( + \catcode41 12 % ) + \catcode44 12 % , + \catcode45 12 % - + \catcode46 12 % . + \catcode47 12 % / + \catcode58 12 % : + \catcode64 11 % @ + \catcode123 1 % { + \catcode125 2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@atbegshi.sty\endcsname +\ProvidesPackage{atbegshi}% + [2007/09/09 v1.6 At begin shipout hook (HO)] +\begingroup + \catcode123 1 % { + \catcode125 2 % } + \def\x{\endgroup + \expandafter\edef\csname AtBegShi@AtEnd\endcsname{% + \catcode35 \the\catcode35\relax + \catcode64 \the\catcode64\relax + \catcode123 \the\catcode123\relax + \catcode125 \the\catcode125\relax + }% + }% +\x +\catcode35 6 % # +\catcode64 11 % @ +\catcode123 1 % { +\catcode125 2 % } +\def\TMP@EnsureCode#1#2{% + \edef\AtBegShi@AtEnd{% + \AtBegShi@AtEnd + \catcode#1 \the\catcode#1\relax + }% + \catcode#1 #2\relax +} +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{58}{12}% : +\TMP@EnsureCode{61}{12}% = +\TMP@EnsureCode{94}{7}% ^(superscript) +\TMP@EnsureCode{96}{12}% ` +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \input infwarerr.sty\relax +\else + \RequirePackage{infwarerr}[2007/09/09]% +\fi +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname @ifdefinable\endcsname\relax + \def\AtBegShi@CheckDefinable#1{% + \ifcase\ifx#1\relax + \@ne + \else + \ifx#1\@undefined + \@ne + \else + \z@ + \fi + \fi + \errmessage{% + Package atbegshi: \string#1\space + is already defined% + }% + \endgroup + \fi + }% +\else + \def\AtBegShi@CheckDefinable#1{% + \@ifdefinable{#1}{}% + }% +\fi +\newif\ifAtBegShi@Discarded +\AtBegShi@CheckDefinable\AtBeginShipoutDiscard +\def\AtBeginShipoutDiscard{% + \deadcycles=\z@ + \global\AtBegShi@Discardedtrue +} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname currentgrouplevel\endcsname\relax + \catcode`X=9 % ignore + \catcode`E=14 % comment +\else + \catcode`X=14 % comment + \catcode`E=9 % ignore +\fi +\def\AtBegShi@Shipout{% +X \begingroup +X \setbox\AtBeginShipoutBox=\hbox\bgroup +X \kern\p@ +E \edef\AtBegShi@GroupLevel{\number\currentgrouplevel}% + \afterassignment\AtBegShi@Test +X \global + \setbox\AtBeginShipoutBox=% +} +\def\AtBegShi@Test{% +X \ifdim\lastkern=\z@ +E \ifnum\AtBegShi@GroupLevel<\currentgrouplevel + \expandafter\aftergroup + \fi + \AtBegShi@Output +} +\def\AtBegShi@Output{% +X \egroup +X \endgroup + \ifvoid\AtBeginShipoutBox + \@PackageWarning{atbegshi}{Ignoring void shipout box}% + \else + \let\AtBegShi@OrgProtect\protect + \csname set@typeset@protect\endcsname + \global\AtBegShi@Discardedfalse + \AtBegShi@Hook + \AtBegShi@HookNext + \gdef\AtBegShi@HookNext{}% + \ifAtBegShi@Discarded + \@PackageInfoNoLine{atbegshi}{Shipout page discarded}% + \global\AtBegShi@Discardedfalse + \begingroup + \setbox\AtBeginShipoutBox\box\AtBeginShipoutBox + \endgroup + \let\protect\AtBegShi@OrgProtect + \else + \AtBegShi@First + \let\protect\AtBegShi@OrgProtect + \AtBegShi@OrgShipout\box\AtBeginShipoutBox + \fi + \fi +} +\catcode`\X=11 % +\catcode`\E=11 % +\def\AtBegShi@First{% + \begingroup + \def\@empty{}% + \ifx\AtBegShi@HookFirst\@empty + \else + \setbox\z@=\vbox{% + \begingroup + \AtBegShi@HookFirst + \endgroup + }% + \wd\z@=\z@ + \ht\z@=\z@ + \dp\z@=\z@ + \global\setbox\AtBeginShipoutBox=\vbox{% + \baselineskip\z@skip + \lineskip\z@skip + \lineskiplimit\z@ + \copy\z@ + \copy\AtBeginShipoutBox + }% + \fi + \global\let\AtBegShi@First\@empty + \global\let\AtBeginShipoutFirst\AtBegShi@FirstDisabled + \endgroup +} +\gdef\AtBegShi@Hook{} +\gdef\AtBegShi@HookNext{} +\gdef\AtBegShi@HookFirst{} +\AtBegShi@CheckDefinable\AtBeginShipout +\def\AtBeginShipout{% + \AtBegShi@AddHook\AtBegShi@Hook +} +\AtBegShi@CheckDefinable\AtBeginShipoutNext +\def\AtBeginShipoutNext{% + \AtBegShi@AddHook\AtBegShi@HookNext +} +\AtBegShi@CheckDefinable\AtBeginShipoutFirst +\def\AtBeginShipoutFirst{% + \AtBegShi@AddTo\AtBegShi@HookFirst +} +\long\def\AtBegShi@FirstDisabled#1{% + \@PackageWarning{atbegshi}{% + First page is already shipped out, ignoring\MessageBreak + \string\AtBeginShipoutFirst + }% +} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname g@addto@macro\endcsname\relax + \long\def\AtBegShi@AddTo#1#2{% + \begingroup + \toks\z@\expandafter{#1#2}% + \xdef#1{\the\toks\z@}% + \endgroup + }% +\else + \let\AtBegShi@AddTo\g@addto@macro +\fi +\long\def\AtBegShi@AddHook#1#2{% + \AtBegShi@AddTo#1{\AtBegShi@Item{#2}}% +} +\long\def\AtBegShi@Item#1{% + \ifAtBegShi@Discarded + \else + #1% + \ifvoid\AtBeginShipoutBox + \@PackageWarning{atbegshi}{% + Shipout box was voided by hook,\MessageBreak + ignoring shipout box% + }% + \AtBeginShipoutDiscard + \fi + \fi +} +\AtBegShi@CheckDefinable\AtBeginShipoutInit +\def\AtBeginShipoutInit{% + \csname newbox\endcsname\AtBeginShipoutBox + \AtBegShi@CheckDefinable\AtBegShi@OrgShipout + \global\let\AtBegShi@OrgShipout\shipout + \global\let\shipout\AtBegShi@Shipout + \gdef\AtBeginShipoutInit{}% +} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname AtBeginDocument\endcsname\relax + \AtBeginShipoutInit +\else + \AtBeginDocument{\AtBeginShipoutInit}% +\fi +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \input ifpdf.sty\relax +\else + \RequirePackage{ifpdf}\relax +\fi +\ifpdf + \def\AtBegShi@horigin{\pdfhorigin}% + \def\AtBegShi@vorigin{\pdfvorigin}% +\else + \def\AtBegShi@horigin{72.27pt}% + \def\AtBegShi@vorigin{72.27pt}% +\fi +\begingroup +\ifcase + \expandafter\ifx\csname picture\endcsname\relax + 1% + \else + \expandafter\ifx\csname endpicture\endcsname\relax + 1% + \else + 0% + \fi + \fi + \endgroup + \def\AtBegShi@BeginPicture{% + \begingroup + \picture(0,0)\relax + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname unitlength\endcsname\relax + \else + \unitlength=1pt\relax + \fi + \ignorespaces + }% + \def\AtBegShi@EndPicture{% + \endpicture + \endgroup + }% +\else + \endgroup + \def\AtBegShi@BeginPicture{% + \setbox0=\hbox\bgroup + \begingroup + \ignorespaces + }% + \def\AtBegShi@EndPicture{% + \endgroup + \egroup + \ht0=0pt\relax + \dp0=0pt\relax + \copy0 % + }% +\fi +\def\AtBeginShipoutUpperLeft#1{% + \global\setbox\AtBeginShipoutBox=\hbox{% + \rlap{% + \kern-\AtBegShi@horigin\relax + \vbox to 0pt{% + \kern-\AtBegShi@vorigin\relax + \kern-\ht\AtBeginShipoutBox + \AtBegShi@BeginPicture + #1% + \AtBegShi@EndPicture + \vss + }% + }% + \box\AtBeginShipoutBox + }% +} +\def\AtBegShi@AbortIfUndefined#1{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname#1\endcsname\relax + \AtBegShi@AtEnd + \expandafter\endinput + \fi +} +\AtBegShi@AbortIfUndefined{currentgrouplevel} +\AtBegShi@AbortIfUndefined{AtBeginDocument} +\AtBegShi@AbortIfUndefined{@ifpackageloaded} +\AtBegShi@AbortIfUndefined{@ifclassloaded} +\def\AtBegShi@PatchCrop{% + \begingroup + \def\AtBegShi@Crop@shipout{% + \afterassignment\CROP@ship + \setbox\@cclv=% + }% + \def\AtBegShi@Crop@ship{% + \ifvoid\@cclv + \expandafter\aftergroup + \fi + \CROP@@ship + }% + \def\AtBegShi@Crop@shiplist{% + \lineskip\z@ + \lineskiplimit\z@ + \baselineskip\z@ + \CROP@kernel + \box\@cclv + }% + \def\AtBegShi@Crop@@ship{% + \CROP@shipout\vbox{% + \CROP@shiplist + }% + }% + \ifx\AtBegShi@Crop@ship\CROP@ship + \ifx\AtBegShi@Crop@shiplist\CROP@shiplist + \ifx\AtBegShi@Crop@@ship\CROP@@ship + \let\AtBegShi@found\relax + \ifx\shipout\AtBegShi@Crop@shipout + \def\AtBegShi@found{\shipout}% + \else\ifx\AtBegShi@OrgShipout\AtBegShi@Crop@shipout + \def\AtBegShi@found{\AtBegShi@OrgShipout}% + \else\ifx\@EveryShipout@Org@Shipout\AtBegShi@Crop@shipout + \def\AtBegShi@found{\@EveryShipout@Org@Shipout}% + \else\ifx\GPTorg@shipout\AtBegShi@Crop@shipout + \def\AtBegShi@found{\GPTorg@shipout}% + \else\ifx\THBorg@shipout\AtBegShi@Crop@shipout + \def\AtBegShi@found{\THBorg@shipout}% + \else\ifx\mem@oldshipout\AtBegShi@Crop@shipout + \def\AtBegShi@found{\mem@oldshipout}% + \fi\fi\fi\fi\fi\fi + \ifx\AtBegShi@found\relax + \else + \expandafter\endgroup + \expandafter\def\AtBegShi@found{% + \edef\AtBegShi@GroupLevel{\number\currentgrouplevel}% + \afterassignment\CROP@ship + \setbox\AtBeginShipoutBox=% + }% + \def\CROP@ship{% + \ifnum\AtBegShi@GroupLevel=\currentgrouplevel + \else + \expandafter\aftergroup + \fi + \CROP@@ship + }% + \def\CROP@shiplist{% + \lineskip\z@ + \lineskiplimit\z@ + \baselineskip\z@ + \CROP@kernel + \box\AtBeginShipoutBox + }% + \def\CROP@@ship{% + \ifvoid\AtBeginShipoutBox + \else + \setbox\AtBeginShipoutBox=\vbox{% + \CROP@shiplist + }% + \expandafter\CROP@shipout + \expandafter\box + \expandafter\AtBeginShipoutBox + \fi + }% + \@PackageInfoNoLine{atbegshi}{Package `crop' patched}% + \begingroup + \fi + \fi + \fi + \fi + \endgroup + \let\AtBegShi@PatchCrop\relax +} +\@ifpackageloaded{crop}{% + \AtBegShi@PatchCrop +}{% + \AtBeginDocument{\AtBegShi@PatchCrop}% +} +\def\AtBegShi@PatchEveryshi{% + \begingroup + \long\def\AtBegShi@Everyshi@shipout{% + \afterassignment\@EveryShipout@Test + \global\setbox\@cclv= % + }% + \long\def\AtBegShi@Everyshi@Test{% + \ifvoid\@cclv\relax + \aftergroup\@EveryShipout@Output + \else + \@EveryShipout@Output + \fi + }% + \ifx\AtBegShi@Everyshi@Test\@EveryShipout@Test + \let\AtBegShi@found\relax + \ifx\shipout\AtBegShi@Everyshi@shipout + \def\AtBegShi@found{\shipout}% + \else\ifx\AtBegShi@OrgShipout\AtBegShi@Everyshi@shipout + \def\AtBegShi@found{\AtBegShi@OrgShipout}% + \else\ifx\CROP@shipout\AtBegShi@Everyshi@shipout + \def\AtBegShi@found{\CROP@shipout}% + \else\ifx\GPTorg@shipout\AtBegShi@Everyshi@shipout + \def\AtBegShi@found{\GPTorg@shipout}% + \else\ifx\THBorg@shipout\AtBegShi@Everyshi@shipout + \def\AtBegShi@found{\THBorg@shipout}% + \else\ifx\mem@oldshipout\AtBegShi@Everyshi@shipout + \def\AtBegShi@found{\mem@oldshipout}% + \else + \expandafter\ifx\csname @EveryShipout@Org@Shipout\endcsname + \relax + \ifx\@EveryShipout@Shipout\AtBegShi@Everyshi@shipout + \def\AtBegShi@found{\@EveryShipout@Shipout}% + \fi + \fi + \fi\fi\fi\fi\fi\fi + \ifx\AtBegShi@found\relax + \else + \expandafter\endgroup + \expandafter\def\AtBegShi@found{% + \edef\AtBegShi@GroupLevel{\number\currentgrouplevel}% + \afterassignment\@EveryShipout@Test + \setbox\AtBeginShipoutBox=% + }% + \def\@EveryShipout@Test{% + \ifnum\AtBegShi@GroupLevel=\currentgrouplevel + \else + \expandafter\aftergroup + \fi + \AtBegShi@Everyshi@Output + }% + \def\AtBegShi@Everyshi@Output{% + \ifvoid\AtBeginShipoutBox + \else + \global\setbox\@cclv\box\AtBeginShipoutBox + \expandafter\@EveryShipout@Output + \fi + }% + \@PackageInfoNoLine{atbegshi}{Package `everyshi' patched}% + \begingroup + \fi + \fi + \endgroup + \let\AtBegShi@PatchEveryshi\relax +} +\@ifpackageloaded{everyshi}{% + \AtBegShi@PatchEveryshi +}{% + \AtBeginDocument{\AtBegShi@PatchEveryshi}% +} +\def\AtBegShi@PatchMemoir{% + \begingroup + \def\AtBegShi@Memoir@shipout{% + \afterassignment\mem@shipi + \setbox\@cclv=% + }% + \def\AtBegShi@Memoir@shipi{% + \ifvoid\@cclv + \expandafter\aftergroup + \fi + \mem@shipii + }% + \def\AtBegShi@Memoir@shipiiA{% + \mem@oldshipout\vbox{% + \trimmarks + \unvbox\@cclv + }% + }% + \def\AtBegShi@Memoir@shipiiB{% + \ifvoid\@cclv + \mem@oldshipout\box\@cclv + \else + \mem@oldshipout\vbox{% + \trimmarks + \unvbox\@cclv + }% + \fi + }% + \ifx\AtBegShi@Memoir@shipi\mem@shipi + \ifcase\ifx\AtBegShi@Memoir@shipiiA\mem@shipii + \z@ + \else + \ifx\AtBegShi@Memoir@shipiiB\mem@shipii + \z@ + \else + \@ne + \fi + \fi + \let\AtBegShi@found\relax + \ifx\shipout\AtBegShi@Memoir@shipout + \def\AtBegShi@found{\shipout}% + \else\ifx\AtBegShi@OrgShipout\AtBegShi@Memoir@shipout + \def\AtBegShi@found{\AtBegShi@OrgShipout}% + \else\ifx\CROP@shipout\AtBegShi@Memoir@shipout + \def\AtBegShi@found{\CROP@shipout}% + \else\ifx\GPTorg@shipout\AtBegShi@Memoir@shipout + \def\AtBegShi@found{\GPTorg@shipout}% + \else\ifx\THBorg@shipout\AtBegShi@Memoir@shipout + \def\AtBegShi@found{\THBorg@shipout}% + \else\ifx\@EveryShipout@Org@Shipout\AtBegShi@Memoir@shipout + \def\AtBegShi@found{\@EveryShipout@Org@Shipout}% + \fi\fi\fi\fi\fi\fi + \ifx\AtBegShi@found\relax + \else + \expandafter\endgroup + \expandafter\def\AtBegShi@found{% + \edef\AtBegShi@GroupLevel{\number\currentgrouplevel}% + \afterassignment\mem@shipi + \setbox\AtBeginShipoutBox=% + }% + \def\mem@shipi{% + \ifnum\AtBegShi@GroupLevel=\currentgrouplevel + \else + \expandafter\aftergroup + \fi + \mem@shipii + }% + \def\mem@shipii{% + \ifvoid\AtBeginShipoutBox + \else + \setbox\AtBeginShipoutBox=\vbox{% + \trimmarks + \ifvbox\AtBeginShipoutBox + \unvbox\AtBeginShipoutBox + \else + \box\AtBeginShipoutBox + \fi + }% + \expandafter\mem@oldshipout + \expandafter\box + \expandafter\AtBeginShipoutBox + \fi + }% + \@PackageInfoNoLine{atbegshi}{Class `memoir' patched}% + \begingroup + \fi + \fi + \fi + \endgroup + \let\AtBegShi@PatchMemoir\relax +} +\@ifclassloaded{memoir}{% + \AtBegShi@PatchMemoir +}{% + \AtBeginDocument{\AtBegShi@PatchMemoir}% +} +\AtBegShi@AtEnd +\endinput +%% +%% End of file `atbegshi.sty'. diff --git a/preamble.tex b/preamble.tex new file mode 100644 index 0000000..e91c9f5 --- /dev/null +++ b/preamble.tex @@ -0,0 +1,4 @@ +\usepackage[english]{babel} +\usepackage{xcolor} + +\newcommand{\clash}[0]{C$\lambda$aSH} diff --git a/talk.fmt b/talk.fmt new file mode 100644 index 0000000..7776f58 --- /dev/null +++ b/talk.fmt @@ -0,0 +1,2 @@ +%include lhs2TeX.fmt + diff --git a/talk.lhs b/talk.lhs new file mode 100644 index 0000000..62d0e13 --- /dev/null +++ b/talk.lhs @@ -0,0 +1,35 @@ +\RequirePackage{atbegshi} +\documentclass[empty]{beamer} +\usetheme{default} +%\setbeameroption{show only notes} +%\setbeameroption{show notes} +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline} +{ + \hbox{% + \centerline{\insertframenumber{}}}% + \vskip5pt% +} + +\addtobeamertemplate{note page}{ + \vskip5pt + \centerline{\insertframenumber} + \vskip5pt +}{} + +%include talk.fmt +\include{preamble} + +\title{Haskell-ish Hardware Descriptions} +\author{Matthijs Kooijman} +\date{April 24, 2010} + +\begin{document} + +\frame{\titlepage} +\note[itemize]{ + \item foo +} + +\end{document} +% vim: set filetype=tex sw=2 sts=2 expandtab: -- 2.30.2