pcmanfm
やpcmanfm-qt
などの一部のファイルマネージャーは、ターミナルを開く前に$PWD
を設定して現在のディレクトリでターミナルを開きます。ほとんどの端末は期待どおりに動作します。これには、xterm
、gnome-terminal
、およびxfce4-terminal
が含まれます。ただし、konsole
は常に事前に指定されたディレクトリ(通常は$HOME
)で開きます。
konsole
を他の端末と同様に$PWD
を尊重するようにするにはどうすればよいですか?
これは、少なくとも2010年から続いている長年の問題です。
以前のソリューションでは、ソースコードにパッチを適用する必要がありました。パッチが提出されたようですが、受け入れられませんでした。
数年間、konsole
が$PWD
を尊重するようにする設定はありませんでした。ただし、コマンドラインオプション--workdir
があり、スクリプトで悪用してkonsole
を必要に応じて機能させることができます。
/usr/bin
の出力を調べて、echo $PATH
より優先されるユーザーがアクセス可能な場所を見つけるためにパスを確認します。一般的なオプションには、~/bin/
および~/.local/bin/
が含まれます。
次の内容の~/bin/konsole
(または~/.local/bin/konsole
)という名前のファイルを作成します。
#!/usr/bin/env bash
# make konsole respect $PWD, as other terminals do
# save as ~/bin/konsole or ~/.local/bin/konsole
# catch unset or mis-set PWD
[[ -z $PWD ]] && PWD="$HOME"
[[ "$PWD" == '/' ]] && PWD="$HOME"
term_cls='konsole' # window class needed for xdotool to activate window
term_bin=`type -a -p konsole | tail -n 1` # location of original `konsole`
term_cmd=( "$term_bin" )
[[ $PWD ]] && term_cmd+=( --workdir "$PWD" )
term_tab=( "${term_cmd[@]}" --new-tab )
case $1 in
-h|--help|-v|--version|--author|--license|--list-profiles|--list-profile-properties)
"$term_bin" "$1"
;;
-p)
echo 'cannot change profile properties at this time'
;;
*)
find_app=( xdotool search --onlyvisible --class "$term_cls" windowactivate exec "${term_tab[@]}" )
"${find_app[@]}" || xdotool exec "${term_cmd[@]}"
;;
esac
新しいスクリプトに実行権限を付与します。
chmod +x ~/bin/konsole
これで、このスクリプトが実行されるたびに、$PWD
が処理され、/usr/bin/konsole --workdir "$PWD"
が実行されます。適切なフォルダに配置すると、実際のkonsole
よりも優先され、使用方法は透過的になります。希望どおりに動作しない他のプログラムに対しても、同様のスクリプトを作成できます。