Menu secundário
Publicado por João Gabriel (última atualização em 03/02/2021)
[ Hits: 2.214 ]
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]}"
Shell Script para compilar o suporte À Logitech Quickcam Express no Slackware / Vector / Slax Linux
Monitoramento de Tráfego de rede
Verificar validade das assinaturas das zonas hospedadas no DNSSEC
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (19)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









