25 Commits

Author SHA1 Message Date
c6f97648c3 Found and fixed a bug in non ratpoison mode. It was creating a shit ton of conflicting keybinds. 2023-04-06 16:10:03 -04:00
ec8aa3c00a Modified prompt for using ratpoison mode to show that it is the recommended configuration. 2023-04-06 15:02:23 -04:00
de95c4284a updated the readme file. 2023-04-06 14:55:47 -04:00
390fc4c114 Fixed a bug in the run dialog. 2023-03-29 18:22:36 -04:00
71cd45f781 More work on the help display. 2023-03-29 00:47:07 -04:00
6702dc357b Added control+g to exit ratpoison mode, so that it is more in line with ratpoison. 2023-03-28 19:56:08 -04:00
a7f22597f1 Fixed a bug in rp mode kill. 2023-03-28 19:43:00 -04:00
530c9e5073 Kill window shortcut added to ratpoison mode as k. Comments should show up now that did not before in the config file. 2023-03-28 18:43:13 -04:00
73d16bde78 Added emacs as an editor choice. 2023-03-28 00:38:57 -04:00
ccbb89e372 Added a help system. It is mod+shift+f1 or in ratpoison mode, ?. I tried to make it more readable, which took some doing, so if something is wrong with it please let me know. 2023-03-27 23:44:42 -04:00
8ce2e7eb32 Updated the README. 2023-03-24 18:40:46 -04:00
0e7125d2fc Replacement for grun, added custom I38 run dialog instead. 2023-03-24 18:40:01 -04:00
5671b31715 Replacement for grun, added custom I38 run dialog instead. 2023-03-24 18:34:09 -04:00
a28cbc59ff Replacement for grun, added custom I38 run dialog instead. 2023-03-24 18:21:55 -04:00
ce5f632bfc Fixed a bug where i3's mod key was being automatically set to super if a ratpoison mode key was not selected. 2023-03-24 17:29:18 -04:00
2953ecd157 Added dex to package list. It's an optional alternative for automatically launching applications when i3 starts. 2023-03-19 17:25:25 -04:00
64cffc7fc7 Added i3-wm to dependency list because it's surprisingly easy to forget to install it. 2023-03-04 17:37:21 -05:00
e0ac69b66e Updated ocrdesktop to use -b for faster recognission.
Added mod+r in ratpoison layer for those who don't have a prinnt key.
2023-02-05 09:36:56 -07:00
689b997dae Added keybinding to ratpoison mode to launch a terminal. 2023-01-23 12:34:58 -05:00
1a0daf36a8 Ever had an old discman? I certainly did. Now music related keys apart from music volume beep, just like that discman you had back in the late 90s and early 2000s! 2022-12-23 05:27:33 -07:00
29e941e3d5 Experimental support for sway added with the -s flag. 2022-12-15 07:23:07 -05:00
9109f7660c Fixed more typos, hurray! 2022-12-14 07:49:13 -07:00
e1043e982d Fixed unneeded mode defaults in non-rp mode
removed unnecessary } at end of non-rp mode bindings
2022-12-13 19:43:55 -07:00
ac1464d965 Added volume beep to all system volume changes.
Corrected typos for volume Jump variable.
Moved some things around in the written config file to be more consistant with placement.
2022-12-12 17:43:30 -07:00
40104086fe Fixed typos found in some keybinds. 2022-12-10 14:35:57 -07:00
4 changed files with 159 additions and 97 deletions

View File

@ -6,6 +6,7 @@ Accessibility setup script for the i3 window manager.
Released under the terms of the WTFPL License: http://www.wtfpl.net
This is a Stormux project: https://stormux.org
## Why the name?
An uppercase I looks like a 1, 3 from i3, and 8 because the song [We Are 138](https://www.youtube.com/watch?v=-n2Mkdw4q44) rocks!
@ -13,9 +14,10 @@ An uppercase I looks like a 1, 3 from i3, and 8 because the song [We Are 138](ht
## Requirements
- i3-wm: The i3 window manager.
- acpi: [optional] for battery status. It will still work even without this package, but uses it if it is installed.
- dex: [optional] Alternative method for auto starting applications.
- clipster: clipboard manager
- grun: Run application dialog
- jq: for getting the current workspace
- libnotify: For sending notifications
- notification-daemon: To handle notifications
@ -31,6 +33,7 @@ An uppercase I looks like a 1, 3 from i3, and 8 because the song [We Are 138](ht
I38 will try to detect your browser, file manager, and web browser and present you with a list of options to bind to their launch keys. It will also create bindings for pidgin and mumble if they are installed. To use the bindings, press your ratpoison mode key which is set when you run the i38.sh script. next, press the binding for the application you want, w for web browser, e for text editor, f for file manager, m for mumble, etc. To learn all the bindings, find and read the mode ratpoison section of ~/.config/i3/config.
## Usage:
- With no arguments, create the i3 configuration.
@ -38,3 +41,17 @@ I38 will try to detect your browser, file manager, and web browser and present y
- -u: Copy over the latest version of scripts.
- -x: Generate ~/.xinitrc and ~/.xprofile.
- -X: Generate ~/.xprofile only.
## Ratpoison Mode
I38 is an adaptation of the old Strychnine project which was based on the Ratpoison window manager. Ratpoison is a screen like window manager, and the important concept from that, which applies to I38, is adding keyboard shortcuts without conflicting application shortcuts. This is done with an "escape key".
When creating I38, I really wanted to port that functionality over, because it is very powerful and allows for lots and lots of shortcuts while minimizing collisions between shortcuts. So, for example, if you have chosen brave as your web browser, and selected alt+escape as your ratpoison mode key, you can quickly launch brave by pressing alt+escape followed by the letter w.
## I38 Help
To get help for I38, you can press the top level keybinding alt+shift+F1. It is also available by pressing the ratpoison mode key followed by question mark. A limitation of yad, which is used to display the help text means that the cursor starts at the bottom of the text. Please press control+home to jump to the top. You can navigate with the arrow keys, and use control+f to find text within the document.
The help text is a modified version of the configuration file itself that is intended to be easier to read. I have tried to add in comments that should also serve to make things more clear.

160
i38.sh
View File

@ -5,11 +5,12 @@
# Released under the terms of the WTFPL http://www.wtfpl.net
i3Path="${XDG_CONFIG_HOME:-$HOME/.config}/i3"
i3msg="i3-msg"
# Dialog accessibility
export DIALOGOPTS='--no-lines --visit-items'
# Check to make sure minimum requirements are installed.
for i in dialog grun jq sgtk-menu yad ; do
for i in dialog jq sgtk-menu yad ; do
if ! command -v "$i" &> /dev/null ; then
missing+=("$i")
fi
@ -131,6 +132,7 @@ update_scripts() {
# Array of command line arguments
declare -A command=(
[h]="This help screen."
[s]="Create sway configuration instead of i3."
[u]="Copy over the latest version of scripts."
[x]="Generate ~/.xinitrc and ~/.xprofile."
[X]="Generate ~/.xprofile only."
@ -142,6 +144,10 @@ args="${args//[[:space:]]/}"
while getopts "${args}" i ; do
case "$i" in
h) help;;
s)
i3msg="swaymsg"
i3Path="${XDG_CONFIG_HOME:-$HOME/.config}/sway"
;;
u) update_scripts;;
x) write_xinitrc ;&
X) write_xprofile ;;
@ -149,15 +155,14 @@ while getopts "${args}" i ; do
done
# Configuration questions
export i3Mode=$(yesno "Would you like to use ratpoison mode? This behaves more like strychnine, with an escape key followed by keybindings.")
if [[ $i3Mode -eq 1 ]]; then
mod="Mod4"
fi
export i3Mode=$(yesno "Would you like to use ratpoison mode? This behaves more like strychnine, with an escape key followed by keybindings. (Recommended)")
# Prevent setting ratpoison mode key to the same as default mode key
while [[ "$escapeKey" == "$mod" ]]; do
escapeKey="$(menulist "Ratpoison mode key:" Control+t Control+z Control+Escape Alt+Escape Control+Space Super)"
escapeKey="${escapeKey//Alt/Mod1}"
escapeKey="${escapeKey//Super/Mod4}"
if [[ $i3Mode -eq 0 ]]; then
escapeKey="$(menulist "Ratpoison mode key:" Control+t Control+z Control+Escape Alt+Escape Control+Space Super)"
escapeKey="${escapeKey//Alt/Mod1}"
escapeKey="${escapeKey//Super/Mod4}"
fi
mod="$(menulist "I3 mod key, for top level bindings:" Alt Control Super)"
mod="${mod//Alt/Mod1}"
mod="${mod//Super/Mod4}"
@ -186,7 +191,7 @@ fi
webBrowser="$(command -v $webBrowser)"
# Text editor
unset programList
for i in geany gedit kate kwrite l3afpad leafpad libreoffice mousepad pluma ; do
for i in emacs geany gedit kate kwrite l3afpad leafpad libreoffice mousepad pluma ; do
if hash ${i/#-/} &> /dev/null ; then
if [ -n "$programList" ]; then
programList="$programList $i"
@ -253,25 +258,26 @@ cat << EOF > ${i3Path}/config
#
# This config file uses keycodes (bindsym) and was written for the QWERTY
# layout.
#
# To get a config file with the same key positions, but for your current
# layout, use the i3-config-wizard
#
#set mod key
# set mod key
set \$mod $mod
#set workspace layout to tapped so apps use most of the screen
# set workspace layout to tabbed so apps use most of the screen
workspace_layout tabbed
#set the mouse so it is trapped in focused window
# set the mouse so it is trapped in focused window
# this fixes some issues in some games that require focus and pause when focus is moved via mouse accidentally
focus_follows_mouse no
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:monospace 8
# I38 help
bindsym \$mod+Shift+F1 exec ${i3Path}/scripts/i38-help.sh
# Run dialog
bindsym \$mod+F2 exec grun
bindsym \$mod+F2 exec ${i3Path}/scripts/run_dialog.sh
# Clipboard manager
bindsym \$mod+Control+c exec clipster -s
@ -280,20 +286,20 @@ bindsym \$mod+Control+c exec clipster -s
bindsym \$mod+Control+Delete exec --no-startup-id sgtk-bar
# Use pactl to adjust volume in PulseAudio.
bindsym \$mod+XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +${volumeJump}% & play -qnG synth 0.05 sin 440
bindsym \$mod+XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -${volumeJump}% & play -qnG synth 0.05 sin 440
bindsym \$mod+XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +${volumeJump}% & play -qnG synth 0.03 sin 440
bindsym \$mod+XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -${volumeJump}% & play -qnG synth 0.03 sin 440
bindsym \$mod+XF86AudioMute exec --no-startup-id ${i3Path}/scripts/mute-unmute.sh
# Music player controls
# Requires playerctl.
bindsym XF86AudioRaiseVolume exec --no-startup-id ${i3Path}/scripts/music_controler.sh incvol $volumeJump
bindsym XF86AudioLowerVolume exec --no-startup-id ${i3Path}/scripts/music_controler.sh decvol $volumeJump
bindsym XF86AudioPrev exec --no-startup-id ${i3Path}/scripts/music_controler.sh prev
bindsym XF86AudioMute exec --no-startup-id ${i3Path}/scripts/music_controler.sh pause
bindsym XF86AudioPlay exec --no-startup-id ${i3Path}/scripts/music_controler.sh play
bindsym \$mod+XF86AudioPlay exec --no-startup-id ${i3Path}/scripts/music_controler.sh info
bindsym XF86AudioStop exec --no-startup-id ${i3Path}/scripts/music_controler.sh stop
bindsym XF86AudioNext exec --no-startup-id ${i3Path}/scripts/music_controler.sh next
bindsym XF86AudioPrev exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh prev
bindsym XF86AudioMute exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh pause
bindsym XF86AudioPlay exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh play
bindsym \$mod+XF86AudioPlay exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh info
bindsym XF86AudioStop exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh stop
bindsym XF86AudioNext exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh next
# start a terminal
bindsym \$mod+Return exec i3-sensible-terminal
@ -308,18 +314,13 @@ bindsym \$mod+F1 exec --no-startup-id sgtk-menu -f
bindsym \$mod+Control+d exec --no-startup-id yad --icons --compact --no-buttons --title="Desktop" --close-on-unfocus --read-dir=${HOME}/Desktop
# change focus
# alt+tab and shift tab
# alt+tab and alt+shift+tab
bindsym Mod1+Shift+Tab focus left
bindsym Mod1+Tab focus right
# enter fullscreen mode for the focused container
bindsym \$mod+BackSpace fullscreen toggle
# focus the parent container
#bindsym \$mod+a focus parent
# focus the child container
#bindsym \$mod+d focus child
# move the currently focused window to the scratchpad
bindsym \$mod+Shift+minus move scratchpad
@ -373,107 +374,74 @@ if [[ -n "${escapeKey}" ]]; then
cat << EOF >> ${i3Path}/config
bindsym $escapeKey mode "ratpoison"
mode "ratpoison" {
# I38 help bound to ?
bindsym Shift+slash exec ${i3Path}/scripts/i38-help.sh, mode "default"
# Terminal emulator bound to c
bindsym c exec i3-sensible-terminal, mode "default"
# Text editor bound to e
bindsym e exec $textEditor, mode "default"
# File browser bound to f
bindsym f exec $fileBrowser, mode "default"
# Web browser bound to w
bindsym w exec $webBrowser, mode "default"
bindsym g exec ${i3Path}/scripts/game_controler.sh -s, mode "default"
# Kill window bound to k
bindsym k kill, mode "default"
$(if command -v mumble &> /dev/null ; then
echo "# Mumble bound to m"
echo "bindsym m exec $(command -v mumble), mode \"default\""
fi)
$(if command -v ocrdesktop &> /dev/null ; then
echo "bindsym Print exec $(command -v ocrdesktop), mode \"default\""
echo "# OCR desktop bound to print screen alternative \$mod+r"
echo "bindsym Print exec $(command -v ocrdesktop) -b, mode \"default\""
echo "bindsym \$mod+r exec $(command -v ocrdesktop) -b, mode \"default\""
fi)
$(if command -v pidgin &> /dev/null ; then
echo "# p bound to pidgin"
echo "bindsym p exec $(command -v pidgin), mode \"default\""
fi)
$(if command -v transfersh &> /dev/null ; then
echo "# t bound to share file with transfer.sh"
echo 'bindsym t exec bash -c '"'"'fileName="$(yad --title "I38 Upload File" --file)" && url="$(transfersh "${fileName}" | tee >(yad --title "I38 - Uploading ${fileName##*/} ..." --progress --pulsate --auto-close))" && echo "${url#*saved at: }" | tee >(yad --title "I38 - Upload URL" --show-cursor --show-uri --button yad-close --sticky --text-info) >(xclip -selection clipboard)'"', mode \"default\""
fi)
bindsym Mod1+Shift+0 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +${volumeJump}%
bindsym Mod1+Shift+9 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -${voluemJump}%
#Keyboard based volume Controls with pulseaudio
bindsym Mod1+Shift+0 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +${volumeJump}% & play -qnG synth 0.03 sin 440
bindsym Mod1+Shift+9 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -${volumeJump}% & play -qnG synth 0.03 sin 440
# Music player controls
# Requires playerctl.
bindsym Mod1+Shift+equal exec --no-startup-id ${i3Path}/scripts/music_controler.sh incvol $volumeJump, mode "default"
bindsym Mod1+Shift+minus exec --no-startup-id ${i3Path}/scripts/music_controler.sh decvol $volumeJump, mode "default"
bindsym Mod1+Shift+z exec --no-startup-id ${i3Path}/scripts/music_controler.sh prev, mode "default"
bindsym Mod1+Shift+c exec --no-startup-id ${i3Path}/scripts/music_controler.sh pause, mode "default"
bindsym Mod1+Shift+x exec --no-startup-id ${i3Path}/scripts/music_controler.sh play, mode "default"
bindsym Mod1+Shitf+v exec --no-startup-id ${i3Path}/scripts/music_controler.sh stop, mode "default"
bindsym Mod1+Shift+b exec --no-startup-id ${i3Path}/scripts/music_controler.sh next, mode "default"
bindsym Mod1+Shift+u exec --no-startup-id ${i3Path}/scripts/music_controler.sh info, mode "default"
bindsym Mod1+Shift+minus exec --no-startup-id ${i3Path}/scripts/music_controler.sh decvol $volumeJump, mode "default"
bindsym Mod1+Shift+z exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh prev, mode "default"
bindsym Mod1+Shift+c exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh pause, mode "default"
bindsym Mod1+Shift+x exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh play, mode "default"
bindsym Mod1+Shift+v exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh stop, mode "default"
bindsym Mod1+Shift+b exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh next, mode "default"
bindsym Mod1+Shift+u exec --no-startup-id play -qV0 "| sox -np synth 0.03 sin 2000 pad 0 .02" "| sox -np synth 0.03 sin 2000" norm 1.0 vol 0.4 & ${i3Path}/scripts/music_controler.sh info, mode "default"
#Check battery status
bindsym Mod1+b exec --no-startup-id ${i3Path}/scripts/battery_status.sh, mode "default"
#Check controller battery status
bindsym g exec ${i3Path}/scripts/game_controler.sh -s, mode "default"
# Get a list of windows in the current workspace
bindsym apostrophe exec --no-startup-id ${i3Path}/scripts/window_list.sh, mode "default"
# Restart orca
bindsym Shift+o exec $(command -v orca) --replace, mode "default"
# reload the configuration file
bindsym Control+semicolon exec bash -c 'i3-msg -t run_command reload && spd-say -P important -Cw "I38 Configuration reloaded."', mode "default"
bindsym Control+semicolon exec bash -c '$i3msg -t run_command reload && spd-say -P important -Cw "I38 Configuration reloaded."', mode "default"
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym Control+Shift+semicolon exec bash -c 'i3-msg -t run_command restart && spd-say -P important -Cw "I3 restarted."', mode "default"
bindsym Control+Shift+semicolon exec bash -c '$i3msg -t run_command restart && spd-say -P important -Cw "I3 restarted."', mode "default"
# Run dialog with exclamation
bindsym Shift+exclam exec ${i3Path}/scripts/run_dialog.sh, mode "default"
# exit i3 (logs you out of your X session)
bindsym Control+q exec bash -c 'yad --image "dialog-question" --title "I38" --button=yes:0 --button=no:1 --text "You pressed the exit shortcut. Do you really want to exit i3? This will end your X session." && i3-msg -t run_command exit'
bindsym Control+q exec bash -c 'yad --image "dialog-question" --title "I38" --button=yes:0 --button=no:1 --text "You pressed the exit shortcut. Do you really want to exit i3? This will end your X session." && $i3msg -t run_command exit'
# Exit ratpoison mode without any action escape or Control+g
bindsym Escape mode "default"
bindsym Control+g mode "default"
}
EOF
fi
# For those who do not want ratpoison mode.
if [[ -z "${escapeKey}" ]]; then
cat << EOF >> ${i3Path}/config
# Text editor bound to $mod+e
bindsym \$mod+e exec $textEditor
# File browser bound to $mod+f
bindsym \$mod+f exec $fileBrowser
# Web browser bound to $mod+w
bindsym \$mod+w exec $webBrowser
bindsym \$mod+g exec ${i3Path}/scripts/game_controler.sh -s, mode "default"
$(if command -v mumble &> /dev/null ; then
echo "bindsym \$mod+m exec $(command -v mumble)"
fi)
$(if command -v ocrdesktop &> /dev/null ; then
echo "bindsym Print exec $(command -v ocrdesktop)"
fi)
$(if command -v pidgin &> /dev/null ; then
echo "bindsym \$mod+p exec $(command -v pidgin)"
fi)
$(if command -v transfersh &> /dev/null ; then
echo 'bindsym \$mod+t exec bash -c '"'"'fileName="$(yad --title "I38 Upload File" --file)" && url="$(transfersh "${fileName}" | tee >(yad --title "I38 - Uploading ${fileName##*/} ..." --progress --pulsate --auto-close))" && echo "${url#*saved at: }" | tee >(yad --title "I38 - Upload URL" --show-cursor --show-uri --button yad-close --sticky --text-info) >(xclip -selection clipboard)'"', mode \"default\""
fi)
bindsym \$mod+Shift+0 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +${volumeJump}%
bindsym \$mod+Shift+9 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -${voluemJump}%
# Music player controls
# Requires playerctl.
bindsym \$mod+Shift+equal exec --no-startup-id ${i3Path}/scripts/music_controler.sh incvol $volumeJump
bindsym \$mod+Shift+minus exec --no-startup-id ${i3Path}/scripts/music_controler.sh decvol $volumeJump
bindsym \$mod+Shift+z exec --no-startup-id ${i3Path}/scripts/music_controler.sh prev
bindsym \$mod+Shift+c exec --no-startup-id ${i3Path}/scripts/music_controler.sh pause
bindsym \$mod+Shift+x exec --no-startup-id ${i3Path}/scripts/music_controler.sh play
bindsym \$mod+Shitf+v exec --no-startup-id ${i3Path}/scripts/music_controler.sh stop
bindsym \$mod+Shift+b exec --no-startup-id ${i3Path}/scripts/music_controler.sh next
bindsym \$mod+Shift+u exec --no-startup-id ${i3Path}/scripts/music_controler.sh info
#Check battery status
bindsym \$mod+b exec --no-startup-id ${i3Path}/scripts/battery_status.sh
# Get a list of windows in the current workspace
bindsym \$mod+apostrophe exec --no-startup-id ${i3Path}/scripts/window_list.sh
# Restart orca
bindsym \$mod+Shift+o exec $(command -v orca) --replace
# reload the configuration file
bindsym \$mod+Control+semicolon exec bash -c 'i3-msg -t run_command reload && spd-say -P important -Cw "I38 Configuration reloaded."'
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym \$mod+Control+Shift+semicolon exec bash -c 'i3-msg -t run_command restart && spd-say -P important -Cw "I3 restarted."'
# exit i3 (logs you out of your X session)
bindsym \$mod+Control+q exec bash -c 'yad --image "dialog-question" --title "I38" --button=yes:0 --button=no:1 --text "You pressed the exit shortcut. Do you really want to exit i3? This will end your X session." && i3-msg -t run_command exit'
}
EOF
fi
cat << EOF >> ${i3Path}/config
# Auto start section

32
scripts/i38-help.sh Executable file
View File

@ -0,0 +1,32 @@
#!/usr/bin/env bash
configPath="$(readlink -f $0)"
configPath="${configPath%/*/*}"
if [[ -f "${configPath}/config" ]]; then
mod="$(grep 'set $mod ' "${configPath}/config" | cut -d ' ' -f3)"
mod="${mod//Mod1/Alt}"
mod="${mod//Mod4/Super}"
mapfile helpText < <(sed -e '/set \($mod\|mod\)/d' \
-e '/set $ws/d' \
-e 's/bindsym/Key:/g' \
-e 's/Mod1/Alt/g' \
-e 's/, mode "default"//g' \
-e 's/--no-startup-id //g' \
-e 's/$ws\([0-9]\)/\1/g' \
-e 's/play \(.*\)& //g' \
-e "s/\$mod/$mod/g" "${configPath}/config")
else
exit 1
fi
for i in "${!helpText[@]}" ; do
helpText[$i]="${helpText[$i]//${configPath}\/scripts\//}"
helpText[$i]="${helpText[$i]/.sh/}"
helpText[$i]="${helpText[$i]/, exec announce*/$'\n'}"
helpText[$i]="${helpText[$i]/, exec spd-say*/$'\n'}"
done
helpText+=("End of text. Please press Control+Home to jump to the beginning of this document.")
echo "${helpText[@]}" | yad --text-info --show-cursor --title "I38 help" --button "Close:0" --listen
exit 0

45
scripts/run_dialog.sh Executable file
View File

@ -0,0 +1,45 @@
#!/usr/bin/env bash
write_history(){
oldHistory="$(grep -v "$txt" "${historyPath}/.history" | head -n 49)"
echo -e "$txt\n$oldHistory" | sed 's/^$//g' > "${historyPath}/.history"
}
historyPath="$(readlink -f $0)"
historyPath="${historyPath%/*}"
if ! [[ -d "$historyPath" ]]; then
mkdir -p "$historyPath"
fi
if [[ -f "${historyPath}/.history" ]]; then
txt="$(yad --entry --editable --title "I38" --text "Execute program or enter file" --button "Open:0" --separator "\n" --rest "${historyPath}/.history")"
else
txt="$(yad --entry --title "I38" --text "Execute program or enter file" --button "Open:0")"
fi
if [[ -z "$txt" ]]; then
exit 0
fi
if [[ "$txt" =~ ^ftp://|^http://|^https://|^www.* ]]; then
xdg-open $txt
write_history
exit 0
fi
if [[ "$txt" =~ ^mailto://.* ]]; then
xdg-email $txt
write_history
exit 0
fi
if [[ "$txt" =~ ^man://.* ]]; then
eval "${txt/:\/\// }" | yad --text-info --show-cursor --button "Close:0" --title "I38" -
write_history
exit 0
fi
if command -v "$(echo "$txt" | cut -d " " -f1)" &> /dev/null ; then
eval $txt&
else
xdg-open $txt&
fi
write_history
exit 0