Menu secundário
Publicado por João Gabriel (última atualização em 03/02/2021)
[ Hits: 1.736 ]
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]}"
Prova LPI em shell script - com contador de acertos
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta