16 Commits

Author SHA1 Message Date
Anthony Sottile
bd8dc3beb0 v0.0.20 2021-01-18 15:08:22 -08:00
Anthony Sottile
324513c36a Merge pull request #122 from asottile/backspace_blank_line_at_eof
fix backspacing an extra blank line at end of file
2021-01-18 15:07:48 -08:00
Anthony Sottile
09643b0f80 fix backspacing an extra blank line at end of file 2021-01-18 14:57:34 -08:00
Anthony Sottile
8245ee56a5 Merge pull request #119 from asottile/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-01-04 09:18:29 -08:00
pre-commit-ci[bot]
8aaee402e7 [pre-commit.ci] pre-commit autoupdate 2021-01-04 16:53:18 +00:00
Anthony Sottile
641eed65d5 Merge pull request #118 from asottile/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2020-12-21 09:32:09 -08:00
pre-commit-ci[bot]
694853e341 [pre-commit.ci] pre-commit autoupdate 2020-12-21 16:51:45 +00:00
Anthony Sottile
1a4d15206c Merge pull request #113 from asottile/case_insensitive_short_answers
ignore case for quick prompt answers
2020-11-20 12:34:40 -08:00
Anthony Sottile
4ca3b0d1e5 ignore case for quick prompt answers 2020-11-20 12:22:55 -08:00
Anthony Sottile
47868e77a2 Merge pull request #112 from asottile/all-repos_autofix_gh-sponsors
Add link to GitHub Sponsors
2020-11-19 17:12:44 -08:00
Anthony Sottile
9906e223bd Add link to GitHub Sponsors
at the time of writing I am currently unemployed.  I'd love to make open
source a full time career.  if you or your company is deriving value from
this free software, please consider [sponsoring].

[sponsoring]: https://github.com/sponsors/asottile

Committed via https://github.com/asottile/all-repos
2020-11-19 16:58:49 -08:00
Anthony Sottile
a5101007cd Merge pull request #111 from rmorshea/patch-1
Add video explaining babi vs nano
2020-11-18 12:08:01 -08:00
Ryan Morshead
572151197d Add video explaining babi vs nano
closes: #110
2020-11-18 11:52:50 -08:00
Anthony Sottile
a8a5afc6ed Merge pull request #108 from asottile/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2020-11-16 09:46:42 -08:00
pre-commit-ci[bot]
e523a694b6 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2020-11-16 17:12:39 +00:00
pre-commit-ci[bot]
8161c9e34f [pre-commit.ci] pre-commit autoupdate 2020-11-16 17:11:07 +00:00
8 changed files with 41 additions and 15 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
github: asottile

View File

@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.5.0
rev: v3.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
@@ -11,34 +11,34 @@ repos:
- id: name-tests-test
- id: requirements-txt-fixer
- repo: https://gitlab.com/pycqa/flake8
rev: 3.8.0
rev: 3.8.4
hooks:
- id: flake8
additional_dependencies: [flake8-typing-imports==1.7.0]
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: v1.5.2
rev: v1.5.4
hooks:
- id: autopep8
- repo: https://github.com/asottile/reorder_python_imports
rev: v2.3.0
rev: v2.3.6
hooks:
- id: reorder-python-imports
args: [--py3-plus]
- repo: https://github.com/asottile/add-trailing-comma
rev: v2.0.1
rev: v2.0.2
hooks:
- id: add-trailing-comma
args: [--py36-plus]
- repo: https://github.com/asottile/pyupgrade
rev: v2.4.1
rev: v2.7.4
hooks:
- id: pyupgrade
args: [--py36-plus]
- repo: https://github.com/asottile/setup-cfg-fmt
rev: v1.9.0
rev: v1.16.0
hooks:
- id: setup-cfg-fmt
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.770
rev: v0.790
hooks:
- id: mypy

View File

@@ -18,6 +18,13 @@ a text editor, eventually...
I used to use the text editor `nano`, frequently I typo this. on a qwerty
keyboard, when the right hand is shifted left by one, `nano` becomes `babi`.
### babi vs. nano
here is a youtube video where I discuss the motivation for creating and using
`babi` instead of `nano`:
[![youtube video about babi](https://img.youtube.com/vi/WyR1hAGmR3g/mqdefault.jpg)](https://youtu.be/WyR1hAGmR3g)
### quitting babi
currently you can quit `babi` by using <kbd>^X</kbd> (or via <kbd>esc</kbd> +

View File

@@ -476,7 +476,11 @@ class File:
if self.buf.y == 0 and self.buf.x == 0:
pass
# backspace at the end of the file does not change the contents
elif self.buf.y == len(self.buf) - 1:
elif (
self.buf.y == len(self.buf) - 1 and
# still allow backspace if there are 2+ blank lines
self.buf[self.buf.y - 1] != ''
):
self.buf.left(margin)
# at the beginning of the line, we join the current line and
# the previous line

View File

@@ -273,7 +273,7 @@ class Screen:
prompt: str,
opt_strs: Tuple[str, ...],
) -> Union[str, PromptResult]:
opts = [opt[0] for opt in opt_strs]
opts = {opt[0] for opt in opt_strs}
while True:
x = 0
prompt_line = self.margin.lines - 1
@@ -310,8 +310,8 @@ class Screen:
self.resize()
elif key.keyname == b'^C':
return self.status.cancelled()
elif isinstance(key.wch, str) and key.wch in opts:
return key.wch
elif isinstance(key.wch, str) and key.wch.lower() in opts:
return key.wch.lower()
def prompt(
self,

View File

@@ -1,6 +1,6 @@
[metadata]
name = babi
version = 0.0.19
version = 0.0.20
description = a text editor
long_description = file: README.md
long_description_content_type = text/markdown
@@ -16,6 +16,7 @@ classifiers =
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: Implementation :: CPython
Programming Language :: Python :: Implementation :: PyPy

View File

@@ -30,7 +30,8 @@ def test_replace_cancel_at_replace_string(run):
h.await_text('cancelled')
def test_replace_actual_contents(run, ten_lines):
@pytest.mark.parametrize('key', ('y', 'Y'))
def test_replace_actual_contents(run, ten_lines, key):
with run(str(ten_lines)) as h, and_exit(h):
h.press('^\\')
h.await_text('search (to replace):')
@@ -38,7 +39,7 @@ def test_replace_actual_contents(run, ten_lines):
h.await_text('replace with:')
h.press_and_enter('ohai')
h.await_text('replace [yes, no, all]?')
h.press('y')
h.press(key)
h.await_text_missing('line_0')
h.await_text('ohai')
h.await_text(' *')

View File

@@ -50,6 +50,18 @@ def test_backspace_at_end_of_file_still_allows_scrolling_down(run, tmpdir):
h.await_text_missing('*')
def test_backspace_deletes_newline_at_end_of_file(run, tmpdir):
f = tmpdir.join('f')
f.write('foo\n\n')
with run(str(f)) as h, and_exit(h):
h.press('^End')
h.press('BSpace')
h.press('^S')
assert f.read() == 'foo\n'
@pytest.mark.parametrize('key', ('BSpace', '^H'))
def test_backspace_deletes_text(run, tmpdir, key):
f = tmpdir.join('f')