Menu secundário
Publicado por João Gabriel (última atualização em 03/02/2021)
[ Hits: 1.896 ]
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]}"
Colocar palavras em maiúsculas
Inversor de links de download (ou qualquer outra String)
Verificando a versão mais recente do Wine via script
Script para automatizar compilação e instalação do Squid
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (2)
Gestão de Ambiente em uma rede Linux (3)