From ce1a0eaa58f7ad07c5389996a90c4b02bdf573fc Mon Sep 17 00:00:00 2001
From: johannst <johannst@users.noreply.github.com>
Date: Mon, 13 Apr 2020 19:02:58 +0000
Subject: deploy: 43e402ba2320ced7972d33c9442b2745afe230f6

---
 print.html | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 132 insertions(+), 6 deletions(-)

(limited to 'print.html')

diff --git a/print.html b/print.html
index d1b2fbb..66f1ebe 100644
--- a/print.html
+++ b/print.html
@@ -83,7 +83,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div id="sidebar-scrollbox" class="sidebar-scrollbox">
-                <ol class="chapter"><li class="expanded "><a href="ld.so.html"><strong aria-hidden="true">1.</strong> ld.so</a></li><li class="expanded "><a href="git.html"><strong aria-hidden="true">2.</strong> git</a></li><li class="expanded "><a href="bash.html"><strong aria-hidden="true">3.</strong> bash</a></li><li class="expanded "><a href="tmux.html"><strong aria-hidden="true">4.</strong> tmux</a></li><li class="expanded "><a href="awk.html"><strong aria-hidden="true">5.</strong> awk</a></li><li class="expanded "><a href="gdb.html"><strong aria-hidden="true">6.</strong> gdb</a></li><li class="expanded "><a href="radare2.html"><strong aria-hidden="true">7.</strong> radare2</a></li><li class="expanded "><a href="emacs.html"><strong aria-hidden="true">8.</strong> emacs</a></li><li class="expanded "><a href="fish.html"><strong aria-hidden="true">9.</strong> fish</a></li><li class="expanded "><a href="strace.html"><strong aria-hidden="true">10.</strong> strace</a></li><li class="expanded "><a href="lsof.html"><strong aria-hidden="true">11.</strong> lsof</a></li><li class="expanded "><a href="pidstat.html"><strong aria-hidden="true">12.</strong> pidstat</a></li><li class="expanded "><a href="time.html"><strong aria-hidden="true">13.</strong> time</a></li><li class="expanded "><a href="pgrep.html"><strong aria-hidden="true">14.</strong> pgrep</a></li><li class="expanded "><a href="pstack.html"><strong aria-hidden="true">15.</strong> pstack</a></li><li class="expanded "><a href="perf.html"><strong aria-hidden="true">16.</strong> perf</a></li><li class="expanded "><a href="oprofile.html"><strong aria-hidden="true">17.</strong> OProfile</a></li><li class="expanded "><a href="od.html"><strong aria-hidden="true">18.</strong> od</a></li><li class="expanded "><a href="xxd.html"><strong aria-hidden="true">19.</strong> xxd</a></li><li class="expanded "><a href="readelf.html"><strong aria-hidden="true">20.</strong> readelf</a></li><li class="expanded "><a href="objdump.html"><strong aria-hidden="true">21.</strong> objdump</a></li><li class="expanded "><a href="nm.html"><strong aria-hidden="true">22.</strong> nm</a></li><li class="expanded "><a href="c++filt.html"><strong aria-hidden="true">23.</strong> c++filt</a></li><li class="expanded "><a href="c++.html"><strong aria-hidden="true">24.</strong> c++</a></li><li class="expanded "><a href="glibc.html"><strong aria-hidden="true">25.</strong> glibc</a></li><li class="expanded "><a href="gcc.html"><strong aria-hidden="true">26.</strong> gcc</a></li></ol>
+                <ol class="chapter"><li class="expanded "><a href="ld.so.html"><strong aria-hidden="true">1.</strong> ld.so</a></li><li class="expanded "><a href="git.html"><strong aria-hidden="true">2.</strong> git</a></li><li class="expanded "><a href="bash.html"><strong aria-hidden="true">3.</strong> bash</a></li><li class="expanded "><a href="zsh.html"><strong aria-hidden="true">4.</strong> zsh</a></li><li class="expanded "><a href="tmux.html"><strong aria-hidden="true">5.</strong> tmux</a></li><li class="expanded "><a href="awk.html"><strong aria-hidden="true">6.</strong> awk</a></li><li class="expanded "><a href="gdb.html"><strong aria-hidden="true">7.</strong> gdb</a></li><li class="expanded "><a href="radare2.html"><strong aria-hidden="true">8.</strong> radare2</a></li><li class="expanded "><a href="emacs.html"><strong aria-hidden="true">9.</strong> emacs</a></li><li class="expanded "><a href="fish.html"><strong aria-hidden="true">10.</strong> fish</a></li><li class="expanded "><a href="strace.html"><strong aria-hidden="true">11.</strong> strace</a></li><li class="expanded "><a href="lsof.html"><strong aria-hidden="true">12.</strong> lsof</a></li><li class="expanded "><a href="pidstat.html"><strong aria-hidden="true">13.</strong> pidstat</a></li><li class="expanded "><a href="time.html"><strong aria-hidden="true">14.</strong> time</a></li><li class="expanded "><a href="pgrep.html"><strong aria-hidden="true">15.</strong> pgrep</a></li><li class="expanded "><a href="pstack.html"><strong aria-hidden="true">16.</strong> pstack</a></li><li class="expanded "><a href="perf.html"><strong aria-hidden="true">17.</strong> perf</a></li><li class="expanded "><a href="oprofile.html"><strong aria-hidden="true">18.</strong> OProfile</a></li><li class="expanded "><a href="od.html"><strong aria-hidden="true">19.</strong> od</a></li><li class="expanded "><a href="xxd.html"><strong aria-hidden="true">20.</strong> xxd</a></li><li class="expanded "><a href="readelf.html"><strong aria-hidden="true">21.</strong> readelf</a></li><li class="expanded "><a href="objdump.html"><strong aria-hidden="true">22.</strong> objdump</a></li><li class="expanded "><a href="nm.html"><strong aria-hidden="true">23.</strong> nm</a></li><li class="expanded "><a href="c++filt.html"><strong aria-hidden="true">24.</strong> c++filt</a></li><li class="expanded "><a href="c++.html"><strong aria-hidden="true">25.</strong> c++</a></li><li class="expanded "><a href="glibc.html"><strong aria-hidden="true">26.</strong> glibc</a></li><li class="expanded "><a href="gcc.html"><strong aria-hidden="true">27.</strong> gcc</a></li></ol>
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
         </nav>
@@ -469,19 +469,145 @@ COMP_CWORD      # index into COMP_WORDS with current cursor position
 # out
 COMPREPLY       # array with possible completions
 </code></pre>
-<p><code>compgen</code> builtin is used to generate possible matches for <code>word</code> out of possible <code>option</code>s.
-The syntax is as follows:</p>
+<p>The <code>compgen</code> builtin is used to generate possible matches by comparing <code>word</code>
+against words generated by <code>option</code>.</p>
 <pre><code class="language-bash">compgen [option] [word]
 
 # usefule options:
+# -W &lt;list&gt;    specify list of possible completions
+# -d           generate list with dirs
+# -f           generate list with files
+# -u           generate list with users
+# -e           generate list with exported variables
 
-# -W &lt;list&gt;    compare against word-list
+# compare &quot;f&quot; against words &quot;foo&quot; &quot;foobar&quot; &quot;bar&quot; and generate matches
 compgen -W &quot;foo foobar bar&quot; &quot;f&quot;
 
-# -d    compare against dir names
-# -f    compare against file names
+# compare &quot;hom&quot; against file/dir names and generate matches
 compgen -d -f &quot;hom&quot;
 </code></pre>
+<h3><a class="header" href="#example" id="example">Example</a></h3>
+<p>Skeleton to copy/paste for writing simple completions.</p>
+<p>Assume a program <code>foo</code> with the following interface:</p>
+<pre><code class="language-bash">foo -c green|red|blue -s low|high -f &lt;file&gt; -h
+</code></pre>
+<p>The completion handler could be implemented as follows:</p>
+<pre><code class="language-bash">function _foo() {
+    local curr=$2
+    local prev=$3
+
+    local opts=&quot;-c -s -f -h&quot;
+    case $prev in
+        -c) COMPREPLY=( $(compgen -W &quot;green red blue&quot; -- $curr) );;
+        -s) COMPREPLY=( $(compgen -W &quot;low high&quot; -- $curr) );;
+        -f) COMPREPLY=( $(compgen -f -- $curr) );;
+        *)  COMPREPLY=( $(compgen -W &quot;$opts&quot; -- $curr) );;
+    esac
+}
+
+complete -F _foo foo
+</code></pre>
+<h1><a class="header" href="#zsh1" id="zsh1">zsh(1)</a></h1>
+<h2><a class="header" href="#keybindings" id="keybindings">Keybindings</a></h2>
+<p>Change input mode:</p>
+<pre><code class="language-zsh">bindkey -v              change to vi keymap
+bindkey -e              change to emacs keymap
+</code></pre>
+<p>Define key-mappings:</p>
+<pre><code class="language-zsh">bindkey                 list mappings in current keymap
+bindkey in-str cmd      create mapping for `in-str` to `cmd`
+bindkey -r in-str       remove binding for `in-str`
+
+# C-v &lt;key&gt;             dump &lt;key&gt; code, which can be used in `in-str`
+# zle -l                list all functions for keybindings
+# man zshzle(1)         STANDARD WIDGETS: get description of functions
+</code></pre>
+<h2><a class="header" href="#completion-1" id="completion-1">Completion</a></h2>
+<h3><a class="header" href="#installation" id="installation">Installation</a></h3>
+<p>Completion functions are provided via files and need to be placed in a location
+covered by <code>$fpath</code>. By convention the completion files are names as <code>_&lt;CMD&gt;</code>.</p>
+<p>A completion skeleton for the command <code>foo</code>, stored in <code>_foo</code></p>
+<pre><code class="language-zsh">#compdef _foo foo
+
+function _foo() {
+	...
+}
+</code></pre>
+<p>Alternatively one can install a completion function explicitly by calling <code>compdef &lt;FUNC&gt; &lt;CMD&gt;</code>.</p>
+<h3><a class="header" href="#completion-variables" id="completion-variables">Completion Variables</a></h3>
+<p>Following variables are available in Completion functions:</p>
+<pre><code class="language-zsh">$words              # array with command line in words
+$#words             # number words
+$CURRENT            # index into $words for cursor position
+$words[CURRENT-1]   # previous word (relative to cursor position)
+</code></pre>
+<h3><a class="header" href="#completion-functions" id="completion-functions">Completion Functions</a></h3>
+<ul>
+<li><code>_describe</code>     simple completion, just words + description</li>
+<li><code>_arguments</code>    sophisticated completion, allow to specify actions</li>
+</ul>
+<h4><a class="header" href="#completion-with-a-hrefhttpzshsourceforgenetdocreleasecompletion-systemhtmlcompletion-functions_describea" id="completion-with-a-hrefhttpzshsourceforgenetdocreleasecompletion-systemhtmlcompletion-functions_describea">Completion with <a href="http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-Functions"><code>_describe</code></a></a></h4>
+<pre><code class="language-zsh">_describe MSG COMP
+</code></pre>
+<ul>
+<li><code>MSG</code> simple string with header message</li>
+<li><code>COMP</code> array of completions where each entry is <code>&quot;opt:description&quot;</code></li>
+</ul>
+<pre><code class="language-zsh">function _foo() {
+    local -a opts
+    opts=('bla:desc for bla' 'blu:desc for blu')
+    _describe 'foo-msg' opts
+}
+compdef _foo foo
+
+foo &lt;TAB&gt;&lt;TAB&gt;
+ -- foo-msg --
+bla  -- desc for bla
+blu  -- desc for blu
+</code></pre>
+<h4><a class="header" href="#completion-with-a-hrefhttpzshsourceforgenetdocreleasecompletion-systemhtmlcompletion-functions_argumentsa" id="completion-with-a-hrefhttpzshsourceforgenetdocreleasecompletion-systemhtmlcompletion-functions_argumentsa">Completion with <a href="http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-Functions"><code>_arguments</code></a></a></h4>
+<pre><code class="language-zsh">_arguments SPEC [SPEC...]
+</code></pre>
+<p>where <code>SPEC</code> can have one of the following forms:</p>
+<ul>
+<li><code>OPT[DESC]:MSG:ACTION</code></li>
+<li><code>N:MSG:ACTION</code></li>
+</ul>
+<p>Available actions</p>
+<pre><code class="language-zsh">(op1 op2)   list possible matches
+-&gt;VAL       set $state=VAL and continue, `$state` can be checked later in switch case
+FUNC        call func to generate matches
+{STR}       evaluate `STR` to generate matches
+</code></pre>
+<h3><a class="header" href="#example-1" id="example-1">Example</a></h3>
+<p>Skeleton to copy/paste for writing simple completions.</p>
+<p>Assume a program <code>foo</code> with the following interface:</p>
+<pre><code class="language-zsh">foo -c green|red|blue -s low|high -f &lt;file&gt; -d &lt;dir&gt; -h
+</code></pre>
+<p>The completion handler could be implemented as follows in a file called <code>_foo</code>:</p>
+<pre><code class="language-zsh">#compdef _foo foo
+
+function _foo_color() {
+    local colors=()
+    colors+=('green:green color')
+    colors+=('red:red color')
+    colors+=('blue:blue color')
+    _describe &quot;color&quot; colors
+}
+
+function _foo() {
+    _arguments                              \
+        &quot;-c[define color]:color:-&gt;s_color&quot;  \
+        &quot;-s[select sound]:color:(low high)&quot; \
+        &quot;-f[select file]:file:_files&quot;       \
+        &quot;-d[select dir]:fir:_files -/&quot;      \
+        &quot;-h[help]&quot;
+
+    case $state in
+        s_color) _foo_color;;
+    esac
+}
+</code></pre>
 <h1><a class="header" href="#tmux1" id="tmux1">tmux(1)</a></h1>
 <p>Terminology:</p>
 <ul>
-- 
cgit v1.2.3