Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switching back and forth between : and !/$/%/& command-line modes #960

Merged
merged 1 commit into from
Oct 15, 2022

Conversation

ilyagr
Copy link
Collaborator

@ilyagr ilyagr commented Oct 9, 2022

What this does

This makes the following changes:

  1. If the we are in any of the shell command-line modes (after pressing one of !/$/%/&) and the cursor is at the first character, pressing backspace switches you to the : mode. Pressing backspace again will take you out of the command-line mode as before (this commit extends the recent escape on backspace functionality).
  1. Conversely, if we are in the : mode and the cursor is at the first character, pressing one of !/$/%/& will take you to the corresponding mode insted of inserting that character. This is a very minor change, since already pressing :!ls<ret> and !ls <ret> in lf has the same effect. After this commit, these will also look the same even before pressing <ret>.

  2. There is a minor bugfix to the escape on backspace commit. In > mode (when a program launched with & waits for input), lf currently switches to normal mode on backspace without terminating the program. After this commit, the "escape on backspace" functionality is disabled in > mode.

This idea is borrowed from the Julia REPL modes.

What problems this solves

The main problem I want to solve is that I often type $ls <many options> and realize I wanted !ls all along. Currently, there is no easy way to switch. With this commit, it becomes trivial.

This problem also occurs when you scroll up to a $ls <many options> command in history.

Finally, since ! and :! have essentially the same effect in lf, I think they should look the same.

# What this does

This makes the following changes:

1. If the we are in any of the shell command-line modes (after pressing one of
`!/$/%/&`) and the cursor is at the first character, pressing `backspace`
switches you to the `:` mode. Pressing `backspace` again will take you out of
the command-line mode as before (this commit extends the recent [escape on
backspace] functionality).

[escape on backspace]: gokcehan@36a7a18

2. Conversely, if we are in the `:` mode and the cursor is at the first
character, pressing one of `!/$/%/&` will take you to the corresponding mode
insted of inserting that character. This is a very minor change, since already
pressing `:!ls<ret>` and `!ls <ret>` in `lf` has the same effect. After this
commit, these will also look the same even before pressing `<ret>`.

3. There is a minor bugfix to the [escape on backspace] commit. In `>` mode
(when a program launched with `&` waits for input), `lf` currently switches to
normal mode on `backspace` without terminating the program. After this commit,
the "escape on backspace" functionality is disabled in `>` mode.

This idea is borrowed from the [Julia REPL modes].

[Julia REPL modes]: https://docs.julialang.org/en/v1/stdlib/REPL/#Help-mode

# What problems this solves

The main problem I want to solve is that I often type `$ls <many options>` and
realize I wanted `!ls` all along. Currently, there is no easy way to switch.
With this commit, it becomes trivial.

This problem also occurs when you scroll up to a `$ls <many options>` command
in history.

Finally, since `!` and `:!` have essentially the same effect in `lf`, I think
they should look the same.
@gokcehan
Copy link
Owner

@ilyagr It looks good. Thanks for the patch.

@gokcehan gokcehan merged commit 8b11ffd into gokcehan:master Oct 15, 2022
ilyagr added a commit to ilyagr/lf that referenced this pull request Oct 16, 2022
gokcehan pushed a commit that referenced this pull request Oct 16, 2022
@ilyagr ilyagr deleted the cmd_bkspace branch October 18, 2022 05:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants