From 7cf03a1555d46117b5f1a3d0db7c28c02498fcee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= <cynerd@email.cz>
Date: Sun, 7 Oct 2018 20:03:35 +0200
Subject: Add presentation from LinuxDays 2018

---
 2018-linuxdays/pres.tex | 270 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 270 insertions(+)
 create mode 100644 2018-linuxdays/pres.tex

(limited to '2018-linuxdays/pres.tex')

diff --git a/2018-linuxdays/pres.tex b/2018-linuxdays/pres.tex
new file mode 100644
index 0000000..71739f1
--- /dev/null
+++ b/2018-linuxdays/pres.tex
@@ -0,0 +1,270 @@
+\documentclass[aspectratio=169]{beamer}
+\usetheme{metropolis}
+\usepackage{lmodern}
+\usepackage[czech]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\usepackage{color}
+\usepackage{mathtools}
+\usepackage{hyperref}
+\usepackage{epstopdf}
+\usepackage{amsmath}
+\usepackage{minted}
+\hypersetup{
+    colorlinks,
+    citecolor=black,
+    filecolor=black,
+    linkcolor=black,
+    urlcolor=black
+}
+\usepackage{pdflscape}
+
+\title{Jak se píše doplňování v shellu?!}
+\author{Kar(t)el Kočí}
+\date{7.10.2018}
+
+\begin{document}
+
+\frame{\titlepage}
+
+% nejaky uvodni slide!
+
+\begin{frame}[fragile]
+	\frametitle{Příkladový program}
+	\begin{verbatim}
+$ sterm -h
+sterm: invalid option -- 'h'
+Usage: sterm [options] <device>
+Options:
+  -b <duration> send break signal
+  -c        enter command mode
+  -d[PULSE] make pulse on DTR
+  -e        ignore '~.' escape sequence
+  -n        do not switch the device to raw mode
+  -r[PULSE] make pulse on RTS
+  -s <baudrate>
+  -v        verbose mode
+
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{bash: příkaz complete a doplňování}
+	\begin{verbatim}
+complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat]
+    [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix]
+    [-S suffix] name [name …]
+complete -pr [-DE] [name …]
+\end{verbatim}
+	\begin{minted}[frame=lines]{shell}
+complete -G \*.pdf mupdf
+\end{minted}
+	\begin{minted}[frame=lines]{shell}
+complete -W "9600 19200 38400 57600 115200" sterm
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{bash: doplňovcí funkce, proměnné a compgen}
+	\begin{verbatim}
+compgen [option] [word]
+\end{verbatim}
+
+	\begin{minted}[frame=lines]{shell}
+_sterm() {
+	COMPREPLY+=($(compgen -W "9600 19200 38400 57600 115200" \
+		-- "${COMP_WORDS[COMP_CWORD]}"))
+}
+complete -F _sterm sterm
+\end{minted}
+
+	\begin{itemize}
+		\item COMPREPLY: výsledek doplňování
+		\item COMP\_LINE: celý dosavadní vstup
+		\item COMP\_WORDS: pole jednotlivých slov ze vstupu
+		\item COMP\_CWORD: poslední index do COMP\_WORDS = slovo které doplňujeme
+	\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{bash: \_init\_completion}
+	\begin{minted}[frame=lines]{shell}
+_sterm() {
+	_init_completion || return
+	COMPREPLY+=($(compgen -W "9600 19200 38400 57600 115200" \
+		-- "$cur"))
+}
+complete -F _sterm sterm
+\end{minted}
+
+	Definuje
+	\begin{itemize}
+		\item cur: Aktuálně doplňované slovo
+		\item prev: Předchozí argument
+		\item words: Jako COMP\_WORDS z COMP\_LINE
+		\item cword: To samé jako COMP\_CWORD ale pro words
+	\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{bash: doplňování voleb}
+	\begin{minted}[frame=lines]{shell}
+_sterm() {
+  local cur prev words cword
+  _init_completion || return
+  case "$prev" in
+    -b|-d|-r) ;; # No completion for these
+    -s) COMPREPLY=($(compgen -W "9600 19200 38400 57600 115200" \
+      -- ${cur})) ;;
+    *) COMPREPLY=($(compgen -W "-s -b -d -r" -- ${cur})) ;;
+  esac
+}
+complete -o default -F _sterm sterm
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{bash: doplňování cesty}
+	\begin{minted}[frame=lines]{shell}
+_sterm() {
+  local cur prev words cword
+  _init_completion || return
+  case "$prev" in
+    -b|-d|-r) ;; # No completion for these
+    -s) COMPREPLY=($(compgen -W "9600 19200 38400 57600 115200" \
+      -- ${cur})) ;;
+    *) COMPREPLY+=($(compgen -W "-s -b -d -r" -- ${cur}))
+      COMPREPLY+=($(compgen -G "/dev/tty*" -- ${cur})) ;;
+  esac
+}
+complete -o default -F _sterm sterm
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{zsh: compdef a \#compdef}
+	\begin{minted}[frame=lines]{shell}
+_sterm() {
+	_values "Baudrate" "9600" "19200" "115200"
+}
+compdef _sterm sterm
+\end{minted}
+
+	\begin{minted}[frame=lines]{shell}
+#compdef foobar
+_sterm() {
+	_values "Baudrate" "9600" "19200" "115200"
+}
+_sterm
+\end{minted}
+
+\begin{verbatim}
+fpath=($(pwd) $fpath)
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{zsh: doplňování cest}
+	\begin{minted}[frame=lines]{shell}
+_sterm() {
+	_files
+}
+compdef _sterm sterm
+\end{minted}
+
+	\begin{minted}[frame=lines]{shell}
+_sterm() {
+	_values "tty" /dev/tty*
+}
+compdef _sterm sterm
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{zsh: doplňování voleb}
+	\begin{minted}[frame=lines]{shell}
+_sterm_baudrate() {
+	_values "Baudrate" "9600" "19200" "115200"
+}
+_sterm() {
+	_arguments \
+		"-s[Set baudrate]:baudrate:_sterm_baudrate" \
+		"-b[Send break]" \
+		"-c[Enter command mode]" \
+		"-d[Make pulse on DTR]" \
+		"-e[Ignore '~.' escape sequence]"
+}
+compdef _sterm sterm
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{zsh: poziční argumenty}
+	\begin{minted}[frame=lines]{shell}
+_sterm_baudrate() {
+	_values "Baudrate" "9600" "19200" "115200"
+}
+_sterm() {
+	_arguments \
+		"-s[Set baudrate]:baudrate:_sterm_baudrate" \
+		"-b[Send break]" \
+		"-c[Enter command mode]" \
+		"-d[Make pulse on DTR]" \
+		"-e[Ignore '~.' escape sequence]" \
+		"1:device:_files"
+}
+compdef _sterm sterm
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{zsh: argumenty a stavy}
+	\begin{minted}[frame=lines]{shell}
+_sterm_baudrate() {
+	_values "Baudrate" "9600" "19200" "115200"
+}
+_sterm() {
+	_arguments \
+		"-s[Set baudrate]:baudrate:_sterm_baudrate" \
+		"-b[Send break]:break:->ignore" \
+		"-c[Enter command mode]" \
+		"-d[Make pulse on DTR]:pulse:->ignore" \
+		"-e[Ignore '~.' escape sequence]"
+	[ "$state" = "ignore" ] || _values "tty" /dev/tty*
+}
+compdef _sterm sterm
+\end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+	\frametitle{zsh: doplňování bez námahy}
+	\begin{minted}[frame=lines]{shell}
+compdef _gnu_generic ct-ng
+\end{minted}
+\end{frame}
+
+\section[Příklady]{}
+
+\begin{frame}
+	\frametitle{Zdroje}
+	\begin{itemize}
+		\item Bash: man complete (BASH\_BUILTINS)
+		\item Bash: \url{https://www.gnu.org/software/bash/manual/html\_node/Programmable-Completion.html}
+		\item Zsh lidsky: \url{http://zsh.sourceforge.net/Doc/Release/Completion-System.html\#Completion-System}
+		\item Zsh dokumentace: \url{http://zsh.sourceforge.net/Doc/Release/Completion-System.html\#Completion-System}
+	\end{itemize}
+\end{frame}
+
+\begin{frame}
+	\includegraphics[width=\textwidth]{naborovy-letak-projekce-rgb-1920x1080.png}
+\end{frame}
+
+\begin{frame}
+	\Large Děkuji za pozornost.
+
+	\url{git.cynerd.cz}
+\end{frame}
+
+\end{document}
-- 
cgit v1.2.3

