b62c2476da
- Add _smart_execute: context-aware Ctrl+Enter that routes to qalc when the buffer ends with '=', or falls through to standard execute otherwise - Refactor qalc_eval → _qalc_eval (private helper, same behavior) - Bind Ctrl+Enter to _smart_execute in all vi modes - Add fast-cli wrapper (fast.com speed test) and fast placeholder with a friendly ANSI redirect message - Add speedtest-fast abbreviation expanding to fast-cli - Enhance _replace_command_token to handle sudo-prefixed commands: places cursor at index 5 (between sudo and the replacement slot) - Improve rm error reporting: colored output, culprit-path listing, and cleaned technical detail for non-missing-file errors - Add SPDX copyright headers to cat, ld, claude-docs, claude-pr functions - Update README: Ctrl+Enter binding, fast-cli/fast functions, speedtest-fast abbr
123 lines
4.3 KiB
Fish
123 lines
4.3 KiB
Fish
# Copyright (C) 2026 Rootiest
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
# Ultimate rm: trash, list, empty, and secure-erase
|
|
function rm --description 'Ultimate rm: trash, list, empty, and secure-erase'
|
|
# 1. No arguments: Show the Trash contents (Quick view)
|
|
if not set -q argv[1]
|
|
if type -q trash
|
|
echo "🗑️ Current Trash Contents:"
|
|
trash list
|
|
else
|
|
command rm
|
|
end
|
|
return
|
|
end
|
|
|
|
# 2. Flag: Empty the Trash (-e / --empty)
|
|
# We check if the FIRST argument is -e or --empty
|
|
if string match -rq -- '^-e$|^--empty$' -- $argv[1]
|
|
if type -q trash
|
|
# Check if there are arguments after -e (like --within 2weeks)
|
|
if set -q argv[2]
|
|
# Pass everything after the first argument to trash empty
|
|
trash empty $argv[2..-1]
|
|
else
|
|
# Default behavior if no extra args provided
|
|
echo "🧹 Emptying all trash..."
|
|
trash empty --all
|
|
end
|
|
else
|
|
echo "Error: 'trash' command not found."
|
|
end
|
|
return
|
|
end
|
|
|
|
# 3. Flag: Secure Delete (-S / --secure)
|
|
if contains -- -S $argv; or contains -- --secure $argv
|
|
set -l clean_args
|
|
for arg in $argv
|
|
if not string match -rq -- '^-S$|^--secure$|^-r$|^-R$|^--recursive$' -- "$arg"
|
|
set -a clean_args $arg
|
|
end
|
|
end
|
|
echo "🛡️ Permanent delete + SSD Zeroing..."
|
|
command rm -rf $clean_args
|
|
fstrim --all 2>/dev/null &
|
|
return
|
|
end
|
|
|
|
# 4. Logic: Use 'trash' for simple paths OR recursive flags (-r, -R)
|
|
# Bail to real rm if ANY other flags (like -f) are detected
|
|
set -l is_safe_for_trash true
|
|
for arg in $argv
|
|
if string match -q -- "-*" $arg
|
|
if not string match -rq -- '^-r$|^-R$|^--recursive$' -- "$arg"
|
|
set is_safe_for_trash false
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
if test "$is_safe_for_trash" = true
|
|
set -l trash_paths
|
|
for arg in $argv
|
|
if not string match -rq -- '^-r$|^-R$|^--recursive$' -- "$arg"
|
|
set -a trash_paths $arg
|
|
end
|
|
end
|
|
if type -q trash; and set -q trash_paths[1]
|
|
set -l trash_output (trash put $trash_paths 2>&1)
|
|
set -l exit_status $status
|
|
|
|
if test $exit_status -ne 0
|
|
# 1. Extract the core message (e.g., "No such file or directory")
|
|
set -l raw_msg (string replace -r '.*Message: (.+?) \(os error.*' '$1' -- "$trash_output")
|
|
|
|
# 2. Find which paths are actually missing
|
|
set -l culprits
|
|
for p in $trash_paths
|
|
if not test -e "$p"
|
|
set -a culprits "$p"
|
|
end
|
|
end
|
|
|
|
# 3. Display Logic
|
|
set_color red --bold
|
|
echo -n "error: "
|
|
set_color normal
|
|
echo $raw_msg
|
|
|
|
if set -q culprits[1]
|
|
# If we found missing files, show the user's source paths
|
|
for c in $culprits
|
|
set_color blue
|
|
echo -n " ↳ Source: "
|
|
set_color normal
|
|
echo $c
|
|
end
|
|
else
|
|
# 1. Strip ANSI escape codes (color) so regex works correctly
|
|
# 2. Remove the 'error: ' prefix
|
|
# 3. Unescape quotes and trim whitespace
|
|
set -l clean_detail (string replace -ra '\e\[[^m]*m' '' -- "$trash_output" \
|
|
| string replace -r '^error: ' '' \
|
|
| string unescape \
|
|
| string trim)
|
|
|
|
set_color yellow
|
|
echo -n " ↳ Technical detail: "
|
|
set_color normal
|
|
echo $clean_detail
|
|
end
|
|
end
|
|
|
|
dbus-send --type=signal /OrgKdeKDirNotify org.kde.KDirNotify.FilesChanged stringArray:"trash:/" >/dev/null 2>&1 &
|
|
return $exit_status
|
|
end
|
|
end
|
|
|
|
# 5. Fallback: Standard rm for everything else (including -rf)
|
|
command rm $argv
|
|
end
|