Menu secundário
Publicado por João Gabriel (última atualização em 03/02/2021)
[ Hits: 1.583 ]
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]}"
Copia um DVD de um Game para o HDD do Play2 via rede
Interface gráfica para nível de tinta (escputil) em shell script
Versão 0.2: Integrar/Sincronizar Firefox/Thunderbird com o KDE
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
Como Incorporar o Áudio no Executável ? (1)
O que você está ouvindo agora? [2] (130)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter