From dba39dd9c449a0b102d3e3a4658ab42614203415 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Tue, 11 Jun 2019 20:32:30 -0600 Subject: [PATCH 1/8] Don't use MS formats in LibreOffice by default --- .bin/Scripts/system_setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bin/Scripts/system_setup.py b/.bin/Scripts/system_setup.py index 5d49b26d..83108081 100644 --- a/.bin/Scripts/system_setup.py +++ b/.bin/Scripts/system_setup.py @@ -49,7 +49,7 @@ SETUP_ACTIONS = OrderedDict({ 'Installing Programs': {'Info': True}, 'VCR': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_vcredists, 'Just run': True,}, 'LibreOffice': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_libreoffice, - 'If answer': 'LibreOffice', 'KWArgs': {'quickstart': False, 'register_mso_types': True, 'use_mso_formats': True, 'vcredist': False}, + 'If answer': 'LibreOffice', 'KWArgs': {'quickstart': False, 'register_mso_types': True, 'use_mso_formats': False, 'vcredist': False}, }, 'Ninite bundle': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_ninite_bundle, 'KWArgs': {'cs': 'STARTED'},}, From d1af82e114cd3c6247cfac49020827a40bb55ea4 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Tue, 11 Jun 2019 20:42:33 -0600 Subject: [PATCH 2/8] Restore default UAC in System Setup * Fixed mode names * Fixes issue #119 --- .bin/Scripts/system_setup.py | 95 ++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/.bin/Scripts/system_setup.py b/.bin/Scripts/system_setup.py index 83108081..5fa239ab 100644 --- a/.bin/Scripts/system_setup.py +++ b/.bin/Scripts/system_setup.py @@ -47,73 +47,74 @@ OTHER_RESULTS = { SETUP_ACTIONS = OrderedDict({ # Install software 'Installing Programs': {'Info': True}, - 'VCR': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_vcredists, 'Just run': True,}, - 'LibreOffice': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_libreoffice, + 'VCR': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_vcredists, 'Just run': True,}, + 'LibreOffice': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_libreoffice, 'If answer': 'LibreOffice', 'KWArgs': {'quickstart': False, 'register_mso_types': True, 'use_mso_formats': False, 'vcredist': False}, }, - 'Ninite bundle': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_ninite_bundle, 'KWArgs': {'cs': 'STARTED'},}, + 'Ninite bundle': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_ninite_bundle, 'KWArgs': {'cs': 'STARTED'},}, # Browsers 'Scanning for browsers': {'Info': True}, - 'Scan': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': scan_for_browsers, 'Just run': True, 'KWArgs': {'skip_ie': True},}, + 'Scan': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': scan_for_browsers, 'Just run': True, 'KWArgs': {'skip_ie': True},}, 'Backing up browsers': {'Info': True}, - 'Backup browsers': {'New': False, 'Fab': True, 'Cur': True, 'HW': False, 'Function': backup_browsers, 'Just run': True,}, + 'Backup browsers': {'New': False, 'Dat': True, 'Cur': True, 'HW': False, 'Function': backup_browsers, 'Just run': True,}, # Install extensions 'Installing Extensions': {'Info': True}, - 'Classic Shell skin': {'New': True, 'Fab': True, 'Cur': False, 'HW': False, 'Function': install_classicstart_skin, 'Win10 only': True,}, - 'Chrome extensions': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_chrome_extensions,}, - 'Firefox extensions': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_firefox_extensions,}, + 'Classic Shell skin': {'New': True, 'Dat': True, 'Cur': False, 'HW': False, 'Function': install_classicstart_skin, 'Win10 only': True,}, + 'Chrome extensions': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_chrome_extensions,}, + 'Firefox extensions': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_firefox_extensions,}, # Configure software' 'Configuring Programs': {'Info': True}, - 'Browser add-ons': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_adblock, 'Just run': True, + 'Browser add-ons': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_adblock, 'Just run': True, 'Pause': 'Please enable uBlock Origin for all browsers', }, - 'Classic Start': {'New': True, 'Fab': True, 'Cur': False, 'HW': False, 'Function': config_classicstart, 'Win10 only': True,}, - 'Config Windows Updates': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': config_windows_updates, 'Win10 only': True,}, - 'Enable Windows Updates': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': enable_windows_updates, 'KWArgs': {'silent': True},}, - 'Explorer (system)': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': config_explorer_system, 'Win10 only': True,}, - 'Explorer (user)': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': config_explorer_user, 'Win10 only': True,}, - 'Restart Explorer': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': restart_explorer,}, - 'Update Clock': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': update_clock,}, + 'Classic Start': {'New': True, 'Dat': True, 'Cur': False, 'HW': False, 'Function': config_classicstart, 'Win10 only': True,}, + 'Config Windows Updates': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': config_windows_updates, 'Win10 only': True,}, + 'Enable Windows Updates': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': enable_windows_updates, 'KWArgs': {'silent': True},}, + 'Explorer (system)': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': config_explorer_system, 'Win10 only': True,}, + 'Explorer (user)': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': config_explorer_user, 'Win10 only': True,}, + 'Restart Explorer': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': restart_explorer,}, + 'Restore default UAC': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': restore_default_uac,}, + 'Update Clock': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': update_clock,}, # Cleanup 'Cleaning up': {'Info': True}, - 'AdwCleaner': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': cleanup_adwcleaner,}, - 'Desktop': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': cleanup_desktop,}, - 'KIT_NAME_FULL': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': delete_empty_folders,}, + 'AdwCleaner': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': cleanup_adwcleaner,}, + 'Desktop': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': cleanup_desktop,}, + 'KIT_NAME_FULL': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': delete_empty_folders,}, # System Info 'Exporting system info': {'Info': True}, - 'AIDA64 Report': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': run_aida64,}, - 'File listing': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': backup_file_list,}, - 'Power plans': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': backup_power_plans,}, - 'Product Keys': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': run_produkey,}, - 'Registry': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': backup_registry,}, + 'AIDA64 Report': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': run_aida64,}, + 'File listing': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': backup_file_list,}, + 'Power plans': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': backup_power_plans,}, + 'Product Keys': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': run_produkey,}, + 'Registry': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': backup_registry,}, # Show Summary 'Summary': {'Info': True}, - 'Operating System': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_os_name, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'Activation': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_os_activation, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'BIOS Activation': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': activate_with_bios, 'If not activated': True,}, - 'Secure Boot': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': check_secure_boot_status, 'KWArgs': {'show_alert': False},}, - 'Installed RAM': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_installed_ram, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'Temp size': {'New': False, 'Fab': False, 'Cur': True, 'HW': False, 'Function': show_temp_files_size, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'Show free space': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_free_space, 'Just run': True,}, - 'Installed AV': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': get_installed_antivirus, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, - 'Installed Office': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': get_installed_office, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, - 'Partitions 4K aligned': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': check_4k_alignment, 'KWArgs': {'cs': 'TRUE', 'ns': 'FALSE'},}, + 'Operating System': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_os_name, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'Activation': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_os_activation, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'BIOS Activation': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': activate_with_bios, 'If not activated': True,}, + 'Secure Boot': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': check_secure_boot_status, 'KWArgs': {'show_alert': False},}, + 'Installed RAM': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_installed_ram, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'Temp size': {'New': False, 'Dat': False, 'Cur': True, 'HW': False, 'Function': show_temp_files_size, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'Show free space': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_free_space, 'Just run': True,}, + 'Installed AV': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': get_installed_antivirus, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, + 'Installed Office': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': get_installed_office, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, + 'Partitions 4K aligned': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': check_4k_alignment, 'KWArgs': {'cs': 'TRUE', 'ns': 'FALSE'},}, # Open things 'Opening Programs': {'Info': True}, - 'Device Manager': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': open_device_manager, 'KWArgs': {'cs': 'STARTED'},}, - 'HWiNFO sensors': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': run_hwinfo_sensors, 'KWArgs': {'cs': 'STARTED'},}, - 'Speed test': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': open_speedtest, 'KWArgs': {'cs': 'STARTED'},}, - 'Windows Updates': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': open_windows_updates, 'KWArgs': {'cs': 'STARTED'},}, - 'Windows Activation': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': open_windows_activation, 'If not activated': True, 'KWArgs': {'cs': 'STARTED'},}, - 'Sleep': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': sleep, 'Just run': True, 'KWArgs': {'seconds': 3},}, - 'XMPlay': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': run_xmplay, 'KWArgs': {'cs': 'STARTED'},}, + 'Device Manager': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': open_device_manager, 'KWArgs': {'cs': 'STARTED'},}, + 'HWiNFO sensors': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': run_hwinfo_sensors, 'KWArgs': {'cs': 'STARTED'},}, + 'Speed test': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': open_speedtest, 'KWArgs': {'cs': 'STARTED'},}, + 'Windows Updates': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': open_windows_updates, 'KWArgs': {'cs': 'STARTED'},}, + 'Windows Activation': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': open_windows_activation, 'If not activated': True, 'KWArgs': {'cs': 'STARTED'},}, + 'Sleep': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': sleep, 'Just run': True, 'KWArgs': {'seconds': 3},}, + 'XMPlay': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': run_xmplay, 'KWArgs': {'cs': 'STARTED'},}, }) SETUP_ACTION_KEYS = ( 'Function', @@ -125,15 +126,15 @@ SETUP_ACTION_KEYS = ( ) SETUP_QUESTIONS = { # AV - 'MSE': {'New': None, 'Fab': None, 'Cur': None, 'HW': False, 'Ninite': True}, + 'MSE': {'New': None, 'Dat': None, 'Cur': None, 'HW': False, 'Ninite': True}, # LibreOffice - 'LibreOffice': {'New': None, 'Fab': None, 'Cur': None, 'HW': False, 'Ninite': True}, + 'LibreOffice': {'New': None, 'Dat': None, 'Cur': None, 'HW': False, 'Ninite': True}, # Ninite - 'Base': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Ninite': True}, - 'Missing': {'New': False, 'Fab': True, 'Cur': False, 'HW': False, 'Ninite': True}, - 'Standard': {'New': True, 'Fab': True, 'Cur': False, 'HW': False, 'Ninite': True}, + 'Base': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Ninite': True}, + 'Missing': {'New': False, 'Dat': True, 'Cur': False, 'HW': False, 'Ninite': True}, + 'Standard': {'New': True, 'Dat': True, 'Cur': False, 'HW': False, 'Ninite': True}, } # pylint: enable=bad-whitespace,line-too-long @@ -247,7 +248,7 @@ def get_mode(): setup_mode = None mode_options = [ {'Name': 'New', 'Display Name': 'New / Clean install (no data)'}, - {'Name': 'Data', 'Display Name': 'Clean install with data migration'}, + {'Name': 'Dat', 'Display Name': 'Clean install with data migration'}, {'Name': 'Cur', 'Display Name': 'Original OS (post-repair or overinstall)'}, {'Name': 'HW', 'Display Name': 'Hardware service (i.e. no software work)'}, ] From 87668c6ad08dc5a71a964777376106f7fa9d7c15 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Tue, 11 Jun 2019 20:52:45 -0600 Subject: [PATCH 3/8] Avoid rare crash when uploading results for review * Fixes issue #117 --- .bin/Scripts/functions/hw_diags.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.bin/Scripts/functions/hw_diags.py b/.bin/Scripts/functions/hw_diags.py index db5d01ca..ea19e90f 100644 --- a/.bin/Scripts/functions/hw_diags.py +++ b/.bin/Scripts/functions/hw_diags.py @@ -1141,7 +1141,9 @@ def run_hw_tests(state): show_results(state) # Upload for review - if ENABLED_UPLOAD_DATA and ask('Upload results for review?'): + if (ENABLED_UPLOAD_DATA + and DEBUG_MODE + and ask('Upload results for review?')): try_and_print( message='Saving debug reports...', function=save_debug_reports, From 441a6ad66fdc3e83f2f638478aaf7e4e79394278 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Wed, 12 Jun 2019 14:05:45 -0600 Subject: [PATCH 4/8] Prevent ddrescue-tui crash when LogDir is missing * Fixes issue #115 --- .bin/Scripts/functions/ddrescue.py | 1 + 1 file changed, 1 insertion(+) diff --git a/.bin/Scripts/functions/ddrescue.py b/.bin/Scripts/functions/ddrescue.py index 463adf4d..be306f2c 100644 --- a/.bin/Scripts/functions/ddrescue.py +++ b/.bin/Scripts/functions/ddrescue.py @@ -278,6 +278,7 @@ class RecoveryState(): raise GenericError('Unsupported mode') self.get_smart_source() self.set_working_dir() + os.makedirs(global_vars['LogDir'], exist_ok=True) def add_block_pair(self, source, dest): """Run safety checks and append new BlockPair to internal list.""" From 90f5285067af65204d0da321ba126c120aec0948 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Wed, 12 Jun 2019 14:58:27 -0600 Subject: [PATCH 5/8] Updated tmux menu launchers * Use current TMUX session if present * Can switch TMUX session without nesting * Fixes issue #114 --- .bin/Scripts/ddrescue-tui | 29 +++++++++++++++++++++++------ .bin/Scripts/hw-diags | 26 ++++++++++++++++++++------ 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/.bin/Scripts/ddrescue-tui b/.bin/Scripts/ddrescue-tui index e41c6bb1..650015af 100755 --- a/.bin/Scripts/ddrescue-tui +++ b/.bin/Scripts/ddrescue-tui @@ -8,10 +8,10 @@ MENU="ddrescue-tui-menu" function ask() { while :; do - read -p "$1 " -r answer - if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then + read -p "$1 [Y/N] " -r answer + if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then return 0 - elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then + elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then return 1 fi done @@ -26,7 +26,16 @@ die () { if tmux list-session | grep -q "$SESSION_NAME"; then echo "WARNING: tmux session $SESSION_NAME already exists." echo "" - if ask "Kill current session?"; then + if ask "Connect to current session?"; then + if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, switch to session + tmux switch-client -t "$SESSION_NAME" + else + # Running outside TMUX, attach to session + tmux attach-session -t "$SESSION_NAME" + fi + exit 0 + elif ask "Kill current session and start new session?"; then tmux kill-session -t "$SESSION_NAME" || \ die "Failed to kill session: $SESSION_NAME" else @@ -38,6 +47,14 @@ if tmux list-session | grep -q "$SESSION_NAME"; then fi fi -# Start session -tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $* +# Start/Rename session +if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, rename session/window and open the menu + tmux rename-session "$SESSION_NAME" + tmux rename-window "$WINDOW_NAME" + "$MENU" "$@" +else + # Running outside TMUX, start/attach to session + tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" "$@" +fi diff --git a/.bin/Scripts/hw-diags b/.bin/Scripts/hw-diags index d3a1cb21..9de50f9c 100755 --- a/.bin/Scripts/hw-diags +++ b/.bin/Scripts/hw-diags @@ -9,9 +9,9 @@ MENU="hw-diags-menu" function ask() { while :; do read -p "$1 [Y/N] " -r answer - if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then + if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then return 0 - elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then + elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then return 1 fi done @@ -27,8 +27,14 @@ if tmux list-session | grep -q "$SESSION_NAME"; then echo "WARNING: tmux session $SESSION_NAME already exists." echo "" if ask "Connect to current session?"; then - # Do nothing, the command below will attach/connect - echo "" + if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, switch to session + tmux switch-client -t "$SESSION_NAME" + else + # Running outside TMUX, attach to session + tmux attach-session -t "$SESSION_NAME" + fi + exit 0 elif ask "Kill current session and start new session?"; then tmux kill-session -t "$SESSION_NAME" || \ die "Failed to kill session: $SESSION_NAME" @@ -41,6 +47,14 @@ if tmux list-session | grep -q "$SESSION_NAME"; then fi fi -# Start session -tmux new-session -A -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $* +# Start/Rename session +if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, rename session/window and open the menu + tmux rename-session "$SESSION_NAME" + tmux rename-window "$WINDOW_NAME" + "$MENU" "$@" +else + # Running outside TMUX, start/attach to session + tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" "$@" +fi From e30e52e8807da4c3c6d3ec6ca95e2924a488da7a Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Wed, 12 Jun 2019 15:31:30 -0600 Subject: [PATCH 6/8] New launch-in-tmux script * Generic run cmd in tmux wrapper * ddrescue-tui and hw-diags source this script to run their respective menus * Reduces duplicate code --- .bin/Scripts/ddrescue-tui | 57 +++------------------------------ .bin/Scripts/hw-diags | 59 +++------------------------------- .bin/Scripts/launch-in-tmux | 64 +++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 107 deletions(-) create mode 100755 .bin/Scripts/launch-in-tmux diff --git a/.bin/Scripts/ddrescue-tui b/.bin/Scripts/ddrescue-tui index 650015af..6ee8ad57 100755 --- a/.bin/Scripts/ddrescue-tui +++ b/.bin/Scripts/ddrescue-tui @@ -2,59 +2,10 @@ # ## Wizard Kit: ddrescue TUI Launcher +source launch-in-tmux + SESSION_NAME="ddrescue-tui" WINDOW_NAME="ddrescue TUI" -MENU="ddrescue-tui-menu" - -function ask() { - while :; do - read -p "$1 [Y/N] " -r answer - if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then - return 0 - elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then - return 1 - fi - done -} - -die () { - echo "$0:" "$@" >&2 - exit 1 -} - -# Check for running session -if tmux list-session | grep -q "$SESSION_NAME"; then - echo "WARNING: tmux session $SESSION_NAME already exists." - echo "" - if ask "Connect to current session?"; then - if [[ -n "${TMUX:-}" ]]; then - # Running inside TMUX, switch to session - tmux switch-client -t "$SESSION_NAME" - else - # Running outside TMUX, attach to session - tmux attach-session -t "$SESSION_NAME" - fi - exit 0 - elif ask "Kill current session and start new session?"; then - tmux kill-session -t "$SESSION_NAME" || \ - die "Failed to kill session: $SESSION_NAME" - else - echo "Aborted." - echo "" - echo -n "Press Enter to exit... " - read -r - exit 0 - fi -fi - -# Start/Rename session -if [[ -n "${TMUX:-}" ]]; then - # Running inside TMUX, rename session/window and open the menu - tmux rename-session "$SESSION_NAME" - tmux rename-window "$WINDOW_NAME" - "$MENU" "$@" -else - # Running outside TMUX, start/attach to session - tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" "$@" -fi +TMUX_CMD="ddrescue-tui-menu" +launch_in_tmux "$@" diff --git a/.bin/Scripts/hw-diags b/.bin/Scripts/hw-diags index 9de50f9c..70f84db4 100755 --- a/.bin/Scripts/hw-diags +++ b/.bin/Scripts/hw-diags @@ -1,60 +1,11 @@ #!/bin/bash # -## Wizard Kit: HW Diagnostics - Menu Launcher +## Wizard Kit: HW Diagnostics Launcher + +source launch-in-tmux SESSION_NAME="hw-diags" WINDOW_NAME="Hardware Diagnostics" -MENU="hw-diags-menu" - -function ask() { - while :; do - read -p "$1 [Y/N] " -r answer - if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then - return 0 - elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then - return 1 - fi - done -} - -die () { - echo "$0:" "$@" >&2 - exit 1 -} - -# Check for running session -if tmux list-session | grep -q "$SESSION_NAME"; then - echo "WARNING: tmux session $SESSION_NAME already exists." - echo "" - if ask "Connect to current session?"; then - if [[ -n "${TMUX:-}" ]]; then - # Running inside TMUX, switch to session - tmux switch-client -t "$SESSION_NAME" - else - # Running outside TMUX, attach to session - tmux attach-session -t "$SESSION_NAME" - fi - exit 0 - elif ask "Kill current session and start new session?"; then - tmux kill-session -t "$SESSION_NAME" || \ - die "Failed to kill session: $SESSION_NAME" - else - echo "Aborted." - echo "" - echo -n "Press Enter to exit... " - read -r - exit 0 - fi -fi - -# Start/Rename session -if [[ -n "${TMUX:-}" ]]; then - # Running inside TMUX, rename session/window and open the menu - tmux rename-session "$SESSION_NAME" - tmux rename-window "$WINDOW_NAME" - "$MENU" "$@" -else - # Running outside TMUX, start/attach to session - tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" "$@" -fi +TMUX_CMD="hw-diags-menu" +launch_in_tmux "$@" diff --git a/.bin/Scripts/launch-in-tmux b/.bin/Scripts/launch-in-tmux new file mode 100755 index 00000000..e737b574 --- /dev/null +++ b/.bin/Scripts/launch-in-tmux @@ -0,0 +1,64 @@ +#!/bin/bash +# +## Wizard Kit: TMUX Launcher + +function ask() { + while :; do + read -p "$1 [Y/N] " -r answer + if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then + return 0 + elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then + return 1 + fi + done +} + +die () { + echo "$0:" "$@" >&2 + exit 1 +} + +function launch_in_tmux() { + # Check for required vars + [[ -n "${SESSION_NAME:-}" ]] || die "Required variable missing (SESSION_NAME)" + [[ -n "${WINDOW_NAME:-}" ]] || die "Required variable missing (WINDOW_NAME)" + [[ -n "${TMUX_CMD:-}" ]] || die "Required variable missing (TMUX_CMD)" + + # Check for running session + if tmux list-session | grep -q "$SESSION_NAME"; then + echo "WARNING: tmux session $SESSION_NAME already exists." + echo "" + if ask "Connect to current session?"; then + if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, switch to session + tmux switch-client -t "$SESSION_NAME" + else + # Running outside TMUX, attach to session + tmux attach-session -t "$SESSION_NAME" + fi + exit 0 + elif ask "Kill current session and start new session?"; then + tmux kill-session -t "$SESSION_NAME" || \ + die "Failed to kill session: $SESSION_NAME" + else + echo "Aborted." + echo "" + echo -n "Press Enter to exit... " + read -r + exit 0 + fi + fi + + # Start/Rename session + if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, rename session/window and open the menu + tmux rename-session "$SESSION_NAME" + tmux rename-window "$WINDOW_NAME" + "$TMUX_CMD" "$@" + tmux rename-session "${SESSION_NAME}_DONE" + tmux rename-window "${WINDOW_NAME}_DONE" + else + # Running outside TMUX, start/attach to session + tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$TMUX_CMD" "$@" + fi +} From c50627867efcac6baa4225a8204a29ff1cc6174b Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Wed, 12 Jun 2019 15:37:19 -0600 Subject: [PATCH 7/8] Switch to prev tmux from hw-diags & ddrescue-tui * Only during normal exits, not done for aborts/crashes --- .bin/Scripts/ddrescue-tui-menu | 2 ++ .bin/Scripts/functions/tmux.py | 12 ++++++++++++ .bin/Scripts/hw-diags-menu | 2 ++ 3 files changed, 16 insertions(+) diff --git a/.bin/Scripts/ddrescue-tui-menu b/.bin/Scripts/ddrescue-tui-menu index f65e24e1..eab8cd3f 100755 --- a/.bin/Scripts/ddrescue-tui-menu +++ b/.bin/Scripts/ddrescue-tui-menu @@ -45,6 +45,7 @@ if __name__ == '__main__': # Done print_standard('\nDone.') pause("Press Enter to exit...") + tmux_switch_client() exit_script() except GenericAbort: abort() @@ -55,6 +56,7 @@ if __name__ == '__main__': print_error(msg) abort() except SystemExit as sys_exit: + tmux_switch_client() exit_script(sys_exit.code) except: major_exception() diff --git a/.bin/Scripts/functions/tmux.py b/.bin/Scripts/functions/tmux.py index 81522268..8c6ad327 100644 --- a/.bin/Scripts/functions/tmux.py +++ b/.bin/Scripts/functions/tmux.py @@ -141,6 +141,18 @@ def tmux_split_window( return result.stdout.decode().strip() +def tmux_switch_client(target_session=None): + """Switch to target tmux session, or previous if none specified.""" + cmd = ['tmux', 'switch-client'] + if target_session: + cmd.extend(['-t', target_session]) + else: + # Switch to previous instead + cmd.append('-p') + + run_program(cmd, check=False) + + def tmux_update_pane( pane_id, command=None, working_dir=None, text=None, watch=None, watch_cmd='cat'): diff --git a/.bin/Scripts/hw-diags-menu b/.bin/Scripts/hw-diags-menu index fc95e04a..7a122ae7 100755 --- a/.bin/Scripts/hw-diags-menu +++ b/.bin/Scripts/hw-diags-menu @@ -23,6 +23,7 @@ if __name__ == '__main__': sleep(1) pause('Press Enter to exit...') except SystemExit as sys_exit: + tmux_switch_client() exit_script(sys_exit.code) except: # Cleanup @@ -59,6 +60,7 @@ if __name__ == '__main__': # Done tmux_kill_all_panes() + tmux_switch_client() exit_script() # vim: sts=2 sw=2 ts=2 From 5b5c99e6f85fd27b683fd788a5e56905818eee09 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Wed, 12 Jun 2019 15:48:11 -0600 Subject: [PATCH 8/8] Don't kill current tmux session from ddrescue-tui * Just kill the panes and let launch-in-tmux handle the session --- .bin/Scripts/functions/ddrescue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bin/Scripts/functions/ddrescue.py b/.bin/Scripts/functions/ddrescue.py index be306f2c..42d81b72 100644 --- a/.bin/Scripts/functions/ddrescue.py +++ b/.bin/Scripts/functions/ddrescue.py @@ -851,7 +851,7 @@ def menu_ddrescue(source_path, dest_path, run_mode): menu_main(state) # Done - run_program(['tmux', 'kill-window']) + tmux_kill_all_panes() exit_script()