xramdr xramdr 0 0 560 429 Xramdr #!kommander _xrandrOut = exec("xrandr") screens = exec("awk '/connected/ {print $1}' <<EOF\n" + _xrandrOut + "\nEOF") Avail_Screen1.insertItems(screens, 0) Avail_Screen2.insertItems(screens, 0) #search for main-screen. (+0+0) main = "" for i = 0 to Avail_Screen1.count - 1 step 1 do output = Avail_Screen1.item(i) output_escaped = exec("echo '" + output + "' | sed 's/\\(.\\)/[&]/g' | sed 's/\\[\\^\\]/\\\\^/g'") atOrigin = exec("awk '/^" + output_escaped + " connected [0-9x]+\\+0\\+0 / {print $3}' << EOF_XRAMDR\n" + _xrandrOut + "\nEOF_XRAMDR") if (! str_isEmpty(atOrigin)) then main = output exec("echo '" + main + "'") main_res = str_remove(atOrigin, "+0+0") break endif end if str_isEmpty(main) then message_error("Could not find main-output", "No Main Output") else Avail_Screen1.setSelection(main) endif populate_res1.execute Resolutions_Screen1.setSelection(main_res) #search for 2nd screen. second = "" for i = 0 to Avail_Screen2.count - 1 step 1 do output = Avail_Screen2.item(i) if output == main then continue endif output_escaped = exec("echo '" + output + "' | sed 's/\\(.\\)/[&]/g' | sed 's/\\[\\^\\]/\\\\^/g'") isUsed = exec("awk '/^" + output_escaped + " connected [0-9x+-]+ / {print $3}' << EOF_XRAMDR\n" + _xrandrOut + "\nEOF_XRAMDR") if (! str_isEmpty(isUsed)) then second = output break endif end if (! str_isEmpty(second)) then Avail_Screen2.setSelection(second) populate_res2.execute else deactivate_screen2.execute endif unnamed 11 6 apply Appl&y @exec(@text_cmd) GroupBox1_2 Screen 2 group_screen2 true 10 50 280 280 0 ButtonGroup3 170 60 112 166 0 unnamed 11 6 mirror &Mirror true @null --same-as @Avail_Screen1 above A&bove @null --above @Avail_Screen1 below Bel&ow @null --below @Avail_Screen1 left_of Left-Of @null --left-of @Avail_Screen1 right_of R&ight-Of @null --right-of @Avail_Screen1 Resolutions_Screen2 10 50 160 220 @Resolutions_Screen2.selection Avail_Screen2 true 10 10 160 26 @Avail_Screen2.text Activate_Screen2 20 30 150 20 &Activate true GroupBox1 Screen 1 Avail_Screen1 20 60 160 26 @Avail_Screen1.text Resolutions_Screen1 20 100 160 220 @Resolutions_Screen1.selection text_cmd @text_cmd.text GroupBox5 0 deactivate_screen2 20 10 32 32 @Activate_Screen2.setChecked(false) populate_res2 20 10 32 32 @Resolutions_Screen2.clear @Resolutions_Screen2.insertItems(@exec("awk '/connected/ { screen = $1} /^[ ]*[0-9]+x[0-9]+/ { if (screen == "@Avail_Screen2") print $1}' <<EOF\n@global(xrandrOut)\nEOF"), 0) @Resolutions_Screen2.setSelection(@exec("echo '@exec("awk '/^@Avail_Screen2 connected [0-9x+-]+ / {print $3}' << EOF\n@global(xrandrOut)\nEOF")' | sed 's/[+].*//'")) @radio_set.execute populate_res1 20 10 32 32 @Resolutions_Screen1.clear @Resolutions_Screen1.insertItems(@exec("awk '/connected/ { screen = $1} /^[ ]*[0-9]+x[0-9]+/ { if (screen == "@Avail_Screen1") print $1}' <<EOF\n@global(xrandrOut)\nEOF"), 0) @Resolutions_Screen1.setSelection(@exec("echo '@exec("awk '/^@Avail_Screen1 connected [0-9x]+\\+0\\+0 / {print $3}' << EOF\n@global(xrandrOut)\nEOF")' | sed 's/[+].*//'")) generate -10 10 32 32 #!kommander screen1 = Avail_Screen1.text error = false cmd = "xrandr" resolution1 = Resolutions_Screen1.selection() if str_isEmpty(resolution1) then error = true endif cmd = cmd + " --output " + "'" + screen1 + "'" cmd = cmd + " --mode " + resolution1 if Activate_Screen2.checked then screen2 = Avail_Screen2.text if (screen1 == screen2) then error = true endif resolution2 = Resolutions_Screen2.selection() if str_isEmpty(resolution2) then error = true endif cmd = cmd + " --output '" + screen2 + "'" cmd = cmd + " --mode " + resolution2 cmd = cmd + " " if mirror.checked then cmd = cmd + "--same-as" endif if above.checked then cmd = cmd + "--above" endif if below.checked then cmd = cmd + "--below" endif if left_of.checked then cmd = cmd + "--left-of" endif if right_of.checked then cmd = cmd + "--right-of" endif cmd = cmd + " " + screen1 else screen2 = screen1 endif for i = 0 to Avail_Screen1.count - 1 step 1 do output = Avail_Screen1.item(i) if output == screen1 then continue endif if output == screen2 then continue endif cmd = cmd + " --output " + output + " --off" end if error then text_cmd.setText("") else text_cmd.setText(cmd) endif radio_set 20 10 32 32 #!kommander second_output = exec("echo '" + Avail_Screen2.text + "' | sed 's/\\(.\\)/[&]/g' | sed 's/\\[\\^\\]/\\\\^/g'") second_offset = exec("echo '" + exec("awk '/^" + second_output + " connected [0-9x+-]+ / {print $3}' << EOF\n" + _xrandrOut + "\nEOF") + "' | sed 's/^[0-9x]*//'") if str_isEmpty(second_offset) then mirror.setChecked(true) elseif second_offset == "+0+0" then mirror.setChecked(true) elseif str_contains(second_offset, "+0+") then below.setChecked(true) elseif str_contains(second_offset, "+0-") then above.setChecked(true) elseif (str_left(second_offset, 1) == "+") then right_of.setChecked(true) else left_of.setChecked(true) endif Spacer1 Horizontal Expanding 325 0 below clicked() generate execute() above clicked() generate execute() Avail_Screen2 activated(int) generate execute() Avail_Screen1 activated(int) generate execute() mirror clicked() generate execute() Avail_Screen1 activated(int) populate_res1 execute() Activate_Screen2 toggled(bool) group_screen2 setEnabled(bool) Resolutions_Screen1 currentChanged(QListBoxItem*) generate execute() left_of clicked() generate execute() right_of clicked() generate execute() Avail_Screen2 activated(int) populate_res2 execute() Activate_Screen2 clicked() populate_res2 execute() Activate_Screen2 toggled(bool) generate execute() Resolutions_Screen2 currentChanged(QListBoxItem*) generate execute()