web-dev-qa-db-fra.com

Konsole ne s'ouvre pas dans le répertoire en cours (pwd)

Certains gestionnaires de fichiers, tels que pcmanfm ou pcmanfm-qt, ouvrent des terminaux dans le répertoire en cours en définissant $PWD avant d'ouvrir le terminal. La plupart des terminaux se comportent comme prévu. Ceci inclut xterm, gnome-terminal et xfce4-terminal. Cependant, konsole s'ouvre toujours dans un répertoire prédéfini (généralement $HOME).

Comment faire en sorte que konsole soit respecté $PWD comme le font les autres terminaux?

C'est un problème de longue date qui existe depuis au moins 2010.

Les solutions précédentes nécessitaient de corriger le code source. Apparemment, un patch a été soumis, mais jamais accepté.

1
xiota

Depuis plusieurs années, aucun paramètre n'a été défini pour que konsole respecte $PWD. Cependant, il existe une option de ligne de commande --workdir qui peut être exploitée par un script pour que konsole fonctionne comme vous le souhaitez.

  1. Vérifiez le chemin pour localiser un emplacement accessible à l'utilisateur qui prime sur /usr/bin en examinant le résultat de echo $PATH. Les options typiques incluent ~/bin/ et ~/.local/bin/.

  2. Créez un fichier nommé ~/bin/konsole (ou ~/.local/bin/konsole) avec le contenu suivant:

    #!/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
    
  3. Donnez au nouveau script les autorisations d'exécution.

    chmod +x ~/bin/konsole
    

Désormais, chaque fois que ce script sera exécuté, il traitera $PWD et exécutera /usr/bin/konsole --workdir "$PWD". S'il est placé dans le bon dossier, il aura la priorité sur le réel konsole et l'utilisation sera transparente. Des scripts similaires peuvent être créés pour d'autres programmes qui ne se comportent pas comme souhaité.

2
glenn jackman