Crates.io | lsk |
lib.rs | lsk |
version | 0.2.0 |
source | src |
created_at | 2020-07-08 18:08:38.779892 |
updated_at | 2020-07-09 21:41:27.071023 |
description | Imagine ls, but you can 'key' into the file or dir instead of just starring at it. |
homepage | https://github.com/7db9a/lsk |
repository | https://github.com/7db9a/lsk |
max_upload_size | |
id | 262603 |
size | 145,334 |
Imagine ls, but you can 'key' into the file or dir instead of just starring at it.
It's experimental. At the momement, only files and dirs are differentiated by hard-coded colors, so you can't see if a file is executable or something.
You'll need rust installed.
cargo install lsk
lsk works out-of-the-box, but you may consider the following.
You'll need xdotool installed to use w
and r
commands. Find it on your favorite package manager for your system.
To open files with your prefered editor using $EDITOR env var, do something like
export EDITOR="vim"
otherwise it will default to nano editor when opening up files.
To open any file using $LSK_FILE_OPENER
export LSK_FILE_OPENER="<favorite-file-opener>"
If unset, it uses xdg-open to open random files, such as pics or music files.
For the equivalent of ls -a
, do lsk -a
. Other useful options like ls has aren't yet supported, but it's a goal.
The rationale is you can just punch in the key number + Enter. That 90% of it. To go back a dir, punch 0
.
Here's all the important ones. Note some of the commands below require a space.
open file with editor: <key>
open dir: <key>
open any file: o <key>
(default is xdg-open)
search/fuzzy-widdle the list: s
(remember the space and then type)
Go back a dir: 0
Quite: q
Work in viewed dir: w
(sort-a-like cd
)
Select range of files: <key_start>-<key_end>
(e.g. 7-5
)
Return file/dir paths: r <key1> <key2> [...]
(e.g. r 1 2 3
)
Next-page: <key>-
(e.g. For example 49-
if there are more than 48 results on current page page.)
Original-page 0-
(Don't confuse with 0
, which is goes back a directory level)
Publish to crates.io.
Interactive help.
If xdotool isn't found, print returned files or directory paths.
Docker and nix installation for non-rust users.
Test on MacOS and maybe see about Windows compatibility.
Add more file colors (only file and dir differentiated right now).
LS_COLOR support and don't rely on hard-coding color scheme.
Add async and do more pass-by-reference: it's slow if there are a ton of files in the top of directory.
Edit a command without having to rely solely on backspace.
Cursor (blinky thing that moves when you type) should be visible.
Escape a file view from widdling-down or selecting a range.
Maybe figure out an alternative to xdo-tool (using env var to return file names is sorta hacky).
Use more screen real-estate and handle file name wraps.
If you like tools like fzf
, you may like this. You can run lsk with scripts you make (bash, python, etc) for fuzzy directory jumping, fuzzy file opening, and fuzzy commands (very experimental).
c
is for command.
lsk --fuzzy-dir /path/to/fuzzy/dir/script
Here's my script I use personally.
#!/bin/bash
find -type d | cut -c 3- | fzf
lsk --fuzzy-find /path/to/fuzzy/file/open/script
The script I use.
#!/bin/bash
fzf
You can pass all these args together and alias it to lsk
for your convenience.
lsk --fuzzy-dir /path/to/fuzzy/dir/script --fuzzy-find /path/to/fuzzy/file/open/script
At the moment, some tests must be ran on host while others in docker. lsk's tests simulates keyboard input and I can't figure out how to do that in docker.
Run tests for host or docker
Stage code changes, if any. It's very important that you do this.
git add -u
Run the following scripts, which uncomment #[ignore] for either host or docker tests.
./unignore_host_tests
or ./unignore_host_tests
Run tests on host.
cargo test -- --test-threads=1 --nocapture
Run tests on docker, using dev script.
./dev.sh test rust-lib
Undo any unstaged changes (those are the 'unignore' script)
git restore .
For an unknown reason, these test only run if 'asked' to explicitly.
./dev.sh test rust-lib list
One or more tests rely on exact terminal size.
./unignore_host_term_size_dependent