Giter Club home page Giter Club logo

xmonad-contrib's Introduction

XMonad logo

Hackage License Made in Haskell
Stack Cabal Nix
GitHub Sponsors Open Collective
Chat on #xmonad@irc.libera.chat Chat on #xmonad:matrix.org

xmonad

A tiling window manager for X11.

XMonad is a tiling window manager for X11. Windows are arranged automatically to tile the screen without gaps or overlap, maximising screen use. Window manager features are accessible from the keyboard: a mouse is optional. xmonad is written, configured and extensible in Haskell. Custom layout algorithms, key bindings and other extensions may be written by the user in config files. Layouts are applied dynamically, and different layouts may be used on each workspace. Xinerama is fully supported, allowing windows to be tiled on several physical screens.

This repository contains the xmonad package, a minimal, stable, yet extensible core. It is accompanied by xmonad-contrib, a library of hundreds of additional community-maintained tiling algorithms and extension modules. The two combined make for a powerful X11 window-manager with endless customization possibilities. They are, quite literally, libraries for creating your own window manager.

Installation

For installation and configuration instructions, please see:

If you run into any trouble, consult our documentation or ask the community for help.

Contributing

We welcome all forms of contributions:

Please do read the CONTRIBUTING document for more information about bug reporting and code contributions. For a brief overview of the architecture and code conventions, see the documentation for the XMonad.Doc.Developing module. If in doubt, talk to us.

Authors

Started in 2007 by Spencer Janssen, Don Stewart and Jason Creighton, the XMonad project lives on thanks to new generations of maintainers and dozens of contributors.

xmonad-contrib's People

Contributors

aavogt avatar ankaan avatar bshepherdson avatar byorgey avatar colonelpanic8 avatar dmwit avatar donsbot avatar elkowar avatar f1u77y avatar geekosaur avatar github-actions[bot] avatar gwern avatar ivanbrennan avatar jasoncreighton avatar joachifm avatar liskin avatar lsleary avatar mauke avatar nomeata avatar nzeh avatar orbisvicis avatar peti avatar pjones avatar psibi avatar slotthe avatar spencerjanssen avatar themc47 avatar unkindpartition avatar vvv avatar wwolff avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xmonad-contrib's Issues

Display bug with IfMax, PerScreen, PerWorkspace with decorated layouts

When using IfMax with a decorated layout, the decorations appear on other workspaces, even over other windows, if the other workspace uses a different layout, and the decorations don't disappear on a given workspace if the layout is changed by IfMax.

This basic LayoutHook exhibits the bug:

myLayoutHook = IfMax 1 Full $ noFrillsDeco shrinkText def $ emptyBSP

This seems to be specifically related to IfMax, since using ToggleLayouts with the same two layouts doesn't display this behavior.

2016-08-15-164427_2560x1440_scrot

2016-08-15-164453_2560x1440_scrot

2016-08-15-164620_2560x1440_scrot

XMonad-Contrib Documentation Updates

Hello,
Here's a radical/crazy idea: (im sure this has been addressed before but couldnt find where)

The idea is moving the xmonad-contrib documentation, link, to GIT as a wiki. I know it sounds crazy but just want to make a pitch.

I've forked this repo and played with it. Added a Documentation section to the README.md file.
Please take a look.

I'm perfectly fine being shutdown because of the mountain of work/updates this will create. It's not a turnkey solution but it's a start i think.

Note: I am not a haskell developer but i enjoy xmonad very much.

What i did:

  1. cloned myfork
  2. copied html doc files (~/.cabal/html/) to local fork under "Documentation" folder
  3. created Documentation_testing folder and copied html files from previous Doc folder
  4. change ".html" string to ".md" on all html files
  5. converted all html files to md file using pandoc
  6. At this point i removed lines that didnt look nice. (MHO of course)
  7. Push to myfork

Command rundown of what i did: (starting at # 4)

cd ~/xmonad-docfork/xmonad-contrib/Documentation_testing/
for i in $(ls *.html); do sed -i 's/.html/.md/g' $i; done
for i in $(ls *.html); do name=$(echo $i | sed 's/.html//g'); pandoc -f html -t markdown_mmd $name.html > $name.md; done
rm *.html

At this point im removing things that are not pleasing to my eyes. ( # 6 ) (some lines created by pandoc )

for i in $(ls *.md); do sed -i '/xmlns=/d' $i ; done
for i in $(ls *.md); do sed -i '/\[Index\]/d' $i; done
for i in $(ls *.md); do sed -i '/\[Contents\]/d' $i; done
for i in $(ls *.md); do sed -i 's/\[g:.\]//g' $i; done
for i in $(ls *.md); do sed -i '/<.md>/d' $i; done
for i in $(ls *.md); do sed -i '/xmonad-contrib-0.12: Third/d' $i; done
for i in $(ls *.md); do sed -i '/|              |                          |/d' $i; done
for i in $(ls *.md); do sed -i '/| Copyright/d' $i; done
for i in $(ls *.md); do sed -i '/| License/d' $i; done
for i in $(ls *.md); do sed -i '/| Maintainer/d' $i; done
for i in $(ls *.md); do sed -i '/| Stability/d' $i; done
for i in $(ls *.md); do sed -i '/| Portability/d' $i; done
for i in $(ls *.md); do sed -i '/| Safe Haskell/d' $i; done
for i in $(ls *.md); do sed -i '/| Language/d' $i; done
for i in $(ls *.md); do sed -i '/|-------------/d' $i; done
for i in $(ls *.md); do sed -i '/^| *| *|$/d' $i; done

Let me know what you guys think.

-Dave

XMonad DynamicBars: Pass in dynamicLogString into multiPP.

Hi I'm looking for some help on how to implement some functionality with DynamicBars and TopicSpaces. I've been basing my config off of aavogt's archived config and have recently decided to use DynamicBars instead of the initial hand-rolled approach, but there's one small roadblock.

I can't figure out how to combine the output of TopicSpace.pprWindowSet with the DynamicBars.multiPP function. The reason I want to combine the two is because I would like to show my topic workspaces in order I last visited them. This functionality is achieved in aavogt's config, since the config merges the outputs of TopicSpace.pprWindowSet and dynamicLogString with a custom function, and that function gets passed into what is the equivalent of multiPP'.

At the moment DynamicBars doesn't expose a way for me to pass in my own custom function and I was wondering if another function with the following signature could be exposed:

multiPP'' (PP -> X String) -> PP -> PP -> X ()

or perhaps someone can tell me of another solution if there's a better way to achieve my goal. In either case I'm happy to get any feedback, thanks for your time.

cc @mathstuf

X.P.Pass Read Store Passwords using symlink

So i have identical environment for both my work and laptop computers by synchronizing relevant files/folders (.bashrc, .vimrc, .Xdefaults, etc)
All these synced files exist on a "Synced" folder in HOME. My ~/.bashrc is a symlink which points to the Synced-folder/bashrc. This is how i have most of my relevant files setup, for example:

lrwxrwxrwx 1 user user 57 Nov 8 22:50 .bashrc -> ~/Synced-folder/bashrc

So i just started using gpg and pass to store/manage many of my passwords. ( it's awesome!)

So to go along with my setup i symlinked the ~/.gnupg and ~/.password-store folders to my sync folder. This did not affect access to my stored password and gpgkey

gpg --list-keys
pass show

All worked as before.
The only difference is when i call "mod-p" to select a password i do not see the available passwords to choose from. I just get the prompt

Select password:

Before it would say:

group1/pass1 group2/pass2
Select password:

Obviously this is probably because it's a symlink and not a folder file type. The select password prompt is still functional because i can select the password i want and passPrompt fetches it. The only issue is the "list of passwords available" does not exist.

passGeneratePrompt and passRemovePrompt work as expected

Is this something that can be looked at?
I know it's very specific to my case... but input is appreciated :D

Thanks
Dave

Space in execScriptHook

It makes no sense that ~/.xmonad/hooks startup (two files!) are executed if you have

   startupHook = execScriptHook "startup"

set.

What should happen instead is that ~/.xmonad/hooks/startup gets executed. Right?

This was obviously the intention of the author "The script is assumed to be located at ~/.xmonad/hooks.".

Layout modifiers application order

Many layout modifiers work as expected with each other only when applicated in certain order. Searching for that order can be difficult for many users, especially when they use many layout modifiers. I think there should be some documentation(or maybe other way) to prevent users from wrong application order.

gridSelectWorkspace loses focus

If I have gridSelectWorkspaces from XMonad.Actions.GridSelect active and I click a window on another screen, the gridselect loses focus and it can't be restored. If the gridselect has lost focus, you can't click it, can't type anything and can't escape out of it. The only way I've found to fix it is by restarting xmonad.

scratchpadManageHook broken with urxvt with tabbedex extension.

I use the Scratchpad extension with urxvt and a custom scratchpadManageHook (using RationalRect 0.1 0.1 0.8 0.8). This should (and does) put the terminal in a large centered rectangle, but when urxvt's tabbedex perl extension is enabled, the scratchpad terminal appears instead in a small window somewhere on the top left of the screen. Disabling the extension in .Xresources fixes the bug, reactivating it reintroduces it.

I'm on ArchLinux with xmonad 0.12 and urxvt 9.22. Relevant parts of my xmonad.hs include:

โ€ฆ
myKeys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
myKeys conf@XConfig {XMonad.modMask = modMask} = M.fromList $
  [
โ€ฆ
  , ((modMask, xK_s ), scratchpadSpawnActionTerminal $ terminal conf)
]
โ€ฆ

main :: IO ()
main = do
  โ€ฆ
  xmonad def
    {
      โ€ฆ
      terminal = "urxvt"
    , manageHook = composeAll 
      [
        className =? "Gloobus-preview" --> doFloat
      , scratchpadManageHook $ XSS.RationalRect 0.1 0.1 0.8 0.8
      ]
    }

This issue doesn't appear with the standard tabbed

[EZConfig] bug in checkKeymap

I think I have found a bug in EZConfig:

The checkKeymap function does not work correctly.

My version of contrib should be the latest; darcs pull comes with no updates.

Reproduce:

Use this Xmonad configuration:

import XMonad
import XMonad.Config
import XMonad.Util.EZConfig

main = do
    xmonad $ defaultConfig
        { modMask = mod4Mask -- Win key
        , startupHook = return () >> checkKeymap defaultConfig keysToAdd
        }
        `removeKeysP` keysToRemove
        `additionalKeysP` keysToAdd

keysToRemove :: [String]
keysToRemove =
    [ "M-a"
    , "M1-a"
    ]

keysToAdd :: [(String, X ())]
keysToAdd =
    [ ("M-a", spawn "xmessage M-a")
    , ("M1-a", spawn "xmessage M1-a=Alt-a")
    ]

Result:

Warning:

duplicate keybindings detected: "M-a"

Expected:

(No Warnings)

Anyway both shortcuts are working as defined.

I hope it is easy to fix!

Build error with 8.0.2-rc1

Trying to build xmonad-contrib be036f9 with ghc 8.0.1.20161126:

XMonad/Layout/Groups/Helpers.hs:181:22: error:
      Couldn't match type 'WithID l0 Window
                           -> XMonad.Util.Stack.Zipper (G.Group l0 Window)
                           -> XMonad.Util.Stack.Zipper (G.Group l0 Window)'
                     with 'G.ModifySpec'
      Expected type: (G.WithID l0 Window
                      -> XMonad.Util.Stack.Zipper (G.Group l0 Window)
                      -> XMonad.Util.Stack.Zipper (G.Group l0 Window))
                     -> G.GroupsMessage
        Actual type: G.ModifySpec -> G.GroupsMessage
      In the second argument of '(.)' namely 'G.Modify'
      In the expression: sendMessage . G.Modify
      In an equation for 'wrap': wrap = sendMessage . G.Modify

Builds fine with 8.0.1.

Azerty wrong key for `6` and `8` with layout be

With a be layout, XMonad.Config.Azerty will successfully work with all number keys from 1 to 9 except for the number 6 and 8.

This is annoying because pressing these 2 keys has no effect .

This is probably due to the fact that 6 and 8 keys are different in a be layout compared to the fr one. The key 8 for instance is exclamation mark as you can see from this xmodmap output:

keycode   9 = Escape NoSymbol Escape
keycode  10 = ampersand 1 ampersand 1 bar exclamdown bar
keycode  11 = eacute 2 eacute 2 at oneeighth at
keycode  12 = quotedbl 3 quotedbl 3 numbersign sterling numbersign
keycode  13 = apostrophe 4 apostrophe 4 onequarter dollar onequarter
keycode  14 = parenleft 5 parenleft 5 onehalf threeeighths onehalf
keycode  15 = section 6 section 6 asciicircum fiveeighths asciicircum
keycode  16 = egrave 7 egrave 7 braceleft seveneighths braceleft
keycode  17 = exclam 8 exclam 8 bracketleft trademark bracketleft
keycode  18 = ccedilla 9 ccedilla 9 braceleft plusminus braceleft
keycode  19 = agrave 0 agrave 0 braceright degree braceright

I guess 0x2d and 0x5f need to be replaced when using a be layout but by what ?

ExtensibleState map keys are not unique

It's useless when compared with using just any string as map key because two different modules could have wrapper with the same name, and checking for that is not easier then checking for same string as key. It does also require these annoying wrappers and unwrappers for no benefit. Should we migrate to using any string as keys or is it useless or even wrong?

EZConfig binding with "รง"

On my keyboard layout, รง is where ; is on the us layout. So it is very convenient to bind a command to it.

EZConfig's regular keys stop short of รง. I'd like, if possible, to extend them. I myself can't think of any principled way of selecting how much to expand it to.

Of course, I can already bind to รง by using xK_cedilla, so this isn't a big deal.

Cannot launch apps using prompt if data dir does not exist

In addition to the error messages below, the launch never happens. Seems like the command is written to the history file before executing, and gets cancelled by the error.

error writing history: /home/phunehehe/.xmonad/history: openFile: does not exist (No such file or directory)
/home/phunehehe/.xmonad/history: setFileMode: does not exist (No such file or directory)

export addDescrKeys'

At the moment only addDescrKey is exported. The problem is it adds defaultKeyBindings.
This is not helpfull if you don't want to keep the original keybindings.

X.L.PerWorkspace possible bug

Hello,
Had this issue on xmonad mailing list here
Not sure really if it's a PerWorkspace bug but that was the final conclusion.

So basically to summarize what happened on that chain. I was having issues with avoidStruts under git-xmonad but nothing of that sort using haskell-xmonad (using cabal install).

Mr. Bogdan suggested to remove PerWorkspace all together, which i did but no change. (changes here) (currently using PerWorkSpace under haskell-xmonad; willing to test again)

When i use haskell-xmonad avoidstruts and ToggleStruts seems to work fine. Under git-xmonad they do not. My dzen bars are covered by the window clients on all WS (visible, non-visible).

My config is here.

Decided to bring this issue to GIT since it's much easier to read and maybe more eyes will look at it.

Hope this is clear.

Thanks,
Dave

Strut toggling broken

I've recently recompiled xmonad-contrib from git master and I am now unable to toggle struts (for instance, using sendMessage ToggleStruts or sendMessage ToggleStrut D) so all windows cover my docks.

I've bisected the repository and the commit which introduced this bug seems to be 83ee18a. If I recompile xmonad-contrib to its parent, toggling struts works as expected again.

EDIT:
I should probably note I use dzen2 for the docks, I didn't have defaultGaps set in my config and that xprop outputs the following for the top dzen2 dock:

_NET_WM_STRUT(CARDINAL) = 0, 0, 17, 0
_NET_WM_STRUT_PARTIAL(CARDINAL) = 0, 0, 17, 0, 0, 0, 0, 0, 0, 1223, 0, 0

XMonad.Config.Prime and RebindableSyntax

Okay, so I don't really get it. Why isn't Prime a Monad? From what I can tell, Prime is basically a (partially applied) function XConfig -> XConfig. While >> composition rules for function monad discard left operand entirely, it's possible to reformulate this problem in terms of state monad with XConfig being a state, and monadic actions in Prime acting upon said state. I don't think there's a huge difference performance-wise.

So, why the whole RebindableSyntax thing? It just makes working with actual monads (like IO) awkward.

multiple windows are highlighted as active when using X.L.Minimize

Steps to reproduce:

  • Add minimize and boringWindows to layout
  • Open 2 or more windows on workspace
  • Minimize one of them
  • Restore it with sendMessage RestoreNextMinimizedWin
    Two windows(one is that what active before last step and other is restored window) will be highlighted as active

X.L.PerWorkspace does not send messages to right sublayout until activated

Here I'll try to make a bit more formal and informative version of #76

Config that reproduces the bug

import XMonad
import XMonad.Util.EZConfig

main = xmonad def { workspaces = ["1", "2"]
                  , layoutHook = onWorkspace "1" tiled tiled
                  } `additionalKeysP` 
                  [ ("M-b", broadcastMessage Expand)
                  ]
  where tiled = Tall 1 (1/2) (1/4)

Steps to reproduce

  1. Start xmonad
  2. Open two windows
  3. Shift them to second workspace
  4. Press "M-b"
  5. Go to second workspace

Actual results

Two windows are half-splitted

Expected results

Left window should occupy 3/4 of width of the screen

My attemt to explain the bug

Definitions

  • A sublayout is one the arguments of PerWorkspace which are instances of LayoutClass
  • An active sublayout is the sublayout which is chosen by the Bool argument of PerWorkspace
  • A layout is activated when runLayout is called first time for it

Explaination

When PerWorkspace on workspace "2" is not activated, its first sublayout is always active(but after activation the second one will be active). So, when we send message to non-activated PerWorkspace, it retranslates it only to first sublayout but we want it to retranslate that message to second sublayout

Possible fixes

  1. Get rid of this module and move its functionality into core(I know you're a bit conservative about changing stuff in core; and this fix still can have some problems(e.g. with dynamic workspaces))
  2. Create third state(for no layout chosen; default state) and accumulate messages for sending them to active sub-layout after activated
  3. Assume that's right behaviour and explicitely state in the docs that sending messages to non-activated layouts is undefined behaviour
  4. Activate each layout after it have been created.
  5. Any other suggestions?

Floating window resize issue

So making a summary for this isn't easy. Here's the setup:

  • two monitors
  • different resolutions (important!)
  • keyboard focus on A
  • cursor on B

When using a manage hook to float dialogs (isDialog --> doFloat), it is stored in the layout according to the cursor screen resolution (B). When the window actually appears, it shows up next to the currently focused window (on A). However, because the resolutions are different, the ratio stored in XMonad for its location is a different size. When the window appears, XMonad resizes it to be the same ratio, but that means the resolution is different. Dialogs (possibly made worse due to improper size hints) then either get inflated with empty space or squished together with overlapping widgets.

The fix should be to determine the ratio of new windows based on where they will appear rather than the cursor-current screen resolution.

See coldfix/udiskie#79.

X.L.LayoutBuilder should support resizing of subboxes

This is a placeholder issue while I refactor the X.L.LayoutBuilder module. Changes will include:

  • Bring in features from X.L.LayoutBuilderP (done)
  • Make layout boxes resizable with a message

My work is happening here:

https://github.com/pjones/xmonad-contrib/blob/xmonad/feature/layoutb/XMonad/Layout/LayoutBuilder.hs

I merged X.L.LayoutBuilderP into X.L.LayoutBuilder since they were nearly identical files and it doesn't make sense to add resizing to both. X.L.LayoutBuilderP is now deprecated.

Actions.WindowsGo/raiseNextMaybe cycles between 2 workspaces only

As reported some years ago in https://code.google.com/archive/p/xmonad/issues/284 raiseNextMaybe cycles only between 2 workspaces, making impossible to cycle through the entire list of windows.

The reason is that raiseNext calls allWindows from xmonad StackSet, which relies on a list of workspaces built as follows: the current workspace is put first, followed by visible then hidden workspaces. Thus the ordering of workspaces is not preserved while switching between workspaces, which is why raiseNext will
cycle only between the current and another workspace.

I found the following fix:

  • create a allWindowsSorted function in Xmonad.StackSet which relies on a list
    of workspaces sorted by their tags
  • call W.allWindowsSorted instead of W.allWindows in raiseNext.

The patch is given below for 0.12. Let me know if it is an appropriate way to fix the bug. If so, I can create
the pull requests for xmonad and xmonad-contrib that apply on current master.
Otherwise, let me know what solution you would prefer.
It would be nice that 0.13 contains a fix.

xmonad-fix-raiseNextMaybe.patch

Revert avoidStruts Caching

When we released v0.12 it included a bug caused by the new avoidStruts caching code. This is still a problem even though several commits were made in PR #30. (One example: creating a new dynamic workspace and then opening a window will obscure any task bars.)

@geekosaur has suggested that we pull all code related to caching into a separate branch and then revert all these changes out of master. (He also recommends the same for the _NET_WORKAREA changes.)

This issue is for us to discuss a solution before releasing v0.13. Please let us know what you think and if you'd be willing to help.

/cc @byorgey @aavogt @f1u77y

avoidStruts buggy when used in combination with some other layout hook

I have an admittedly somewhat complex layout hook, but something about it makes avoidStuts stop working whenever I press Mod+Shift+Enter to reset layouts.

this could also have to do with an interaction between the jump to layout version of ||| from XMonad.Layout.LayoutCombinators and avoidStruts. I'll try to look at this more deeply sometime this week, but I thought I'd post this here in case anyone else encounters this or someone knows something about this issue.

Here is my layout hook, for reference:

myLayoutHook = avoidStruts . smartSpacing 10 . minimize . boringWindows .
               mkToggle (MIRROR ?? EOT) . workspaceNamesHook . smartBorders .
               noBorder $ layouts

Make an actually useful version of XMonad/Prompt/Layout.hs

As mentioned in a comment in XMonad/Prompt/Layout.hs

"This prompt won't display all possible layouts, because the code to enable this was rejected from xmonad core."

Does anyone know why this original proposal was rejected?

I looked in to a bit, and it seems that the reason implementing something like
this is basically impossible is that it is quite difficult to actually extract
all of the available layouts from a layoutHook.

Does anyone have any ideas about how we might circumvent this issue?

Perhaps we could provide a modified version of ||| that collects layouts into a
list as it joins them?

Tabbed decoration broken with LayoutBuilder

When any of XMonad.Layout.Tabbed layouts used in layoutN, layoutAll, โ€ฆ from XMonad.Layout.LayoutBuilder, it would introduce various graphics artifacts present on all workspaces.

For example, with following layout

wmii = (layoutN 1 (relBox 0 0 ratio 1) Nothing stabbed) $
            (layoutAll (relBox ratio 0 1 1) stabbed)
        stabbed = tabbedAlways shrinkText defaultTheme
        ratio   = 61/100

if you start add clients like 3 or more xterms, content of tab bars starts get garbled. Window names out of position or quite missing, bar from 1st workspace visible on all other workspaces, missing fragments in border around tabs etc.

Tabbed layouts works well on the same machine, either standalone or combined with different combinators like Combo, DragPane, TwoPane, Master and others. Issue is only in combination with LayoutBuilder.

XMonad.Prompt.Shell searchPredicate is ignored, defaults to isPrefixOf

When using:

shellPrompt xpConfig

where:

xpConfig :: XPConfig
defaultXPConfig { searchPredicate = \_ _ -> False }

the searchPredicate should just ignore all completions but it seems to have no effect and the default isPrefixOf is used to filter the completions instead.

I found this patch that resolves the issue: https://code.google.com/p/xmonad/issues/attachmentText?id=393&aid=3930005000&name=shell-compl_predicate.patch&token=ABZ6GAfgBm0bpLu0E74YtfArOYfYc2QLdQ%3A1447596010634

Found in this thread: https://code.google.com/p/xmonad/issues/detail?id=393

I've tested applying the patch and then compiling on Arch Linux and everything seems to work.

Window location with XMonad.Layout.ThreeColumns seems erratic

Problem Description

When using XMonad.Layout.ThreeColumns windows move around erratically when creating new windows or closing existing windows.

Here is a flow where at first I have one window (a) open then open a second (b) and a third (c), then close them one by one.

1 [   a   ]
2 [b][ a  ]
3 [a][c][b]

CLOSE
1 [a][c][b]
2 [b][ a  ]
3 [   a   ]

So, when going from 2 to 3 open windows, window "a" and "b" switch
location for some reason. in step #2 "b" is on the left and "a" is on
the right, but when a third window is added (or removed) they swap
locations. This is very confusing.

Configuration File

Please include the smallest configuration file that reproduces the
problem you are experiencing:

module Main (main) where

import XMonad
import XMonad.Layout.ThreeColumns

main = xmonad defaultConfig { layoutHook = ThreeColMid 1 (3/100) (1/3) }

Suggestion

There was a suggestion in the mailing list made by Daniel Wagner [email protected]:

In XMonad.Layout.ThreeColumns.split3HorizontallyBy, swap the second two elements of the triple in the True branch, so that it reads:

         , Rectangle sx sy r3w sh
         , Rectangle (sx + fromIntegral r3w + fromIntegral r1w) sy r2w sh )

Checklist

[XMonad.Layout.NoBorders] OtherIndicated Ambiguity + Fullscreen issues

I've been experiencing some issues with OtherIndicated Ambiguity and the Fullscreen layout, and I think I've narrowed down the issue.

All OtherIndicated does is prevents borders from being drawn on windows, if all other screens have borders drawn. This allows workspaces with a single window to have no borders, assuming there's other workspaces active with multiple windows open (since there's no reason to see a border on a full screened window if the other workspaces have an indicator for focus).

Assuming there's a focused Full layout, with more than 1 windows, and another active Full layout (on another screen) with more than 1 windows - borders are never drawn. This is due to the logic of OtherIndicated, which is not able to detect other screens shown windows after the layout is done building. See: here for the main code. The code is checking against "wrs" parameter, which is effectively the actively shown windows in the current screen after the layout is drawn. However, there is no "otherWrs" param (for lack of better name) which contains the actively shown windows on the other screens after those layouts are drawn.

This likely would involve some fair refactoring of the layout code for ConfigurableBorder, and of course refactoring of the SetsAmbiguous hidden method.

Not a huge deal but I thought I would report the issue in case anybody else is trying to track this down. Any suggestions on steps to fix/remedy this would be great as I'd love OtherIndicated borders, but am unable to use them since I use full screen windows fairly heavily.

Layouts with window navigation using incorrect color map for borders.

Problem Description

When the layout hook includes WindowNavigation (eg configurableNavigation noNavigateBorders) borders are sometimes shown as transparent.

Bellow is a recording of it.

Note I am using archlinux with the -git aur pages.
The white terminal is termite, which shows the bug.
Other windows are gnome-terminal.

6c38c026-df3e-11e6-890d-d984e0b686f5

Configuration File

import XMonad
import XMonad.Config.Desktop
import XMonad.Layout.Spacing
import XMonad.Layout.ResizableTile
import XMonad.Layout.WindowNavigation

main :: IO ()
main = xmonad $ desktopConfig
    { terminal    = "gnome-terminal"
    , modMask     = mod4Mask
    , borderWidth = 30
    , layoutHook  = configurableNavigation noNavigateBorders $ spacing 12 $ ResizableTall 1 0.03 0.5 []
    }

Checklist

X.A.Search Amazon searchengine fails

Hello,
Not much of an issue here but just something i noticed.

The amazon search goes to:
https://www.amazon.com/s/157-2226551-1458745?ie=UTF8&index=all&keywords=

But i receive a "Sorry Couldn't Find the page" messege.

I had worked around this by using a custom searchengine for amazon:

((0, xK_a), method $ S.searchEngine "Amazon" "http://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=")

Which works.

Any chance we can fix?

I use haskell xmonad 0.12
Honestly didn't test with Git xmonad

Thanks
Dave

Xmonad logout when urgency hint with timer upon mod-q

This does not happen to often but pretty annoying when it does. I had submitted a ticket on arch forum some time ago but now thought maybe come here, since im using Git xmonad.

It was a long time ago but i remember going on IRC and it was narrowed down to the urgentConfig timer causing the issue.

Basically when an urgency hint is activated and i press "mod-q" xmonad --restart i get kicked out of my xmonad session and go back to my lxdm screen.

I had tried clearing the urgent with xdotool "mod+shift+backspace" before "mod-q" but still get kicked out. Also tried clearing the hint by making the window client visible but still get booted.

This does not happen when i remove the remindWhen timer on my xmonad.hs config.

--myUrgencyConfig = urgencyConfig {suppressWhen= Visible, remindWhen = (Every (minutes 1.0))}
myUrgencyConfig = urgencyConfig {suppressWhen= Visible}

Why does this happen?
Granted, how often do you restart xmonad on the fly? But when the circumstances are just right, it sucks.

Thanks
Dave

[XMonad.Layout.Spacing] Missing boundary checks in shrinkRect

There are boundary checks missing in shrinkRect. Too small rectangles before pureModifier cause an underflow when substracting the spacing in shrinkRect. The resulting absurd rectangle dimensions crash the windows that are paired with them. This happens mostly in Layout like BSP and Spiral.

Is:

shrinkRect :: Int -> Rectangle -> Rectangle
shrinkRect p (Rectangle x y w h) = Rectangle (x+fi p) (y+fi p) (w-2*fi p) (h-2*fi p)

Should be:

shrinkRect :: Int -> Rectangle -> Rectangle
shrinkRect p (Rectangle x y w h) = Rectangle (x+fi p) (y+fi p) (fi $ max 1 $ fi w-2*p) (fi $ max 1 $ fi h-2*p)

X.L.Hidden has a call to windows

From the IRC channel on freenode:

<geekosaur> windows is the function that applies changes to the StackSet and runs the layout on the result
<geekosaur> using it from the layout, even in a message handler, is inviting an infinite loop

In:

restoreWindow :: Window -> X ()
restoreWindow = windows . W.insertUp

I don't have a good understanding of XMonad's internals or Haskell, even. The issue I faced was that windows calls for a refresh when running the layout(I believe), making it so I couldn't actually use sendMessageWithNoRefresh:

[ ((mod4Mask .|. mod1Mask, xK_m), withFocused swapMinWin)
]
where
        swapMinWin w = do
                cws <- gets (W.workspace . W.current . windowset)
                sendMessageWithNoRefresh PopOldestHiddenWindow cws
                hideWindow w

<spoonm> does it have any alternatives? this is inserting windows into the stackset so eh
<geekosaur> windowsNoRefresh f = modify (\s -> s { windowset = f (windowset s) }) -- something like

X.H.ManageDocks.AvoidStruts breaks dropdown menus on multi-monitor screens

Starting a few months ago, dropdown menus in some applications sometimes stop working when the window is on one screen, then seem to work again with the window on the other screen - only for them to stop working again after changing to another workspace.

The reason for the bug is that AvoidStruts calculates _NET_WORKAREA for the root window using the position, dimensions and struts of only one screen, and updates it whenever a window is mapped on that screen. Hence, on multi-monitor setups, when swapping windows from one screen to another, the calculated workarea often ends up not being the correct one for the currently focused window.

This affects several applications, notably chromium, most Qt apps (due to similar use of the workarea rectangle to make dropdowns avoid struts), and it probably also affects all applications that rely on _NET_WORKAREA for any purpose.

This issue was noted before in https://code.google.com/archive/p/xmonad/issues/158 (comment 12), and https://code.google.com/archive/p/xmonad/issues/526. It seems generally agreed that _NET_WORKAREA is unsuited for multi-monitor setups with docks in-between screens, but in this case, applications will break regardless of where the docks are.

I'm not sure what the best solution is for this. One way would be to make xmonad calculate and store the workarea for each screen in _NET_WORKAREA, but this also would require patches to client applications since most of them only ever look at the first 4 values of the property. The other way would be to drop support for _NET_WORKAREA altogether ; this is what i3 and awesome ended up doing long ago, basically for the same reasons.

[XMonad.Util.EZConfig] Function key XF86WLAN missing

The XF86WLAN function key missing in the supported function keys of EZConfig:
http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Util-EZConfig.html

On my ThinkPad T450s I've got this one to enable/disable wifi.
https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_T450s#Function_Keys
Edit: There are actually one more unsupported function key:

$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
246 XF86WLAN
198 XF86AudioMicMute

Additional Mouse Action

I'm trying to extend functionality for mouse buttons, so that we can hook other functionality plus the existing one (I.e. The left mouse button should still pass through to the program Gui, but also do other things).

This is the only somewhat successful attempt I could find, and I couldn't get it to work with the latest xmonad version:
http://stackoverflow.com/questions/18304191/keyboard-free-mouse-gestures-for-xmonad

Will this require changes to the core or the contrib? Or is there a better solution we can define in xmonad.hs already?

Rewrite X.U.NamedScratchpad using X.L.Minimize

Using additional "secret" workspace seems to be very hackish way and produces many issues. I think using X.L.Minimize is better for that. X.L.Minimize is not ready for this(it should minimize windows persisting on multiple workspaces correctly) but that's another issue.

Related for X.U.NamedScratchpad: #85 and similar problems

Related for X.L.Minimize: #49 #102

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.