A taste of linuxhttp://www.sharons.org.uk/2019-12-14T00:00:00+00:00Updated pdfbuild, version 32019-12-14T00:00:00+00:002019-12-14T00:00:00+00:00Sharon Kimbletag:www.sharons.org.uk,2019-12-14:/pdfbuild3.html<p>This is my 'pdfbuild' bash script that converts 'tex' files to a PDF. You generate the '.tex' files
in any way you want to build them. I <em>used</em> to build the latex files by hand, which was very slow
and laborious, but gave extremely good results. Currently I'm building the …</p><p>This is my 'pdfbuild' bash script that converts 'tex' files to a PDF. You generate the '.tex' files
in any way you want to build them. I <em>used</em> to build the latex files by hand, which was very slow
and laborious, but gave extremely good results. Currently I'm building the latex files after
exporting from org-mode, and my template is in post <a href="../org2latex.html">org2latex</a></p>
<p>The changes in this version relate to a very recent change in TexLive that stops you building a PDF
file saying that there are problems with the building showing <code>! Package minted Error: You must
invoke LaTeX with the -shell-escape flag.</code> So this script now includes it and allows the PDF file
to be generated. And also nested commands so that if you're writing a series then you can easily
generate the required PDF's.</p>
<p>Using this script you can work on several latex/tex files and build their PDF's very easily and
quickly.</p>
<p>To use this script save it into your 'bin' folder as 'pdfbuild', whether that's local or
system-wide, and obviously make it executable. And then just call 'pdfbuild' in a terminal and
follow the on-screen prompts to easily build your PDF file. </p>
<p>To adapt this script for your situation change the details in function 'choose' near the end of the
script, using my setup as a template.</p>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1">#set -e</span>
<span class="c1">#: Title : pdfbuild</span>
<span class="c1">#: Date : 7th July 2016</span>
<span class="c1">#: Version : 3.0</span>
<span class="c1">#: Description : To build a PDF file from a pre-generated .tex file</span>
<span class="c1">#; Requirements : texlive</span>
<span class="c1"># Copyright (C) 2015, 2016, 2017, 2018, 2019 Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># Author: Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># This program is free software; you can redistribute it and/or</span>
<span class="c1"># modify it under the terms of the GNU General Public License</span>
<span class="c1"># as published by the Free Software Foundation; either version 3</span>
<span class="c1"># of the License, or (at your option) any later version.</span>
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="c1"># GNU General Public License for more details.</span>
<span class="c1"># You should have received a copy of the GNU General Public License</span>
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<span class="c1">#############</span>
<span class="nv">bldgrn</span><span class="o">=</span><span class="si">${</span><span class="nv">txtbld</span><span class="si">}</span> <span class="nb">echo</span> -e <span class="s2">"\e[92m"</span>
<span class="nv">txtbld</span><span class="o">=</span><span class="k">$(</span>tput bold<span class="k">)</span>
<span class="nv">bldgrn</span><span class="o">=</span><span class="si">${</span><span class="nv">txtbld</span><span class="si">}</span><span class="k">$(</span>tput setaf <span class="m">2</span><span class="k">)</span>
<span class="k">function</span> endex <span class="o">{</span>
echo<span class="p">;</span>
sleep <span class="m">0</span><span class="p">;</span>
<span class="c1">#clear;</span>
<span class="nb">exit</span> <span class="m">0</span><span class="p">;</span>
<span class="o">}</span>
<span class="k">function</span> one <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want one pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> double <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a double pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> treble <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a treble pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> partwrite <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a part-write pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> penta <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a penta pass? [x5]</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> onebib <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want one pass including the bib file?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> biber <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> multipass <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a pass including glossary, bibliography?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> extend <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want an extended pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> bibi <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a bibliography only?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> biber <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> slog <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a glossary only?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> xedni <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want an index only?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> makeindex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> severe <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want the severe pass-through?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> ultimate <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want the ultimate pass-through?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> xelatex -shell-escape <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> ques <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> One-pass = a</span>
<span class="s2"> Double-pass = d</span>
<span class="s2"> Treble pass = t</span>
<span class="s2"> Part-write pass = w</span>
<span class="s2"> Penta pass = p</span>
<span class="s2"> One-pass + Bib = o</span>
<span class="s2"> MultiPass = m</span>
<span class="s2"> Extended pass = x</span>
<span class="s2"> Severe pass = s</span>
<span class="s2"> Ultimate pass = u</span>
<span class="s2"> Bibliography only = b</span>
<span class="s2"> Glossary only = g</span>
<span class="s2"> Index only = h</span>
<span class="s2"> Start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> abcdefghjkmnpqrswxyz
<span class="k">case</span> <span class="s2">"</span><span class="nv">$abcdefghjkmnpqrswxyz</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> one<span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> double<span class="p">;;</span>
<span class="o">[</span>Tt<span class="o">]</span>* <span class="o">)</span> treble<span class="p">;;</span>
<span class="o">[</span>Ww<span class="o">]</span>* <span class="o">)</span> partwrite<span class="p">;;</span>
<span class="o">[</span>Pp<span class="o">]</span>* <span class="o">)</span> penta<span class="p">;;</span>
<span class="o">[</span>Oo<span class="o">]</span>* <span class="o">)</span> onebib<span class="p">;;</span>
<span class="o">[</span>Mm<span class="o">]</span>* <span class="o">)</span> multipass<span class="p">;;</span>
<span class="o">[</span>Xx<span class="o">]</span>* <span class="o">)</span> extend<span class="p">;;</span>
<span class="o">[</span>Ss<span class="o">]</span>* <span class="o">)</span> severe<span class="p">;;</span>
<span class="o">[</span>Uu<span class="o">]</span>* <span class="o">)</span> ultimate<span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> bibi<span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> slog<span class="p">;;</span>
<span class="o">[</span>Hh<span class="o">]</span>* <span class="o">)</span> xedni<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> foo <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> Introduction = a</span>
<span class="s2">p1 basics-biscuits-bread-pastries = b</span>
<span class="s2"> p2 cakes = c</span>
<span class="s2"> p3 cheese-egg-nuts = d</span>
<span class="s2"> p4 fish = e</span>
<span class="s2"> p5 jams-misc--pickles-preserving = f</span>
<span class="s2"> p6 meat = g</span>
<span class="s2"> p7 puddings-sweets = h</span>
<span class="s2"> p8 salads = j</span>
<span class="s2"> p9 sauces and dressings = k</span>
<span class="s2"> p10 soups = m</span>
<span class="s2"> p11 vegetables = n</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/wartime-cookery/introduction/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"introduction-1"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Cc<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ee<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ff<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Hh<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Jj<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Kk<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Mm<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="c1"># [Pp]* ) cd ;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> cooking <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> wartime cooking, volume 1 = a</span>
<span class="s2"> wartime cooking, volume 2 = b</span>
<span class="s2"> personal cookbook = c</span>
<span class="s2">first world war cookery, volume 1 = d</span>
<span class="s2"> wartime cooking, volume 3 = e</span>
<span class="s2"> cooking-4-one-1 = f</span>
<span class="s2"> cooking-4-one-2 = g</span>
<span class="s2"> cooking-4-2-v1 = h</span>
<span class="s2"> cooking-4-3-V1 = j</span>
<span class="s2"> cookery-school = k</span>
<span class="s2"> ocado = l</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpojkmxubgiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpojkmxubgiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/soldier/wartime-cookery-1939-1945/wartime-cookery/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"war-cooking"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Cc<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ee<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ff<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Hh<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Jj<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Kk<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ll<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="c1"># [Uu]* ) ultimate;; </span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="c1"># [Rr]* ) choose;;</span>
<span class="c1"># [Qq]* ) endex;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> war-cooking <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> war cooking = a</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="c1"># [Bb]* ) cd ;;</span>
<span class="c1"># [Cc]* ) cd ;;</span>
<span class="c1"># [Dd]* ) cd ;;</span>
<span class="c1"># [Ee]* ) cd ;;</span>
<span class="c1"># [Ff]* ) cd ;;</span>
<span class="c1"># [Gg]* ) cd ;;</span>
<span class="c1">#[Xx]* ) extend;;</span>
<span class="c1">#[Uu]* ) ultimate;; </span>
<span class="c1">#[Bb]* ) bibi;;</span>
<span class="c1">#[Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> health <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> aging = a</span>
<span class="s2"> conditions = b</span>
<span class="s2"> cancer = c</span>
<span class="s2"> drugs = d</span>
<span class="s2"> drugfacts = e</span>
<span class="s2"> death 1 = f</span>
<span class="s2"> A1-death = g</span>
<span class="s2"> death 3 = h</span>
<span class="s2"> death 4 = j</span>
<span class="s2"> mci-1 = k</span>
<span class="s2"> BHA18 = n</span>
<span class="s2"> readers-digest = o</span>
<span class="s2">inquest_handbook_2018 = m</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Cc<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ee<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ff<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Hh<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Jj<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Kk<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Mm<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Oo<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> trans <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> foo = a</span>
<span class="s2"> foo = b</span>
<span class="s2"> tart again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Cc<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ee<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Ff<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="c1"># [Mm]* ) multipass;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> wartime <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> foo = a</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Cc<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="c1"># [Pp]* ) choose;;</span>
<span class="c1"># [Oo]* ) choose;;</span>
<span class="c1"># [Mm]* ) multipass;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> program <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> emacs-basics = a</span>
<span class="s2"> zenkit = b</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="c1"># [Pp]* ) choose;;</span>
<span class="c1"># [Oo]* ) choose;;</span>
<span class="c1"># [Mm]* ) multipass;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> books <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> roman-1 = a</span>
<span class="s2"> writing = b</span>
<span class="s2"> writing multiverse = c</span>
<span class="s2"> universe of writing = d</span>
<span class="s2"> Feng Shu = e</span>
<span class="s2"> hadrian = f</span>
<span class="s2"> occupation = g</span>
<span class="s2"> death = h</span>
<span class="s2"> Dashboard = j</span>
<span class="s2"> mega = k</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/books/roman/roman-1<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"roman-1"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> skoob<span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Cc<span class="o">]</span>* <span class="o">)</span> 2skoob<span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> 3skoob<span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Ee<span class="o">]</span>* <span class="o">)</span> feng-shu<span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Ff<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/books/roman/hadrian/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"hadrian"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/books/occupation/occupation-1/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"occupation"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Hh<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/books/death/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"death"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Jj<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> <span class="p">;;</span>
<span class="o">[</span>Kk<span class="o">]</span>* <span class="o">)</span> mega<span class="p">;</span> ques<span class="p">;;</span>
<span class="c1"># [Mm]* ) multipass;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> feng-shu <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> computers = a</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/books/Feng_Shu/computer<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"computers"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="c1"># [Pp]* ) choose;;</span>
<span class="c1"># [Oo]* ) choose;;</span>
<span class="c1"># [Mm]* ) multipass;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> mega <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="c1"># [Cc]* ) 2skoob; ques;; </span>
<span class="c1"># [Dd]* ) feng-shu; ques;;</span>
<span class="c1"># [Ee]* ) cd ;;</span>
<span class="c1"># [Ff]* ) cd ;;</span>
<span class="c1"># [Gg]* ) cd ;;</span>
<span class="c1"># [Hh]* ) fu; ques;;</span>
<span class="c1"># [Jj]* ) cd ;;</span>
<span class="c1"># [Oo]* ) choose;;</span>
<span class="c1"># [Mm]* ) multipass;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> skoob <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> 2skoob <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq01234567
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq01234567</span><span class="s2">"</span> in
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> 3skoob <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq01234567
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq01234567</span><span class="s2">"</span> in
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> misc <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rbdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rbdtwpomxubqiq</span><span class="s2">"</span> in
<span class="c1"># [Pp]* ) choose;;</span>
<span class="c1"># [Oo]* ) choose;;</span>
<span class="c1"># [Mm]* ) multipass;;</span>
<span class="c1"># [Xx]* ) extend;;</span>
<span class="c1"># [Uu]* ) ultimate;;</span>
<span class="c1"># [Bb]* ) bibi;;</span>
<span class="c1"># [Gg]* ) slog;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> choose <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> wartime-cooking 39-45 = a</span>
<span class="s2"> health multi-verse = b</span>
<span class="s2"> ideal multi-verse = c</span>
<span class="s2"> cooking multi-verse = d</span>
<span class="s2"> writing-multiverse = e</span>
<span class="s2"> universe of writing = f</span>
<span class="s2"> wartime = g</span>
<span class="s2"> programs = h</span>
<span class="s2"> foo = j</span>
<span class="s2"> miscellaneous = k</span>
<span class="s2"> books = l</span>
<span class="s2"> cheatsheet = m</span>
<span class="s2"> foo = n</span>
<span class="s2"> foo = o</span>
<span class="s2"> sandbox = x</span>
<span class="s2"> sandyford = y</span>
<span class="s2"> reload pdfbuild = z</span>
<span class="s2"> start again = r</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> abcdefghijkmnprstuvw012345678xyzq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$abcdefghijkmnprstuvw012345678xyzq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> wartime-cooking<span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> health<span class="p">;;</span>
<span class="o">[</span>Cc<span class="o">]</span>* <span class="o">)</span> ideal<span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> cooking<span class="p">;;</span>
<span class="o">[</span>Ee<span class="o">]</span>* <span class="o">)</span> 2skoob<span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Ff<span class="o">]</span>* <span class="o">)</span> 3skoob<span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> wartime<span class="p">;;</span>
<span class="o">[</span>Hh<span class="o">]</span>* <span class="o">)</span> program<span class="p">;;</span>
<span class="o">[</span>Jj<span class="o">]</span>* <span class="o">)</span> foo<span class="p">;;</span>
<span class="o">[</span>Kk<span class="o">]</span>* <span class="o">)</span> misc<span class="p">;;</span>
<span class="o">[</span>Ll<span class="o">]</span>* <span class="o">)</span> books<span class="p">;</span> ques<span class="p">;;</span>
<span class="c1"># [Jj]* ) cooking;;</span>
<span class="c1"># [Kk]* ) ;;</span>
<span class="c1"># [Ll]* ) ;;</span>
<span class="c1"># [Mm]* ) ;;</span>
<span class="c1"># [Nn]* ) ;;</span>
<span class="c1"># [Mm]* ) ;;</span>
<span class="c1"># [Ss]* ) ;;</span>
<span class="c1"># [Tt]* ) ;;</span>
<span class="c1"># [Uu]* ) ;;</span>
<span class="c1"># [Vv]* ) ;;</span>
<span class="c1"># [Ww]* ) ;;</span>
<span class="c1"># [0]* ) ;;</span>
<span class="c1"># [1]* ) ;;</span>
<span class="c1"># [2]* ) ;;</span>
<span class="c1"># [3]* ) ;;</span>
<span class="c1"># [4]* ) ;;</span>
<span class="c1"># [5]* ) ;;</span>
<span class="c1"># [6]* ) ;;</span>
<span class="c1"># [7]* ) ;;</span>
<span class="c1"># [8]* ) ;;</span>
<span class="c1"># [Nn]* ) ;;</span>
<span class="c1"># [Oo]* ) ;;</span>
<span class="o">[</span>Xx<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/sandbox/death/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"sandbox"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/sandbox/sandyford/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"sandyford"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Zz<span class="o">]</span>* <span class="o">)</span> ~/bin/pdfbuild<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="nb">eval</span> choose
</pre></div>Tabbar!2019-03-27T00:00:00+00:002019-03-27T00:00:00+00:00Sharon Kimbletag:www.sharons.org.uk,2019-03-27:/emacs4writers-1.html<!-- Status: draft -->
<p>For a very long time I've had a major problem with <code>tabbar</code> and <code>tabbar-ruler</code>. Tabbar-ruler was very
good... except it clobbered my <em>Messages</em> file so that if I wanted to see the word count of the
document that I was then working on, there was every chance that I might …</p><!-- Status: draft -->
<p>For a very long time I've had a major problem with <code>tabbar</code> and <code>tabbar-ruler</code>. Tabbar-ruler was very
good... except it clobbered my <em>Messages</em> file so that if I wanted to see the word count of the
document that I was then working on, there was every chance that I might miss it, and without a
working <em>Messages</em> file I was stuffed!</p>
<p>But I found out that if I didn't use tabbar-ruler I could manage very easily, if not better, using
just plain old tabbar. So this is how I've done it...</p>
<div class="highlight"><pre><span></span>(require 'tabbar)
(tabbar-mode t)
(defun tabbar-buffer-groups-by-dir ()
"Put all files in the same directory into the same tab bar"
(with-current-buffer (current-buffer)
(let ((dir (expand-file-name default-directory)))
(cond ;; assign group name until one clause succeeds, so the order is important
((eq major-mode 'dired-mode)
(list "Dired"))
((memq major-mode
'(help-mode apropos-mode Info-mode Man-mode))
(list "Help"))
((string-match-p "\*.*\*" (buffer-name))
(list "Misc"))
(t (list dir))))))
(defun tabbar-switch-grouping-method (&optional arg)
"Changes grouping method of tabbar to grouping by dir.
With a prefix arg, changes to grouping by major mode."
(interactive "P")
(ignore-errors
(if arg
(setq tabbar-buffer-groups-function 'tabbar-buffer-groups) ;; the default setting
(setq tabbar-buffer-groups-function 'tabbar-buffer-groups-by-dir))))
</pre></div>
<p>This is the basic setup, just the bare bones to hang everything else on, and is taken from <sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup></p>
<div class="highlight"><pre><span></span>(setq tabbar-cycle-scope (quote tabs))
(setq table-time-before-update 0.1)
(setq tabbar-use-images 0)
</pre></div>
<p>Again from the same source as <sup id="fnref2:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup></p>
<div class="highlight"><pre><span></span>(setq tabbar-background-color "gray12") ;; the color of the tabbar background
(custom-set-faces
;; '(tabbar-default ((t (:inherit variable-pitch :background "#959A79" :foreground "black" :weight bold))))
'(tabbar-default ((t (:inherit variable-pitch :background "gray12" :foreground "gainsboro"))))
'(tabbar-button ((t (:inherit tabbar-default :foreground "dark red"))))
'(tabbar-button-highlight ((t (:inherit tabbar-default))))
'(tabbar-highlight ((t (:underline t))))
'(tabbar-selected ((t (:inherit tabbar-default :background "gainsboro" :foreground "gray12"))))
'(tabbar-separator ((t (:inherit tabbar-default :background "red"))))
'(tabbar-unselected ((t (:inherit tabbar-default)))))
</pre></div>
<p>This sets the colour of the tabs, to blend in with my theme <sup id="fnref:2"><a class="footnote-ref" href="#fn:2" rel="footnote">2</a></sup></p>
<div class="highlight"><pre><span></span>(advice-add 'tabbar-buffer-tab-label :before-until
(lambda (tab)
(with-current-buffer (buffer-name (tabbar-tab-value tab))
(when (equal major-mode 'org-agenda-mode)
"Agenda"))))
;; Add a buffer modification state indicator in the tab label, and place a
;; space around the label to make it looks less crowd.
(defadvice tabbar-buffer-tab-label (after fixup_tab_label_space_and_flag activate)
(setq ad-return-value
(if (and (buffer-modified-p (tabbar-tab-value tab))
(buffer-file-name (tabbar-tab-value tab)))
(concat " + " (concat ad-return-value " "))
(concat " " (concat ad-return-value " ")))))
;; Called each time the modification state of the buffer changed.
(defun ztl-modification-state-change ()
(tabbar-set-template tabbar-current-tabset nil)
(tabbar-display-update))
;; First-change-hook is called BEFORE the change is made.
(defun ztl-on-buffer-modification ()
(set-buffer-modified-p t)
(ztl-modification-state-change))
(add-hook 'after-save-hook 'ztl-modification-state-change)
;; This doesn't work for revert, I don't know.
;;(add-hook 'after-revert-hook 'ztl-modification-state-change)
(add-hook 'first-change-hook 'ztl-on-buffer-modification)
</pre></div>
<p>I'm not too sure what this does, but it works <sup id="fnref:3"><a class="footnote-ref" href="#fn:3" rel="footnote">3</a></sup></p>
<div class="highlight"><pre><span></span>(global-set-key (kbd "s-/") 'kill-this-buffer)
</pre></div>
<p>This one I've found is very useful and is used quite frequently.</p>
<div class="highlight"><pre><span></span>(defun tabbar-move-current-tab-one-place-left ()
"Move current tab one place left, unless it's already the leftmost."
(interactive)
(let* ((bufset (tabbar-current-tabset t))
(old-bufs (tabbar-tabs bufset))
(first-buf (car old-bufs))
(new-bufs (list)))
(if (string= (buffer-name) (format "%s" (car first-buf)))
old-bufs ; the current tab is the leftmost
(setq not-yet-this-buf first-buf)
(setq old-bufs (cdr old-bufs))
(while (and
old-bufs
(not (string= (buffer-name) (format "%s" (car (car old-bufs))))))
(push not-yet-this-buf new-bufs)
(setq not-yet-this-buf (car old-bufs))
(setq old-bufs (cdr old-bufs)))
(if old-bufs ; if this is false, then the current tab's buffer name is mysteriously missing
(progn
(push (car old-bufs) new-bufs) ; this is the tab that was to be moved
(push not-yet-this-buf new-bufs)
(setq new-bufs (reverse new-bufs))
(setq new-bufs (append new-bufs (cdr old-bufs))))
(error "Error: current buffer's name was not found in Tabbar's buffer list."))
(set bufset new-bufs)
(tabbar-set-template bufset nil)
(tabbar-display-update))))
</pre></div>
<p>And this is used for moving the tab to the left, one tab at a time, and comes from here <sup id="fnref:4"><a class="footnote-ref" href="#fn:4" rel="footnote">4</a></sup>. </p>
<div class="highlight"><pre><span></span>(defun tabbar-move-current-tab-one-place-right ()
"Move current tab one place right, unless it's already the rightmost."
(interactive)
(let* ((bufset (tabbar-current-tabset t))
(old-bufs (tabbar-tabs bufset))
(first-buf (car old-bufs))
(new-bufs (list)))
(while (and
old-bufs
(not (string= (buffer-name) (format "%s" (car (car old-bufs))))))
(push (car old-bufs) new-bufs)
(setq old-bufs (cdr old-bufs)))
(if old-bufs ; if this is false, then the current tab's buffer name is mysteriously missing
(progn
(setq the-buffer (car old-bufs))
(setq old-bufs (cdr old-bufs))
(if old-bufs ; if this is false, then the current tab is the rightmost
(push (car old-bufs) new-bufs))
(push the-buffer new-bufs)) ; this is the tab that was to be moved
(error "Error: current buffer's name was not found in Tabbar's buffer list."))
(setq new-bufs (reverse new-bufs))
(setq new-bufs (append new-bufs (cdr old-bufs)))
(set bufset new-bufs)
(tabbar-set-template bufset nil)
(tabbar-display-update)))
<!-- https://www.emacswiki.org/emacs/TabBarMode -->
;; Key sequences "C-S-PgUp" and "C-S-PgDn" move the current tab to the left and to the right.
(global-set-key (kbd "s-[") 'tabbar-move-current-tab-one-place-left)
(global-set-key (kbd "s-]") 'tabbar-move-current-tab-one-place-right)
<!-- https://www.emacswiki.org/emacs/TabBarMode -->
(define-key global-map (kbd "<s-prior>") 'tabbar-backward)
(define-key global-map (kbd "<s-next>") 'tabbar-forward)
<!-- https://amitp.blogspot.com/2018/10/emacs-prettier-tabbar.html -->
<!-- http://ergoemacs.org/emacs/emacs_key_combo.html -->
</pre></div>
<p>Now that is a fairly heft chunk of code, so lets see if I can break it up and make it more readable? </p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:1">
<p><a href="https://zhangda.wordpress.com/2012/09/21/tabbar-mode-rocks-with-customization/">https://zhangda.wordpress.com/2012/09/21/tabbar-mode-rocks-with-customization/</a> <a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a><a class="footnote-backref" href="#fnref2:1" rev="footnote" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p><a href="https://zhangda.wordpress.com/2012/09/21/tabbar-mode-rocks-with-customization/">https://zhangda.wordpress.com/2012/09/21/tabbar-mode-rocks-with-customization/</a> <a class="footnote-backref" href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p><a href="https://www.emacswiki.org/emacs/TabBarMode#toc9">https://www.emacswiki.org/emacs/TabBarMode#toc9</a> <a class="footnote-backref" href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:4">
<p><a href="https://www.emacswiki.org/emacs/TabBarMode">https://www.emacswiki.org/emacs/TabBarMode</a> <a class="footnote-backref" href="#fnref:4" rev="footnote" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>Redo Your To-Do List2017-12-15T00:00:00+00:002017-12-15T00:00:00+00:00Sharon Kimbletag:www.sharons.org.uk,2017-12-15:/todo-lists4.html<!-- Status: draft -->
<p>Author - Heidi Grant Halvorson</p>
<p>As the new year approaches - and with it the inevitable wave of self-improvement plans - we've
identified 10 strategies for advancing your career in 2016.</p>
<p>From recovering from an office blunder to learning why it doesn't pay to be Mr. (or Ms.) Nice Guy, this ten-point plan …</p><!-- Status: draft -->
<p>Author - Heidi Grant Halvorson</p>
<p>As the new year approaches - and with it the inevitable wave of self-improvement plans - we've
identified 10 strategies for advancing your career in 2016.</p>
<p>From recovering from an office blunder to learning why it doesn't pay to be Mr. (or Ms.) Nice Guy, this ten-point plan
offers daily tips on what to do and how to do it.</p>
<p>You are juggling way too many projects and goals at once. There don't seem to be enough hours in the day to get it all
done. And the stress of keeping all those balls in the air is killing you.</p>
<p>I may not know you personally, but I'll bet that's a pretty accurate description of your work life. I've yet to meet a
successful professional who feels like they have time and energy to spare.</p>
<p>You probably use some version of a To-do List to track of everything you need to accomplish. (There may even be another
one on your refrigerator at home that contains things like clean out the garage and paint the guest room.)</p>
<p>To-do lists seem like a good idea, but they merely catalog tasks - and cannot help you accomplish them.</p>
<p>If all you do is make lists of the projects you need to finish, odds are good that they will remain unfinished far
longer than you'd like.</p>
<p>Decades of research on goal pursuit shows that when it comes to execution, there are two major pitfalls that keep us
from doing the things we intend to do.</p>
<p>First, we don't get specific enough about what exactly needs to happen - the various actions we must take to reach our
goals. If, for example, your goal is to make a good impression on your boss, you need to break that down into component
actions, such as arranging a weekly meeting or turning in reports on time. To-do lists be helpful on this end, so long
as they contain specific actions rather than vague goals.</p>
<p>But the second problem - which To-do lists don't solve - is that we miss opportunities to take action. Did you really
have no time to work on that assignment today? No chance at any point to return that phone call? Of course you had time,
but you were probably preoccupied with something else, or simply forgot about it until it was too late - something busy
people routinely do. Achieving any goal means grabbing hold of these opportunities before they slip through your
fingers.</p>
<p>The good news is that there is a solution to this second pitfall: It's called <strong>if-then planning</strong>.</p>
<p>The trick is to not only decide what you need to do, but to also decide when and where you will do it, in advance. The
general format of an if-then plan looks like this:</p>
<hr/>
<p>If (or When) <strong><em>_</em></strong><strong><em>_ occurs, then I will </em></strong><strong><em>_</em></strong>______.</p>
<hr/>
<p>For example:</p>
<p>When it's 3 p.m. today, then I'll stop whatever I'm doing and work on that project.</p>
<p>If it's Monday, Wednesday, or Friday, then I'll go to the gym before work.</p>
<p>If it's Tuesday morning, then I will check in with all my direct reports.</p>
<p>Studies show that this kind of planning will train your brain to be ready for a certain action at a certain time. On an
unconscious level, you are actively scanning your environment, waiting for the situation (e.g., 3 p.m.) to occur. So you
are much more likely to notice 3 p.m. when it happens, and seize the opportunity to take the action you included in your
plan.</p>
<p>With each action on your To-do list, add a when and where. You can transfer your To-do list to your calendar if you
prefer - just make sure that you pair what you need to do with details about when and where you'll do it, and your
productivity will soar.</p>
<p>Source - <a href="http://blogs.wsj.com/atwork/2012/12/19/redo-your-to-do-list/">http://blogs.wsj.com/atwork/2012/12/19/redo-your-to-do-list/</a></p>restic scripts - amended to version 22017-09-13T00:00:00+01:002017-09-13T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-09-13:/restic4.html<!-- Status: draft -->
<p>I'm now including my <code>forget</code> command in with my <code>restic-check</code> script because if its included in <code>resticup</code> then when <code>restic-check</code> is run it has about 30+ index files to delete, so its actually more efficent to run forget just once in a 24-hour period and then also run the <code>prune …</code></p><!-- Status: draft -->
<p>I'm now including my <code>forget</code> command in with my <code>restic-check</code> script because if its included in <code>resticup</code> then when <code>restic-check</code> is run it has about 30+ index files to delete, so its actually more efficent to run forget just once in a 24-hour period and then also run the <code>prune</code> command with it, like this -</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1">#: Title : restic-check</span>
<span class="c1">#: Date : 19 August 2017, 11 September 2017</span>
<span class="c1">#: Author : Sharon Kimble</span>
<span class="c1">#: Version : 2.0</span>
<span class="c1">#: Description : script to help in running restic checkup for backups</span>
<span class="c1">#: License : GNU GPL 3.0 or later</span>
<span class="c1"># Copyright (C) 2017 Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># Author: Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># This program is free software; you can redistribute it and/or</span>
<span class="c1"># modify it under the terms of the GNU General Public License</span>
<span class="c1"># as published by the Free Software Foundation; either version 3</span>
<span class="c1"># of the License, or (at your option) any later version.</span>
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="c1"># GNU General Public License for more details.</span>
<span class="c1"># You should have received a copy of the GNU General Public License</span>
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<span class="c1">####################################################</span>
<span class="c1"># How to use.</span>
<span class="c1"># Change the lines in the '#Variables' section to fit your situation and your </span>
<span class="c1"># file tree. And save it in ~/bin/resticup, and then run 'chmod +x ~/bin/resticup' </span>
<span class="c1"># to make it executable.</span>
<span class="c1"># Then put an entry for it in your crontab, this is mine -</span>
<span class="c1"># 00 01 * * * DISPLAY=:0 /home/boudiccas/bin/restic-check </span>
<span class="c1">#######################</span>
<span class="c1"># Variables</span>
<span class="nv">RESTIC_REPOSITORY</span><span class="o">=</span><span class="s2">"/mnt/backc/restic-back"</span>
<span class="c1"># Setting this, so you won't be asked for your repository passphrase/password</span>
<span class="nv">LOGFILE</span><span class="o">=</span><span class="s2">"/home/boudiccas/logs/backup-restic-check.txt"</span>
<span class="nv">EXEMPTIONS</span><span class="o">=</span><span class="s2">"--keep-hourly 4 --keep-daily 31 --keep-weekly 5 --keep-monthly 13 --keep-yearly 10"</span>
<span class="c1">###########</span>
<span class="nb">exec</span> > ><span class="o">(</span>tee -a <span class="nv">$LOGFILE</span><span class="o">)</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
/usr/bin/notify-send <span class="s2">"Starting restic check ..."</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt forget <span class="nv">$EXEMPTIONS</span> --prune
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt rebuild-index
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt check
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$?</span><span class="s2">"</span> -ne <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
notify-send <span class="s2">"Unable to finish restic check"</span>
<span class="nb">exit</span> <span class="m">1</span>
<span class="k">else</span>
notify-send <span class="s2">"Finished restic check"</span>
du -sh /mnt/backc/restic-back
<span class="nb">echo</span> <span class="s1">'Sending Check report : Check of restic completed'</span>, <span class="k">$(</span>date -R<span class="k">)</span> <span class="s1">'logged to'</span> <span class="nv">$LOGFILE</span>
<span class="nb">echo</span> <span class="s1">'####################################'</span>
<span class="k">fi</span>
</pre></div>
</td></tr></table>
<p>Here is an explanation why I have <code>--keep-daily 31</code> as part of my <code>EXEMPTIONS</code>. With just <code>--keep-daily 7</code> in place, restic was forgetting some days, whereas I was wanting to keep a consecutive list of days backed up. So after quite a detailed conversation on IRC with 'fd0' 31 days is what we've come up with.</p>
<p>So here is my amended version 2 of <code>resticup</code> -</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1">#: Title : resticup</span>
<span class="c1">#: Date : 17 August 2017, 11 September 2017</span>
<span class="c1">#: Author : Sharon Kimble</span>
<span class="c1">#: Version : 2.0</span>
<span class="c1">#: Description : script to help in running restic for backups</span>
<span class="c1">#: License : GNU GPL 3.0 or later</span>
<span class="c1"># Copyright (C) 2017 Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># Author: Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># This program is free software; you can redistribute it and/or</span>
<span class="c1"># modify it under the terms of the GNU General Public License</span>
<span class="c1"># as published by the Free Software Foundation; either version 3</span>
<span class="c1"># of the License, or (at your option) any later version.</span>
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="c1"># GNU General Public License for more details.</span>
<span class="c1"># You should have received a copy of the GNU General Public License</span>
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<span class="c1">####################################################</span>
<span class="c1"># How to use.</span>
<span class="c1"># Change the lines in the '#Variables' section to fit your situation and your file tree. And save</span>
<span class="c1"># it in ~/bin/resticup, and then run 'chmod +x ~/bin/resticup' to make it executable.</span>
<span class="c1"># Then put an entry for it in your crontab, this is mine -</span>
<span class="c1"># 00 */4 * * * DISPLAY=:0 /home/boudiccas/bin/resticup #backup /home and let it run every 4</span>
<span class="c1"># hours for backups.</span>
<span class="c1">#######################</span>
<span class="c1"># Variables</span>
<span class="nv">RESTIC_REPOSITORY</span><span class="o">=</span><span class="s2">"/mnt/backc/restic-back"</span>
<span class="nv">LOGFILE</span><span class="o">=</span><span class="s2">"/home/boudiccas/logs/backup-restic.txt"</span>
<span class="nv">BACKUP_DIRS</span><span class="o">=</span><span class="s2">"/home/boudiccas /var/www"</span>
<span class="nv">EXCLUDED_DIRS</span><span class="o">=</span><span class="s2">"/home/*/.cache ~/.gvfs ~/.config/freeter/Partitions/freeter/Cache/"</span>
<span class="c1">###########</span>
<span class="c1"># Log all stdout+stderr </span>
<span class="nb">exec</span> > ><span class="o">(</span>tee -a <span class="nv">$LOGFILE</span><span class="o">)</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
/usr/bin/notify-send <span class="s2">"Starting main backup..."</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt backup <span class="nv">$BACKUP_DIRS</span> --exclude <span class="nv">$EXCLUDED_DIRS</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt snapshots
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$?</span><span class="s2">"</span> -ne <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
notify-send <span class="s2">"Unable to finish main backup"</span>
<span class="nb">exit</span> <span class="m">1</span>
<span class="k">else</span>
notify-send <span class="s2">"Finished main backup"</span>
du -sh /mnt/backc/restic-back
<span class="nb">echo</span> <span class="s1">'Sending Backup report : Backup of restic completed'</span>, <span class="k">$(</span>date -R<span class="k">)</span> <span class="s1">'logged to'</span> <span class="nv">$LOGFILE</span>
<span class="nb">echo</span> <span class="s1">'####################################'</span>
<span class="k">fi</span>
</pre></div>
</td></tr></table>restic - backup2017-08-19T00:00:00+01:002017-08-19T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-08-19:/restic1.html<!-- Status: draft -->
<p>Having decided on using restic moving forwards, I've written several scripts, so here is the main
one, 'resticup'.</p>
<h3 id="resticup">Resticup</h3>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 …</pre></div></td></tr></table><!-- Status: draft -->
<p>Having decided on using restic moving forwards, I've written several scripts, so here is the main
one, 'resticup'.</p>
<h3 id="resticup">Resticup</h3>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1">#: Title : resticup</span>
<span class="c1">#: Date : 17 August 2017</span>
<span class="c1">#: Author : Sharon Kimble</span>
<span class="c1">#: Version : 1.0</span>
<span class="c1">#: Description : script to help in running restic for backups</span>
<span class="c1">#: License : GNU GPL 3.0 or later</span>
<span class="c1"># Copyright (C) 2017 Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># Author: Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># This program is free software; you can redistribute it and/or</span>
<span class="c1"># modify it under the terms of the GNU General Public License</span>
<span class="c1"># as published by the Free Software Foundation; either version 3</span>
<span class="c1"># of the License, or (at your option) any later version.</span>
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="c1"># GNU General Public License for more details.</span>
<span class="c1"># You should have received a copy of the GNU General Public License</span>
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<span class="c1">####################################################</span>
<span class="c1"># How to use.</span>
<span class="c1"># Change the lines in the '#Variables' section to fit your situation and </span>
<span class="c1"># your file tree. And save it in ~/bin/resticup, and then run 'chmod +x ~/bin/resticup' to make it executable.</span>
<span class="c1"># Then put an entry for it in your crontab, this is mine -</span>
<span class="c1"># 00 */4 * * * DISPLAY=:0 /home/boudiccas/bin/resticup #backup /home and let it run every 4 hours for backups.</span>
<span class="c1">#######################</span>
<span class="c1"># Variables</span>
<span class="nv">RESTIC_REPOSITORY</span><span class="o">=</span>/mnt/backc/restic-back
<span class="nv">logfile</span><span class="o">=</span><span class="s2">"/home/boudiccas/logs/backup-restic.txt"</span>
<span class="nv">BACKUP_DIRS</span><span class="o">=</span><span class="s2">"/home/boudiccas /var/www"</span>
<span class="nv">EXCLUDED_DIRS</span><span class="o">=</span><span class="s2">"/home/*/.cache ~/.gvfs"</span>
<span class="c1">###########</span>
<span class="c1"># Log all stdout+stderr </span>
<span class="nb">exec</span> > ><span class="o">(</span>tee -a <span class="nv">$logfile</span><span class="o">)</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
/usr/bin/notify-send <span class="s2">"Starting main backup..."</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt backup <span class="nv">$BACKUP_DIRS</span> <span class="se">\</span>
--exclude <span class="nv">$EXCLUDED_DIRS</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt forget --keep-hourly <span class="m">5</span> <span class="se">\ </span>
--keep-daily <span class="m">7</span> --keep-weekly <span class="m">5</span> --keep-monthly <span class="m">12</span> --keep-yearly <span class="m">10</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt snapshots
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$?</span><span class="s2">"</span> -ne <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
notify-send <span class="s2">"Unable to finish main backup"</span>
<span class="nb">exit</span> <span class="m">1</span>
<span class="k">else</span>
notify-send <span class="s2">"Finished main backup"</span>
du -sh /mnt/backc/restic-back
<span class="nb">echo</span> <span class="s1">'Sending Backup report : Backup of restic completed'</span>, <span class="k">$(</span>date -R<span class="k">)</span> <span class="s1">'logged to'</span> <span class="nv">$logfile</span>
<span class="nb">echo</span> <span class="s1">'####################################'</span>
<span class="k">fi</span>
</pre></div>
</td></tr></table>
<p>When run as shown in the 'How to use' section and running from a cronjob it will produce an output
like this -</p>
<div class="highlight"><pre><span></span>using parent snapshot 8eea71af
scan [/home/boudiccas]
[5:31] 200751 directories, 1464687 files, 210.120 GiB
scanned 200751 directories, 1464687 files in 5:31
warning for /home/boudiccas/.config/freeter/Partitions/freeter/Cache/data_0: file has changed
[25:42] 100.00% 0B/s 210.120 GiB / 210.120 GiB 1665442 / 1665438 items 0 errors ETA 0:00
duration: 25:42, 139.47MiB/s
snapshot cf05f1e0 saved
snapshots for host London, paths: [/home/boudiccas]:
keep 6 snapshots:
ID Date Host Tags Directory
----------------------------------------------------------------------
cf05f1e0 2017-08-19 08:06:05 London /home/boudiccas
8eea71af 2017-08-19 06:06:41 London /home/boudiccas
921aaf77 2017-08-18 20:06:28 London /home/boudiccas
ecef0016 2017-08-18 18:06:47 London /home/boudiccas
758f5d0c 2017-08-17 23:04:18 London /home/boudiccas
3f35d303 2017-08-16 20:19:59 London /home/boudiccas
remove 1 snapshots:
ID Date Host Tags Directory
----------------------------------------------------------------------
ea848396 2017-08-18 16:06:28 London /home/boudiccas
ID Date Host Tags Directory
----------------------------------------------------------------------
3f35d303 2017-08-16 20:19:59 London /home/boudiccas
758f5d0c 2017-08-17 23:04:18 London /home/boudiccas
ecef0016 2017-08-18 18:06:47 London /home/boudiccas
921aaf77 2017-08-18 20:06:28 London /home/boudiccas
8eea71af 2017-08-19 06:06:41 London /home/boudiccas
cf05f1e0 2017-08-19 08:06:05 London /home/boudiccas
155G /mnt/backc/restic-back
Sending Backup report : Backup of restic completed, Sat, 19 Aug 2017 08:31:50 +0100 logged to /home/boudiccas/logs/backup-restic.txt
####################################
</pre></div>
<p>This output goes to your email account, and also to the log file that you set under 'logfile' under
Variables. </p>restic - integrity checking2017-08-19T00:00:00+01:002017-08-19T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-08-19:/restic2.html<!-- Status: draft -->
<p>Its a very good idea to regularly check the integrity of your restic backups to hopefully find any
problems before you have to use it to restore some files from backup. So this is my script called
'restic-check' which will run at 0100 from a cronjob. I know it works …</p><!-- Status: draft -->
<p>Its a very good idea to regularly check the integrity of your restic backups to hopefully find any
problems before you have to use it to restore some files from backup. So this is my script called
'restic-check' which will run at 0100 from a cronjob. I know it works as I've tried it out before
setting the cronjob. </p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1">#: Title : restic-check</span>
<span class="c1">#: Date : 19 August 2017</span>
<span class="c1">#: Author : Sharon Kimble</span>
<span class="c1">#: Version : 1.0</span>
<span class="c1">#: Description : script to help in running restic checkup for backups</span>
<span class="c1">#: License : GNU GPL 3.0 or later</span>
<span class="c1"># Copyright (C) 2017 Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># Author: Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># This program is free software; you can redistribute it and/or</span>
<span class="c1"># modify it under the terms of the GNU General Public License</span>
<span class="c1"># as published by the Free Software Foundation; either version 3</span>
<span class="c1"># of the License, or (at your option) any later version.</span>
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="c1"># GNU General Public License for more details.</span>
<span class="c1"># You should have received a copy of the GNU General Public License</span>
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<span class="c1">####################################################</span>
<span class="c1"># How to use.</span>
<span class="c1"># Change the lines in the '#Variables' section to fit your situation and your file tree. </span>
<span class="c1"># And save it in ~/bin/resticup, and then run 'chmod +x ~/bin/resticup' to make it executable.</span>
<span class="c1"># Then put an entry for it in your crontab, this is mine -</span>
<span class="c1"># 00 01 * * * DISPLAY=:0 /home/boudiccas/bin/restic-check </span>
<span class="c1">#######################</span>
<span class="c1"># Variables</span>
<span class="nv">RESTIC_REPOSITORY</span><span class="o">=</span>/mnt/backc/restic-back
<span class="c1"># Setting this, so you won't be asked for your repository passphrase/password</span>
<span class="nv">logfile</span><span class="o">=</span><span class="s2">"/home/boudiccas/logs/backup-restic-check.txt"</span>
<span class="c1">###########</span>
<span class="nb">exec</span> > ><span class="o">(</span>tee -a <span class="nv">$logfile</span><span class="o">)</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
/usr/bin/notify-send <span class="s2">"Starting restic check ..."</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt check
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$?</span><span class="s2">"</span> -ne <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
notify-send <span class="s2">"Unable to finish restic check"</span>
<span class="nb">exit</span> <span class="m">1</span>
<span class="k">else</span>
notify-send <span class="s2">"Finished restic check"</span>
du -sh /mnt/backc/restic-back
<span class="nb">echo</span> <span class="s1">'Sending Check report : Check of restic completed'</span>, <span class="k">$(</span>date -R<span class="k">)</span> <span class="s1">'logged to'</span> <span class="nv">$logfile</span>
<span class="nb">echo</span> <span class="s1">'####################################'</span>
<span class="k">fi</span>
</pre></div>
</td></tr></table>restic - unlock2017-08-19T00:00:00+01:002017-08-19T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-08-19:/restic3.html<!-- Status: draft -->
<p>Sooner or later you will find that you're unable to do a backup or some backup checking because the
repository is locked. This script will unlock the repository and is called 'restic-unlock'. Its not
run from a cronjob, just from your terminal whenever its needed. </p>
<p>But BEWARE of killing a …</p><!-- Status: draft -->
<p>Sooner or later you will find that you're unable to do a backup or some backup checking because the
repository is locked. This script will unlock the repository and is called 'restic-unlock'. Its not
run from a cronjob, just from your terminal whenever its needed. </p>
<p>But BEWARE of killing a running restic backup unnecessarily.</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1">#: Title : restic-unlock</span>
<span class="c1">#: Date : 19 August 2017</span>
<span class="c1">#: Author : Sharon Kimble</span>
<span class="c1">#: Version : 1.0</span>
<span class="c1">#: Description : script to help in running restic checkup for backups</span>
<span class="c1">#: License : GNU GPL 3.0 or later</span>
<span class="c1"># Copyright (C) 2017 Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># Author: Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># This program is free software; you can redistribute it and/or</span>
<span class="c1"># modify it under the terms of the GNU General Public License</span>
<span class="c1"># as published by the Free Software Foundation; either version 3</span>
<span class="c1"># of the License, or (at your option) any later version.</span>
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="c1"># GNU General Public License for more details.</span>
<span class="c1"># You should have received a copy of the GNU General Public License</span>
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<span class="c1">####################################################</span>
<span class="c1"># Variables</span>
<span class="nv">RESTIC_REPOSITORY</span><span class="o">=</span>/mnt/backc/restic-back
<span class="c1"># Setting this, so you won't be asked for your repository passphrase/password</span>
<span class="nv">logfile</span><span class="o">=</span><span class="s2">"/home/boudiccas/logs/backup-restic-unlock.txt"</span>
<span class="c1">###########</span>
<span class="nb">exec</span> > ><span class="o">(</span>tee -a <span class="nv">$logfile</span><span class="o">)</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
/usr/bin/notify-send <span class="s2">"Starting restic unlock ..."</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt unlock
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$?</span><span class="s2">"</span> -ne <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
notify-send <span class="s2">"Unable to finish restic unlock"</span>
<span class="nb">exit</span> <span class="m">1</span>
<span class="k">else</span>
notify-send <span class="s2">"Finished restic unlock"</span>
du -sh /mnt/backc/restic-back
<span class="nb">echo</span> <span class="s1">'Sending Unlock report : Unlock of restic completed'</span>, <span class="k">$(</span>date -R<span class="k">)</span> <span class="s1">'logged to'</span> <span class="nv">$logfile</span>
<span class="nb">echo</span> <span class="s1">'####################################'</span>
<span class="k">fi</span>
</pre></div>
</td></tr></table>Backups after the demise of Obnam - Analysis of borgbackup, restic, and zbackup2017-08-17T00:00:00+01:002017-08-17T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-08-17:/demise-of-obnam.html<p>Lars Wirzenius stunned everyone on the 13 August 2017 with his decison to retire obnam, his very popular and useful backup program as of the end of this year! His decision threw a lot of obnam users into a state of disarray and anxiety about what they could use for …</p><p>Lars Wirzenius stunned everyone on the 13 August 2017 with his decison to retire obnam, his very popular and useful backup program as of the end of this year! His decision threw a lot of obnam users into a state of disarray and anxiety about what they could use for backup for the foreseable future - myself included. But at least Lars told us with plenty of time to make decisons and change our backup strategy. So thank you Lars for all of your work on obnam, and thanks for giving us plenty of time to look at other solutions.</p>
<p>So I've been looking at <a href="https://www.borgbackup.org/">borgbackup</a>, <a href="https://github.com/restic/restic">restic</a>, and <a href="http://zbackup.org/">zbackup</a>.</p>
<p>The first thing that I looked at was the latest commit date to see if they are actively maintained and still alive.</p>
<ul>
<li>borgbackup - August 16, 2017,</li>
<li>restic - August 13, 2017,</li>
<li>zbackup - February 6, 2016. So that's 18 months ago, its beginning to sound decidedly iffy to me!</li>
</ul>
<p>The second thing that I looked at was its availability and version number on my distro, Debian 9. For this I used 'rmadison' as 'rmadison foo'</p>
<div class="highlight"><pre><span></span>borgbackup | 1.0.9-1~bpo8+1 | jessie-backports | source, amd64, arm64, armel, armhf, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, ppc64el, s390x
borgbackup | 1.0.9-1 | stable | source, amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
borgbackup | 1.0.10-3 | unstable | source, hurd-i386
</pre></div>
<p>Next up is restic</p>
<div class="highlight"><pre><span></span>restic | 0.3.3-1 | stable | source
restic | 0.3.3-1+b2 | stable | amd64, arm64, armel, armhf, i386, ppc64el
restic | 0.7.1-1 | testing | source, amd64, arm64, armel, armhf, i386, ppc64el
</pre></div>
<p>and finally zbackup</p>
<div class="highlight"><pre><span></span>zbackup | 1.4.4-1~bpo8+1 | jessie-backports | source, amd64, arm64, armel, armhf, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, powerpc, ppc64el, s390x
zbackup | 1.4.4-1 | unstable | source, kfreebsd-amd64, kfreebsd-i386
zbackup | 1.4.4-1 | unstable-debug | source
zbackup | 1.4.4-2 | stable | source, amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
zbackup | 1.4.4-2 | testing | source, amd64, arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
</pre></div>
<p>What this is showing us is the speed of development, and the ease at which its Debian maintainers
can build it to work within the Debian infrastructure. So with all that I now know about 'zbackup'
I'm excluding it from any future usage or testing.</p>
<p>So next up is 'borgbackup'. This backs up, uses deduplication, and compression - meaning that the
database of backed up files is squashed to fit more in the space available (very simplisticlly). But
what it doesn't do is backups every <em>n</em> hours, meaning that it can only do one-a-day backups, which
I find unacceptable. So just for future reference, this is my borg backup script called "borgup" -</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1"># 2017-08-14</span>
<span class="nv">REPOSITORY</span><span class="o">=</span>/mnt/backc/borgback
<span class="c1"># Setting this, so you won't be asked for your repository passphrase:</span>
<span class="nb">export</span> <span class="nv">BORG_PASSPHRASE</span><span class="o">=</span><span class="s1">'abc123'</span>
<span class="c1"># or this to ask an external program to supply the passphrase:</span>
<span class="c1"># export BORG_PASSCOMMAND='pass show backup'</span>
<span class="c1"># Backup all of /home and /var/www except a few</span>
<span class="c1"># excluded directories</span>
/usr/local/bin/borg create -v --stats --compression lz4 <span class="se">\</span>
<span class="nv">$REPOSITORY</span>::<span class="s1">'{hostname}-{now:%Y-%m-%d}'</span> <span class="se">\</span>
/home/boudiccas <span class="se">\</span>
/var/www <span class="se">\</span>
--exclude <span class="s1">'/home/*/.cache'</span> <span class="se">\</span>
<span class="c1"># --exclude /home/Ben/Music/Justin\ Bieber \</span>
<span class="c1"># --exclude '*.pyc'</span>
<span class="c1"># Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly</span>
<span class="c1"># archives of THIS machine. The '{hostname}-' prefix is very important to</span>
<span class="c1"># limit prune's operation to this machine's archives and not apply to</span>
<span class="c1"># other machine's archives also.</span>
/usr/local/bin/borg prune -v --list <span class="nv">$REPOSITORY</span> --prefix <span class="s1">'{hostname}-'</span> <span class="se">\</span>
--keep-daily<span class="o">=</span><span class="m">7</span> --keep-weekly<span class="o">=</span><span class="m">4</span> --keep-monthly<span class="o">=</span><span class="m">12</span> --keep-yearly<span class="o">=</span><span class="m">2</span>
</pre></div>
</td></tr></table>
<p>If you really do want to do <em>n</em> backups then this might help <a href="https://github.com/rugk/borg-cron-helper">borg-cron-helper</a> with its latest commit being on August 13, 2017. Using that program I was able to get <em>n</em> backups, but doing so broke the compression. So all in all I'm left feeling rather frustrated by borgbackup.</p>
<p>Next up to the plate is <a href="https://github.com/restic/restic">restic</a> which allows backup,
deduplication but <strong>no compression</strong>. So here is my configuration script for restic, called "resticup" -</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1"># 2017-08-16</span>
<span class="nv">RESTIC_REPOSITORY</span><span class="o">=</span>/mnt/backc/restic-back
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt backup /home/boudiccas --exclude <span class="s1">'/home/*/.cache'</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt forget --keep-hourly <span class="m">4</span> --keep-daily <span class="m">7</span> --keep-weekly <span class="m">5</span> --keep-monthly <span class="m">12</span> --keep-yearly <span class="m">10</span>
/usr/local/bin/restic -r <span class="nv">$RESTIC_REPOSITORY</span> -p ~/bin/restinpeace.txt snapshots
</pre></div>
</td></tr></table>
<p>(You'll have to forgive my rather warped sense of humour at times, my restic password file isn't called 'restinpeace.txt' but it just felt right whilst I was obscuring the real name!)</p>
<p>What this configuration script does - it backs up my home directory to my backc drive in the directory called 'restic-back' and in the process calling the password from its relevant file and also excludes my .cache files, which in the main aren't very useful.</p>
<p>Its next active line is telling restic to drop from its memory all hourly backups except for the
last one when they total 4. Hour 4 then becomes day 1, day 2, etc, and then after 8 daily backups, 7 are forgotten, and one becomes week 1. Etc, and so on, ad inifintitum. </p>
<p>The last active line is telling restic to output details of its 'snapshots' as every backup is called a snapshot of its source files.</p>
<p>My script is called from cron using this stanza -</p>
<div class="highlight"><pre><span></span>30 06,12,18 * * * /home/boudiccas/bin/resticup>>/home/boudiccas/logs/restic.txt 2>&1
</pre></div>
<p>So after 2 days of backups this is what is showing for each backup system - </p>
<div class="highlight"><pre><span></span>borg-backup 130.52gb restic-backup 150.50gb
</pre></div>
<p>They are both backing up \home which is currently at 218.93gb, so either I have a lot of cache files, which is perfectly possible as borgbackup does generate quite a few as part of its backup, or else something else is happening. Now it is very likely that I have misunderstood something about either of these two backup solutions, or just got it plain wrong. so if I am in error please let me know.</p>
<p>Thinsg that I haven't done - testing the mounting of the backup to help in extracting single files, or testing the restoreability (horrible made-up word) of either of the two programs.</p>
<p>Things that I do like - the <a href="https://borgbackup.readthedocs.io/en/stable/index.html">borgbackup documentation</a> is very good (worth 9 out of 10 on any scoreboard). Its clean, very easy to read and understand, and it gives a sample config script to help get you started. Whereas the <a href="https://restic.readthedocs.io/en/stable/index.html">restic documentation</a> isn't quite as concise but does show you how to set it up to backup from Amazon S3, but falls down on not having a sample config script to help get you started using restic.</p>
<p>Based on all of this, I'm going to be using 'restic' for my backups from now on (although that may change in the future).</p>Referencing a Newspaper Article in org-mode/latex2017-08-12T00:00:00+01:002017-08-12T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-08-12:/newspaper-reference.html<p>For my current book that I'm writing on Second World War cookery recipes I'm using the 'British
Newspaper Archive' and am here focussing on one newspaper article published in November 1939, not
long after the war started.</p>
<p>Here is my bibtex reference -</p>
<div class="highlight"><pre><span></span>@Article{0130,
author = {Shields Daily News},
title = {Rare …</pre></div><p>For my current book that I'm writing on Second World War cookery recipes I'm using the 'British
Newspaper Archive' and am here focussing on one newspaper article published in November 1939, not
long after the war started.</p>
<p>Here is my bibtex reference -</p>
<div class="highlight"><pre><span></span>@Article{0130,
author = {Shields Daily News},
title = {Rare Rabbit Recipes},
journaltitle = {Shields Daily News},
year = {1939},
note = {10 November 1939},
url = {http://www.britishnewspaperarchive.co.uk/viewer/bl/0002077/19391110/141/0007},
}
</pre></div>
<p>And here is the reference in the published bibliography -</p>
<div class="highlight"><pre><span></span>NEWS , SHIELDS DAILY (1939) “Rare Rabbit Recipes” in: Shields Daily News 10 November 1939
URL : http://www.britishnewspaperarchive.co.uk/viewer/bl/0002077/19391110/141/0007
(see p. 117)
</pre></div>
<p>And here is my bibtex line in the header of my org file -</p>
<div class="highlight"><pre><span></span>#+latex_header: \usepackage[backend=biber,style=authoryear,doi=true,hyperref=true,backref=true,backrefstyle=two,date=year,maxcitenames=5]{biblatex}
</pre></div>
<p>This is the only way that I've found of getting the papers issue date to show in the final reference
in the PDF. Its not ideal but it does work, but if anyone does know a way in which I could get the
whole date to show in the PDF other than this way, then I'm all ears, as the saying goes.</p>
<p>I'm also not sure if other people will be able to view that url. In my atempts to view it without
signing in it can't be viewed without either taking out a subscription or signing up for a 'free
trial', so I suspect that other folk will have the same problem. </p>'pdfbuild' - from tex to PDF - version 22017-07-15T00:00:00+01:002017-07-15T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-07-15:/pdfbuild2.html<p>This is my 'pdfbuild' bash script that converts 'tex' files to a PDF. You generate the '.tex' files
in any way you want to build them. I <em>used</em> to build the latex files by hand, which was very slow
and laborious, but gave extremely good results. Currently I'm building the …</p><p>This is my 'pdfbuild' bash script that converts 'tex' files to a PDF. You generate the '.tex' files
in any way you want to build them. I <em>used</em> to build the latex files by hand, which was very slow
and laborious, but gave extremely good results. Currently I'm building the latex files after
exporting from org-mode, and my template is in post <a href="../org2latex.html">org2latex</a></p>
<p>Using this script you can work on several latex/tex files and build their PDF's very easily and
quickly.</p>
<p>To use this script save it into your 'bin' folder as 'pdfbuild', whether that's local or
system-wide, and obviously make it executable. And then just call 'pdfbuild' in a terminal and
follow the on-screen prompts to easily build your PDF file. </p>
<p>To adapt this script for your situation change the details in function 'choose' near the end of the
script, using my setup as a template.</p>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1">#set -e</span>
<span class="c1">#: Title : pdfbuild</span>
<span class="c1">#: Date : 7th July 2017</span>
<span class="c1">#: Version : 2.0</span>
<span class="c1">#: Description : To build a PDF file from a pre-generated .tex file</span>
<span class="c1">#; Requirements : texlive</span>
<span class="c1"># Copyright (C) 2017, 2019 Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># Author: Sharon Kimble <boudiccas@skimble.plus.com></span>
<span class="c1"># This program is free software; you can redistribute it and/or</span>
<span class="c1"># modify it under the terms of the GNU General Public License</span>
<span class="c1"># as published by the Free Software Foundation; either version 3</span>
<span class="c1"># of the License, or (at your option) any later version.</span>
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="c1"># GNU General Public License for more details.</span>
<span class="c1"># You should have received a copy of the GNU General Public License</span>
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
<span class="c1">#############</span>
<span class="nv">bldgrn</span><span class="o">=</span><span class="si">${</span><span class="nv">txtbld</span><span class="si">}</span> <span class="nb">echo</span> -e <span class="s2">"\e[92m"</span>
<span class="nv">txtbld</span><span class="o">=</span><span class="k">$(</span>tput bold<span class="k">)</span>
<span class="nv">bldgrn</span><span class="o">=</span><span class="si">${</span><span class="nv">txtbld</span><span class="si">}</span><span class="k">$(</span>tput setaf <span class="m">2</span><span class="k">)</span>
<span class="k">function</span> endex <span class="o">{</span>
echo<span class="p">;</span>
sleep <span class="m">0</span><span class="p">;</span>
<span class="c1">#clear;</span>
<span class="nb">exit</span> <span class="m">0</span><span class="p">;</span>
<span class="o">}</span>
<span class="k">function</span> one <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want one pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> double <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a double pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> treble <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a treble pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> partwrite <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a part-write pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> penta <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a penta pass? [x5]</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> onebib <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want one pass including the bib file?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> biber <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> multipass <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a pass including glossary, bibliography?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> extend <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want an extended pass?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> bibi <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a bibliography only?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> biber <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> slog <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want a glossary only?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> xedni <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want an index only?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> makeindex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> ultimate <span class="o">{</span>
<span class="nb">echo</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Do you want the ultimate pass-through?</span>
<span class="s2"> yes = y</span>
<span class="s2"> no = n</span>
<span class="s2"> quit = q</span>
<span class="s2"> restart = r</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> ynqr
<span class="k">case</span> <span class="s2">"</span><span class="nv">$ynqr</span><span class="s2">"</span> in
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> xelatex <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> biber <span class="nv">$filename</span><span class="p">;</span> makeindex <span class="nv">$filename</span><span class="p">;</span> makeglossaries <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> xelatex <span class="nv">$filename</span><span class="p">;</span> choose<span class="p">;;</span>
<span class="o">[</span>Nn<span class="o">]</span>* <span class="o">)</span> choose<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> <span class="nb">exec</span> <span class="s2">"</span><span class="nv">$pdfbuild</span><span class="s2">"</span><span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> ques <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> One-pass = r</span>
<span class="s2"> Double-pass = d</span>
<span class="s2"> Treble pass = t</span>
<span class="s2"> Part-write pass = w</span>
<span class="s2"> Penta pass = p</span>
<span class="s2"> One-pass + Bib = o</span>
<span class="s2"> MultiPass = m</span>
<span class="s2"> Extended pass = x</span>
<span class="s2"> Ultimate pass = u</span>
<span class="s2"> Bibliography only = b</span>
<span class="s2"> Glossary only = g</span>
<span class="s2"> Index only = i</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> rdtwpomxubqiq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$rdtwpomxubqiq</span><span class="s2">"</span> in
<span class="o">[</span>Rr<span class="o">]</span>* <span class="o">)</span> one<span class="p">;;</span>
<span class="o">[</span>Dd<span class="o">]</span>* <span class="o">)</span> double<span class="p">;;</span>
<span class="o">[</span>Tt<span class="o">]</span>* <span class="o">)</span> treble<span class="p">;;</span>
<span class="o">[</span>Ww<span class="o">]</span>* <span class="o">)</span> partwrite<span class="p">;;</span>
<span class="o">[</span>Pp<span class="o">]</span>* <span class="o">)</span> penta<span class="p">;;</span>
<span class="o">[</span>Oo<span class="o">]</span>* <span class="o">)</span> onebib<span class="p">;;</span>
<span class="o">[</span>Mm<span class="o">]</span>* <span class="o">)</span> multipass<span class="p">;;</span>
<span class="o">[</span>Xx<span class="o">]</span>* <span class="o">)</span> extend<span class="p">;;</span>
<span class="o">[</span>Uu<span class="o">]</span>* <span class="o">)</span> ultimate<span class="p">;;</span>
<span class="o">[</span>Bb<span class="o">]</span>* <span class="o">)</span> bibi<span class="p">;;</span>
<span class="o">[</span>Gg<span class="o">]</span>* <span class="o">)</span> slog<span class="p">;;</span>
<span class="o">[</span>Ii<span class="o">]</span>* <span class="o">)</span> xedni<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="k">function</span> choose <span class="o">{</span>
echo<span class="p">;</span>
<span class="nb">read</span> -n1 -p <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please choose which you want,</span>
<span class="s2"> aging = a</span>
<span class="s2"> hair17 = f</span>
<span class="s2"> sandbox = x</span>
<span class="s2"> sandyford = y</span>
<span class="s2"> testing = z</span>
<span class="s2"> quit = q</span>
<span class="s2"> </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span> abcdefghijkmnprstuvw012345678xyzq
<span class="k">case</span> <span class="s2">"</span><span class="nv">$abcdefghijkmnprstuvw012345678xyzq</span><span class="s2">"</span> in
<span class="o">[</span>Aa<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/age-and-trans/general/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"aging"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Ff<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/hair17/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"hair17"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Xx<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/sandbox/death/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"sandbox"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Yy<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/sandbox/sandyford/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"sandyford"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Zz<span class="o">]</span>* <span class="o">)</span> <span class="nb">cd</span> ~/research/testing/<span class="p">;</span> <span class="nv">filename</span><span class="o">=</span><span class="s2">"testing"</span><span class="p">;</span> ques<span class="p">;;</span>
<span class="o">[</span>Qq<span class="o">]</span>* <span class="o">)</span> endex<span class="p">;;</span>
* <span class="o">)</span> <span class="nb">echo</span> <span class="s2">""</span><span class="nv">$bldgrn</span><span class="s2">" Please answer yes or no. </span><span class="k">$(</span>tput sgr0<span class="k">)</span><span class="s2">"</span><span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span><span class="p">;</span>
<span class="nb">eval</span> choose
</pre></div>What’s On Your To-Don’t List?2017-07-14T00:00:00+01:002017-07-14T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-07-14:/todo-lists5.html<!-- Status: draft -->
<p>by - Peter Bregman</p>
<p>When the first iPad came out, I bought it, became obsessed, and, within two weeks, returned it. Why did the obsession wear off so quickly?</p>
<p>It didn't.</p>
<p>I returned it because I was obsessed. I spent every free minute on it. Which left me with no free …</p><!-- Status: draft -->
<p>by - Peter Bregman</p>
<p>When the first iPad came out, I bought it, became obsessed, and, within two weeks, returned it. Why did the obsession wear off so quickly?</p>
<p>It didn't.</p>
<p>I returned it because I was obsessed. I spent every free minute on it. Which left me with no free minutes. I wanted my freedom back.</p>
<p>When the second iPad came out, I bought it again. Why? Because it was thinner? Kind of. Because opening the cover turned it on instantly? Well, sort of. Mainly, I bought it because I was seduced. It really is such a cool device.</p>
<p>But once again I sold it.</p>
<p>For me, the iPad is a distraction. I'd open it up to write an article or do email and emerge hours later having watched four episodes of Modern Family. Fun, but not how I want to spend my time. Somehow, that doesn't happen to me when I write on my laptop.</p>
<p>The first thing I did, after selling my second iPad, is add a new item to my To-Don't list - <em>Don't buy another iPad</em>.</p>
<p>My To-Don't list is married to my To-Do list and they make a lovely couple. My To-Do list is visionary, wild, creative, and productive. My To-Don't list is responsible, conscientious, protective, and attentive. My To-Do list helps me get the right things done. My To-Don't list helps me avoid spending time on the wrong things.</p>
<p>Why do I need a To-Don't list? To counteract the biggest myth of time management, which is this - If
you work hard enough, organise yourself, and optimise your time, you can get it all done.</p>
<p>Don't believe it. You can't get it all done.</p>
<p>Over 21,000 people have taken a short productivity quiz on my website. A full 50% responded
"always" or "often" to the following statement - “Even though it feels like I work non-stop all day, I still don’t get the most important things done.”</p>
<p>So here's a free pass - You don't have to get it all done. In fact, it's a mistake to try because the wrong things will fall through the cracks.</p>
<p>But that free pass comes with a responsibility - You need to make strategic, intentional choices about what you aren't going to do so you can make time for the things you are going to do. In other words, instead of letting important things haphazardly fall through the cracks, you should actively push the unimportant ones through.</p>
<p>Things you place on your To-Don't list don't have to stay there forever. Some things - like my iPad - I leave on my To-Don't list for years. Other things - like responding to email, answering my phone or surfing the Web - I place on my To-Don't list for just a few hours at a time.</p>
<p>Here's an extreme example - One time I was having trouble writing an important and difficult proposal. So I bought a round-trip train ticket between New York and Boston spent the entire, uninterrupted time finishing my work. My only break was a leg stretch in Boston, before I boarded the train back to New York. For 10 hours, everything besides my proposal went on my To-Don't list.</p>
<p>You can also put things on your To-Don't list that are more distracting than time-consuming. (Distraction adds up to time wasted, remember.)</p>
<p>An unemployed friend of a friend was highly concerned with paying back her student loans even though she was allowed to postpone payments until she resumed employment. That kind of money stress was a distraction from her most important focus - finding a job. In her case, paying back her debt is a great candidate for her To-Don't list. For now.</p>
<p>See where we're going here? Your To-Don't list is a tool to clear away the distractions - so you can focus on the things that are your highest priority, right now.</p>
<p>And that's why, every day, for at least 15 minutes, I put everything on my To-Don't list. Doing nothing at all for a few minutes helps me regain focus before I get back to work.</p>
<p>When Apple came out with their third generation iPad, I admit to being a little tempted… I started to read the reviews, but stopped myself before it was too late.</p>
<p>The experience prompted me to add one more thing to my To-Don't list - Reading reviews about iPads.</p>
<p>Source - <a href="http://blogs.wsj.com/atwork/2012/06/06/whats-on-your-to-dont-list/">http://blogs.wsj.com/atwork/2012/06/06/whats-on-your-to-dont-list/</a></p>Move TeX-Live xxxx2017-07-01T00:00:00+01:002017-07-01T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-07-01:/movetexlive.html<p>If you are finding that space in your root directory is getting less and you are begining to feel
the pinch, then maybe you should consider moving TeX-Live to your home directory. </p>
<p>You can move it using rsync with this command -</p>
<div class="highlight"><pre><span></span>rsync -axvvES --info=progress2 --remove-source-files /usr/local/texlive /home …</pre></div><p>If you are finding that space in your root directory is getting less and you are begining to feel
the pinch, then maybe you should consider moving TeX-Live to your home directory. </p>
<p>You can move it using rsync with this command -</p>
<div class="highlight"><pre><span></span>rsync -axvvES --info=progress2 --remove-source-files /usr/local/texlive /home/boudiccas && rm -rf /usr/local/texlive
</pre></div>
<p>This will move the file over and then it deletes the source file, very useful. Once everything is
moved over, then you need to delete the source folders, and the only way that I've found is to
launch nautilus as root and then delete the source texlive folders.</p>
<p>Then change the pathways in your .bashrc file -</p>
<div class="highlight"><pre><span></span>TEXDIR="/home/boudiccas/texlive/2017"
# TEXDIR="/usr/local/texlive/2016"
export PATH=$TEXDIR/bin/x86_64-linux:$PATH # for 32-bit installation
export INFOPATH=$INFOPATH:$TEXDIR/texmf-dist/doc/info
export MANPATH=$MANPATH:$TEXDIR/texmf-dist/doc/man
</pre></div>
<p>And change '/usr/local/texlive/2017' to '/home/foo/texlive/2017', obviously changing foo to your login name.</p>
<p>Then just check that this doesn't need to be changed -</p>
<div class="highlight"><pre><span></span>alias texupdate='env "PATH=$PATH" tlmgr update -all'
</pre></div>
<p>As you can see it didn't need to be changed. What this command does is make it easy to update your texlive installation, by just putting 'texupdate' in your terminal.</p>
<p>Then reboot, and once everything is back up and running, check that everything works as you expect. </p>
<p>Result? Success! </p>Tips for coping in hot weather2017-06-21T00:00:00+01:002017-06-21T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-06-21:/cool.html<ul>
<li>
<p>Shut windows and pull down the shades when it is hotter outside. You can open the windows for ventilation when it is cooler.</p>
</li>
<li>
<p>Stay out of the sun and don't go out between 11:00 and 15:00 (the hottest part of the day) if you're vulnerable to the effects …</p></li></ul><ul>
<li>
<p>Shut windows and pull down the shades when it is hotter outside. You can open the windows for ventilation when it is cooler.</p>
</li>
<li>
<p>Stay out of the sun and don't go out between 11:00 and 15:00 (the hottest part of the day) if you're vulnerable to the effects of heat.</p>
</li>
<li>
<p>Have cool baths or showers, and splash yourself with cool water.</p>
</li>
<li>
<p>Drink cold drinks regularly, such as water and diluted fruit juice. Avoid excess alcohol, caffeine (tea, coffee and cola) or drinks high in sugar.</p>
</li>
<li>
<p>Wear loose, cool clothing, and a hat and sunglasses if you go outdoors.</p>
</li>
<li>
<p>Check up on friends, relatives and neighbours who may be less able to look after themselves.</p>
</li>
</ul>
<p>Source - <a href="http://www.bbc.co.uk/news/uk-40353118">http://www.bbc.co.uk/news/uk-40353118</a></p>Sleeping in hot weather2017-06-21T00:00:00+01:002017-06-21T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2017-06-21:/cool-sleep.html<ul>
<li>
<p>Cast aside your pyjamas and sleep naked if possible. If you do tend to get very hot and sweaty, then drape a beach towel over the bed and pillows to protect the bedding.</p>
</li>
<li>
<p>Open the windows - preferably more than one, on different sides of the house - to allow more air …</p></li></ul><ul>
<li>
<p>Cast aside your pyjamas and sleep naked if possible. If you do tend to get very hot and sweaty, then drape a beach towel over the bed and pillows to protect the bedding.</p>
</li>
<li>
<p>Open the windows - preferably more than one, on different sides of the house - to allow more air
to circulate. But this may not be advisable if you are in a bungalow, ground-floor flat or basement,
because of the higher risk of burglary, so check the other options for ideas. You might also be
concerned that throwing open the windows will let in more noise from the street - one way around
that is wearing earplugs as long as you can still hear your alarm clock go off in the morning.</p>
</li>
<li>
<p>Have a lukewarm shower before getting into bed. Best to avoid an ice-cold shower, as your body will compensate afterwards by raising your temperature. Get into a shower that's set at your normal temperature, so it's not too much of a shock, and then gradually turn it down until it's tepid or cool, but don't go as far as freezing cold.</p>
</li>
<li>
<p>Bring an electric fan into the room to blow cool air over over you. These fans are rarely silent
but you will get used to the noise after a while. Sleep scientists have said an electric fan is the
most sensible option for getting to sleep on a hot night. In the longer term, you could consider
getting a ceiling fan installed.</p>
</li>
<li>
<p>If you don't already have a combi boiler that heats water as you need it, reduce the amount of time your water heating system is on. A tank of hot water upstairs will radiate heat, even with good insulation, and will only warm up that part of the house even more. Lukewarm showers should mean needing much less hot water than usual, so alter your timer accordingly. In this weather, a single person should not need the hot water to be on for more than an hour at night and half an hour in the morning.</p>
</li>
<li>
<p>Use a summer duvet with a lower tog rating, or abandon the duvet altogether and opt for a thin
cotton sheet, which will absorb perspiration. Drape the sheet over the bed and sleep on top - you
can always pull it around you during the darkest, coolest parts of the night.</p>
</li>
<li>
<p>Turn over your pillow every now and then so you are resting your head on the cooler side.</p>
</li>
<li>
<p>Keep blinds, curtains or shutters closed during the day on the side of the house where the sun is shining.</p>
</li>
<li>
<p>Put a glass of iced water near your bed so you can have a sip if you wake up feeling hot or dehydrated during the night, and keep cool in the time you are trying to fall asleep.</p>
</li>
<li>
<p>In extreme temperatures, or for people who become very overheated and unable to nod off, items
soaked in cold water can be used to help you sleep. Soak a flannel (face cloth) in cold water, wring
it out and then lay it on exposed flesh. Some people have even admitted they wear wet socks or a wet
T-shirt to bed - wring them out first, of course. Another option is to dip a sheet in cold water,
wring out the excess and lay it on you, while others recommend putting the pillowcases and sheet in
the freezer all day.</p>
</li>
<li>
<p>Fill a spray bottle with cold water to spritz yourself while lying in bed.</p>
</li>
<li>
<p>Take a cool-box ice-pack to bed, wrapped in a pillow case, and put your feet or body against it in much the same way you would use a hot water bottle.</p>
</li>
<li>
<p>Another suggestion for keeping the upstairs cool is to open the hatch to the loft so that heat can rise further and escape from the house.</p>
</li>
<li>
<p>But if the upstairs still proves too unbearably hot after trying our other ideas, you might want to temporarily sleep downstairs on a folding bed or sun-lounger (which allows air to circulate around you more freely). Best to place the bed on a cool, tiled floor.</p>
</li>
<li>
<p>Plunge both your wrists into a deep bowl of very cold water and hold them there until your body
cools down, or hold them under the cold tap for a few seconds.</p>
</li>
</ul>
<p>Source - <a href="http://www.birminghammail.co.uk/news/health/how-sleep-hot-weather-cool-5104529">http://www.birminghammail.co.uk/news/health/how-sleep-hot-weather-cool-5104529</a></p>org2latex - a yasnippet2016-04-10T00:00:00+01:002016-04-10T00:00:00+01:00Sharon Kimbletag:www.sharons.org.uk,2016-04-10:/org2latex.html<p>This is my yasnippet template for use when building an org-mode file which will be exported into
a'.tex' file and then you can use my '<a href="../pdfbuild.html">pdfbuild</a>' script to convert the latex file
into a PDF file with no code lines to be entered, just follow the on-screen prompts.</p>
<div class="highlight"><pre><span></span><span class="c1"># -*- mode …</span></pre></div><p>This is my yasnippet template for use when building an org-mode file which will be exported into
a'.tex' file and then you can use my '<a href="../pdfbuild.html">pdfbuild</a>' script to convert the latex file
into a PDF file with no code lines to be entered, just follow the on-screen prompts.</p>
<div class="highlight"><pre><span></span><span class="c1"># -*- mode: snippet -*-</span>
<span class="c1"># name: org2latex</span>
<span class="c1"># key: org2latex</span>
<span class="c1"># --</span>
<span class="c1">#+TITLE: foobar</span>
<span class="c1">#+LaTeX_HEADER: \usepackage[utf8]{inputenc}</span>
<span class="c1">#+LaTeX_HEADER: \usepackage[T1]{fontenc} </span>
<span class="c1">#+LaTeX_HEADER: \usepackage{palatino}</span>
<span class="c1">#+LaTeX_HEADER: \usepackage{fixltx2e}</span>
<span class="c1">#+latex_header: \usepackage[backend=biber,style=philosophy-modern,doi=true,hyperref=true,backref=true,backrefstyle=two,date=year,maxcitenames=3]{biblatex}</span>
<span class="c1">#+LATEX_HEADER: \addbibresource{~/foo/foo/foo.bib}</span>
<span class="c1">#+LATEX_HEADER: \usepackage{makeidx}</span>
<span class="c1">#+latex_header: \makeindex</span>
<span class="c1">#+latex_header: \usepackage[acronym]{glossaries}</span>
<span class="c1">#+latex_header: \makeglossaries</span>
<span class="c1">#+latex_header: \usepackage[unhide]{todo}</span>
<span class="c1">#+latex_header: \usepackage{everypage}</span>
<span class="c1">#+latex_header: \usepackage{draftwatermark}</span>
<span class="c1">#+latex_header: \usepackage{hyperref}</span>
<span class="c1">#+latex_header: \hypersetup{colorlinks,linkcolor={red},citecolor={magenta},urlcolor={blue}}</span>
<span class="c1"># #+options: num:nil</span>
<span class="c1">#+OPTIONS: toc:2</span>
<span class="se">\c</span>learpage
<span class="se">\r</span>enewcommand<span class="o">{</span><span class="se">\t</span>hesection<span class="o">}{}</span>
<span class="se">\r</span>enewcommand<span class="o">{</span><span class="se">\t</span>hesubsection<span class="o">}{}</span>
<span class="se">\r</span>enewcommand<span class="o">{</span><span class="se">\t</span>hesubsubsection<span class="o">}{}</span>
<span class="se">\i</span>nput<span class="o">{</span>foo.glos<span class="o">}</span>
<span class="se">\i</span>nput<span class="o">{</span>foo.acro<span class="o">}</span>
/foo/ Your main text goes here /foo/
<span class="s1">'glos'</span> is your glossary file, and <span class="s1">'acro'</span> is your acronyms file, and <span class="s1">'bib'</span> is your biblatex references
<span class="s1">'foo.glos'</span> <span class="p">;;</span> needs to be a proper latex glossary file
<span class="s1">'foo.acro'</span> <span class="p">;;</span> needs to be a proper latex acronym file
<span class="s1">'foo.bib'</span> <span class="p">;;</span> needs to be a proper latex bib file, I<span class="s1">'m using '</span>JabRef<span class="s1">' for it</span>
<span class="s1">This file will accept a '</span>cite:foo<span class="s1">' for biblatex references, and also '</span><span class="se">\g</span>ls<span class="o">{</span>foo<span class="o">}</span><span class="s1">' for glossary and</span>
<span class="s1">acronym entries, and '</span><span class="se">\i</span>ndex<span class="o">{</span>foo<span class="o">}</span><span class="s1">' for index entries.</span>
<span class="s1">You *must* give the complete path of your '</span>foo.bib<span class="s1">' file as it sets up where every other file can be</span>
<span class="s1">found.</span>
<span class="s1">This works with a complete setup of '</span>TexLive <span class="m">2015</span><span class="s1">'. </span>
<span class="s1">\todo{This is how your '</span>TODO<span class="err">'</span> items should appear<span class="o">}</span>
<span class="se">\c</span>learpage
<span class="se">\a</span>ddcontentsline<span class="o">{</span>toc<span class="o">}{</span>chapter<span class="o">}{</span>Glossary<span class="o">}</span>
<span class="se">\p</span>rintglossaries
<span class="se">\c</span>learpage
<span class="se">\a</span>ddcontentsline<span class="o">{</span>toc<span class="o">}{</span>chapter<span class="o">}{</span>References<span class="o">}</span>
<span class="se">\p</span>rintbibliography
<span class="se">\c</span>learpage
<span class="se">\a</span>ddcontentsline<span class="o">{</span>toc<span class="o">}{</span>chapter<span class="o">}{</span>Index<span class="o">}</span>
<span class="se">\p</span>rintindex
<span class="se">\t</span>odos
<span class="se">\e</span>nd<span class="o">{</span>document<span class="o">}</span>
</pre></div>