diff options
| -rw-r--r-- | 2018-linuxdays/examples/.bashrc | 1 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/.zshrc | 1 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/bash/function | 4 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/bash/mupdf-pdf | 1 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/bash/real | 23 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/bash/simple | 1 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/bash/switch | 16 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/gitbmerge/_gitbmerge | 23 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/gitbmerge/gitbmerge | 20 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/zsh/dev | 4 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/zsh/path | 4 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/zsh/real | 38 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/zsh/simple | 4 | ||||
| -rw-r--r-- | 2018-linuxdays/examples/zsh/switch | 15 | ||||
| -rw-r--r-- | 2018-linuxdays/makefile | 10 | ||||
| -rw-r--r-- | 2018-linuxdays/naborovy-letak-projekce-rgb-1920x1080.png | bin | 0 -> 8468 bytes | |||
| -rw-r--r-- | 2018-linuxdays/pres.pdf | bin | 0 -> 192992 bytes | |||
| -rw-r--r-- | 2018-linuxdays/pres.tex | 270 | 
18 files changed, 435 insertions, 0 deletions
diff --git a/2018-linuxdays/examples/.bashrc b/2018-linuxdays/examples/.bashrc new file mode 100644 index 0000000..79ff768 --- /dev/null +++ b/2018-linuxdays/examples/.bashrc @@ -0,0 +1 @@ +PS1="\[\e[1;32m\]bash\$\[\e[0m\] " diff --git a/2018-linuxdays/examples/.zshrc b/2018-linuxdays/examples/.zshrc new file mode 100644 index 0000000..c006157 --- /dev/null +++ b/2018-linuxdays/examples/.zshrc @@ -0,0 +1 @@ +PROMPT="%{$fg_bold[green]%}zsh%(!.#.$)%{$reset_color%} " diff --git a/2018-linuxdays/examples/bash/function b/2018-linuxdays/examples/bash/function new file mode 100644 index 0000000..ab6e5da --- /dev/null +++ b/2018-linuxdays/examples/bash/function @@ -0,0 +1,4 @@ +_sterm() { +	COMPREPLY+=($(compgen -W "9600 19200 38400 57600 115200" -- "${COMP_WORDS[COMP_CWORD]}")) +} +complete -F _sterm sterm diff --git a/2018-linuxdays/examples/bash/mupdf-pdf b/2018-linuxdays/examples/bash/mupdf-pdf new file mode 100644 index 0000000..3f5c250 --- /dev/null +++ b/2018-linuxdays/examples/bash/mupdf-pdf @@ -0,0 +1 @@ +complete -G \*.pdf mupdf diff --git a/2018-linuxdays/examples/bash/real b/2018-linuxdays/examples/bash/real new file mode 100644 index 0000000..2dd3f36 --- /dev/null +++ b/2018-linuxdays/examples/bash/real @@ -0,0 +1,23 @@ +# Bash completion file for sterm +# vim: ft=sh + +_sterm() { +	local cur prev words cword +	_init_completion || return +	local ops="-h --help -c -d -e -n -r -s -v" +	case "$prev" in +		-b|-d|-r) +			# No completion for these +			;; +		-s) +			local speeds="0 50 75 110 134 150 200 300 600 1200 1800 2400 4800 9600 19200 38400 57600 115200 230400" +			COMPREPLY+=($(compgen -W "${speeds}" -- ${cur})) +			;; +		*) +			COMPREPLY+=($(compgen -W "${ops}" -- ${cur})) +			COMPREPLY+=($(compgen -G "/dev/tty*" -- ${cur})) +			;; +	esac +} + +complete -o default -F _sterm sterm diff --git a/2018-linuxdays/examples/bash/simple b/2018-linuxdays/examples/bash/simple new file mode 100644 index 0000000..76b8813 --- /dev/null +++ b/2018-linuxdays/examples/bash/simple @@ -0,0 +1 @@ +complete -W "9600 19200 38400 57600 115200" sterm diff --git a/2018-linuxdays/examples/bash/switch b/2018-linuxdays/examples/bash/switch new file mode 100644 index 0000000..db55dd7 --- /dev/null +++ b/2018-linuxdays/examples/bash/switch @@ -0,0 +1,16 @@ +_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 diff --git a/2018-linuxdays/examples/gitbmerge/_gitbmerge b/2018-linuxdays/examples/gitbmerge/_gitbmerge new file mode 100644 index 0000000..49977dc --- /dev/null +++ b/2018-linuxdays/examples/gitbmerge/_gitbmerge @@ -0,0 +1,23 @@ +#compdef gitbmerge +#autoload + +_gitbmerge() { +	((CURRENT > 2)) &&  return # Complete only single dependency +	local GDIR="$(pwd)" +	while [ ! -d "$GDIR/.git"  ]; do +		[ -z "$GDIR" ] && return +		GDIR="${GDIR%/*}" +	done +	GDIR="$GDIR/.git" +	[ -f "$GDIR" ] && GDIR="$(cat "$GDIR")" # This just points to some other directory +	[ -d "$GDIR/refs/heads" ] || return # No completion if there is no local branch +	local branches=() +	for B in "$GDIR"/refs/heads/*; do +		# TODO skip branch on HEAD +		branches+=("${B#$GDIR/refs/heads/}") +	done +	_describe -t branches 'gitbmerge' branches +} + +_gitbmerge +# vim: ft=zsh diff --git a/2018-linuxdays/examples/gitbmerge/gitbmerge b/2018-linuxdays/examples/gitbmerge/gitbmerge new file mode 100644 index 0000000..bd892b6 --- /dev/null +++ b/2018-linuxdays/examples/gitbmerge/gitbmerge @@ -0,0 +1,20 @@ +_gitbmerge() { +	[ $COMP_CWORD -gt 1 ] &&  return # Complete only single dependency +	local cur prev words cword +	_init_completion || return +	local GDIR="$(pwd)" +	while [ ! -d "$GDIR/.git"  ]; do +		[ -z "$GDIR" ] && return +		GDIR="${GDIR%/*}" +	done +	GDIR="$GDIR/.git" +	[ -f "$GDIR" ] && GDIR="$(cat "$GDIR")" # This just points to some other directory +	[ -d "$GDIR/refs/heads" ] || return # No completion if there is no local branch +	local ops="" +	for B in "$GDIR"/refs/heads/*; do +		# TODO skip branch on HEAD +		ops="$ops ${B#$GDIR/refs/heads/}" +	done +	COMPREPLY=($(compgen -W "${ops}" -- ${cur})) +} +complete -F _gitbmerge gitbmerge diff --git a/2018-linuxdays/examples/zsh/dev b/2018-linuxdays/examples/zsh/dev new file mode 100644 index 0000000..25de542 --- /dev/null +++ b/2018-linuxdays/examples/zsh/dev @@ -0,0 +1,4 @@ +_sterm() { +	_values "tty" /dev/tty* +} +compdef _sterm sterm diff --git a/2018-linuxdays/examples/zsh/path b/2018-linuxdays/examples/zsh/path new file mode 100644 index 0000000..617d47e --- /dev/null +++ b/2018-linuxdays/examples/zsh/path @@ -0,0 +1,4 @@ +_sterm() { +	_files +} +compdef _sterm sterm diff --git a/2018-linuxdays/examples/zsh/real b/2018-linuxdays/examples/zsh/real new file mode 100644 index 0000000..7b2dce6 --- /dev/null +++ b/2018-linuxdays/examples/zsh/real @@ -0,0 +1,38 @@ +# vim: ft=zsh +_sterm_baudrate() { +	_values "Baudrate" \ +		"0" \ +		"50" \ +		"75" \ +		"110" \ +		"134" \ +		"150" \ +		"200" \ +		"300" \ +		"600" \ +		"1200" \ +		"1800" \ +		"2400" \ +		"4800" \ +		"9600" \ +		"19200" \ +		"38400" \ +		"57600" \ +		"115200" \ +		"230400" +} +_sterm() { +	_arguments \ +		"--help[Output help message]" \ +		"-h[Print help text]" \ +		"-s[Set baudrate]:baudrate:_sterm_baudrate" \ +		"-b[Send break]:break:->ignore" \ +		"-c[Enter command mode]" \ +		"-d[Make pulse on DTR]:pulse:->ignore" \ +		"-r[Make pulse on RTS]:pulse:->ignore" \ +		"-e[Ignore '~.' escape sequence]" \ +		"-n[Do not switch the device to raw mode]" \ +		"-v[Verbose mode]" +	[ "$state" = "ignore" ] || _values "tty" /dev/tty* +} +compdef _sterm sterm diff --git a/2018-linuxdays/examples/zsh/simple b/2018-linuxdays/examples/zsh/simple new file mode 100644 index 0000000..b269db3 --- /dev/null +++ b/2018-linuxdays/examples/zsh/simple @@ -0,0 +1,4 @@ +_sterm() { +	_values "Baudrate" "9600" "19200" "115200" +} +compdef _sterm sterm diff --git a/2018-linuxdays/examples/zsh/switch b/2018-linuxdays/examples/zsh/switch new file mode 100644 index 0000000..09c9b29 --- /dev/null +++ b/2018-linuxdays/examples/zsh/switch @@ -0,0 +1,15 @@ +_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]" \ +		"-r[Make pulse on RTS]" \ +		"-e[Ignore '~.' escape sequence]" \ +		"-n[Do not switch the device to raw mode]" \ +		"-v[Verbose mode]" +} +compdef _sterm sterm diff --git a/2018-linuxdays/makefile b/2018-linuxdays/makefile new file mode 100644 index 0000000..9ab8f60 --- /dev/null +++ b/2018-linuxdays/makefile @@ -0,0 +1,10 @@ +FILE=pres + +$(FILE).pdf: $(FILE).tex $(patsubst %.svg,%.pdf,$(wildcard *.svg)) +	pdflatex -shell-escape $< + +%.pdf: %.svg +	inkscape -D -z --file=$< --export-pdf=$@ --export-latex + +clean: +	ls | grep -v -E "($(FILE).tex|makefile|scheme|svg|png|eps)$$" | xargs rm -rf diff --git a/2018-linuxdays/naborovy-letak-projekce-rgb-1920x1080.png b/2018-linuxdays/naborovy-letak-projekce-rgb-1920x1080.png Binary files differnew file mode 100644 index 0000000..5c995d9 --- /dev/null +++ b/2018-linuxdays/naborovy-letak-projekce-rgb-1920x1080.png diff --git a/2018-linuxdays/pres.pdf b/2018-linuxdays/pres.pdf Binary files differnew file mode 100644 index 0000000..1b792fc --- /dev/null +++ b/2018-linuxdays/pres.pdf 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}  | 
