と思った。
・ダブルクリックの設定
・マウス加速の設定
・マウスのテーマ切替
これらを、一つのツールでやりたい、って事です。
(但し、現状ではホイール関連の設定についての調べができてない)
マウスのテーマ切替をするには、予めテーマをダウンロードして解凍し、
解凍してできたディレクトリをそのまま /root/.icons へコピーしておく。
(defaultの選択では、画像が表示されません)
(今現在使用しているテーマのディレクトリを削除すると不具合が起こります)
※ 注意 ※
0)Precise Puppy 5.7.1JP でしか動作確認していません。
動作には、gtkdialog0.8.3 xcur2png が必要です。
1)動作の保証はしません。
2)隠しファイルの操作をしています。
3)最悪の場合、Puppy Linux自体の不具合が起こります。
よって、スクリプトは読むだけ にしてください
以上宜しくお願いします。
#!/bin/bash
#mouse_setting042
########## Page1 ##########
#設定ファイル.gtkrc.mineの存在を確認する
if [ ! -e /root/.gtkrc.mine ];then
touch /root/.gtkrc.mine
echo "gtk-double-click-time=250" > /root/.gtkrc.mine
echo "gtk-double-click-distance=5" >> /root/.gtkrc.mine
fi
#/root/.config/rox.sourceforge.net/ROX-Filer/Optionsから
#bind_single_clickとbind_single_pinboardの値を切り出し、変数に代入
rox_path="/root/.config/rox.sourceforge.net/ROX-Filer/Options"
single_click_n=$(grep -n "bind_single_click" $rox_path)
single_click_n=$(echo $single_click_n | cut -f1 -d ":")
def_single_click_str=$(grep "bind_single_click" $rox_path)
def_single_click_value=$(echo $def_single_click_str | cut -c 34)
single_pinboard_n=$(grep -n "bind_single_pinboard" $rox_path)
single_pinboard_n=$(echo $single_pinboard_n | cut -f1 -d ":")
def_single_pinboard_str=$(grep "bind_single_pinboard" $rox_path)
def_single_pinboard_value=$(echo $def_single_pinboard_str | cut -c 37)
def_single_flag=`echo $(( $def_single_click_value + $def_single_pinboard_value ))`
if [ "$def_single_flag" != "0" ]; then
def_single_click_boolean="false"
else
def_single_click_boolean="true"
fi
#gtk-double-click-timeの値を.gtkrc.mineから切り出し、変数に代入
def_time_str=$(grep "gtk-double-click-time" /root/.gtkrc.mine)
if [ "$def_time_str" = "" ]; then
echo "gtk-double-click-time=250" >> /root/.gtkrc.mine
def_time_str=$(grep "gtk-double-click-time" /root/.gtkrc.mine)
fi
def_time_value=$(echo $def_time_str | cut -c 23-${#def_time_str})
#gtk-double-click-distanceの値を.gtkrc/mineから切り出し、変数に代入
def_distance_str=$(grep "gtk-double-click-distance" /root/.gtkrc.mine)
if [ "$def_distance_str" = "" ]; then
echo "gtk-double-click-distance=5" >> /root/.gtkrc.mine
def_distance_str=$(grep "gtk-double-click-distance" /root/.gtkrc.mine)
fi
def_distance_value=$(echo $def_distance_str | cut -c 27-${#def_distance_str})
########## Page2 ##########
#xset -qコマンドからマウス関連の数値を切り出し、変数に代入
temp_xset=$(xset -q)
def_acceleration_str=$(echo "$temp_xset" | grep "acceleration")
def_acceleration_value_str=$(echo $def_acceleration_str | cut -f2 -d " ")
def_acceleration_value=$(echo $def_acceleration_value_str | cut -f1 -d "/")
dot_point=$(echo $(( ${#def_acceleration_value} - 1 )))
front_value=$(echo "$def_acceleration_value" | cut -c 1-"$dot_point")
bottom_value=$(echo "$def_acceleration_value" | cut -c ${#def_acceleration_value})
def_acceleration_value=$front_value"."$bottom_value
def_threshold_value=$(echo $def_acceleration_str | cut -f4 -d " ")
def_x_parameter="m "$def_acceleration_value_str" "$def_threshold_value
#設定ファイル/.xset.shの存在を確認する
if [ ! -e /root/.xset.sh ]; then
touch /root/.xset.sh
chmod +x /root/.xset.sh
echo "xset "$def_x_parameter > /root/.xset.sh
fi
########## Page3 ##########
mkdir -p /tmp/ao_o10yan_temp
#symlinkの存在を確認する
if [ -e /root/.icons/default ]; then
def_symlink=$(readlink /root/.icons/default)
def_symlink_dir=$(echo $def_symlink | cut -f4 -d "/")
else
def_symlink="/root/.icons/default"
def_symlink_dir="default"
fi
#lsコマンドで列挙して<list>の<item>を作成する
temp_directories=$(ls /root/.icons/)
#echo $temp_directories
i_count=0
items="<item>default</item>"
if [ "$def_symlink_dir" = "default" ]; then
def_selected_rwo=0
fi
for i in $temp_directories
do
if [ "$i" != "default" -a "$i" != "ROX" -a -e "/root/.icons/""$i""/cursors" ]; then
i_count=$(( $i_count + 1 ))
# echo $i_count$i
if [ "$def_symlink_dir" = "$i" ]; then
def_selected_row="$i_count"
xcur2png -d /tmp/ao_o10yan_temp /root/.icons/"$i"/cursors/left_ptr
xcur2png -d /tmp/ao_o10yan_temp /root/.icons/"$i"/cursors/hand
xcur2png -d /tmp/ao_o10yan_temp /root/.icons/"$i"/cursors/watch
fi
items=$items"<item>"$i"</item>"
fi
# echo $items
done
#####################################################################
#OKボタンが押された時に呼び出す
export ok_action='
#前処理
msg_flag1=0
msg_flag2=0
msg_flag3=0
new_time_str="gtk-double-click-time="$TIME
new_distance_str="gtk-double-click-distance="$DISTANCE
#ダブルクリック、シングルクリックの切替設定
if [ "'$def_single_click_boolean'" != "$CHKBOX" ]; then
if [ "$CHKBOX" = "true" ]; then
new_single_flag=0
else
new_single_flag=1
fi
#ファイラとピンボードの設定を一緒に行う
#どちらかがシングル、どちらかがダブルと言う設定にはしない!!
sed --in-place "'$single_click_n's/'$def_single_click_value'/$new_single_flag/" '$rox_path'
sed --in-place "'$single_pinboard_n's/'$def_single_pinboard_value'/$new_single_flag/" '$rox_path'
msg_flag1=1
fi
#ダブルクリック間隔、反応距離の設定(文字列整形した後の比較じゃなくてもいいのに)
if [ "'$def_time_str'" != "$new_time_str" -o "'$def_distance_str'" != "$new_distance_str" ]; then
sed --in-place --expression=s/'$def_time_str'/$new_time_str/ /root/.gtkrc.mine
sed --in-place --expression=s/'$def_distance_str'/$new_distance_str/ /root/.gtkrc.mine
msg_flag1=1
fi
#加速の設定
if [ "'$def_acceleration_value'" != "$ACCELERATION" -o "'$def_threshold_value'" != "$THRESHOLD" ]; then
new_acceleration=$(echo $ACCELERATION | sed "s/\.//")
echo $new_acceleration
new_x_parameter="m "$new_acceleration"/10 "$THRESHOLD
echo $new_x_parameter
xset $new_x_parameter
sed --in-place "s:'$def_x_parameter':$new_x_parameter:" /root/.xset.sh
msg_flag2=3
fi
#テーマの変更
new_symlink="/root/.icons/"$DIRECTORY
echo "def_symlink="'$def_symlink'
echo "new_symlink="$new_symlink
if [ "$new_symlink" != "/root/.icons/" -a "'$def_symlink'" != "$new_symlink" ]; then
if [ -e /root/.icons/default ]; then
rm /root/.icons/default
fi
if [ "'$def_symlink'" != "$new_symlink" ]; then
if [ "$new_symlink" != "/root/.icons/default" ]; then
ln -s $new_symlink /root/.icons/default
fi
msg_flag3=1
fi
fi
#change_msg_flagにより、表示するメッセージを変える
change_msg_flag=$(( $msg_flag1 + $msg_flag2 + $msg_flag3 ))
if [ "$change_msg_flag" = "0" ]; then
msg0="設定が変更されていません"
msg1="何もせずに終了します"
msg2="..."
else
msg0="マウスの設定を変更しました"
msg1="Xサーバをリスタートして効果を確認してください"
msg2="..."
#加速調整はxのリスタートなしで反映される
if [ "$change_msg_flag" = "3" ]; then
msg1="..."
fi
if [ "$msg_flag2" = "3" ]; then
msg2="加速の変更は、既に反映されています。確認してください"
fi
fi
export SUB_DIALOG="
<window title=\"Double Click Adjust\" width_request=\"400\" height_request=\"300\">
<vbox>
<text height-request=\"40\">
<label>"$msg0"</label>
</text>
<text height-request=\"40\">
<label>"$msg1"</label>
</text>
<text height-request=\"40\">
<label>"$msg2"</label>
</text>
<button height-request=\"100\"><label>閉じる</label>
<action type=\"exit\">exit</action>
</button>
</vbox>
</window>"
gtkdialog -c --program SUB_DIALOG
'
#####################################################################
#マウステーマプレビュー用
export list_on_change='
if [ "$DIRECTORY" = "default" ]; then
if [ -e /tmp/ao_o10yan_temp/left_ptr_000.png ]; then
rm /tmp/ao_o10yan_temp/left_ptr_000.png
rm /tmp/ao_o10yan_temp/hand_000.png
rm /tmp/ao_o10yan_temp/watch_000.png
fi
else
temp_file_dir="/tmp/ao_o10yan_temp/"$DIRECTORY
if [ "$temp_file_dir" != "/tmp/ao_o10yan_temp/" ]; then
xcur2png -d /tmp/ao_o10yan_temp /root/.icons/"$DIRECTORY"/cursors/left_ptr
xcur2png -d /tmp/ao_o10yan_temp /root/.icons/"$DIRECTORY"/cursors/hand
xcur2png -d /tmp/ao_o10yan_temp /root/.icons/"$DIRECTORY"/cursors/watch
fi
fi
'
#####################################################################
#後始末
export del_temp='
rm -rf /tmp/ao_o10yan_temp
rm -f ./left_ptr.conf
rm -f ./hand.conf
rm -f ./watch.conf
'
#####################################################################
export MAIN_DIALOG='
<window title="マウスの設定" width_request="400" height_request="300">
<vbox>
<notebook labels="ダブルクリック|加速|テーマ">
<vbox>
<text>
<label>ダブルクリック調整用スライダー</label>
</text>
<frame>
<checkbox>
<label>ダブルクリックを有効にする</label>
<default>'$def_single_click_boolean'</default>
<variable>CHKBOX</variable>
<action>if true enable:TIME</action>
<action>if false disable:TIME</action>
<action>if true enable:DISTANCE</action>
<action>if false disable:DISTANCE</action>
</checkbox>
</frame>
<frame 間隔(ミリ秒)>
<hscale range-min="250" range-max="2000" range-step="1">
<default>'$def_time_value'</default>
<variable>TIME</variable>
<sensitive>'$def_single_click_boolean'</sensitive>
</hscale>
</frame>
<frame 距離(ピクセル)>
<hscale range-min="5" range-max="100" range-step="1">
<default>'$def_distance_value'</default>
<variable>DISTANCE</variable>
<sensitive>'$def_single_click_boolean'</sensitive>
</hscale>
</frame>
</vbox>
<vbox>
<text>
<label>加速調整用スライダー</label>
</text>
<frame 加速(数値が大きい程、マウスが速く動きます)>
<hscale range-min="1" range-max="10" range-step="0.1">
<default>'$def_acceleration_value'</default>
<variable>ACCELERATION</variable>
</hscale>
</frame>
<frame 閾値(数値が小さい程、マウスが速く動きます)>
<hscale range-min="1" range-max="20" range-step="1">
<default>'$def_threshold_value'</default>
<variable>THRESHOLD</variable>
</hscale>
</frame>
</vbox>
<vbox>
<text>
<label>マウスのテーマ切替</label>
</text>
<hbox>
<list selected-row="'$def_selected_row'">
<variable>DIRECTORY</variable>
<width>150</width>
<height>208</height>
'$items'
<action>bash -c "$list_on_change"</action>
<action>refresh:LEFT_PTR</action>
<action>refresh:HAND</action>
<action>refresh:WATCH</action>
</list>
<frame プレビュー>
<vbox>
<pixmap space-expand="true">
<variable>LEFT_PTR</variable>
<height>40</height>
<input file>/tmp/ao_o10yan_temp/left_ptr_000.png</input>
</pixmap>
<pixmap space-expand="true">
<variable>HAND</variable>
<height>40</height>
<input file>/tmp/ao_o10yan_temp/hand_000.png</input>
</pixmap>
<pixmap space-expand="true">
<variable>WATCH</variable>
<height>40</height>
<input file>/tmp/ao_o10yan_temp/watch_000.png</input>
</pixmap>
</vbox>
</frame>
</hbox>
</vbox>
</notebook>
<hbox>
<button ok>
<action>bash -c "$ok_action"</action>
<action>bash -c "$del_temp"</action>
<action type="exit">exit</action>
</button>
<button cancel>
<action>bash -c "$del_temp"</action>
<action type="exit">exit</action>
</button>
</hbox>
</vbox>
</window>
'
gtkdialog -c --program MAIN_DIALOG
0 件のコメント :
コメントを投稿