From d09f95baef26e37e9fff5a70797831af7afba1f9 Mon Sep 17 00:00:00 2001 From: Christopher Leslie-John Peters <40421907+CLJP85@users.noreply.github.com> Date: Sat, 5 Oct 2024 02:50:32 -0400 Subject: [PATCH] First 2nd 3rd and 4th rev-isions 4th revision being most current - goal is to evolve this to a working standalone program with a window not a series of pop-ups - in what language threes alternatives at the moment its a toss up between PyQt6 - and now looking at Tauri as a possibility - Though it may take diff directions tis only the beginning --- ...duckduckgo_ai_text_find_truncate_rev1.bash | 99 +++++++++++++++++++ ...duckduckgo_ai_text_find_truncate_rev2.bash | 85 ++++++++++++++++ ...duckduckgo_ai_text_find_truncate_rev3.bash | 61 ++++++++++++ ...duckduckgo_ai_text_find_truncate_rev4.bash | 61 ++++++++++++ 4 files changed, 306 insertions(+) create mode 100644 TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev1.bash create mode 100644 TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev2.bash create mode 100644 TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev3.bash create mode 100644 TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev4.bash diff --git a/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev1.bash b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev1.bash new file mode 100644 index 0000000..951f07d --- /dev/null +++ b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev1.bash @@ -0,0 +1,99 @@ +#!/bin/bash + +# Set the initial text file and truncation lines +text_file="" +truncate_lines=1 + +# Function to get user input for the text file +get_text_file() { + while true; do + text_file=$(zenity --file-selection --title="Select Text File" --filename="$HOME" --file-filter="Text files | *.txt" --style="background-color:#282A36;color:#F8F8F2;font-size:14px") + if [ "$?" -eq 1 ]; then + # User clicked the "Cancel" button or closed the window + notify_user "Canceled" "No text file selected." + return + elif [ ! -f "$text_file" ]; then + notify_user "Error" "The selected file does not exist or is not a regular file." + elif [ ! -r "$text_file" ]; then + notify_user "Error" "You do not have permission to read the selected file." + else + echo "Using text file: $text_file" + break + fi + done +} + +# Function to get user input for the truncation lines +get_truncate_lines() { + while true; do + truncate_lines=$(zenity --entry --title="Truncate Lines" --text="Please enter the number of lines to truncate from the tail:" --ok-label="Enter" --cancel-label="-- " --extra-button="X" --style="background-color:#282A36;color:#F8F8F2;font-size:14px") + if [ "$?" -eq 1 ]; then + # User clicked the "Cancel" button or closed the window + notify_user "Canceled" "No truncation value specified." + return + elif [ "$?" -eq 2 ]; then + # User clicked the "X" button + exit 0 + elif ! [[ "$truncate_lines" =~ ^[0-9]+$ ]]; then + notify_user "Error" "Invalid truncation value. Please enter a positive integer." + elif [ "$truncate_lines" -le 0 ]; then + notify_user "Error" "The truncation value must be greater than 0." + else + echo "Truncating $truncate_lines lines from the tail." + break + fi + done +} + +# Function to display a notification +notify_user() { + local title="$1" + local message="$2" + notify-send --urgency=low --icon=dialog-information --expire-time=3000 --style="background-color:#282A36;color:#F8F8F2;font-size:14px" "$title" "$message" +} + +# Function to clear the input fields +clear_inputs() { + text_file="" + truncate_lines=1 +} + +# Function to process the file and display the output +process_file() { + if [ ! -f "$text_file" ]; then + notify_user "Error" "The selected file does not exist or is not a regular file." + return + elif [ ! -r "$text_file" ]; then + notify_user "Error" "You do not have permission to read the selected file." + return + fi + + # Truncate and output the last line(s) + last_lines=$(cat "$text_file" | tail -n "$truncate_lines") + echo "$last_lines" + + # Display a notification with the last line(s) + notify_user "Last $truncate_lines Line(s)" "$last_lines" +} + +# Main function to run the script +run_script() { + get_text_file + if [ -n "$text_file" ]; then + get_truncate_lines + process_file + fi +} + +# Keyboard shortcuts +bind_shortcuts() { + # Ctrl+Enter to submit the inputs + bind -x '"\C-m": run_script' + + # Ctrl+C to clear the inputs + bind -x '"\C-c": clear_inputs' +} + +# Run the script +bind_shortcuts +run_script diff --git a/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev2.bash b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev2.bash new file mode 100644 index 0000000..b3cc9cc --- /dev/null +++ b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev2.bash @@ -0,0 +1,85 @@ +#!/bin/bash + +# Set the initial text file, truncation lines, and default directory +text_file="" +truncate_lines=1 +default_dir="$HOME" + +# Directories for results, archives, and config +script_dir="$PWD" +results_dir="$script_dir/results" +archives_dir="$script_dir/archives" +config_file="$script_dir/config/config.sh" +mkdir -p "$results_dir" "$archives_dir" "$(dirname "$config_file")" + +# Load the configuration file +if [ -f "$config_file" ]; then + source "$config_file" + text_file="${last_text_file:-$text_file}" + truncate_lines="${last_truncate_lines:-$truncate_lines}" + default_dir=$(dirname "$text_file") +fi + +# Function to get user input for the text file +get_text_file() { + while true; do + text_file=$(zenity --file-selection --title="Select Text File" --filename="$default_dir" --file-filter="Text files | *.txt" --style="background-color:#282A36;color:#F8F8F2;font-size:14px") + if [ "$?" -eq 1 ]; then + # User clicked the "Cancel" button or closed the window + notify_user "Canceled" "No text file selected." + return + elif [ ! -f "$text_file" ]; then + notify_user "Error" "The selected file does not exist or is not a regular file." + elif [ ! -r "$text_file" ]; then + notify_user "Error" "You do not have permission to read the selected file." + else + echo "Using text file: $text_file" + default_dir=$(dirname "$text_file") + break + fi + done +} + +# Function to get user input for the truncation lines +get_truncate_lines() { + while true; do + truncate_lines=$(zenity --entry --title="Truncate Lines" --text="Please enter the number of lines to truncate from the tail:" --ok-label="Enter" --cancel-label="-- " --extra-button="X" --style="background-color:#282A36;color:#F8F8F2;font-size:14px") + if [ "$?" -eq 1 ]; then + # User clicked the "Cancel" button or closed the window + notify_user "Canceled" "No truncation value specified." + return + elif [ "$?" -eq 2 ]; then + # User clicked the "X" button + exit 0 + elif ! [[ "$truncate_lines" =~ ^[0-9]+$ ]]; then + notify_user "Error" "Invalid truncation value. Please enter a positive integer." + elif [ "$truncate_lines" -le 0 ]; then + notify_user "Error" "The truncation value must be greater than 0." + else + # Ensure the truncation value does not exceed the number of lines in the file + local total_lines=$(wc -l < "$text_file") + if [ "$truncate_lines" -gt "$total_lines" ]; then + truncate_lines=$total_lines + notify_user "Warning" "The truncation value exceeds the number of lines in the file. Truncating to the last $truncate_lines line(s)." + fi + echo "Truncating $truncate_lines lines from the tail." + break + fi + done +} + +# Function to display a notification +notify_user() { + local title="$1" + local message="$2" + notify-send --urgency=low --icon=dialog-information --expire-time=3000 --style="background-color:#282A36;color:#F8F8F2;font-size:14px" "$title" "$message" +} + +# Function to clear the input fields +clear_inputs() { + text_file="" + truncate_lines=1 + default_dir="$HOME" + last_text_file="" + last_truncate_lines=1 + diff --git a/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev3.bash b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev3.bash new file mode 100644 index 0000000..bbe74b7 --- /dev/null +++ b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev3.bash @@ -0,0 +1,61 @@ +#!/bin/bash + +# ... + +# Function to create directories if they don't exist +create_directories() { + local dir_path="$1" + if [ ! -d "$dir_path" ]; then + mkdir -p "$dir_path" + echo "Created directory: $dir_path" | tee -a "$log_file" + fi +} + +# Function to log messages +log_message() { + local message="$1" + local log_file_path="$script_dir/logs/truncate-file.log" + create_directories "$(dirname "$log_file_path")" + echo "$message" | tee -a "$log_file_path" +} + +# Function to truncate files +truncate_files() { + for file in $text_files; do + if [ ! -f "$file" ]; then + log_message "Error: File $file does not exist." + continue + elif [ ! -r "$file" ]; then + log_message "Error: You do not have permission to read file $file." + continue + elif [ ! -s "$file" ]; then + log_message "Error: File $file is empty." + continue + fi + + if [ -n "$output_file_name" ]; then + output_file="${file%.*}_${output_file_name}.txt" + else + output_file="${file}.truncated" + fi + + output_dir=$(dirname "$output_file") + create_directories "$output_dir" + + if ! head -n "$truncate_lines" "$file" > "$output_file"; then + log_message "Error: Failed to truncate file $file." + continue + fi + + log_message "File $file truncated successfully" + done + log_message "Files truncated successfully" +} + +# Main program +get_text_files +get_truncate_lines +get_output_file_name +confirm_truncation +truncate_files + diff --git a/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev4.bash b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev4.bash new file mode 100644 index 0000000..bbe74b7 --- /dev/null +++ b/TextSearchTruncate/duckduckgo_ai_text_find_truncate_rev4.bash @@ -0,0 +1,61 @@ +#!/bin/bash + +# ... + +# Function to create directories if they don't exist +create_directories() { + local dir_path="$1" + if [ ! -d "$dir_path" ]; then + mkdir -p "$dir_path" + echo "Created directory: $dir_path" | tee -a "$log_file" + fi +} + +# Function to log messages +log_message() { + local message="$1" + local log_file_path="$script_dir/logs/truncate-file.log" + create_directories "$(dirname "$log_file_path")" + echo "$message" | tee -a "$log_file_path" +} + +# Function to truncate files +truncate_files() { + for file in $text_files; do + if [ ! -f "$file" ]; then + log_message "Error: File $file does not exist." + continue + elif [ ! -r "$file" ]; then + log_message "Error: You do not have permission to read file $file." + continue + elif [ ! -s "$file" ]; then + log_message "Error: File $file is empty." + continue + fi + + if [ -n "$output_file_name" ]; then + output_file="${file%.*}_${output_file_name}.txt" + else + output_file="${file}.truncated" + fi + + output_dir=$(dirname "$output_file") + create_directories "$output_dir" + + if ! head -n "$truncate_lines" "$file" > "$output_file"; then + log_message "Error: Failed to truncate file $file." + continue + fi + + log_message "File $file truncated successfully" + done + log_message "Files truncated successfully" +} + +# Main program +get_text_files +get_truncate_lines +get_output_file_name +confirm_truncation +truncate_files +