Browse Source

Tuple, Curses, Appendix

pull/86/head
Jure Šorn 4 years ago
parent
commit
ac999283ee
2 changed files with 45 additions and 45 deletions
  1. 46
      README.md
  2. 44
      index.html

46
README.md

@ -144,8 +144,8 @@ Tuple
**Tuple is an immutable and hashable list.** **Tuple is an immutable and hashable list.**
```python ```python
<tuple> = () <tuple> = ()
<tuple> = (<el>,) <tuple> = (<el>,) # Or: <el>,
<tuple> = (<el_1>, <el_2> [, ...]) <tuple> = (<el_1>, <el_2> [, ...]) # Or: <el_1>, <el_2> [, ...]
``` ```
### Named Tuple ### Named Tuple
@ -2370,30 +2370,30 @@ with open('test.csv', encoding='utf-8', newline='') as file:
Curses Curses
------ ------
#### Clears the terminal, prints a message and waits for the ESC key press: #### Runs a basic file explorer in the terminal:
```python ```python
from curses import wrapper, curs_set, ascii from curses import wrapper, ascii, A_REVERSE, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ENTER
from curses import KEY_UP, KEY_RIGHT, KEY_DOWN, KEY_LEFT from os import listdir, chdir, path
def main(): def main(screen):
wrapper(draw) ch, first, selected, paths = 0, 0, 0, listdir()
while ch != ascii.ESC:
def draw(screen): height, _ = screen.getmaxyx()
curs_set(0) # Makes cursor invisible. screen.clear()
screen.nodelay(True) # Makes getch() non-blocking. for y, path_ in enumerate(paths[first : first+height]):
screen.clear() screen.addstr(y, 0, path_, A_REVERSE * (selected == first + y))
screen.addstr(0, 0, 'Press ESC to quit.') # Coordinates are y, x. ch = screen.getch()
while screen.getch() != ascii.ESC: selected += (ch == KEY_DOWN) - (ch == KEY_UP)
pass selected = max(0, min(len(paths)-1, selected))
first += (first <= selected - height) - (first > selected)
def get_border(screen): if ch in [KEY_LEFT, KEY_RIGHT, KEY_ENTER, 10, 13]:
from collections import namedtuple new_dir = '..' if ch == KEY_LEFT else paths[selected]
P = namedtuple('P', 'x y') if path.isdir(new_dir):
height, width = screen.getmaxyx() chdir(new_dir)
return P(width-1, height-1) first, selected, paths = 0, 0, listdir()
if __name__ == '__main__': if __name__ == '__main__':
main() wrapper(main)
``` ```
@ -3489,7 +3489,7 @@ from sys import argv, exit
from collections import defaultdict, namedtuple from collections import defaultdict, namedtuple
from dataclasses import make_dataclass from dataclasses import make_dataclass
from enum import Enum from enum import Enum
import re, operator as op, itertools as it, functools as ft import functools as ft, itertools as it, operator as op, re
def main(): def main():

44
index.html

@ -335,8 +335,8 @@ Counter({<span class="hljs-string">'blue'</span>: <span class="hljs-number">3</s
<div><h2 id="tuple"><a href="#tuple" name="tuple">#</a>Tuple</h2><p><strong>Tuple is an immutable and hashable list.</strong></p><pre><code class="python language-python hljs">&lt;tuple&gt; = () <div><h2 id="tuple"><a href="#tuple" name="tuple">#</a>Tuple</h2><p><strong>Tuple is an immutable and hashable list.</strong></p><pre><code class="python language-python hljs">&lt;tuple&gt; = ()
&lt;tuple&gt; = (&lt;el&gt;,) &lt;tuple&gt; = (&lt;el&gt;,) <span class="hljs-comment"># Or: &lt;el&gt;,</span>
&lt;tuple&gt; = (&lt;el_1&gt;, &lt;el_2&gt; [, ...]) &lt;tuple&gt; = (&lt;el_1&gt;, &lt;el_2&gt; [, ...]) <span class="hljs-comment"># Or: &lt;el_1&gt;, &lt;el_2&gt; [, ...]</span>
</code></pre></div> </code></pre></div>
@ -2078,28 +2078,28 @@ plt.clf() <span class="hljs-comment"># Clea
</code></pre></div></div> </code></pre></div></div>
<div><h2 id="curses"><a href="#curses" name="curses">#</a>Curses</h2><div><h4 id="clearstheterminalprintsamessageandwaitsfortheesckeypress">Clears the terminal, prints a message and waits for the ESC key press:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">from</span> curses <span class="hljs-keyword">import</span> wrapper, curs_set, ascii <div><h2 id="curses"><a href="#curses" name="curses">#</a>Curses</h2><div><h4 id="runsabasicfileexplorerintheterminal">Runs a basic file explorer in the terminal:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">from</span> curses <span class="hljs-keyword">import</span> wrapper, ascii, A_REVERSE, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ENTER
<span class="hljs-keyword">from</span> curses <span class="hljs-keyword">import</span> KEY_UP, KEY_RIGHT, KEY_DOWN, KEY_LEFT <span class="hljs-keyword">from</span> os <span class="hljs-keyword">import</span> listdir, chdir, path
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">(screen)</span>:</span>
wrapper(draw) ch, first, selected, paths = <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, listdir()
<span class="hljs-keyword">while</span> ch != ascii.ESC:
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">draw</span><span class="hljs-params">(screen)</span>:</span> height, _ = screen.getmaxyx()
curs_set(<span class="hljs-number">0</span>) <span class="hljs-comment"># Makes cursor invisible.</span> screen.clear()
screen.nodelay(<span class="hljs-keyword">True</span>) <span class="hljs-comment"># Makes getch() non-blocking.</span> <span class="hljs-keyword">for</span> y, path_ <span class="hljs-keyword">in</span> enumerate(paths[first : first+height]):
screen.clear() screen.addstr(y, <span class="hljs-number">0</span>, path_, A_REVERSE * (selected == first + y))
screen.addstr(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-string">'Press ESC to quit.'</span>) <span class="hljs-comment"># Coordinates are y, x.</span> ch = screen.getch()
<span class="hljs-keyword">while</span> screen.getch() != ascii.ESC: selected += (ch == KEY_DOWN) - (ch == KEY_UP)
<span class="hljs-keyword">pass</span> selected = max(<span class="hljs-number">0n class="p"></span>, min(len(paths)<span class="hljs-number">-1</span>, selected))
first += (first &lt;= selected - height) - (first &gt; selected)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_border</span><span class="hljs-params">(screen)</span>:</span> <span class="hljs-keyword">if</span> ch <span class="hljs-keyword">in</span> [KEY_LEFT, KEY_RIGHT, KEY_ENTER, <span class="hljs-number">10</span>, <span class="hljs-number">13</span>]:
<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> namedtuple new_dir = <span class="hljs-string">'..'</span> <span class="hljs-keyword">if</span> ch == KEY_LEFT <span class="hljs-keyword">else</span> paths[selected]
P = namedtuple(<span class="hljs-string">'P'</span>, <span class="hljs-string">'x y'</span>) <span class="hljs-keyword">if</span> path.isdir(new_dir):
height, width = screen.getmaxyx() chdir(new_dir)
<span class="hljs-keyword">return</span> P(width<span class="hljs-number">-1</span>, height<span class="hljs-number">-1</span>) first, selected, paths = <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, listdir()
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>: <span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
main() wrapper(main)
</code></pre></div></div> </code></pre></div></div>
@ -2975,7 +2975,7 @@ $ pyinstaller script.py --add-data '&lt;path&gt;:.' <span class="hljs-comment">
<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> defaultdict, namedtuple <span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> defaultdict, namedtuple
<span class="hljs-keyword">from</span> dataclasses <span class="hljs-keyword">import</span> make_dataclass <span class="hljs-keyword">from</span> dataclasses <span class="hljs-keyword">import</span> make_dataclass
<span class="hljs-keyword">from</span> enum <span class="hljs-keyword">import</span> Enum <span class="hljs-keyword">from</span> enum <span class="hljs-keyword">import</span> Enum
<span class="hljs-keyword">import</span> re, operator <span class="hljs-keyword">as</span> op, itertools <span class="hljs-keyword">as</span> it, functools <span class="hljs-keyword">as</span> ft <span class="hljs-keyword">import</span> functools <span class="hljs-keyword">as</span> ft, itertools <span class="hljs-keyword">as</span> it, operator <span class="hljs-keyword">as</span> op, re
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span>

|||||||
100:0
Loading…
Cancel
Save