Added -d and -D flags to generate a default I38 setup. -D also creates the .xinitrc and .xprofiles. This is basically a silent mode with no prompts and uses the items it finds with other sane defaults, e.g. alt+escape for RP mode and control+escape for personal mode.
This commit is contained in:
@@ -421,6 +421,10 @@ To update I38 on this system:
|
|||||||
|
|
||||||
Running `./i38.sh` regenerates your I38 configuration and refreshes the installed scripts. Your personal shortcuts in `~/.config/i3/customizations` are preserved.
|
Running `./i38.sh` regenerates your I38 configuration and refreshes the installed scripts. Your personal shortcuts in `~/.config/i3/customizations` are preserved.
|
||||||
|
|
||||||
|
To generate the default configuration without prompts, use `./i38.sh -d`. To also generate `~/.xinitrc` and `~/.xprofile` without prompts, use `./i38.sh -D`.
|
||||||
|
|
||||||
|
Default configuration mode uses I38Lock when it is installed and supported by the screen-reader setup. In that case I38 locks on startup and autolocks after 5 minutes when `xprintidle` is available.
|
||||||
|
|
||||||
If you only need to copy the latest scripts and do not want to regenerate the full i3 configuration, you can use `./i38.sh -u` instead.
|
If you only need to copy the latest scripts and do not want to regenerate the full i3 configuration, you can use `./i38.sh -u` instead.
|
||||||
|
|
||||||
## Getting Help
|
## Getting Help
|
||||||
|
|||||||
@@ -111,11 +111,15 @@ You can apply the same configuration to GTK2 apps. Create or edit ~/.gtkrc-2.0
|
|||||||
## Usage:
|
## Usage:
|
||||||
|
|
||||||
- With no arguments, create the i3 configuration.
|
- With no arguments, create the i3 configuration.
|
||||||
|
- -d: Generate the default I38 configuration without prompting.
|
||||||
|
- -D: Generate the default I38 configuration plus ~/.xinitrc and ~/.xprofile without prompting.
|
||||||
- -h: Help screen.
|
- -h: Help screen.
|
||||||
- -u: Copy over the latest version of scripts.
|
- -u: Copy over the latest version of scripts.
|
||||||
- -x: Generate ~/.xinitrc and ~/.xprofile.
|
- -x: Generate ~/.xinitrc and ~/.xprofile.
|
||||||
- -X: Generate ~/.xprofile only.
|
- -X: Generate ~/.xprofile only.
|
||||||
|
|
||||||
|
Default configuration mode uses I38Lock when it is installed and supported by the screen-reader setup. In that case I38 locks on startup and autolocks after 5 minutes when `xprintidle` is available.
|
||||||
|
|
||||||
## Dependency Helpers
|
## Dependency Helpers
|
||||||
|
|
||||||
Distro-specific dependency helpers live in `extra/`. On Arch Linux, run:
|
Distro-specific dependency helpers live in `extra/`. On Arch Linux, run:
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ i3msg="i3-msg"
|
|||||||
configFile="${PWD}/I38_preferences.conf"
|
configFile="${PWD}/I38_preferences.conf"
|
||||||
i38VersionFile="${i3Path}/i38-version"
|
i38VersionFile="${i3Path}/i38-version"
|
||||||
i38CheckoutPath="${PWD}"
|
i38CheckoutPath="${PWD}"
|
||||||
|
defaultConfig=0
|
||||||
|
defaultGenerateX=0
|
||||||
|
|
||||||
# Dialog accessibility
|
# Dialog accessibility
|
||||||
export DIALOGOPTS='--no-lines --visit-items'
|
export DIALOGOPTS='--no-lines --visit-items'
|
||||||
@@ -184,10 +186,82 @@ rangebox() {
|
|||||||
yesno() {
|
yesno() {
|
||||||
# Returns: Yes 0 or No 1
|
# Returns: Yes 0 or No 1
|
||||||
# Args: Question to user.
|
# Args: Question to user.
|
||||||
|
if [[ $defaultConfig -eq 1 ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
dialog --clear --title "I38" --yesno "$*" -1 -1 --stdout
|
dialog --clear --title "I38" --yesno "$*" -1 -1 --stdout
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
first_available_program() {
|
||||||
|
local program
|
||||||
|
|
||||||
|
for program in "$@"; do
|
||||||
|
if command -v "${program#-}" &> /dev/null; then
|
||||||
|
printf '%s\n' "${program#-}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
first_available_path() {
|
||||||
|
local program
|
||||||
|
|
||||||
|
if program="$(first_available_program "$@")"; then
|
||||||
|
command -v "$program"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_default_configuration() {
|
||||||
|
escapeKey="Mod1+Escape"
|
||||||
|
mod="Mod1"
|
||||||
|
kbd=()
|
||||||
|
volumeJump=5
|
||||||
|
i3FontSize=12
|
||||||
|
screenReader="$(first_available_path cthulhu orca || true)"
|
||||||
|
screenReader="${screenReader:-none}"
|
||||||
|
emailClient="$(first_available_path betterbird evolution thunderbird || true)"
|
||||||
|
webBrowser="$(first_available_path brave chromium epiphany firefox google-chrome-stable google-chrome-unstable microsoft-edge-stable microsoft-edge-beta microsoft-edge-dev midori seamonkey vivaldi || true)"
|
||||||
|
textEditor="$(first_available_path emacs geany gedit kate kwrite l3afpad leafpad libreoffice mousepad pluma || true)"
|
||||||
|
fileBrowser="$(first_available_path caja nemo nautilus pcmanfm pcmanfm-qt thunar || true)"
|
||||||
|
ircClient="$(first_available_path albikirc Albikirc access-irc || true)"
|
||||||
|
terminalEmulator="$(first_available_path mate-terminal lxterminal gnome-terminal terminator xfce4-terminal tilix ptyxis kgx sakura roxterm termit guake tilda qterminal konsole || true)"
|
||||||
|
if [[ -z "$terminalEmulator" ]] && command -v xterm &> /dev/null && command -v fenrir &> /dev/null; then
|
||||||
|
terminalEmulator="$(command -v xterm)"
|
||||||
|
fi
|
||||||
|
udiskie=1
|
||||||
|
if command -v udiskie &> /dev/null; then
|
||||||
|
udiskie=0
|
||||||
|
fi
|
||||||
|
dex=1
|
||||||
|
if command -v dex &> /dev/null; then
|
||||||
|
dex=0
|
||||||
|
fi
|
||||||
|
batteryAlert=1
|
||||||
|
if command -v acpi &> /dev/null; then
|
||||||
|
batteryAlert=0
|
||||||
|
fi
|
||||||
|
brlapi=1
|
||||||
|
if [[ "$screenReader" != "none" ]] && [[ -n "$screenReader" ]]; then
|
||||||
|
brlapi=0
|
||||||
|
fi
|
||||||
|
sounds=0
|
||||||
|
screenlockMethod="none"
|
||||||
|
screenlockPinHash=""
|
||||||
|
screenlockAutolockSeconds=0
|
||||||
|
screenlockOnStartup=1
|
||||||
|
if i38lock_is_supported; then
|
||||||
|
screenlockMethod="i38lock"
|
||||||
|
screenlockAutolockSeconds=300
|
||||||
|
screenlockOnStartup=0
|
||||||
|
fi
|
||||||
|
personalModeEnabled=0
|
||||||
|
personalModeKey="Control+Escape"
|
||||||
|
waytrayUseI38Config=0
|
||||||
|
}
|
||||||
|
|
||||||
# Personal mode helpers
|
# Personal mode helpers
|
||||||
normalize_ratpoison_key() {
|
normalize_ratpoison_key() {
|
||||||
local key="$1"
|
local key="$1"
|
||||||
@@ -414,7 +488,7 @@ load_config() {
|
|||||||
source "$configFile"
|
source "$configFile"
|
||||||
|
|
||||||
# Convert kbd string back to array if present
|
# Convert kbd string back to array if present
|
||||||
if [[ -n "$kbd" ]]; then
|
if [[ -n "${kbd[*]:-}" ]]; then
|
||||||
IFS=' ' read -ra kbd <<< "$kbd"
|
IFS=' ' read -ra kbd <<< "$kbd"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -424,6 +498,10 @@ load_config() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
save_config() {
|
save_config() {
|
||||||
|
if [[ $defaultConfig -eq 1 ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
if yesno "Save this configuration for future runs?"; then
|
if yesno "Save this configuration for future runs?"; then
|
||||||
cat > "$configFile" << EOF
|
cat > "$configFile" << EOF
|
||||||
# I38 Configuration Preferences
|
# I38 Configuration Preferences
|
||||||
@@ -576,7 +654,6 @@ if new_content:
|
|||||||
new_content += block
|
new_content += block
|
||||||
xprofile_path.write_text(new_content, encoding="utf-8")
|
xprofile_path.write_text(new_content, encoding="utf-8")
|
||||||
PY
|
PY
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apply_screenlock_pin() {
|
apply_screenlock_pin() {
|
||||||
@@ -722,6 +799,8 @@ write_i38_version() {
|
|||||||
# Array of command line arguments
|
# Array of command line arguments
|
||||||
declare -A command=(
|
declare -A command=(
|
||||||
[h]="This help screen."
|
[h]="This help screen."
|
||||||
|
[d]="Generate the default I38 configuration without prompting."
|
||||||
|
[D]="Generate the default I38 configuration plus ~/.xinitrc and ~/.xprofile without prompting."
|
||||||
[u]="Copy over the latest version of scripts."
|
[u]="Copy over the latest version of scripts."
|
||||||
[x]="Generate ~/.xinitrc and ~/.xprofile."
|
[x]="Generate ~/.xinitrc and ~/.xprofile."
|
||||||
[X]="Generate ~/.xprofile only."
|
[X]="Generate ~/.xprofile only."
|
||||||
@@ -733,16 +812,27 @@ args="${args//[[:space:]]/}"
|
|||||||
while getopts "${args}" i ; do
|
while getopts "${args}" i ; do
|
||||||
case "$i" in
|
case "$i" in
|
||||||
h) help;;
|
h) help;;
|
||||||
|
d) defaultConfig=1;;
|
||||||
|
D) defaultConfig=1; defaultGenerateX=1;;
|
||||||
u) update_scripts;;
|
u) update_scripts;;
|
||||||
x) write_xinitrc ;&
|
x) write_xinitrc; write_xprofile; exit 0;;
|
||||||
X) write_xprofile ;;
|
X) write_xprofile; exit 0;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [[ $defaultConfig -eq 1 ]]; then
|
||||||
|
set_default_configuration
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $defaultGenerateX -eq 1 ]]; then
|
||||||
|
write_xinitrc
|
||||||
|
write_xprofile
|
||||||
|
fi
|
||||||
|
|
||||||
# Load saved configuration if available
|
# Load saved configuration if available
|
||||||
configLoaded=0
|
configLoaded=0
|
||||||
configChanged=0
|
configChanged=0
|
||||||
if load_config; then
|
if [[ $defaultConfig -eq 0 ]] && load_config; then
|
||||||
configLoaded=1
|
configLoaded=1
|
||||||
dialog --title "I38" --msgbox "Loaded saved preferences from $configFile\n\nMissing or invalid values will be prompted." 0 0
|
dialog --title "I38" --msgbox "Loaded saved preferences from $configFile\n\nMissing or invalid values will be prompted." 0 0
|
||||||
fi
|
fi
|
||||||
@@ -772,7 +862,7 @@ if [[ -z "$escapeKey" ]] || [[ -z "$mod" ]]; then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
# Multiple keyboard layouts
|
# Multiple keyboard layouts
|
||||||
if [[ ${#kbd[@]} -eq 0 ]]; then
|
if [[ $defaultConfig -eq 0 && ${#kbd[@]} -eq 0 ]]; then
|
||||||
if yesno "Do you want to use multiple keyboard layouts?"; then
|
if yesno "Do you want to use multiple keyboard layouts?"; then
|
||||||
unset kbd
|
unset kbd
|
||||||
while : ; do
|
while : ; do
|
||||||
@@ -792,7 +882,7 @@ if [[ -z "$i3FontSize" ]] || [[ ! "$i3FontSize" =~ ^[0-9]+$ ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# Screen Reader
|
# Screen Reader
|
||||||
if [[ -z "$screenReader" ]] || { [[ "$screenReader" != "none" ]] && ! command -v "$screenReader" &> /dev/null; }; then
|
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$screenReader" ]] || { [[ "$screenReader" != "none" ]] && ! command -v "$screenReader" &> /dev/null; }; }; then
|
||||||
programList=()
|
programList=()
|
||||||
for i in cthulhu orca ; do
|
for i in cthulhu orca ; do
|
||||||
if command -v "${i/#-/}" &> /dev/null ; then
|
if command -v "${i/#-/}" &> /dev/null ; then
|
||||||
@@ -816,7 +906,7 @@ else
|
|||||||
export screenReader
|
export screenReader
|
||||||
fi
|
fi
|
||||||
# Email client
|
# Email client
|
||||||
if [[ -z "$emailClient" ]] || ! command -v "$emailClient" &> /dev/null; then
|
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$emailClient" ]] || ! command -v "$emailClient" &> /dev/null; }; then
|
||||||
programList=()
|
programList=()
|
||||||
for i in betterbird evolution thunderbird ; do
|
for i in betterbird evolution thunderbird ; do
|
||||||
if command -v "${i/#-/}" &> /dev/null ; then
|
if command -v "${i/#-/}" &> /dev/null ; then
|
||||||
@@ -835,7 +925,7 @@ else
|
|||||||
export emailClient
|
export emailClient
|
||||||
fi
|
fi
|
||||||
# Web browser
|
# Web browser
|
||||||
if [[ -z "$webBrowser" ]] || ! command -v "$webBrowser" &> /dev/null; then
|
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$webBrowser" ]] || ! command -v "$webBrowser" &> /dev/null; }; then
|
||||||
programList=()
|
programList=()
|
||||||
for i in brave chromium epiphany firefox google-chrome-stable google-chrome-unstable microsoft-edge-stable microsoft-edge-beta microsoft-edge-dev midori seamonkey vivaldi ; do
|
for i in brave chromium epiphany firefox google-chrome-stable google-chrome-unstable microsoft-edge-stable microsoft-edge-beta microsoft-edge-dev midori seamonkey vivaldi ; do
|
||||||
if command -v "${i/#-/}" &> /dev/null ; then
|
if command -v "${i/#-/}" &> /dev/null ; then
|
||||||
@@ -854,7 +944,7 @@ else
|
|||||||
export webBrowser
|
export webBrowser
|
||||||
fi
|
fi
|
||||||
# Text editor
|
# Text editor
|
||||||
if [[ -z "$textEditor" ]] || ! command -v "$textEditor" &> /dev/null; then
|
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$textEditor" ]] || ! command -v "$textEditor" &> /dev/null; }; then
|
||||||
programList=()
|
programList=()
|
||||||
for i in emacs 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 command -v "${i/#-/}" &> /dev/null ; then
|
if command -v "${i/#-/}" &> /dev/null ; then
|
||||||
@@ -873,7 +963,7 @@ else
|
|||||||
export textEditor
|
export textEditor
|
||||||
fi
|
fi
|
||||||
# File browser
|
# File browser
|
||||||
if [[ -z "$fileBrowser" ]] || ! command -v "$fileBrowser" &> /dev/null; then
|
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$fileBrowser" ]] || ! command -v "$fileBrowser" &> /dev/null; }; then
|
||||||
programList=()
|
programList=()
|
||||||
for i in caja nemo nautilus pcmanfm pcmanfm-qt thunar ; do
|
for i in caja nemo nautilus pcmanfm pcmanfm-qt thunar ; do
|
||||||
if command -v "${i/#-/}" &> /dev/null ; then
|
if command -v "${i/#-/}" &> /dev/null ; then
|
||||||
@@ -892,7 +982,7 @@ else
|
|||||||
export fileBrowser
|
export fileBrowser
|
||||||
fi
|
fi
|
||||||
# IRC client
|
# IRC client
|
||||||
if [[ -z "$ircClient" ]] || ! command -v "$ircClient" &> /dev/null; then
|
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$ircClient" ]] || ! command -v "$ircClient" &> /dev/null; }; then
|
||||||
programList=()
|
programList=()
|
||||||
for i in albikirc Albikirc access-irc ; do
|
for i in albikirc Albikirc access-irc ; do
|
||||||
if command -v "${i/#-/}" &> /dev/null ; then
|
if command -v "${i/#-/}" &> /dev/null ; then
|
||||||
@@ -911,7 +1001,11 @@ else
|
|||||||
export ircClient
|
export ircClient
|
||||||
fi
|
fi
|
||||||
# Terminal emulator
|
# Terminal emulator
|
||||||
if [[ -z "$terminalEmulator" ]] || { [[ ! -x "$terminalEmulator" ]] && ! command -v "$terminalEmulator" &> /dev/null; }; then
|
if [[ $defaultConfig -eq 1 && -z "$terminalEmulator" ]]; then
|
||||||
|
echo "No supported terminal emulator was found. Please install mate-terminal, lxterminal, gnome-terminal, terminator, another supported accessible terminal, or install both xterm and fenrir."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ $defaultConfig -eq 0 ]] && { [[ -z "$terminalEmulator" ]] || { [[ ! -x "$terminalEmulator" ]] && ! command -v "$terminalEmulator" &> /dev/null; }; }; then
|
||||||
configChanged=1
|
configChanged=1
|
||||||
programList=()
|
programList=()
|
||||||
for i in mate-terminal lxterminal gnome-terminal terminator xfce4-terminal tilix ptyxis kgx sakura roxterm termit guake tilda qterminal konsole ; do
|
for i in mate-terminal lxterminal gnome-terminal terminator xfce4-terminal tilix ptyxis kgx sakura roxterm termit guake tilda qterminal konsole ; do
|
||||||
@@ -986,7 +1080,7 @@ if [[ -z "$sounds" ]]; then
|
|||||||
sounds=1
|
sounds=1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [[ -z "$screenlockPinHash" ]]; then
|
if [[ $defaultConfig -eq 0 && -z "$screenlockPinHash" ]]; then
|
||||||
screenlockPinFile="${i3Path}/.screenpin"
|
screenlockPinFile="${i3Path}/.screenpin"
|
||||||
if [[ -f "$screenlockPinFile" ]]; then
|
if [[ -f "$screenlockPinFile" ]]; then
|
||||||
read -r screenlockPinHash < "$screenlockPinFile"
|
read -r screenlockPinHash < "$screenlockPinFile"
|
||||||
@@ -997,7 +1091,7 @@ if [[ -z "${screenlockMethod+x}" ]]; then
|
|||||||
screenlockNeedsSelection=1
|
screenlockNeedsSelection=1
|
||||||
fi
|
fi
|
||||||
if [[ -z "$screenlockMethod" || "$screenlockMethod" == "none" ]]; then
|
if [[ -z "$screenlockMethod" || "$screenlockMethod" == "none" ]]; then
|
||||||
if [[ -n "$screenlockPinHash" ]]; then
|
if [[ $defaultConfig -eq 0 && -n "$screenlockPinHash" ]]; then
|
||||||
screenlockMethod="pin"
|
screenlockMethod="pin"
|
||||||
else
|
else
|
||||||
screenlockMethod="none"
|
screenlockMethod="none"
|
||||||
@@ -1115,7 +1209,11 @@ write_i38_version
|
|||||||
write_desktop_shortcuts_template
|
write_desktop_shortcuts_template
|
||||||
write_i38_xresources
|
write_i38_xresources
|
||||||
# Move scripts into place
|
# Move scripts into place
|
||||||
|
if [[ $defaultConfig -eq 1 ]]; then
|
||||||
|
copy_scripts > /dev/null
|
||||||
|
else
|
||||||
copy_scripts | dialog --backtitle "I38" --progressbox "Moving scripts into place and writing config..." -1 -1
|
copy_scripts | dialog --backtitle "I38" --progressbox "Moving scripts into place and writing config..." -1 -1
|
||||||
|
fi
|
||||||
apply_screenlock_pin
|
apply_screenlock_pin
|
||||||
update_personal_customizations
|
update_personal_customizations
|
||||||
|
|
||||||
@@ -1537,6 +1635,11 @@ fi
|
|||||||
if command -v waytray-daemon &> /dev/null ; then
|
if command -v waytray-daemon &> /dev/null ; then
|
||||||
echo 'exec_always --no-startup-id bash -c "pgrep -x waytray-daemon > /dev/null || waytray-daemon"'
|
echo 'exec_always --no-startup-id bash -c "pgrep -x waytray-daemon > /dev/null || waytray-daemon"'
|
||||||
fi
|
fi
|
||||||
|
case "${fileBrowser##*/}" in
|
||||||
|
thunar|pcmanfm|pcmanfm-qt)
|
||||||
|
echo "exec_always --no-startup-id ${i3Path}/scripts/filemanager.sh ${fileBrowser}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
echo "exec_always --no-startup-id ${i3Path}/scripts/i38-clipboard.py --daemon"
|
echo "exec_always --no-startup-id ${i3Path}/scripts/i38-clipboard.py --daemon"
|
||||||
echo "exec_always --no-startup-id ${i3Path}/scripts/desktop.sh"
|
echo "exec_always --no-startup-id ${i3Path}/scripts/desktop.sh"
|
||||||
echo "exec_always --no-startup-id ${i3Path}/scripts/i38-update-check.sh"
|
echo "exec_always --no-startup-id ${i3Path}/scripts/i38-update-check.sh"
|
||||||
@@ -1800,3 +1903,6 @@ PY
|
|||||||
|
|
||||||
# Create the firstrun file
|
# Create the firstrun file
|
||||||
touch "${i3Path}/firstrun"
|
touch "${i3Path}/firstrun"
|
||||||
|
if [[ $defaultConfig -eq 1 ]]; then
|
||||||
|
echo "Default I38 configuration generated."
|
||||||
|
fi
|
||||||
|
|||||||
Executable
+74
@@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This file is part of I38.
|
||||||
|
#
|
||||||
|
# I38 is free software: you can redistribute it and/or modify it under the terms
|
||||||
|
# of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
|
set_ini_key() {
|
||||||
|
local filePath="$1"
|
||||||
|
local sectionName="$2"
|
||||||
|
local keyName="$3"
|
||||||
|
local keyValue="$4"
|
||||||
|
local tempFile
|
||||||
|
|
||||||
|
mkdir -p -- "$(dirname -- "$filePath")" || return 0
|
||||||
|
touch -- "$filePath" || return 0
|
||||||
|
tempFile="$(mktemp "${filePath}.tmp.XXXXXX")" || return 0
|
||||||
|
|
||||||
|
awk -v section="$sectionName" -v key="$keyName" -v value="$keyValue" '
|
||||||
|
BEGIN {
|
||||||
|
inSection = 0
|
||||||
|
sawSection = 0
|
||||||
|
wroteKey = 0
|
||||||
|
}
|
||||||
|
$0 ~ "^\\[" {
|
||||||
|
if (inSection && !wroteKey) {
|
||||||
|
print key "=" value
|
||||||
|
wroteKey = 1
|
||||||
|
}
|
||||||
|
inSection = ($0 == "[" section "]")
|
||||||
|
if (inSection) {
|
||||||
|
sawSection = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inSection && $0 ~ "^[[:space:]]*" key "[[:space:]]*=" {
|
||||||
|
if (!wroteKey) {
|
||||||
|
print key "=" value
|
||||||
|
wroteKey = 1
|
||||||
|
}
|
||||||
|
next
|
||||||
|
}
|
||||||
|
{ print }
|
||||||
|
END {
|
||||||
|
if (sawSection && inSection && !wroteKey) {
|
||||||
|
print key "=" value
|
||||||
|
} else if (!sawSection) {
|
||||||
|
print ""
|
||||||
|
print "[" section "]"
|
||||||
|
print key "=" value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' "$filePath" > "$tempFile" && mv -- "$tempFile" "$filePath"
|
||||||
|
rm -f -- "$tempFile"
|
||||||
|
}
|
||||||
|
|
||||||
|
fileManager="${1:-}"
|
||||||
|
fileManager="${fileManager##*/}"
|
||||||
|
|
||||||
|
case "$fileManager" in
|
||||||
|
thunar)
|
||||||
|
command -v xfconf-query > /dev/null || exit 0
|
||||||
|
xfconf-query -c thunar -p /last-view -s ThunarDetailsView > /dev/null 2>&1 || true
|
||||||
|
;;
|
||||||
|
pcmanfm)
|
||||||
|
set_ini_key "${XDG_CONFIG_HOME:-${HOME}/.config}/pcmanfm/default/pcmanfm.conf" "ui" "view_mode" "list"
|
||||||
|
;;
|
||||||
|
pcmanfm-qt)
|
||||||
|
set_ini_key "${XDG_CONFIG_HOME:-${HOME}/.config}/pcmanfm-qt/lxqt/settings.conf" "FolderView" "Mode" "list"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Reference in New Issue
Block a user