Menu secundário
Publicado por João Gabriel (última atualização em 03/02/2021)
[ Hits: 1.599 ]
Uma forma de utilizar o ROFI ou o dmenu juntamente com arquivos DESKTOP para criar um menu secundário, separado do principal.
#!/usr/bin/env bash # Script para ler arquivos DESKTOP em um diretório, sendo usado juntamente # com o ROFI/dmenu para criar um menu secundário, separado do principal. # # Requer PCRE, ROFI/dmenu # # 11/20 - por goll72 # Se você quiser deixar o diretório com os arquivos DESKTOP dentro de /usr/share/applications/, # use um diretòrio oculto, senão as entradas DESKTOP que você criar aparecerão no menu principal. # Você pode chamar o script com "dir=<DIRETÓRIO> script" para mudar o diretório utilizado. dir=${dir:-/usr/share/applications/.games/} for i in "$dir"/*.desktop; do IFS=$'\n' # O arquivo DESKTOP deve cumprir às normas da Desktop Entry Specification desktop-file-validate "$i" >/dev/null 2>&1 || continue # Apenas entradas com Type=Application são usadas no momento. # Com a opção NoDisplay=true, a entrada não aparecerá no menu. pcregrep '(NoDisplay=true|(?!Type=Application))' >/dev/null <<< "$i" || continue # Mesmo não sendo requirido pela DES, é preciso uma opção Exec nas entradas pcregrep 'Exec=' >/dev/null <<< "$i" && continue # Salva o conteúdo do arquivo DESKTOP atual numa variável progfile="$(<"$i")" # Retira os prefixos das linhas Name= e Exec= # E adiciona os conteúdos das linhas a um array progname="${gamefile##*$'\n'Name=}" progname="${gamename%%$'\n'*}" prognameA+=("$gamename") progexec="${gamefile##*$'\n'Exec=}" progexec="${gamexec%%$'\n'*}" progexecA+=("$gamexec") done # Adiciona os nomes dos itens que estão no array a uma variavél # Os nomes são separados por \n (linefeed) for i in "${!prognameA[@]}"; do proglist+="${prognameA[$i]}"$'\n' done # Se você usa ROFI, use o primeiro item e comente o segundo # Se você usa dmenu, use o segundo item e comente o primeiro. #menusel=$(printf '%s' "$gamelist" | rofi -dmenu -i) menusel=$(printf '%s' "$gamelist" | dmenu#!/usr/bin/env bash # Script para ler arquivos DESKTOP em um diretório, sendo usado juntamente # com o ROFI/dmenu para criar um menu secundário, separado do principal. # # Requer PCRE, ROFI/dmenu # # 11/20 - por goll72 # Se você quiser deixar o diretório com os arquivos DESKTOP dentro de /usr/share/applications/, # use um diretòrio oculto, senão as entradas DESKTOP que você criar aparecerão no menu principal. # Você pode chamar o script com "dir=<DIRETÓRIO> script" para mudar o diretório utilizado. dir=${dir:-/usr/share/applications/.games/} for i in "$dir"/*.desktop; do IFS=$'\n' # O arquivo DESKTOP deve cumprir às normas da Desktop Entry Specification desktop-file-validate "$i" >/dev/null 2>&1 || continue # Apenas entradas com Type=Application são usadas no momento. # Com a opção NoDisplay=true, a entrada não aparecerá no menu. pcregrep '(NoDisplay=true|(?!Type=Application))' >/dev/null <<< "$i" || continue # Mesmo não sendo requirido pela DES, é preciso uma opção Exec nas entradas pcregrep 'Exec=' >/dev/null <<< "$i" && continue # Salva o conteúdo do arquivo DESKTOP atual numa variável progfile="$(<"$i")" # Retira os prefixos das linhas Name= e Exec= # E adiciona os conteúdos das linhas a um array progname="${gamefile##*$'\n'Name=}" progname="${gamename%%$'\n'*}" prognameA+=("$gamename") progexec="${gamefile##*$'\n'Exec=}" progexec="${gamexec%%$'\n'*}" progexecA+=("$gamexec") done # Adiciona os nomes dos itens que estão no array a uma variavél # Os nomes são separados por \n (linefeed) for i in "${!prognameA[@]}"; do proglist+="${prognameA[$i]}"$'\n' done # Se você usa ROFI, use o primeiro item e comente o segundo # Se você usa dmenu, use o segundo item e comente o primeiro. #menusel=$(printf '%s' "$gamelist" | rofi -dmenu -i) menusel=$(printf '%s' "$gamelist" | dmenu) # O script morre se não houverem entradas no diretório ou se nada for selecionado no ROFI/dmenu if [ -z "$menusel" ] || [[ $proglist != *"$menusel"* ]]; then exit fi # Obtém o indíce do item selecionado for i in "${!prognameA[@]}"; do [ "${prognameA[$i]}" = "$menusel" ] && curindex=$i done # Executa o item selecionado, baseado no índice exec "${progexecA[$curindex]}") # O script morre se não houverem entradas no diretório ou se nada for selecionado no ROFI/dmenu if [ -z "$menusel" ] || [[ $proglist != *"$menusel"* ]]; then exit fi # Obtém o indíce do item selecionado for i in "${!prognameA[@]}"; do [ "${prognameA[$i]}" = "$menusel" ] && curindex=$i done # Executa o item selecionado, baseado no índice exec "${progexecA[$curindex]}"
Freeradius 2.x.x - Monitoração
Verificando a versão mais recente do Wine via script
Atenção a quem posta conteúdo de dicas, scripts e tal (1)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Problemas para conectar à rede no Linux Mint (10)
Clamav e suas atualizações (15)
Desenvolvimento de um driver (10)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba