linutil/src/commands/utils/monitor-control/manage_arrangement.sh

72 lines
2.5 KiB
Bash
Raw Normal View History

2024-08-15 03:41:41 +01:00
#!/bin/sh -e
2024-08-16 07:18:21 +01:00
. ./utils/monitor-control/utility_functions.sh
# Function to manage monitor arrangement
manage_arrangement() {
monitor_list=$(detect_connected_monitors)
IFS=$'\n' read -r -d '' -a monitor_array <<<"$monitor_list"
clear
echo -e "${BLUE}=========================================${RESET}"
echo -e "${BLUE} Manage Monitor Arrangement${RESET}"
echo -e "${BLUE}=========================================${RESET}"
echo -e "${YELLOW}Choose the monitor to arrange:${RESET}"
for i in "${!monitor_array[@]}"; do
echo -e "$((i + 1)). ${CYAN}${monitor_array[i]}${RESET}"
done
read -p "Enter the number of the monitor to arrange: " monitor_choice
if ! [[ "$monitor_choice" =~ ^[0-9]+$ ]] || (( monitor_choice < 1 )) || (( monitor_choice > ${#monitor_array[@]} )); then
echo -e "${RED}Invalid selection.${RESET}"
return
fi
monitor_name="${monitor_array[monitor_choice - 1]}"
clear
echo -e "${YELLOW}Choose position relative to other monitors:${RESET}"
echo -e "1. ${CYAN}Left of${RESET}"
echo -e "2. ${CYAN}Right of${RESET}"
echo -e "3. ${CYAN}Above${RESET}"
echo -e "4. ${CYAN}Below${RESET}"
read -p "Enter the number of the position: " position_choice
case $position_choice in
1) position="--left-of" ;;
2) position="--right-of" ;;
3) position="--above" ;;
4) position="--below" ;;
*) echo -e "${RED}Invalid selection.${RESET}"; return ;;
esac
echo -e "${YELLOW}Choose the reference monitor:${RESET}"
for i in "${!monitor_array[@]}"; do
if [[ "${monitor_array[i]}" != "$monitor_name" ]]; then
echo -e "$((i + 1)). ${CYAN}${monitor_array[i]}${RESET}"
fi
done
read -p "Enter the number of the reference monitor: " ref_choice
if ! [[ "$ref_choice" =~ ^[0-9]+$ ]] || (( ref_choice < 1 )) || (( ref_choice > ${#monitor_array[@]} )) || (( ref_choice == monitor_choice )); then
echo -e "${RED}Invalid selection.${RESET}"
return
fi
ref_monitor="${monitor_array[ref_choice - 1]}"
if confirm_action "Arrange ${CYAN}$monitor_name${RESET} ${position} ${CYAN}$ref_monitor${RESET}?"; then
echo -e "${GREEN}Arranging $monitor_name ${position} $ref_monitor${RESET}"
execute_command "xrandr --output $monitor_name $position $ref_monitor"
echo -e "${GREEN}Arrangement updated successfully.${RESET}"
else
echo -e "${RED}Action canceled.${RESET}"
fi
}
# Call the manage_arrangement function
manage_arrangement