added tips. (#565)

Co-authored-by: Adam Perkowski <adas1per@protonmail.com>
This commit is contained in:
Guru Swarupa 2024-09-20 20:39:08 +05:30 committed by GitHub
parent ad03095f9d
commit 4d6d1b22f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 319 additions and 2 deletions

60
Cargo.lock generated
View File

@ -120,6 +120,12 @@ version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]] [[package]]
name = "cassowary" name = "cassowary"
version = "0.3.0" version = "0.3.0"
@ -306,6 +312,17 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
[[package]]
name = "getrandom"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.14.5" version = "0.14.5"
@ -473,6 +490,7 @@ dependencies = [
"linutil_core", "linutil_core",
"oneshot", "oneshot",
"portable-pty", "portable-pty",
"rand 0.8.5",
"ratatui", "ratatui",
"tui-term", "tui-term",
"unicode-width", "unicode-width",
@ -628,6 +646,15 @@ dependencies = [
"winreg", "winreg",
] ]
[[package]]
name = "ppv-lite86"
version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
dependencies = [
"zerocopy",
]
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.86" version = "1.0.86"
@ -659,6 +686,27 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core 0.6.4",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core 0.6.4",
]
[[package]] [[package]]
name = "rand_core" name = "rand_core"
version = "0.3.1" version = "0.3.1"
@ -674,6 +722,15 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom",
]
[[package]] [[package]]
name = "ratatui" name = "ratatui"
version = "0.28.1" version = "0.28.1"
@ -933,7 +990,7 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
dependencies = [ dependencies = [
"rand", "rand 0.4.6",
"remove_dir_all", "remove_dir_all",
] ]
@ -1291,6 +1348,7 @@ version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [ dependencies = [
"byteorder",
"zerocopy-derive", "zerocopy-derive",
] ]

View File

@ -11,6 +11,7 @@ include = [
"src/*.rs", "src/*.rs",
"Cargo.toml", "Cargo.toml",
"build.rs", "build.rs",
"cool_tips.txt",
] ]
build = "build.rs" build = "build.rs"
@ -23,6 +24,7 @@ portable-pty = "0.8.1"
ratatui = "0.28.1" ratatui = "0.28.1"
tui-term = "0.1.12" tui-term = "0.1.12"
unicode-width = "0.1.13" unicode-width = "0.1.13"
rand = "0.8.5"
linutil_core = { path = "../core", version = "24.9.19" } linutil_core = { path = "../core", version = "24.9.19" }
[build-dependencies] [build-dependencies]

239
tui/cool_tips.txt Normal file
View File

@ -0,0 +1,239 @@
ls: Lists files and directories in the current directory.
cd: Changes the current directory.
pwd: Prints the current working directory.
mkdir: Creates a new directory.  
rmdir: Removes an empty directory.
cp: Copies files or directories.  
mv: Moves or renames files or directories.
rm: Removes files or directories.
touch: Creates an empty file or updates the timestamp of an existing file.
cat: Displays the content of a file.
less: Views the content of a file, one page at a time.
head: Displays the first few lines of a file.
tail: Displays the last few lines of a file.
find: Searches for files in a directory hierarchy.
grep: Searches for a specific pattern in files.
chmod: Changes file or directory permissions.
chown: Changes file or directory ownership.
ln: Creates hard or symbolic links to files.
df: Displays disk space usage.
du: Shows disk usage of files and directories.
top: Displays real-time system processes.
ps: Shows running processes.
kill: Terminates a process by PID.
man: Displays the manual page for a command.
history: Shows the history of commands you've run.
sudo: Executes a command with superuser privileges.
apt-get: Installs, updates, or removes packages on Debian-based systems.
yum: Installs, updates, or removes packages on Red Hat-based systems.
wget: Downloads files from the web.
curl: Transfers data from or to a server using various protocols.
ssh: Connects to a remote machine securely via SSH.
ping: Tests connectivity to a network host.
ifconfig: Displays or configures network interfaces.
ip: Displays and manages network interfaces, routing, and more.
netstat: Displays network connections, routing tables, and interface statistics.
echo: Prints text to the terminal or writes text to files.
date: Displays or sets the system date and time.
shutdown: Shuts down or reboots the system.
reboot: Reboots the system.
alias: Creates a shortcut for a command.
diff: Compares the contents of two files line by line.
cmp: Compares two files byte by byte.
sort: Sorts the lines of a file alphabetically or numerically.
uniq: Removes duplicate lines from a sorted file.
wc: Counts words, lines, and characters in a file.
cut: Cuts sections from each line of a file or output.
tr: Translates or deletes characters from input.
xargs: Builds and executes command lines from standard input.
tee: Reads from standard input and writes to both standard output and files.
basename: Strips directory and suffix from filenames.
dirname: Extracts the directory path from a file path.
read: Reads input from the user or file.
tar: Archives and extracts files using tar format.
zip: Compresses files into a zip archive.
unzip: Extracts files from a zip archive.
gzip: Compresses files using the gzip format.
gunzip: Decompresses gzip-compressed files.
rsync: Synchronizes files and directories between two locations.
iptables: Configures the IP packet filter rules of the Linux kernel.
ufw: Simplified firewall management tool (Uncomplicated Firewall).
systemctl: Controls the systemd system and service manager.
journalctl: Views systemd logs.
dmesg: Displays kernel ring buffer messages.
who: Shows who is logged into the system.
last: Displays a list of last logged-in users.
at: Schedules a one-time task to run at a specific time.
awk: Pattern scanning and processing language used for text processing.
sed: Stream editor for filtering and transforming text.
chroot: Changes the root directory for a command or shell.
lsof: Lists open files and the processes that opened them.
nc: A versatile networking tool often used for testing and debugging.
sftp: A secure file transfer program over SSH.
ncdu: Disk usage analyzer with a user-friendly interface.
dig: Performs DNS lookups.
nslookup: Queries DNS information.
hostname: Displays or sets the systems hostname.
curl ifconfig.me: Gets your public IP address.
adduser: Adds a new user to the system.
deluser: Removes a user from the system.
groupadd: Adds a new group to the system.
usermod: Modifies user account details.
groups: Displays the groups the current user belongs to.
sudo su: Switches to the root user.
nohup: Runs a command that will continue running after logging out.
jobs: Lists all active jobs in the current session.
fg: Brings a background job to the foreground.
bg: Resumes a stopped job in the background.
ctrl + z: Pauses a foreground job, allowing it to run in the background.
locate: Quickly finds files by name.
updatedb: Updates the database used by the locate command.
alias ll='ls -la': Creates an alias ll for a long-format list of files.
unalias: Removes an alias for a command.
export: Sets or exports environment variables.
env: Displays the current environment variables.
crontab: Manages cron jobs for automating tasks.
watch: Repeatedly runs a command at regular intervals.
vmstat: Reports virtual memory statistics.
mpstat: Displays CPU usage statistics.
htop: An interactive process viewer (more user-friendly than top).
uptime: Displays the system uptime and load average.
ulimit: Displays or sets resource limits for user processes.
ip link: Manages network interfaces.
ss: A faster alternative to netstat for displaying network connections.
traceroute: Traces the route packets take to a network host.
ping6: Tests connectivity to a network host using IPv6.
scp: Securely copies files between hosts over SSH.
bc: A command-line calculator.
dd: Converts and copies files, useful for creating disk images.
arp: Displays or modifies the system's ARP table.
md5sum: Computes and verifies MD5 hashes.
sha256sum: Computes and verifies SHA-256 hashes.
hostnamectl: Controls the system's hostname.
ip a: Displays IP addresses of the system's network interfaces.
ip r: Displays the routing table.
journalctl -f: Follows the system logs in real time.
tshark: A command-line network packet analyzer.
lspci: Lists PCI devices connected to the system.
lsusb: Lists USB devices connected to the system.
modprobe: Adds or removes modules from the Linux kernel.
parted: A disk partitioning tool.
mkfs: Creates a file system on a partition or device.
fsck: Checks and repairs a file system.
tune2fs: Adjusts tunable file system parameters on ext filesystems.
swapoff: Disables swap space on a device.
swapon: Enables swap space on a device.
fuser: Identifies processes using files or sockets.
nmcli: Command-line tool for managing NetworkManager.
w: Displays logged-in users and their active processes.
wall: Sends a message to all logged-in users.
passwd: Changes user passwords.
stat: Displays detailed information about a file or file system.
chage: Changes user password expiration information.
pmap: Reports memory map of a process.
ionice: Sets or gets I/O scheduling class and priority.
nc (netcat): Reads and writes data across network connections.
dstat: Combines and displays system resource statistics, such as CPU, disk, and network usage.
sar: Collects, reports, or saves system activity information.
iostat: Reports CPU and I/O statistics for devices and partitions.
iotop: Displays real-time disk I/O usage by processes.
inotifywait: Waits for changes to files or directories using inotify.
inotifywatch: Watches for changes in a file or directory using inotify.
nice: Runs a command with a modified scheduling priority.
renice: Alters the priority of running processes.
lsblk: Lists information about block devices.
hdparm: Configures and displays information about SATA/IDE devices.
smartctl: Monitors the health of hard drives using SMART.
fallocate: Preallocates space to a file.
wipe: Securely erases files or partitions.
file: Determines file type based on content.
shred: Securely deletes a file by overwriting it.
ncftpput: Uploads files to an FTP server.
ncftpget: Downloads files from an FTP server.
ufw: Simplified firewall utility for managing iptables rules.
ethtool: Configures and displays Ethernet device settings.
brctl: Manages Ethernet bridges.
xkill: Terminates a window by clicking on it.
xrandr: Configures display screen resolution, rotation, and reflection.
xset: Manages X display settings.
xdg-open: Opens a file or URL in the user's preferred application.
apropos: Searches the manual page names and descriptions for keywords.
systemd-analyze: Displays system boot performance statistics.
timedatectl: Manages system time and date settings.
fwupdmgr: Firmware update manager for updating hardware firmware.
lscpu: Displays information about the CPU architecture.
getfacl: Displays file access control lists (ACLs).
setfacl: Sets file access control lists (ACLs).
pv: Monitors the progress of data through a pipeline.
logrotate: Manages the automatic rotation and compression of log files.
xclip: Interfaces with the X clipboard from the command line.
cups: Manages printers (Common Unix Printing System).
lp: Sends a file to the printer.
lprm: Removes print jobs from the queue.
lpstat: Displays the status of the print system.
strace: Traces system calls and signals.
tcpdump: Captures network traffic for analysis.
envsubst: Substitutes environment variables in shell commands.
tput: Initializes terminal capabilities, such as clearing the screen.
xargs: Builds and executes command lines from standard input.
dmesg | tail: Displays recent kernel messages (useful for hardware or system errors).
lsns: Lists all active Linux namespaces.
ss -tuln: Lists open network ports (TCP and UDP).
iptables-save: Outputs current iptables rules to a file.
iptables-restore: Restores iptables rules from a file.
tac: Displays a file in reverse line order (opposite of cat).
nl: Numbers the lines of a file.
yes: Repeatedly outputs a string until stopped (e.g., yes y).
split: Splits a file into pieces.
csplit: Splits a file into pieces based on context.
paste: Merges lines of files side by side.
comm: Compares two sorted files line by line.
shuf: Shuffles lines of text in random order.
factor: Prints the prime factors of a given number.
seq: Prints numbers in a sequence.
pr: Converts text files for printing, adding headers and footers.
column: Formats output into columns.
od: Displays files in octal, decimal, hexadecimal, or ASCII.
hexdump: Displays files in hexadecimal format.
xxd: Creates a hex dump of a file or converts a hex dump back to binary.
watch: Runs a command repeatedly, displaying the output and updates.
timeout: Runs a command with a time limit.
stdbuf: Alters the buffering of input/output for a command.
rename: Renames files using a regular expression.
prlimit: Displays or modifies resource limits of running processes.
uuidgen: Generates a new universally unique identifier (UUID).
vipw: Safely edits the /etc/passwd file.
vigr: Safely edits the /etc/group file.
getent: Retrieves entries from databases like passwd, group, or hosts.
addgroup: Creates a new user group.
pwgen: Generates random passwords.
expire: Forces a password change after a specific period.
showmount: Displays information about an NFS server.
exportfs: Maintains the NFS server's exported file systems.
rpcinfo: Displays information about RPC services on a networked system.
lsmod: Lists currently loaded kernel modules.
insmod: Inserts a module into the Linux kernel.
rmmod: Removes a module from the Linux kernel.
depmod: Generates modules dependency and map files.
kmod: Interfaces with kernel modules from the command line.
e2fsck: Checks the integrity of an ext2/ext3/ext4 file system.
blkid: Displays block device attributes, including UUID.
mount: Mounts a file system.
umount: Unmounts a file system.
parted: A command-line partition editor.
gparted: A graphical partition editor (based on parted).
cryptsetup: Manages encrypted devices.
losetup: Configures loopback devices.
mkswap: Sets up a swap area on a device or file.
tmux: Terminal multiplexer for managing multiple terminal sessions.
finger: Displays user information (if installed).
lastb: Shows failed login attempts.
pidof: Finds the process ID (PID) of a running program.
pgrep: Searches for processes by name.
curl -I: Fetches the HTTP headers from a URL.
chattr: Changes file attributes on a Linux file system.
lsattr: Lists file attributes on a Linux file system.
join: Joins lines of two files based on a common field.
tree: Displays a directory structure in a tree-like format.
col: Filters reverse line feeds from input.
free: Displays memory usage.

View File

@ -9,6 +9,7 @@ use crate::{
use crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers}; use crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers};
use ego_tree::NodeId; use ego_tree::NodeId;
use linutil_core::{Command, ListNode, Tab}; use linutil_core::{Command, ListNode, Tab};
use rand::Rng;
use ratatui::{ use ratatui::{
layout::{Alignment, Constraint, Direction, Layout}, layout::{Alignment, Constraint, Direction, Layout},
style::{Style, Stylize}, style::{Style, Stylize},
@ -39,6 +40,7 @@ pub struct AppState {
multi_select: bool, multi_select: bool,
selected_commands: Vec<Command>, selected_commands: Vec<Command>,
drawable: bool, drawable: bool,
tip: &'static str,
} }
pub enum Focus { pub enum Focus {
@ -69,6 +71,7 @@ impl AppState {
multi_select: false, multi_select: false,
selected_commands: Vec::new(), selected_commands: Vec::new(),
drawable: false, drawable: false,
tip: get_random_line(include_str!("../cool_tips.txt").lines().collect()),
}; };
state.update_items(); state.update_items();
state state
@ -246,7 +249,12 @@ impl AppState {
// Create the list widget with items // Create the list widget with items
let list = List::new(items) let list = List::new(items)
.highlight_style(style) .highlight_style(style)
.block(Block::default().borders(Borders::ALL).title(title)) .block(
Block::default()
.borders(Borders::ALL)
.title(title)
.title_bottom(Line::from(self.tip.bold().blue()).right_aligned()),
)
.scroll_padding(1); .scroll_padding(1);
frame.render_stateful_widget(list, chunks[1], &mut self.selection); frame.render_stateful_widget(list, chunks[1], &mut self.selection);
@ -525,3 +533,13 @@ impl AppState {
self.update_items(); self.update_items();
} }
} }
fn get_random_line(lines: Vec<&str>) -> &str {
if lines.is_empty() {
return "";
}
let mut rng = rand::thread_rng();
let random_index = rng.gen_range(0..lines.len());
lines[random_index]
}