Notificações sem daemon sem D-Bus. Mínimo e leve.
Menos de 200 linhas de código
Não roda em segundo plano, apenas exibe a notificação e sai
Nenhuma dependência externa, exceto Xlib e Xft
Configurável através de config.h
ou Xresources (usando este patch)
Suporte a ações
Extensível através de patches
Uso
Patches
Ignorar uma notificação
Ações
Novas linhas
Várias notificações
As notificações não aparecem
Instalação
Pacotes
Dependências
Construir
Configuração
Contribuir
Lista de patches disponíveis
Para criar um novo patch você terá que abrir uma solicitação pull com suas alterações. Anexe .diff
ao URL da solicitação pull para obter um arquivo diff para download. Não se esqueça de prefixar o título com patch:
e aplicar o rótulo patch
a ele. Para se inspirar, veja meu patch do Xresources. Obrigado.
Nota: Este método de patch foi fortemente inspirado no Sowm de Dylan.
Uma notificação pode ser descartada clicando nela com DISMISS_BUTTON
(definido em config.h, o padrão é o botão esquerdo do mouse) ou enviando um sinal SIGUSR1
para ela:
$ pkill -SIGUSR1 erva
Notificações dispensadas retornam o código de saída 2.
Action é um pedaço de código shell executado quando uma notificação é aceita. Aceitar uma notificação é o mesmo que descartá-la, mas você deve usar ACTION_BUTTON
(o padrão é o botão direito do mouse) ou o sinal SIGUSR2
. Uma notificação aceita sempre retorna o código de saída 0. Para especificar uma ação:
$ herbe "Corpo da notificação" && echo "Esta é uma ação"
Onde tudo depois de &&
é a ação e será executado após a aceitação da notificação.
Cada argumento da linha de comando é impresso em uma linha separada por padrão, por exemplo:
$ herbe "Primeira linha" "Segunda linha" "Terceira linha" ...
Você também pode usar n
, por exemplo, no bash
:
$ herbe $'Primeira roupaSegunda roupaTerceira linha'
Mas por padrão, herbe
imprime n
literalmente:
$ herbe "Primeira roupaAinda a primeira linha"
A saída de outros programas será impressa corretamente, apenas certifique-se de escapá-la (para não acabar com cada palavra em uma linha separada):
$ herbe "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head)"
As notificações são colocadas em uma fila e mostradas uma após a outra em ordem de criação (primeiro a entrar, primeiro a sair). Eles não se sobrepõem e cada um é mostrado durante toda a sua duração.
Provavelmente, uma notificação em execução foi encerrada à força (SIGKILL ou qualquer sinal não detectado), o que fez com que o semáforo não fosse desbloqueado. Primeiro, mate qualquer instância herbe
que esteja travada:
$ pkill -SIGKILL erva
Depois é só chamar herbe
sem nenhum argumento:
$ ervas
As notificações agora devem aparecer conforme o esperado.
Nunca envie nenhum sinal para herbe
exceto estes:
# igual a pkill -SIGTERM herbe, encerra todos os processos herbe em execução$ pkill herbe $ pkill -SIGUSR1 erva $ pkill -SIGUSR2 erva
E você deve ficar bem. Isso é tudo que você realmente precisa para interagir com herbe
.
Atualização do OpenBSD
Atualização do FreeBSD
Porto Wayland por muevoid
Somente o pacote herbe-git AUR é mantido por mim.
X11 (Xlib)
Xft
Os nomes dos pacotes são diferentes dependendo da distribuição que você usa. Por exemplo, se você usa Void Linux você terá que instalar estas dependências:
sudo xbps-install base-devel libX11-devel libXft-devel
git clone https://github.com/dudik/herbecd herbe sudo make install
make install
requer privilégios de root porque copia o binário resultante para /usr/local/bin
. Isso torna herbe
acessível globalmente.
Você também pode usar make clean
para remover o binário da pasta build, sudo make uninstall
para remover o binário de /usr/local/bin
ou apenas make
para construir o binário localmente.
herbe é configurado em tempo de compilação editando config.h
. Cada opção deve ser autoexplicativa. Não há opção height
porque a altura é determinada pelo tamanho da fonte e pelo preenchimento do texto.
Patch de recursos X
Se você quiser relatar um bug ou tiver uma solicitação de recurso, sinta-se à vontade para abrir um problema.
qutebrowser suporta a exibição de notificações da web via herbe, por meio da configuração content.notifications.presenter
.