AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 413095
Accepted
Avaq
Avaq
Asked: 2017-12-27 03:04:59 +0800 CST2017-12-27 03:04:59 +0800 CST 2017-12-27 03:04:59 +0800 CST

Renderizando a borda da janela em um lado específico no XMonad

  • 772

O XMobar permite configurar a posição da borda, bem como a largura:

{ border = BottomB
, borderColor = "#4F5B66"
, borderWidth = 1 }

Espero fazer o mesmo no XMonad, mas parece que as bordas só são configuráveis ​​por meio das seguintes propriedades:

{ borderWidth = 1
, normalBorderColor = "#4F5B66"
, focusedBorderColor = "#96B5B4" }

Mesmo com XMonad.Layout.NoBorders, parece que essa não é uma opção (ou não é direta).

No final, gostaria de ter uma borda inferior de um pixel que sempre é desenhada e muda de cor dependendo do foco. Isso é atualmente possível e como eu faria para configurá-lo assim?

xmonad haskell
  • 1 1 respostas
  • 1372 Views

1 respostas

  • Voted
  1. Best Answer
    Avaq
    2018-06-18T01:00:13+08:002018-06-18T01:00:13+08:00

    Esta questão foi suficientemente respondida no problema do GitHub que abri depois que esta questão recebeu muito pouca atenção.

    O problema com isso é que o xmonad não desenha suas próprias bordas; apenas diz a X a espessura que devem ter e de que cor.

    [É] possível dizer a X para usar certos padrões [com] o border_pixmapelemento na XSetWindowAttributesestrutura.

    Se você assumir que todas as advertências [descritas] em [ https://tronche.com/gui/x/xlib/window/attributes/border.html] não estão realmente lá ou não significam nada, então você pode concluir que [...] pode-se definir uma borda somente inferior especificando um pixmap muito grande que envolve toda a janela.

    [Do jeito que está,] os criadores de drivers gráficos quebram constantemente as fronteiras do lado do servidor, porque apenas o xmonad e o dwm os usam atualmente. E nenhum deles usa borderPixmap, então provavelmente há muitos bugs escondidos lá.

    A conclusão aqui é que, embora seja possível usar atributos de janela para isso em teoria, não é uma boa ideia. Existe uma abordagem alternativa que pode ser melhor:

    Para obter esse resultado no xmonad, você precisa ter bordas com largura 0 e, em seguida, implementar decorações de janela colocando uma barra colorida onde deseja a 'borda'.

    Na verdade, é muito fácil escrever uma instância da classe DecorationStyle que colocará uma decoração semelhante a uma borda em um lado da janela. Se esse lado for o superior ou o inferior, a barra será larga o suficiente e o texto do título da janela será renderizado nela, mas isso pode ser feito sem problema definindo o texto com a mesma cor da barra ou fornecendo um espaço vazio Fonte.

    {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
    
    import qualified XMonad.StackSet as W
    import XMonad.Layout.Decoration
    import XMonad.Util.Types
    
    data SideDecoration a = SideDecoration Direction2D
      deriving (Show, Read)
    
    instance Eq a => DecorationStyle SideDecoration a where
    
      shrink b (Rectangle _ _ dw dh) (Rectangle x y w h)
        | SideDecoration U <- b = Rectangle x (y + fi dh) w (h - dh)
        | SideDecoration R <- b = Rectangle x y (w - dw) h
        | SideDecoration D <- b = Rectangle x y w (h - dh)
        | SideDecoration L <- b = Rectangle (x + fi dw) y (w - dw) h
    
      pureDecoration b dw dh _ st _ (win, Rectangle x y w h)
        | win `elem` W.integrate st && dw < w && dh < h = Just $ case b of
          SideDecoration U -> Rectangle x y w dh
          SideDecoration R -> Rectangle (x + fi (w - dw)) y dw h
          SideDecoration D -> Rectangle x (y + fi (h - dh)) w dh
          SideDecoration L -> Rectangle x y dw h
        | otherwise = Nothing
    
    • 1

relate perguntas

  • Como posso abrir um aplicativo e movê-lo para uma posição de pilha de janela específica com o XMonad?

  • Navegue para a janela focada anteriormente no xmonad

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve