logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 15-11-2020 03:54:35

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

demande d'amélioration rofi-fm : un file-mamager avec rofi

coucou les humain-e-s smile

sur i3, j'utilise rofi pour plein de trucs. j'ai adapté un script de prx, 'dfm' qui utilise dmenu pour faire un file-manager
voici donc rofi-fm :

#!/bin/bash
# $HOME file-manager with rofi
# adapted from dfm by prx <prx@ybad.name>
# licence: MIT

[ $# -eq 0 ] && curpath="$HOME"
[ $# -eq 1 ] && curpath="$1"
[ ! -e "${curpath}" ] && exit

selection=$(ls -ap ${curpath} | rofi -dmenu -p "ouvrir ")
[ -z "$selection" ] && exit

case $selection in
    */ ) ${0} ${curpath}/${selection} ;;
    *  )
        if [ -x "${curpath}/${selection}" ]; then
            choice=$(echo -e "oui\nnon" | rofi -dmenu -p "exécuter le fichier ? ")
            case $choice in
                oui ) exec ${curpath}/${selection} ;;
                non ) urxvtcd -e nano ${curpath}/${selection} ;;
                *   ) exit ;;
            esac
        else
            # system decide how to open file
            #xdg-open "${curpath}/${selection}"
            # user decide how to open file
            run=$(find $(echo $PATH | sed 's/:/\n/g') -type f | \
                rofi -dmenu -p "ouvrir ${selection} avec ")
            ${run} ${curpath}/${selection}
        fi
        ;;
esac
 


je suis certain que l'on peut faire mieux en matière de script, surtout la partie qui propose l'ouverture du fichier avec l'application que l'on souhaite.

            run=$(find $(echo $PATH | sed 's/:/\n/g') -type f | \
                rofi -dmenu -p "ouvrir ${selection} avec ")



et j'ai un petit bug : il m'ouvre le fichier avec nano 2 fois à la suite... oO
help ?? smile

Dernière modification par arpinux (15-11-2020 14:44:45)


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#2 15-11-2020 14:31:43

SuShY
CA Debian-Facile
Lieu : Chartres
Distrib. : Debian Sid x86_64
Noyau : Linux > 6.0.0-2-amd64
(G)UI : i3WM - 4.21-1
Inscription : 06-01-2018
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

Hello, merci pour le partage, tu as pas une petite capture d'écran pour illustrer tout ça ?

Hors ligne

#3 15-11-2020 14:53:28

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

lancement de rofi-fm san sargument : ça liste le $HOME
1605448431.jpg

je rentre le nom d'un répertoire, ça filtre directement
1605448555.jpg

je rentre dans le répertoire, il liste le contenu
1605448614.jpg

comme je refuse l'exécution du fichier, il l'affiche dans nano
1605448656.jpg

donc mon bug : l'éditeur nano est lancé 2 fois à la suite ... aucune idée pourquoi....
et ma demande d'amélioration pour la section pour lister les $PATH et les applications susceptibles d'ouvrir le fichier listé
smile

nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#4 15-11-2020 14:53:56

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

!/bin/bash
# $HOME file-manager with rofi
# adapted from dfm by prx <prx@ybad.name>
# licence: MIT

[ $# -eq 0 ] && curpath="$HOME"
[ $# -eq 1 ] && curpath="$1"
[ ! -e "${curpath}" ] && exit

selection=$(ls -ap ${curpath} | rofi -dmenu -p "ouvrir ")
[ -z "$selection" ] && exit

case $selection in
    */ ) ${0} ${curpath}/${selection} ;;
    *  )
        if [ -x "${curpath}/${selection}" ]; then
            choice=$(echo -e "oui\nnon" | rofi -dmenu -p "exécuter le fichier ? ")
            case $choice in
                oui ) exec ${curpath}/${selection} ;;
                non ) urxvtcd -e vim ${curpath}/${selection} ;;
                *   ) exit ;;
            esac
        else
            # recherche les programmes associés au mime-type du fichier
            mimime=$(cat /usr/share/applications/mimeinfo.cache | grep $(xdg-mime query filetype ${curpath}/${selection}) | sed -e 's/^[^=]*=//g')
            echo "mime-type = $mimime"

            # liste les chemin vers les .desktop des programmes
            launcherss=$(echo $mimime | sed -r 's/([^;]*;)/\/usr\/share\/applications\/\1/g')
            IFS=';' read -ra launchers <<< "$launcherss"

            # récupère la commande à executer et le nom à afficher
            i=0
            for l in ${launchers[@]}; do
                command[i]="$(cat $l | grep '^Exec=' | sed -e 's/^[^=]*=//g' | sed -e 's/%.*//g')"
                name[i]="$(cat $l | grep '^Name=' | sed -e 's/^[^=]*=//g')"
                i=$((i+1))
            done

            # affichage rofi
            run=$(for n in "${name[@]}"; do echo $n; done | \
                rofi -dmenu -p "ouvrir ${selection} avec ")

            # on recherche la commande associé au nom du prgramme
            i=0
            for n in "${name[@]}"; do echo '---'; echo $n; done
            for l in "${name[@]}"; do
                ll=$(echo $l | sed -e 's/; {,2}/\n/g')
                if [ "$ll" = "$run" ]; then
                    cmd=${command[i]}
                fi
                i=$((i+1))
            done

            # on lance le programme
            ${cmd} ${curpath}/${selection}
        fi
        ;;
esac
 


#IFS=';' read -ra launchers <<< "$mimime"
#mimime=$(cat /usr/share/applications/mimeinfo.cache | grep $(xdg-mime query filetype a.txt))
 



Bon, c'est un peu bancal, ça marche chez moi en tout cas!
Le principe : on affiche seuelement les programmes associés au mime-type du fichier
évolution : ajouter tout les chemin possibles vers les programmes, rendre les regex plus robuste

ps : t'aurai pas un calendrier rofi quelque part?

Dernière modification par David5647 (15-11-2020 14:55:45)

Hors ligne

#5 15-11-2020 15:03:29

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

^^ merci David !
bien vu la recherche rapport au mime-type wink
en revanche, pour les pdf, par exemple, ça me trouve pas katarakt car il n'a pas de .desktop hmm c'est pour ça que je passais par les $PATH
et j'ai toujours l'ouverture du fichier deux fois de suite avec cette version ...

pas facile ces petites subtilités big_smile

et non, pas de rofi-calendar dans les cartons tongue

Dernière modification par arpinux (15-11-2020 15:03:55)


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#6 15-11-2020 15:19:52

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

Ah?!

Ouais, ça peut rendre dingue bash, t'as une idée, tu te bats 30min avec les espaces, les retours à la ligne...

#!/bin/bash

# $HOME file-manager with rofi
# adapted from dfm by prx <prx@ybad.name>
# licence: MIT

[ $# -eq 0 ] && curpath="$HOME"
[ $# -eq 1 ] && curpath="$1"
[ ! -e "${curpath}" ] && exit

selection=$(ls -ap ${curpath} | rofi -dmenu -p "ouvrir ")
[ -z "$selection" ] && exit

case $selection in
    */ ) ${0} ${curpath}/${selection} ;;
    *  )
        if [ -x "${curpath}/${selection}" ]; then
            choice=$(echo -e "oui\nnon" | rofi -dmenu -p "exécuter le fichier ? ")
            case $choice in
                oui ) exec ${curpath}/${selection} ;;
                non ) urxvtcd -e vim ${curpath}/${selection} ;;
                *   ) exit ;;
            esac
        else
            # recherche les programmes associés au mime-type du fichier
            mimime=$(cat /usr/share/applications/mimeinfo.cache | grep $(xdg-mime query filetype ${curpath}/${selection}) | sed -e 's/^[^=]*=//g')
            echo "mime-type = $mimime"

            # liste les chemin vers les .desktop des programmes
            launcherss=$(echo $mimime | sed -r 's/([^;]*;)/\/usr\/share\/applications\/\1/g')
            IFS=';' read -ra launchers <<< "$launcherss"

            # récupère la commande à executer et le nom à afficher
            i=0
            for l in ${launchers[@]}; do
                command[i]="$(cat $l | grep '^Exec=' | sed -e 's/^[^=]*=//g' | sed -e 's/%.*//g')"
                name[i]="$(cat $l | grep '^Name=' | sed -e 's/^[^=]*=//g')"
                i=$((i+1))
            done
            name[i]="Autres Programmes"
            command[i]="rofi -show drun"

            # affichage rofi
            run=$(for n in "${name[@]}"; do echo $n; done | \
                rofi -dmenu -p "ouvrir ${selection} avec ")

            # on recherche la commande associé au nom du prgramme
            i=0
            for n in "${name[@]}"; do echo '---'; echo $n; done
            for l in "${name[@]}"; do
                ll=$(echo $l | sed -e 's/; {,2}/\n/g')
                if [ "$ll" = "$run" ]; then
                    cmd=${command[i]}
                fi
                i=$((i+1))
            done

            # on lance le programme
            ${cmd} ${curpath}/${selection}
        fi
        ;;
esac
 
 



Et un truc : autres programmes? ^^

Tu le lances comment katarakt? Les environnements de bureau le listent?

Dernière modification par David5647 (15-11-2020 15:26:06)

Hors ligne

#7 15-11-2020 15:32:34

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

^^ l'ouverture dans vim ne se fait qu'une fois, cool big_smile mais si je recolle 'nano', ça ouvre deux fois... oO et j'ai besoin de nano car vim n'est pas installé partout wink
et l'entrée "autre programme" ne chope pas le fichier à ouvrir, ça lance juste l'application hmm

te prends pas trop la tête, ça fonctionne aussi avec xdg-open $file , bien plus simple, mais je tente le super-bonus big_smile

et katarakt se lance depuis le terminal, non, les autrs menus ne le voient pas smile

Dernière modification par arpinux (15-11-2020 15:33:14)


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#8 15-11-2020 15:46:15

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

ah oui, tu peux remettre ta recherche dans le path à la place en modifiant la dernière ligne:

            # on lance le programme
            if [ "$run" = "Autres Programmes" ]; then
                cmd=$(find $(echo $PATH | sed 's/:/\n/g') -type f | \
                    rofi -dmenu -p "ouvrir ${selection} avec ")
            fi
            ${cmd} ${curpath}/${selection}



Pour rendre plus joli, il faut faire comme je l'ai fait, tu mets en place deux listes une qui affiche le nom, l'autre contient le chemin en entier

Mais il y a quelque chose qui doit être possible avec le paramètre "-modi" de rofi, histoire d'afficher tout d'un coup, avec les liste des programmes associés aux mimetype en tête et les commandes du $PATH à la suite

Hors ligne

#9 15-11-2020 23:10:28

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

re smile

alors j'ai simplifié et : bug de la double ouverture résolu et affichage des noms des applications résolu aussi big_smile

#!/bin/bash
# $HOME file-manager with rofi
# adapted from dfm by prx <prx@ybad.name>
# licence: MIT

[ $# -eq 0 ] && curpath="$HOME"
[ $# -eq 1 ] && curpath="$1"
[ ! -e "${curpath}" ] && exit

selection=$(ls -ap ${curpath} | rofi -dmenu -p "ouvrir ")
[ -z "$selection" ] && exit

case $selection in
    */ ) ${0} ${curpath}/${selection} ;;
    *  )
        if [ -x "${curpath}/${selection}" ]; then
            choice=$(echo -e "afficher\nexécuter" | rofi -dmenu -p "que faire avec ${selection} ? ")
            case $choice in
                afficher ) x-terminal-emulator -e $EDITOR ${curpath}/${selection} ;;
                exécuter ) exec ${curpath}/${selection} ;;
                *   ) exit ;;
            esac
        else
            # system decide how to open file
            #xdg-open "${curpath}/${selection}"
            # user decide how to open file
            run=$(for d in $(echo $PATH | sed 's/:/\n/g'); do cd $d; ls; done | \
                rofi -dmenu -p "ouvrir ${selection} avec ")
            ${run} ${curpath}/${selection}
        fi
        ;;
esac



me reste à intégrer une entrée pour les programmes par défaut via mime-type avec le même formatage (uniquement le nom des applis) à poser en haut de la liste.
mon souhait : lors de l'exécution du script, si c'est un fichier (exécutable qu'on a choisi d'afficher ou non-exécutable), une liste s'affiche avec en premier, les applications recommandées (comme la version de David) puis, à la suite dans la même fenêtre, la liste complète des applis dispo dans $PATH comme c'est actuellement.

donc il faudrait que la "liste" contienne "recommends" + "allapps" big_smile ... mais je demande pas de le faire, j'essaye aussi de mon côté ... c'est plus pour le partage et le fun... vu l'ambiance pourrie dehors tongue


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#10 15-11-2020 23:40:48

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

arpinux a écrit :

for d in $(echo $PATH | sed 's/:/\n/g'); do cd $d; ls; done

Haha! Malin:P

tu peux faire : already used + "recommends" + "allapps" aussi, comme ça, katarakt remonte en haut de liste!

Hors ligne

#11 15-11-2020 23:59:24

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

re re smile

je crois qu'on tient une release tongue

amélioration : détection du mime-type de la sélection et détection de l'application par défaut pour cette application afin de la coller en début de liste lors du choix
utilisation du code de David pour la détection du mimetype + formatage de la commande

#!/bin/bash
# $HOME file-manager with rofi
# adapted from dfm by prx <prx@ybad.name>
# licence: MIT

[ $# -eq 0 ] && curpath="$HOME"
[ $# -eq 1 ] && curpath="$1"
[ ! -e "${curpath}" ] && exit

selection=$(ls -ap ${curpath} | rofi -dmenu -p "ouvrir ")
[ -z "$selection" ] && exit

case $selection in
    */ ) ${0} ${curpath}/${selection} ;;
    *  )
        if [ -x "${curpath}/${selection}" ]; then
            choice=$(echo -e "afficher\nexécuter" | rofi -dmenu -p "que faire avec ${selection} ? ")
            case $choice in
                afficher ) x-terminal-emulator -e $EDITOR ${curpath}/${selection} && exit ;;
                exécuter ) exec ${curpath}/${selection} && exit ;;
                *   ) exit ;;
            esac
        else
            # system decide how to open file
            #xdg-open "${curpath}/${selection}"

            # user decide how to open file
            # define default application for selection
            defdesk=$(xdg-mime query default $(echo $(xdg-mime query filetype ${curpath}/${selection})))
            defapp=$(grep ^Exec /usr/share/applications/${defdesk} | sed -e 's/^[^=]*=//g' | sed -e 's/%.*//g')
            # get all apps in $PATH
            allapps=$(for d in $(echo $PATH | sed 's/:/\n/g'); do cd $d; ls; done)
            # launch menu
            run=$(echo -e "${defapp}\n${allapps}" | \
                rofi -dmenu -p "ouvrir ${selection} avec ")
            ${run} ${curpath}/${selection} && exit
        fi
        ;;
esac

 



me reste un dernier bug : lors de la détection des $PATH : retour terminal

/home/arp/bin/rofi-fm: ligne 32 : cd: /usr/X11R6/bin: Aucun fichier ou dossier de ce type


mais ça ne gêne pas l'exécution smile

Dernière modification par arpinux (16-11-2020 00:36:38)


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#12 16-11-2020 01:03:29

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

arpinux a écrit :

me reste un dernier bug : lors de la détection des $PATH : retour terminal


Ça c'est un $PATH mal-entretenu. tongue

Juste quelques " à ajouter pour les chemins contenants des espaces et c'est la v1.0

Hors ligne

#13 16-11-2020 01:11:17

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

^^ vi, c'est nettoyé tongue
ah oui.... les noms à espace... j'en ai si peu que j'ai pas pensé. merci David !

donc version 0.9 (j'attends toujours de voir si je peux optimiser wink )

#!/bin/bash
# $HOME file-manager with rofi
# adapted from dfm by prx <prx@ybad.name>
# mods arpinux & David5647
# licence: MIT

[ $# -eq 0 ] && curpath="$HOME"
[ $# -eq 1 ] && curpath="$1"
[ ! -e "${curpath}" ] && exit

selection=$(ls -ap ${curpath} | rofi -dmenu -p "ouvrir ")
[ -z "${selection}" ] && exit

case ${selection} in
    */ ) ${0} "${curpath}/${selection}" ;;
    *  )
        if [ -x "${curpath}/${selection}" ]; then
            choice=$(echo -e "afficher\nexécuter" | rofi -dmenu -p "que faire avec ${selection} ? ")
            case $choice in
                afficher ) x-terminal-emulator -e $EDITOR "${curpath}/${selection}" && exit ;;
                exécuter ) exec "${curpath}/${selection}" && exit ;;
                *   ) exit ;;
            esac
        else
            # system decide how to open file
            #xdg-open "${curpath}/${selection}"

            # user decide how to open file
            # define default application for selection
            defdesk=$(xdg-mime query default $(echo $(xdg-mime query filetype "${curpath}/${selection}")))
            defapp=$(grep ^Exec /usr/share/applications/${defdesk} | sed -e 's/^[^=]*=//g' | sed -e 's/%.*//g')
            # get all apps in $PATH
            allapps=$(for d in $(echo $PATH | sed 's/:/\n/g'); do cd $d; ls; done)
            # launch menu
            run=$(echo -e "${defapp}\n${allapps}" | \
                rofi -dmenu -p "ouvrir ${selection} avec ")
            ${run} "${curpath}/${selection}" && exit
        fi
        ;;
esac
 


big_smile merci David et prx

Dernière modification par arpinux (16-11-2020 01:23:09)


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#14 16-11-2020 13:32:14

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

ahhhhh
et voilà la final : compatibilité sh (et non bash)
correction pour la prise en compte des espaces dans les noms des fichiers et des dossiers
nobugs... tongue thx prx smile

#!/bin/sh
# $HOME file-manager with rofi
# adapted from dfm by prx <prx@ybad.name>
# licence: MIT

[ $# -eq 0 ] && curpath="$HOME"
[ $# -eq 1 ] && curpath="$1"
[ ! -d "${curpath}" ] && exit

selection=$(ls -ap "${curpath}" | rofi -dmenu -p "ouvrir ")
[ -z "${selection}" ] && exit

case ${selection} in
    */ ) ${0} "${curpath}/${selection}" ;;
    *  )
        if [ -x "${curpath}/${selection}" ]; then
            choice=$(printf "afficher\nexécuter" | rofi -dmenu -p "que faire avec ${selection} ? ")
            case $choice in
                afficher ) exec x-terminal-emulator -e $EDITOR "${curpath}/${selection}" && exit ;;
                exécuter ) exec "${curpath}/${selection}" && exit ;;
                *   ) exit ;;
            esac
        else
            # system decide how to open file
            #xdg-open "${curpath}/${selection}"

            # user decide how to open file
            # define default application for selection
            defdesk=$(xdg-mime query default $(printf $(xdg-mime query filetype "${curpath}/${selection}")))
            defapp=$(grep ^Exec /usr/share/applications/${defdesk} | sed -e 's/^[^=]*=//g' | sed -e 's/%.*//g')
            # get all apps in $PATH
            allapps=$(for d in $(printf $PATH | sed 's/:/\n/g'); do cd $d; ls; done)
            # launch menu
            run=$(printf "${defapp}\n${allapps}" | \
                rofi -dmenu -p "ouvrir ${selection} avec ")
            exec ${run} "${curpath}/${selection}" && exit
        fi
        ;;
esac
 


nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

#15 16-11-2020 14:51:58

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

Hé! Bien joué! Un script de plus dans ma collec de scripts rofi!  lol
Pour le partage, on peut aussi lancer rofi en interactif, pour qu'il attrape la sortie standard d'un script (pompé par là : rofi-file-browser.sh)
Ca impose d'autre contraintes, mais ça a son charme aussi. tongue

la commande :

rofi  -show rofi-fm -modi rofi-fm:./rofi-fm.sh


le script :

cat rofi-fm.sh

#!/bin/bash

ROFI_CUR_DIR="$(cat rofi_current_dir)/$@"
if [ -d "$ROFI_CUR_DIR" ]; then
    echo "$ROFI_CUR_DIR" > rofi_current_dir
    printf "%b\n" '../.\n./.\n'$(ls $ROFI_CUR_DIR | sed -e 's/ /\n/g')
else
    echo '../.'
    echo "that's not a directory"
fi
 


et il faut initialiser le contenu du fichier :

echo $HOME > rofi_current_dir



Bonus : un début de bout de petit script de calendrier python/rofi :

#!/usr/bin/env python3

import datetime
import calendar

from itertools import chain


def show_rofi(txt_body, txt_head):

    cmd = subprocess.Popen(f'echo "{txt_body}"', shell=True, stdout=subprocess.PIPE)
    selection = subprocess.check_output(f'rofi -dmenu -p "{txt_head}"', stdin=cmd.stdout, shell=True).decode('utf-8').replace('\n','')

    return selection

def weekly_transpose(cal):

    # split calendar into week
    iter_week = range(len(cal)//7)
    cal = [cal[i*7:(i+1)*7] for i in iter_week]

    # transpose calendar
    iter_day = range(len(cal[0]))
    cal =[[row[i] for row in cal] for i in iter_day]

    # pack it into a lisr
    cal = list(chain(*cal))

    return cal

d = calendar.datetime.date.today()
start_day, month_length = calendar.monthrange(d.year, d.month)

# init calendar with 5 blank week
cal = [0]*6*7

# fill day numbers of the month
cal[start_day:month_length+start_day] = range(1, month_length+1)

cal = list(chain(['L','M','M','J','V','S','D'], cal))

# Format calendar for rofi (column by column)
cal = weekly_transpose(cal)

cal = '\n'.join((str(c) for c in cal))

rofi=f"""rofi -dmenu -p "calendrier : " \
    -show calendrier \
    -hide-scrollbar true \
    -bw 0 \
    -lines 7 \
    -line-padding 5 \
    -padding 10 \
    -width 25 \
    -xoffset 320 -yoffset 25 \
    -location 2 \
    -columns 7"""


import subprocess
cmd = subprocess.Popen(f"echo \'{cal}\'", shell=True, stdout=subprocess.PIPE)
output = subprocess.check_output(rofi, stdin=cmd.stdout, shell=True).decode('utf-8').replace('\n','')

print(output)
 

Dernière modification par David5647 (16-11-2020 14:54:11)

Hors ligne

#16 16-11-2020 15:14:20

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : nakeDeb
Noyau : Linux 6.1 amd64
(G)UI : sway - i3wm - fluxbox
Inscription : 30-06-2016
Site Web

Re : demande d'amélioration rofi-fm : un file-mamager avec rofi

vi, j'ai vu en fouillant sur le net qu'il y avait tout plein de possibilités avec rofi... là je voulais vraiment faire une adaptation quasi transparente du script de prx, surtout car il existe un grand nombre de scripts basés sur dmenu et que je voulais adapter pour pouvoir faire de même avec tous les autres wink


merci David pour ce repartage avec bonus ! big_smile

nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile - Les cahiers du débutant - ISO Debian-Facile - 3hg - nakeDeb
GNU/Linux©2006-2024

Hors ligne

Pied de page des forums