Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ac99928

Browse files
committed
Tuple, Curses, Appendix
1 parent 29e7600 commit ac99928

File tree

2 files changed

+45
-45
lines changed

2 files changed

+45
-45
lines changed

README.md

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ Tuple
144144
**Tuple is an immutable and hashable list.**
145145
```python
146146
<tuple> = ()
147-
<tuple> = (<el>,)
148-
<tuple> = (<el_1>, <el_2> [, ...])
147+
<tuple> = (<el>,) # Or: <el>,
148+
<tuple> = (<el_1>, <el_2> [, ...]) # Or: <el_1>, <el_2> [, ...]
149149
```
150150

151151
### Named Tuple
@@ -2370,30 +2370,30 @@ with open('test.csv', encoding='utf-8', newline='') as file:
23702370

23712371
Curses
23722372
------
2373-
#### Clears the terminal, prints a message and waits for the ESC key press:
2373+
#### Runs a basic file explorer in the terminal:
23742374
```python
2375-
from curses import wrapper, curs_set, ascii
2376-
from curses import KEY_UP, KEY_RIGHT, KEY_DOWN, KEY_LEFT
2375+
from curses import wrapper, ascii, A_REVERSE, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ENTER
2376+
from os import listdir, chdir, path
23772377

2378-
def main():
2379-
wrapper(draw)
2380-
2381-
def draw(screen):
2382-
curs_set(0) # Makes cursor invisible.
2383-
screen.nodelay(True) # Makes getch() non-blocking.
2384-
screen.clear()
2385-
screen.addstr(0, 0, 'Press ESC to quit.') # Coordinates are y, x.
2386-
while screen.getch() != ascii.ESC:
2387-
pass
2388-
2389-
def get_border(screen):
2390-
from collections import namedtuple
2391-
P = namedtuple('P', 'x y')
2392-
height, width = screen.getmaxyx()
2393-
return P(width-1, height-1)
2378+
def main(screen):
2379+
ch, first, selected, paths = 0, 0, 0, listdir()
2380+
while ch != ascii.ESC:
2381+
height, _ = screen.getmaxyx()
2382+
screen.clear()
2383+
for y, path_ in enumerate(paths[first : first+height]):
2384+
screen.addstr(y, 0, path_, A_REVERSE * (selected == first + y))
2385+
ch = screen.getch()
2386+
selected += (ch == KEY_DOWN) - (ch == KEY_UP)
2387+
selected = max(0, min(len(paths)-1, selected))
2388+
first += (first <= selected - height) - (first > selected)
2389+
if ch in [KEY_LEFT, KEY_RIGHT, KEY_ENTER, 10, 13]:
2390+
new_dir = '..' if ch == KEY_LEFT else paths[selected]
2391+
if path.isdir(new_dir):
2392+
chdir(new_dir)
2393+
first, selected, paths = 0, 0, listdir()
23942394

23952395
if __name__ == '__main__':
2396-
main()
2396+
wrapper(main)
23972397
```
23982398

23992399

@@ -3489,7 +3489,7 @@ from sys import argv, exit
34893489
from collections import defaultdict, namedtuple
34903490
from dataclasses import make_dataclass
34913491
from enum import Enum
3492-
import re, operator as op, itertools as it, functools as ft
3492+
import functools as ft, itertools as it, operator as op, re
34933493

34943494

34953495
def main():

index.html

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,8 @@
335335

336336

337337
<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; = ()
338-
&lt;tuple&gt; = (&lt;el&gt;,)
339-
&lt;tuple&gt; = (&lt;el_1&gt;, &lt;el_2&gt; [, ...])
338+
&lt;tuple&gt; = (&lt;el&gt;,) <span class="hljs-comment"># Or: &lt;el&gt;,</span>
339+
&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>
340340
</code></pre></div>
341341

342342

@@ -2078,28 +2078,28 @@
20782078
</code></pre></div></div>
20792079

20802080

2081-
<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
2082-
<span class="hljs-keyword">from</span> curses <span class="hljs-keyword">import</span> KEY_UP, KEY_RIGHT, KEY_DOWN, KEY_LEFT
2081+
<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
2082+
<span class="hljs-keyword">from</span> os <span class="hljs-keyword">import</span> listdir, chdir, path
20832083

2084-
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span>
2085-
wrapper(draw)
2086-
2087-
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">draw</span><span class="hljs-params">(screen)</span>:</span>
2088-
curs_set(<span class="hljs-number">0</span>) <span class="hljs-comment"># Makes cursor invisible.</span>
2089-
screen.nodelay(<span class="hljs-keyword">True</span>) <span class="hljs-comment"># Makes getch() non-blocking.</span>
2090-
screen.clear()
2091-
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>
2092-
<span class="hljs-keyword">while</span> screen.getch() != ascii.ESC:
2093-
<span class="hljs-keyword">pass</span>
2094-
2095-
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_border</span><span class="hljs-params">(screen)</span>:</span>
2096-
<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> namedtuple
2097-
P = namedtuple(<span class="hljs-string">'P'</span>, <span class="hljs-string">'x y'</span>)
2098-
height, width = screen.getmaxyx()
2099-
<span class="hljs-keyword">return</span> P(width<span class="hljs-number">-1</span>, height<span class="hljs-number">-1</span>)
2084+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">(screen)</span>:</span>
2085+
ch, first, selected, paths = <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, listdir()
2086+
<span class="hljs-keyword">while</span> ch != ascii.ESC:
2087+
height, _ = screen.getmaxyx()
2088+
screen.clear()
2089+
<span class="hljs-keyword">for</span> y, path_ <span class="hljs-keyword">in</span> enumerate(paths[first : first+height]):
2090+
screen.addstr(y, <span class="hljs-number">0</span>, path_, A_REVERSE * (selected == first + y))
2091+
ch = screen.getch()
2092+
selected += (ch == KEY_DOWN) - (ch == KEY_UP)
2093+
selected = max(<span class="hljs-number">0</span>, min(len(paths)<span class="hljs-number">-1</span>, selected))
2094+
first += (first &lt;= selected - height) - (first &gt; selected)
2095+
<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>]:
2096+
new_dir = <span class="hljs-string">'..'</span> <span class="hljs-keyword">if</span> ch == KEY_LEFT <span class="hljs-keyword">else</span> paths[selected]
2097+
<span class="hljs-keyword">if</span> path.isdir(new_dir):
2098+
chdir(new_dir)
2099+
first, selected, paths = <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, listdir()
21002100

21012101
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
2102-
main()
2102+
wrapper(main)
21032103
</code></pre></div></div>
21042104

21052105

@@ -2975,7 +2975,7 @@
29752975
<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> defaultdict, namedtuple
29762976
<span class="hljs-keyword">from</span> dataclasses <span class="hljs-keyword">import</span> make_dataclass
29772977
<span class="hljs-keyword">from</span> enum <span class="hljs-keyword">import</span> Enum
2978-
<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
2978+
<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
29792979

29802980

29812981
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span>

0 commit comments

Comments
 (0)