Menu secundário
Publicado por João Gabriel (última atualização em 03/02/2021)
[ Hits: 2.253 ]
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]}"
PDC linux desligando pc em uma de windows
Backup de MySQL com 1 arquivo para cada Banco
Script de instalação Servidor MTA Postfix + Openwebmail
Script simple backup em Fita DAT
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Alguém tem que acabar com ANATEL!!! (0)
GOG confirma suporte oficial ao sistema Linux: "o trabalho começo... (4)









