Compare commits

..

8 commits
v1.1.0 ... main

Author SHA1 Message Date
aa00038f28 (chore): better repaint handling 2025-08-28 16:27:22 -05:00
62cd9b2f17 (chore): update documentation fdor new implemented features 2025-07-26 22:25:40 -05:00
768bce39ec (feat): add based maintenance to perform analyze + vacuum
It will help if your database has been runing for a very long time
2025-07-26 22:25:27 -05:00
88cbb3cc9b (chore): add more database improvements 2025-07-26 22:24:16 -05:00
2afe4b3aba (feat): add BASED_EXCLUDED_PATHS to exclude directories from history
There are cases where you want to exclude some paths from being indexed. E.g: `..`, `/tmp/*`, and others.
2025-07-26 22:23:57 -05:00
0206728145 Revert "(chore): change function name"
This reverts commit b85004121f.
2025-06-19 17:23:35 -05:00
b85004121f (chore): change function name 2025-06-19 14:30:12 -05:00
Daniel Bretoi
97525dd0e2
use relative source path (#1)
$__fish_config_dir    could be set to something completely different. but using a relative path here is safe either way. This way it can be sourced anywhere, even if the repo is just cloned in some random place.
2025-06-18 20:00:46 -05:00
9 changed files with 75 additions and 10 deletions

View file

@ -68,12 +68,20 @@ $ based stats
```
This will display statistics about your command usage, such as the most frequently used commands, options, and arguments.
For database maintenance (recommended to run if you notice performance issues):
```fish
$ based maintenance
```
This will optimize the database by running VACUUM and ANALYZE operations to keep it performing well.
## Configuration
You can customize the behavior of based.fish by setting environment variables in your Fish shell:
- `BASED_NO_CONFIRMATION`: If set to `1`, automatically executes the selected suggestion without confirmation, otherwise, it requires another Enter key press to execute the suggestion.
- `BASED_NO_FUZZY`: If set to `1`, disables fuzzy matching for completions and only commands that start with the typed prefix will be suggested.
- `BASED_EXCLUDED_PATHS`: A list of path patterns to exclude from history logging. Supports glob patterns like `*` and `?`. Useful for excluding temporary directories, sensitive locations, or paths where you don't want command history tracked.
E.g. to disable fuzzy behavior when searching for completions
@ -81,6 +89,12 @@ E.g. to disable fuzzy behavior when searching for completions
$ set -Ux BASED_NO_FUZZY 1
```
E.g. to exclude specific paths from history tracking
```fish
$ set -Ux BASED_EXCLUDED_PATHS "/tmp/*" "/var/tmp/*" "$HOME/Downloads"
```
The keybindings for the completions are as follows:
- `Arrow Up` and `Arrow Down`: Navigate through the suggestions of the smart history.

View file

@ -3,4 +3,5 @@ complete -c based -n __fish_use_subcommand -f -a init -d "Initialize the Based d
complete -c based -n __fish_use_subcommand -f -a import -d "Import Fish history into Based"
complete -c based -n __fish_use_subcommand -f -a stats -d "Show Based statistics"
complete -c based -n __fish_use_subcommand -f -a reset -d "Reset Based state"
complete -c based -n __fish_use_subcommand -f -a maintenance -d "Perform database maintenance"
complete -c based -n __fish_use_subcommand -f -a help -d "Show help message"

View file

@ -1,4 +1,4 @@
# Load the based logger (for fish_postexec event)
source ~/.config/fish/functions/__based_log.fish
source (status dirname)/../functions/__based_log.fish
# Load keybindings (↑ for smart history, Ctrl+g for fzf popup)
source ~/.config/fish/functions/based_user_key_bindings.fish
source (status dirname)/../functions/based_user_key_bindings.fish

View file

@ -12,13 +12,18 @@ function __based_fzf_popup
if test -n "$chosen"
commandline -r -- "$chosen"
# Prevent autocomplete samples from remaining before the selected command.
# i.e: if you run `cd`, then arrow up, and select a command, the initial `cd` will be
# visible before the selected command, like: `cd cd <path>`. It doesn't affect functionality,
# but it can be visually confusing.
commandline -f repaint
# Only execute if the user pressed ENTER and confirmation is set
if test "$key" = enter; and set -q BASED_NO_CONFIRMATION; and test "$BASED_NO_CONFIRMATION" != 0
commandline -f execute
end
else
end
# Update the display for commands like directory changes
commandline -f repaint
end
end

View file

@ -18,6 +18,8 @@ function __based_init_db
CREATE INDEX IF NOT EXISTS idx_log_cmd ON log(cmd);
CREATE INDEX IF NOT EXISTS idx_log_path_ts ON log(path, ts);
CREATE INDEX IF NOT EXISTS idx_log_path_cmd ON log(path, cmd);
CREATE INDEX IF NOT EXISTS idx_log_counter_ts ON log(counter DESC, ts DESC);
CREATE INDEX IF NOT EXISTS idx_log_cmd_like ON log(cmd COLLATE NOCASE);
"
echo "Based initialized. You can also import your fish history with 'based import'."

View file

@ -13,6 +13,15 @@ function __based_log --on-event fish_preexec
return
end
# Check if path should be excluded
if set -q BASED_EXCLUDED_PATHS
for excluded_pattern in $BASED_EXCLUDED_PATHS
if string match -q $excluded_pattern $path
return
end
end
end
set cmd (string replace -a "'" "''" -- $cmd)
set path (string replace -a "'" "''" -- $path)

View file

@ -0,0 +1,25 @@
function __based_maintenance
set -l db ~/.local/share/fish/based/based.db
if not test -f $db
echo "Database not found. Run 'based init' first."
return 1
end
echo "Performing database maintenance..."
# Get database size before
set -l size_before (du -h $db | cut -f1)
# Vacuum the database
sqlite3 $db "VACUUM;"
# Update statistics
sqlite3 $db "ANALYZE;"
# Get database size after
set -l size_after (du -h $db | cut -f1)
echo "Database maintenance completed."
echo "Size before: $size_before"
echo "Size after: $size_after"
end

View file

@ -3,5 +3,6 @@ function __based_reset_state
# Unset all variables related to Based state
set -e BASED_NO_CONFIRMATION
set -e BASED_NO_FUZZY
set -e BASED_EXCLUDED_PATHS
echo "Based state has been reset."
end

View file

@ -8,14 +8,22 @@ function based
__based_stats
case reset
__based_reset_state
case maintenance vacuum
__based_maintenance
case help '*'
echo "Usage: based init|import|stats|reset|help"
echo "Usage: based init|import|stats|reset|maintenance|help"
echo "Commands:"
echo " init - Initialize the Based database"
echo " import - Import fish history into Based"
echo " stats - Show Based statistics"
echo " reset - Reset Based state (clears variables)"
echo " maintenance - Perform database maintenance (vacuum & analyze)"
echo " help - Show this help message"
echo ""
echo "Configuration variables:"
echo " BASED_NO_CONFIRMATION - Skip confirmation prompts"
echo " BASED_NO_FUZZY - Disable fuzzy matching"
echo " BASED_EXCLUDED_PATHS - Paths to exclude from history (glob patterns)"
case '*'
echo "Unknown command: $argv[1]"
echo "Use 'based help' for usage information."