[Bin] Huge simplification of wacom-setup
	
		
			
	
		
	
	
		
	
		
			Some checks reported errors
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build encountered an error
				
			
		
		
	
	
				
					
				
			
		
			Some checks reported errors
		
		
	
	continuous-integration/drone/push Build encountered an error
				
			It’s not a one-liner yet, but it’s still much shorter and cleaner than the previous mess. Also change wacom-setup from a fish script to a sh script
This commit is contained in:
		
							parent
							
								
									d379f83cc8
								
							
						
					
					
						commit
						4c42a17fc6
					
				| @ -520,134 +520,21 @@ xinput set-prop $TPNAME "libinput Tapping Enabled" $NEWTPSTATUS | |||||||
| 
 | 
 | ||||||
| ** Wacom setup | ** Wacom setup | ||||||
| :PROPERTIES: | :PROPERTIES: | ||||||
| :HEADER-ARGS: :shebang "#!/usr/bin/env fish" :mkdirp yes :tangle ~/.local/bin/wacom-setup | :HEADER-ARGS: :shebang "#!/usr/bin/env sh" :mkdirp yes :tangle ~/.local/bin/wacom-setup | ||||||
| :CUSTOM_ID: Wacom_setup-331fb024 | :CUSTOM_ID: Wacom_setup-331fb024 | ||||||
| :END: | :END: | ||||||
| I made a small and quick utility to set up my Wacom tablet so it is only bound | I made a small and quick utility to set up my Wacom tablet so it is | ||||||
| to one screen. | only bound to one screen. This is quite easy, we simply need to find | ||||||
|  | the Wacom stylus’ ID and assign it to the display we want. | ||||||
| 
 | 
 | ||||||
| *** Set our variables | #+begin_src sh | ||||||
| :PROPERTIES: | ID=$(xinput | grep -oPi "wacom.+stylus.+id=\K([0-9]+)") | ||||||
| :CUSTOM_ID: Wacom_setup-Set_our_variables-3cb6d58e | SCREEN=$(xrandr -q --current | \ | ||||||
| :END: |              grep -iPo '^([^ ])+(?= connected)' | \ | ||||||
| We need some variables in order to correctly set our tablet. First, let’s get |              rofi -dmenu -i -p 'Select your display' | \ | ||||||
| declare what the name of our tablet is, and what the name of its touchpad is. |              tr -d '\n') | ||||||
| #+BEGIN_SRC fish | xinput map-to-output "$ID" "$SCREEN" | ||||||
| set -g DEVICE "Wacom USB Bamboo PAD Pen stylus" | #+end_src | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| To get the correct values for the area it can cover, we’ll need to reset our |  | ||||||
| tablet. |  | ||||||
| #+BEGIN_SRC fish |  | ||||||
| xsetwacom set "$DEVICE" ResetArea |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| Now we can get the X and Y areas. |  | ||||||
| #+BEGIN_SRC fish |  | ||||||
| set -g AREATOT (xsetwacom get "$DEVICE" Area) |  | ||||||
| set -g AREAX (echo $AREATOT | awk '{print $3}') |  | ||||||
| set -g AREAY (echo $AREATOT | awk '{print $4}') |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| *** Select our screen |  | ||||||
| :PROPERTIES: |  | ||||||
| :CUSTOM_ID: Wacom_setup-Select_our_screen-7822c0c3 |  | ||||||
| :END: |  | ||||||
| This function will allow us to select the screen on which the tablet will be |  | ||||||
| active. We can also select the option “desktop” so that all screens are |  | ||||||
| selected. Let’s declare our function. |  | ||||||
| #+BEGIN_SRC fish :noweb yes |  | ||||||
| function set_screen |  | ||||||
|     <<wacom-screen-get-displays>> |  | ||||||
|     <<wacom-screens-select-screen>> |  | ||||||
|     <<wacom-screen-get-position>> |  | ||||||
|     <<wacom-screen-get-dimensions>> |  | ||||||
| end |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| First, let’s set what screens are available, including the desktop option. |  | ||||||
| #+NAME: wacom-screen-get-displays |  | ||||||
| #+BEGIN_SRC fish :tangle no |  | ||||||
| set CONNECTED_DISPLAYS (xrandr -q --current | \ |  | ||||||
| sed -n 's/^\([^ ]\+\) connected .*/\1/p') desktop |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| Now, let’s select the one we wish to use using rofi. |  | ||||||
| #+NAME: wacom-screens-select-screen |  | ||||||
| #+BEGIN_SRC fish :tangle no |  | ||||||
| set -g SCREEN (for d in $CONNECTED_DISPLAYS |  | ||||||
|     echo $d |  | ||||||
| end | rofi -dmenu -i -p "Select your dispaly" | tr -d '\n') |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| We can now get the position of our screen. |  | ||||||
| #+NAME: wacom-screen-get-position |  | ||||||
| #+BEGIN_SRC fish :tangle no |  | ||||||
| set -g POSITION (xrandr -q --current | sed -nr "s/^$SCREEN connected (primary )*([0-9x\+]+).*/\2/p") |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| We’ll also get the width and height of the screen so we can set correctly the |  | ||||||
| drawing area of the tablet. |  | ||||||
| #+NAME: wacom-screen-get-dimensions |  | ||||||
| #+BEGIN_SRC fish :tangle no |  | ||||||
| set -g HEIGHT (echo $POSITION | sed -nr 's/[0-9]+x([0-9]+).*/\1/p') |  | ||||||
| set -g WIDTH  (echo $POSITION | sed -nr 's/([0-9]+)x.*/\1/p') |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| *** Adjust the tablet |  | ||||||
| :PROPERTIES: |  | ||||||
| :CUSTOM_ID: Wacom_setup-Adjust_the_tablet-342acaf3 |  | ||||||
| :END: |  | ||||||
| This function will take care of adjusting our tablet to our screen. Let’s |  | ||||||
| declare our function. |  | ||||||
| #+BEGIN_SRC fish :noweb yes |  | ||||||
| function adjust_device |  | ||||||
|     <<wacom-tablet-set-ration-area>> |  | ||||||
|     <<wacom-tablet-set-new-area>> |  | ||||||
|     <<wacom-tablet-set-device-area-and-screen>> |  | ||||||
| end |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| If our screen is too high or too wide for our tablet, we will have to adjust the |  | ||||||
| height or width of the area used by the tablet. So let’s get the theoretical new |  | ||||||
| height and width of the area. |  | ||||||
| #+NAME: wacom-tablet-set-ration-area |  | ||||||
| #+BEGIN_SRC fish :tangle no |  | ||||||
| set RATIOAREAY (math ceil \($AREAX \* $HEIGHT \/ $WIDTH\)) |  | ||||||
| set RATIOAREAX (math ceil \($AREAY \* $WIDTH \/ $HEIGHT\)) |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| Now, if the current height of the tablet’s area is greater than the theoretical |  | ||||||
| new area, it means the current area is too high. Otherwise, it should be the |  | ||||||
| other way around. Let’s set =NEWAREAX= and =NEWAREAY= that will be used to set |  | ||||||
| the new area for the tablet. |  | ||||||
| #+NAME: wacom-tablet-set-new-area |  | ||||||
| #+BEGIN_SRC fish :tangle no |  | ||||||
| if test $AREAY -gt $RATIOAREAY |  | ||||||
|     set -g NEWAREAX $AREAX |  | ||||||
|     set -g NEWAREAY $RATIOAREAY |  | ||||||
| else |  | ||||||
|     set -g NEWAREAX $RATIOAREAX |  | ||||||
|     set -g NEWAREAY $AREAY |  | ||||||
| end |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| Alright, now let’s set the new area with these new variables. |  | ||||||
| #+NAME: wacom-tablet-set-device-area-and-screen |  | ||||||
| #+BEGIN_SRC fish :tangle no |  | ||||||
| xsetwacom set "$DEVICE" Area 0 0 $NEWAREAX $NEWAREAY |  | ||||||
| #+END_SRC |  | ||||||
| 
 |  | ||||||
| *** Lauch the functions |  | ||||||
| :PROPERTIES: |  | ||||||
| :CUSTOM_ID: Wacom_setup-Lauch_the_functions-2ab8b4d9 |  | ||||||
| :END: |  | ||||||
| Back to the main body of the script, we can now launch the functions |  | ||||||
| sequencially. |  | ||||||
| #+BEGIN_SRC fish |  | ||||||
| set_screen |  | ||||||
| adjust_device |  | ||||||
| #+END_SRC |  | ||||||
| 
 | 
 | ||||||
| * Emacs stuff | * Emacs stuff | ||||||
| :PROPERTIES: | :PROPERTIES: | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user