Menu secundário
Publicado por João Gabriel (última atualização em 03/02/2021)
[ Hits: 2.210 ]
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]}"
SysInfo 2.1 (Informações do Sistema)
Instalação de programas em Debian-like
PkgBuild - um gerenciador de construção de pacotes
ScriptLibreOffice - Baixa e instala o LibreOffice pt_BR mais recente no Ubuntu, Debian e Linux Mint
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
Como quebrar senha usando john the ripper
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Podem me chamar de 1mbecil :) [RESOLVIDO] (29)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (2)
Não consigo instalar distro antiga no virtualbox nem direto no hd (20)









