DWM / Powerline / Font ?

So... I stole all the patches from this github rep: https://github.com/SushiDesu/dwm
All the patches applied nicely. But... I cant get the glyph's to work.
It gave me 2 questions:
1: How can I really test it? The wierd thing is that the glyph is showing in vim in terminal termite. But I can't echo it in the terminal? or in the dwm statusbar.
2: How can I find out what the "name/reference" is when telling a given program to use a specific font. By that I mean some times it *~*~*~fontname~*~*size etc.  and in this stolen config.h it is Menlo for Powerline:size=9. Cant seem to find out how to know that? tried to search the wiki, duckduckgo etc. But im kind of lost here...

Are you asking how to generate lines like *~*~*~fontname~*~*size? Use xfontsel.
There are powerline fonts in the AUR https://aur.archlinux.org/packages.php?K=powerline

Similar Messages

  • Trouble powerline fonts sometimes working, but mostly not.

    I'm having trouble with Inconsolata-dz for Powerline rendering the powerline arrows properly with dzen and urxvt.  Terminator and Chromium render the powerline arrows just fine by default though, and Firefox works after selecting the Inconsolata-dz for Powerline font.  Terminator displays them with tmux and vim-airline, Firefox and Chromium display them just fine in this window as I'm typing this.  dzen2 and urxvt render blocks.
    I've checked the font glyphs with gucharmap and the powerline characters are there where they should be (U+E0A0: , U+E0A1: , U+E0A2: , U+E0B0: , U+E0B1: , U+E0B2: , U+E0B3: ).
    Relevant line in .Xdefaults:
    URxvt*font: xft:Inconsolata-dz for Powerline:pixelsize=13:antialias=true:hinting=true!
    URxvt*boldFont: xft:Inconsolata-dz for Powerline:pixelsize=13:antialias=true:hinting=true:bold
    URxvt*italicFont: xft:Inconsolata-dz for Powerline:pixelsize=13:antialias=true:hinting=true:italic
    URxvt*bolditalicFont: xft:Inconsolata-dz for Powerline:pixelsize=13:antialias=true:hinting=true:bold:italic
    Relevant lines in .Xresources:
    URxvt.font:xft:Inconsolata-dz for Powerline:pixelsize=11:antialias=true
    dzen2.font:xft:Inconsolata-dz for Powerline:pixelsize=11:antialias=true:hinting=true
    Adjusting the font sizes for these works with Urxvt and dzen, but they don't want to render the unicode glyphs!
    I downloaded this font from this link and added it to ~/.fonts, then ran
    fc-cache -vf ~/.fonts
    and then
    xrdb -merge ~/.Xresources
    then I restarted X to be sure.  Urxvt is compiled with unicode3 and xft as well (it's from the default Arch repos).
    Any ideas?  This is really starting to frustrate me.

    Keeping the thread updated:
    * I've tried different font sizes (9-15), and none of them work.
    * I googled "inconsolata for powerline xresources xdefaults site:github.com", and none of the configurations work, I tried both .Xresources and .Xdefaults (not at the same time)
    * I tried the aur package ttf-inconsolata-dz-powerline. This doesn't work either.
    I can't think of anything left that could go wrong.  I run fc-cache -vf ~/.fonts and xrdb -merge [...], and restart X, but these don't work.  Chromium and terminator both pick up the fonts though.
    edit
    Just thinking out loud here:
    So I have the correct font, I know this because terminator and chromium load them and display the special symbols.  What I'm not sure about is why terminator and chromium load this font while urxvt and dzen don't.  I might have specified for terminator through its configuration to use this font specifically (can't remember because I've been working on this the past two days), but I know that I didn't with chromium.  So I'm not sure if .Xdefaults/.Xresources is loading the font or not.  If X is loading the font, then it's a problem with dzen and urxvt (not likely, it's just unicode, and it's well, rxvt-unicode), if X isn't loading the font then it's likely a problem with X or how the .Xdefaults/.Xresources files were set up.
    I'm really not sure.  I'm really open to anything here.
    edit 2
    I created a new user to get rid of any potential configuration problem specific to my ~.  I copied Inconsolata-dz+for+Powerline.otf into /home/test/.fonts, .Xresources into /home/test and .tmux.conf into /home/test (my tmux config has powerline symbols in the status line).  I also created a .xinitrc with:
    xrdb -merge ~/.Xresources
    exec fluxbox
    Then I ran "fc-cache -vf ~/.fonts", and "startx".  The .Xresources had only this line, followed by the solarized .Xresources lines:
    URxvt*font: xft:Inconsolata-dz for Powerline:pixelsize=10
    I also tried this:
    URxvt*font: xft:Inconsolata-dz:pixelsize:10, xft:Inconsolata-dz for Powerline
    Still nothing.  Is there anything I could be missing here?  I know urxvt is using inconsolata-dz because the quotes are vertical and the font sizes change, it just can't display the special characters.  But terminator, firefox and chromium can.  I'm confused and I'm thinking about filing a bug report. (bolded because this is turning into a long post and it's important to see that urxvt is using the font, but can't render the special glyphs.  also, it's late, I'm tired, and it seems like a good use of the bold tags)
    Last edited by f8b3c6482265746f (2013-08-19 10:40:28)

  • Powerline fonts not displaying in URXVT

    Alright, so I've been working on getting powerline fonts working with URXVT through various instructions.
    It seems to be working fine in terminator, and I'm pretty certain I set it up correctly.
    I followed the instructions if the symbols aren't showing via here, and ensured that urxvt was compiled with unicode 3 support and the LANG environment variable as mentioned.
    I'm not sure what I'm missing, but it can't be much if other terminal emulators are working properly.
    Any advice would be greatly appreciated. Let me know if you need anymore information and I'll post it.

    Powerline font's work for me with urxvt.
    .Xresources
    --- snip ---
    URxvt*font: xft:Anonymous Pro for Powerline:regular:size=13
    ---- snip ----
    $ ls ~/.local/share/fonts/
    AnonymousPro DroidSansMono Inconsolata-g InputMono Meslo SourceCodePro UbuntuMono fonts.scale
    DejaVuSansMono Inconsolata InconsolataDz LiberationMono README.rst Terminus fonts.dir
    fonts from https://powerline.readthedocs.org/en/la … stallation
    Make sure you build the fonts.dir and fonts.scale in font directory.
    Then make sure to add this to .xinitrc
    if [[ -f ~/.Xresources ]]; then
    xrdb -load ~/.Xresources
    fi
    xset +fp ~/.local/share/fonts

  • [Solved] Powerline font 1px too high, using fontconfig w/ infinality

    Hey guys,
    I'm using the Termite terminal emulator which uses fontconfig for font rendering options. I'm also using vim powerline.
    I use the Monaco font and have installed the otf-powerline-symbols-git package.
    This is what my powerline looks like up close. As you can see the symbols appear to be 1px too high.
    Here's my font config
    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
    <!-- Use Monaco for everything monospace -->
    <match target="pattern">
    <test qual="any" name="family"><string>Consolas</string></test>
    <edit name="family" mode="assign" binding="same">
    <string>Monaco</string>
    </edit>
    </match>
    <match target="pattern">
    <test qual="any" name="family"><string>Courier</string></test>
    <edit name="family" mode="assign" binding="same">
    <string>Monaco</string>
    </edit>
    </match>
    <match target="pattern">
    <test qual="any" name="family"><string>Courier New</string></test>
    <edit name="family" mode="assign" binding="same">
    <string>Monaco</string>
    </edit>
    </match>
    <alias>
    <family>monospace</family>
    <prefer>
    <family>Monaco</family>
    <family>Consolas</family>
    </prefer>
    </alias>
    <!-- Monaco is a little bit to large, making fallback fonts look small -->
    <match target="font">
    <test name="family"><string>Monaco</string></test>
    <edit name="pixelsize" mode="assign">
    <times><name>pixelsize</name>, <double>0.9</double></times>
    </edit>
    </match>
    </fontconfig>
    It doesn't seem like there's a fontconfig option to move the font's baseline down. Any ideas?
    Last edited by EvanPurkhiser (2013-08-10 02:45:35)

    Thanks bohoomil, I tried changing this setting (it was already set to true since I'm using your infinality bundle!) but it didn't seem to have an effect.
    It looks like I can fix this alignment issue by actually editing the OTF symbols font with fontforge. But it would be much nicer if there was some kind of setting I could change so I could use the upstream font.
    Edit: Reading through the issues, it looks like it's common practice to just accept that the font needs to be edited on a per-system basis.
    Last edited by EvanPurkhiser (2013-08-10 01:21:06)

  • [SOLVED] dwm manager taskbar font howto

    I'm trying to make my default dwm taskbar font bigger. After I installed dwm the default taskbar font looks small for me. How can I make it bigger?
    I tried editing config.h file and edited default font to:
    static const char font[]            = "*-*-fixed-medium-r-normal--*-110-*-*-*-*-iso8859-1";
    just the way it was set in my other distro.
    But still no result, same small font.
    Does anybody have a good font in mind, that will look good, like the one from terminus pack. I don't know the names of good fonts and googling doesn't give any good alternatives.
    Maybe somebody has already have something in mind?
    1. why does my dwm font do not change, even when I edit config.h, compile and install (makepkg -efi)?
    2. could you provide any good font alternatives?
    ps. also this default dwm font does not understand cyrillic or any other language, so when I try "Mod+p" in ru layout it screws my typing.
    Last edited by tasty_minerals (2011-05-13 20:34:22)

    no, that doesn't work.
    ls Public/dwmls Public/dwm_sync/dwm/_sync/dwm/
    config.h                       dwm-5.8.2.tar.gz  dwm.install  PKGBUILD
    dwm-5.8.2-2-x86_64.pkg.tar.xz  dwm.desktop       pkg          src
    1. What I did is, edited config.h line to:
    static const char font[]            = "-*-courier-medium-r-*-*-17-*-*-*-*-*-iso10646-*";
    2.makepkg -efi
    3.reboot
    Result: nothing changed in taskbar
    ps. didn't find any of your fonts, I've installed lots of fonts via pacman.
    my config.h cat:
    /* See LICENSE file for copyright and license details. */
    /* appearance */
    static const char font[] = "-*-courier-medium-r-*-*-17-*-*-*-*-*-iso10646-*";
    static const char normbordercolor[] = "#9eeeee";
    static const char normbgcolor[] = "#2e3436";
    static const char normfgcolor[] = "#d3d7cf";
    static const char selbordercolor[] = "#55aaaa";
    static const char selbgcolor[] = "#3e4446";
    static const char selfgcolor[] = "#d3d7cf";
    static const unsigned int borderpx = 1; /* border pixel of windows */
    static const unsigned int snap = 32; /* snap pixel */
    static const Bool showbar = True; /* False means no bar */
    static const Bool topbar = True; /* False means bottom bar */
    /* tagging */
    static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    static const Rule rules[] = {
    /* class instance title tags mask isfloating monitor */
    { "Gimp", NULL, NULL, 0, True, -1 },
    { "jumanji", NULL, NULL, 1 << 8, False, -1 },
    /* layout(s) */
    static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
    static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
    static const Layout layouts[] = {
    /* symbol arrange function */
    { "[]=", tile }, /* first entry is default */
    { "><>", NULL }, /* no layout function means floating behavior */
    { "[M]", monocle },
    /* key definitions */
    #define MODKEY Mod4Mask
    #define TAGKEYS(KEY,TAG) \
    { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
    { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
    /* helper for spawning shell commands in the pre dwm-5.0 fashion */
    #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
    /* commands */
    static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
    static const char *termcmd[] = { "xterm", NULL };
    static Key keys[] = {
    /* modifier key function argument */
    { MODKEY, XK_p, spawn, {.v = dmenucmd } },
    { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
    { MODKEY, XK_b, togglebar, {0} },
    { MODKEY, XK_j, focusstack, {.i = +1 } },
    { MODKEY, XK_k, focusstack, {.i = -1 } },
    { MODKEY, XK_h, setmfact, {.f = -0.05} },
    { MODKEY, XK_l, setmfact, {.f = +0.05} },
    { MODKEY, XK_Return, zoom, {0} },
    { MODKEY, XK_Tab, view, {0} },
    { MODKEY|ShiftMask, XK_c, killclient, {0} },
    { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
    { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
    { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
    { MODKEY, XK_space, setlayout, {0} },
    { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
    { MODKEY, XK_0, view, {.ui = ~0 } },
    { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
    { MODKEY, XK_comma, focusmon, {.i = -1 } },
    { MODKEY, XK_period, focusmon, {.i = +1 } },
    { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
    { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
    TAGKEYS( XK_1, 0)
    TAGKEYS( XK_2, 1)
    TAGKEYS( XK_3, 2)
    TAGKEYS( XK_4, 3)
    TAGKEYS( XK_5, 4)
    TAGKEYS( XK_6, 5)
    TAGKEYS( XK_7, 6)
    TAGKEYS( XK_8, 7)
    TAGKEYS( XK_9, 8)
    { MODKEY|ShiftMask, XK_q, quit, {0} },
    /* button definitions */
    /* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
    static Button buttons[] = {
    /* click event mask button function argument */
    { ClkLtSymbol, 0, Button1, setlayout, {0} },
    { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
    { ClkWinTitle, 0, Button2, zoom, {0} },
    { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
    { ClkClientWin, MODKEY, Button1, movemouse, {0} },
    { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
    { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
    { ClkTagBar, 0, Button1, view, {0} },
    { ClkTagBar, 0, Button3, toggleview, {0} },
    { ClkTagBar, MODKEY, Button1, tag, {0} },
    { ClkTagBar, MODKEY, Button3, toggletag, {0} },
    Last edited by tasty_minerals (2011-04-03 11:28:20)

  • Triangle sign (font problem)

    I finally found some more time to customize my computer. I got some inspiration from this thread: https://bbs.archlinux.org/viewtopic.php?id=162510 and decided to start from changing my command prompt. And here's my first problem.
    I wanted it to look like on a screenshot attached to this post: https://bbs.archlinux.org/viewtopic.php … 9#p1267139. I just love those colorful arrows. So I installed powerline-fonts and otf-inconsolata-powerline-git from AUR. But on my machine those arrows doesn't look so cool. No matter which font I try, they're always too big and too small, like here on the screenshot:
    http://oi42.tinypic.com/5jve5u.jpg
    I use terminator and my PS1 value is:
    "\$(if [[ \$? == 0 ]]; then echo \"\e[42m✔ \# \! \e[32;44m$(echo -e '\u2B80')\"; else echo \"\e[41m✘ \# \! \e[31;44m$(echo -e '\u2B80')\"; fi)\e[;44m \u@\h \e[34;43m$(echo -e '\u2B80')\e[;43m \W \e[;33m$(echo -e '\u2B80') \e[m"
    Also, I'd like to give ttf-agave, which is a non-powerline font, a try, so I need some symbols font containing a triangle sign similar to powerline's U+2B80 but of the exactly same height as font's background.
    -- mod edit: read the Forum Etiquette and only post thumbnails http://wiki.archlinux.org/index.php/For … s_and_Code [jwr] --
    Last edited by isitsaturday (2013-05-30 11:15:55)

    Close all running applications. From an administrator account, open the Terminal app and enter the following command. You can also copy/paste it from here into the Terminal window:
    sudo atsutil databases -remove
    Terminal will then ask for your admin password. As you type, it will not show anything, so be sure to enter it correctly.
    This removes all font cache files. Both for the system and the current user font cache files. After running the command, close Terminal and immediately restart your Mac.

  • Can't use X logical font description of a font

    So this is a really weird problem I am having. I installed this font: https://github.com/powerline/fonts/tree … rceCodePro
    And copied all the .otf files to /usr/share/fonts/misc which is a directory in my font path. Now, some applications, like termite (my terminal) and vim can use the font(s). But programs that require a X logical font description can't find it.
    It doesn't show up with xfontsel either.
    I've appended the fonts.dir and fonts.scale files of the directory I've moved the fonts to, according to the fonts.dir and fonts.scale files in the github repository. I've done fc-cache -vf and I've done xset fp rehash. I'm really at a loss here. Any ideas would be highly appreciated, this is really annoying.
    I've also had a look at this thread: https://bbs.archlinux.org/viewtopic.php?id=14854
    But I've tried the suggestions there and they didn't help.

    berbae wrote:There is an AUR package for these fonts: https://aur.archlinux.org/packages/otf- … rline-git/
    You could use it instead of manually installing the fonts.
    Before doing that, undo what you already did in your file system with the source files of the fonts.
    Did that, doesn't work.
    I have, however, found a package in extra that contains the Source Code Pro font, which isn't patched for powerline compatibility. This font does show up in xfontsel, but without a preview and software like bar (bar-aint-recursive) is unable to use it. I have no idea what is wrong...

  • Dzen2 does not see Xft font.

    Hello.
    I have a problem with my dzen2-xft-xpm-xinerama-svn. It does not see my Terminus patched for Powerline font. I have the same font in my urxvt and it works well.
    I have this in my .Xresources:
    urxvt*font: xft:Terminus for Powerline:pixelsize=14
    and when i try to run dzen2 with this font by:
    dzen2 -fn "xft:Terminus for Powerline"
    Then i have some other font without powerline glyphs.
    http://img20.imageshack.us/img20/1237/dzen.png
    What shall I do to get my font?
    -- mod edit: read the Forum Etiquette and only post thumbnails http://wiki.archlinux.org/index.php/For … s_and_Code [jwr] --

    I've rebooted my Arch a few times, and I solved problem using:
    dzen2*font: -*-terminus for powerline-*-r-*-*-*-*-*-*-*-*-*-*
    And it works. Now I'm developing my own statusbar. I will post screenshoot when I'm done.

  • [Invalid] i915 driver failure on resume from hibernation

    Hi all,
    Since I updated my system yesterday, I've got a very annoying issue. On resume from hibernation, Firefox freezes (nothing else to do than kill it). This looks like a failure of the i915 driver, since in the journal I find these 2 backtraces (when the system resumes):
    oct. 20 22:42:47 ColdFire-Arch kernel: ------------[ cut here ]------------
    oct. 20 22:42:47 ColdFire-Arch kernel: WARNING: CPU: 2 PID: 1787 at drivers/gpu/drm/i915/intel_dp.c:323 intel_dp_check_edp+0x60/0x110 [i915]()
    oct. 20 22:42:47 ColdFire-Arch kernel: eDP powered off while attempting aux channel communication.
    oct. 20 22:42:47 ColdFire-Arch kernel: Modules linked in: ctr ccm bbswitch(O) snd_hda_codec_hdmi fuse btusb mousedev uvcvideo snd_usb_audio bluetooth videobuf2_vmalloc videobuf2_memops snd_usbmidi_lib videobuf2_core snd_rawmidi joydev videodev snd_seq_device 6lowpan_iphc media arc4 iwldvm coretemp hwmon iTCO_wdt led_class x86_pkg_temp_thermal intel_powerclamp iTCO_vendor_support mac80211 mxm_wmi kvm_intel kvm iwlwifi crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel snd_hda_codec_via snd_hda_codec_generic aesni_intel i915 aes_x86_64 lrw gf128mul glue_helper evdev ablk_helper cryptd mac_hid microcode cfg80211 psmouse serio_raw r8169 snd_hda_intel rtsx_pci_ms drm_kms_helper mii snd_hda_codec rfkill memstick i2c_i801 lpc_ich drm thermal snd_hwdep snd_pcm intel_gtt battery i2c_algo_bit i2c_core snd_timer mei_me snd
    oct. 20 22:42:47 ColdFire-Arch kernel: tpm_infineon mei tpm_tis soundcore tpm shpchp wmi video processor button ac ext4 crc16 mbcache jbd2 sd_mod sr_mod crc_t10dif crct10dif_common cdrom hid_generic usbhid hid atkbd rtsx_pci_sdmmc libps2 mmc_core ahci libahci libata ehci_pci xhci_hcd ehci_hcd scsi_mod rtsx_pci usbcore usb_common i8042 serio
    oct. 20 22:42:47 ColdFire-Arch kernel: CPU: 2 PID: 1787 Comm: kworker/u16:137 Tainted: G W O 3.14.21-1-lts #1
    oct. 20 22:42:47 ColdFire-Arch kernel: Hardware name: Notebook W35xSTQ_370ST /W35xSTQ_370ST , BIOS 4.6.5 09/26/2013
    oct. 20 22:42:47 ColdFire-Arch kernel: Workqueue: events_unbound async_run_entry_fn
    oct. 20 22:42:47 ColdFire-Arch kernel: 0000000000000000 000000004d05b402 ffff8801fdb19980 ffffffff814fc3d1
    oct. 20 22:42:47 ColdFire-Arch kernel: ffff8801fdb199c8 ffff8801fdb199b8 ffffffff8106865d ffff8800c71a68c8
    oct. 20 22:42:47 ColdFire-Arch kernel: ffff880222ad4000 0000000000000600 0000000000000001 0000000000064000
    oct. 20 22:42:47 ColdFire-Arch kernel: Call Trace:
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff814fc3d1>] dump_stack+0x45/0x56
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8106865d>] warn_slowpath_common+0x7d/0xa0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff810686dc>] warn_slowpath_fmt+0x5c/0x80
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa0906f10>] intel_dp_check_edp+0x60/0x110 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa090763d>] intel_dp_aux_native_write+0x3d/0x1d0 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa092c3ce>] ? gen6_read32+0x6e/0x120 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa0909db7>] intel_dp_sink_dpms+0x97/0xd0 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa0902e8c>] intel_ddi_post_disable+0xcc/0x140 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08f3e90>] haswell_crtc_disable+0x160/0x330 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08f4cf4>] __intel_set_mode+0x7b4/0x1530 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08fafce>] intel_modeset_setup_hw_state+0x8ce/0xc30 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa092d3f0>] ? hsw_write64+0x160/0x160 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08bc2c3>] __i915_drm_thaw+0x143/0x200 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08bcc7b>] i915_resume+0x2b/0x50 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08bccb6>] i915_pm_resume+0x16/0x20 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff812ca6ad>] pci_pm_restore+0x7d/0xd0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff812ca630>] ? pci_pm_suspend_noirq+0x1a0/0x1a0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff813951f9>] dpm_run_callback+0x49/0xa0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff813959d6>] device_resume+0xc6/0x200
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81395b2d>] async_resume+0x1d/0x50
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81092507>] async_run_entry_fn+0x37/0x130
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108523c>] process_one_work+0x16c/0x410
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81085c82>] worker_thread+0x132/0x3e0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81085b50>] ? manage_workers.isra.23+0x2e0/0x2e0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108c37a>] kthread+0xea/0x100
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108c290>] ? kthread_create_on_node+0x1a0/0x1a0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8150aa7c>] ret_from_fork+0x7c/0xb0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108c290>] ? kthread_create_on_node+0x1a0/0x1a0
    oct. 20 22:42:47 ColdFire-Arch kernel: ---[ end trace f7127a7de298e85f ]---
    oct. 20 22:42:47 ColdFire-Arch kernel: ------------[ cut here ]------------
    oct. 20 22:42:47 ColdFire-Arch kernel: WARNING: CPU: 2 PID: 1787 at drivers/gpu/drm/i915/intel_dp.c:323 intel_dp_check_edp+0x60/0x110 [i915]()
    oct. 20 22:42:47 ColdFire-Arch kernel: eDP powered off while attempting aux channel communication.
    oct. 20 22:42:47 ColdFire-Arch kernel: Modules linked in: ctr ccm bbswitch(O) snd_hda_codec_hdmi fuse btusb mousedev uvcvideo snd_usb_audio bluetooth videobuf2_vmalloc videobuf2_memops snd_usbmidi_lib videobuf2_core snd_rawmidi joydev videodev snd_seq_device 6lowpan_iphc media arc4 iwldvm coretemp hwmon iTCO_wdt led_class x86_pkg_temp_thermal intel_powerclamp iTCO_vendor_support mac80211 mxm_wmi kvm_intel kvm iwlwifi crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel snd_hda_codec_via snd_hda_codec_generic aesni_intel i915 aes_x86_64 lrw gf128mul glue_helper evdev ablk_helper cryptd mac_hid microcode cfg80211 psmouse serio_raw r8169 snd_hda_intel rtsx_pci_ms drm_kms_helper mii snd_hda_codec rfkill memstick i2c_i801 lpc_ich drm thermal snd_hwdep snd_pcm intel_gtt battery i2c_algo_bit i2c_core snd_timer mei_me snd
    oct. 20 22:42:47 ColdFire-Arch kernel: tpm_infineon mei tpm_tis soundcore tpm shpchp wmi video processor button ac ext4 crc16 mbcache jbd2 sd_mod sr_mod crc_t10dif crct10dif_common cdrom hid_generic usbhid hid atkbd rtsx_pci_sdmmc libps2 mmc_core ahci libahci libata ehci_pci xhci_hcd ehci_hcd scsi_mod rtsx_pci usbcore usb_common i8042 serio
    oct. 20 22:42:47 ColdFire-Arch kernel: CPU: 2 PID: 1787 Comm: kworker/u16:137 Tainted: G W O 3.14.21-1-lts #1
    oct. 20 22:42:47 ColdFire-Arch kernel: Hardware name: Notebook W35xSTQ_370ST /W35xSTQ_370ST , BIOS 4.6.5 09/26/2013
    oct. 20 22:42:47 ColdFire-Arch kernel: Workqueue: events_unbound async_run_entry_fn
    oct. 20 22:42:47 ColdFire-Arch kernel: 0000000000000000 000000004d05b402 ffff8801fdb198b0 ffffffff814fc3d1
    oct. 20 22:42:47 ColdFire-Arch kernel: ffff8801fdb198f8 ffff8801fdb198e8 ffffffff8106865d ffff8800c71a68c8
    oct. 20 22:42:47 ColdFire-Arch kernel: ffff880222ad4000 ffff8800c71a68c8 ffff880222ad4000 0000000000000005
    oct. 20 22:42:47 ColdFire-Arch kernel: Call Trace:
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff814fc3d1>] dump_stack+0x45/0x56
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8106865d>] warn_slowpath_common+0x7d/0xa0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff810686dc>] warn_slowpath_fmt+0x5c/0x80
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa0906f10>] intel_dp_check_edp+0x60/0x110 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa0907046>] intel_dp_aux_ch+0x86/0x640 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff810686dc>] ? warn_slowpath_fmt+0x5c/0x80
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa09076e1>] intel_dp_aux_native_write+0xe1/0x1d0 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa092c302>] ? gen6_read64+0xc2/0x120 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa0909db7>] intel_dp_sink_dpms+0x97/0xd0 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa0902e8c>] intel_ddi_post_disable+0xcc/0x140 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08f3e90>] haswell_crtc_disable+0x160/0x330 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08f4cf4>] __intel_set_mode+0x7b4/0x1530 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08fafce>] intel_modeset_setup_hw_state+0x8ce/0xc30 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa092d3f0>] ? hsw_write64+0x160/0x160 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08bc2c3>] __i915_drm_thaw+0x143/0x200 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08bcc7b>] i915_resume+0x2b/0x50 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffffa08bccb6>] i915_pm_resume+0x16/0x20 [i915]
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff812ca6ad>] pci_pm_restore+0x7d/0xd0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff812ca630>] ? pci_pm_suspend_noirq+0x1a0/0x1a0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff813951f9>] dpm_run_callback+0x49/0xa0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff813959d6>] device_resume+0xc6/0x200
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81395b2d>] async_resume+0x1d/0x50
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81092507>] async_run_entry_fn+0x37/0x130
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108523c>] process_one_work+0x16c/0x410
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81085c82>] worker_thread+0x132/0x3e0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff81085b50>] ? manage_workers.isra.23+0x2e0/0x2e0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108c37a>] kthread+0xea/0x100
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108c290>] ? kthread_create_on_node+0x1a0/0x1a0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8150aa7c>] ret_from_fork+0x7c/0xb0
    oct. 20 22:42:47 ColdFire-Arch kernel: [<ffffffff8108c290>] ? kthread_create_on_node+0x1a0/0x1a0
    oct. 20 22:42:47 ColdFire-Arch kernel: ---[ end trace f7127a7de298e860 ]---
    There is no error in Xorg log.
    For the record, this is the full log of my update session from yesterday (note especially gtk, mesa, cairo):
    [2014-10-19 14:54] [PACMAN] Running 'pacman -Sdd --asdeps java-runtime-common'
    [2014-10-19 14:55] [PACMAN] removed java-common (1-8)
    [2014-10-19 14:55] [ALPM-SCRIPTLET] For the complete set of Java binaries to be available in your PATH,
    [2014-10-19 14:55] [ALPM-SCRIPTLET] you need to re-login or source /etc/profile.d/jre.sh
    [2014-10-19 14:55] [ALPM-SCRIPTLET] Please note that this package does not support forcing JAVA_HOME as former package java-common did
    [2014-10-19 14:55] [PACMAN] installed java-runtime-common (2-1)
    [2014-10-19 14:57] [PACMAN] Running 'pacman --color auto -Sy'
    [2014-10-19 14:57] [PACMAN] synchronizing package lists
    [2014-10-19 14:57] [PACMAN] Running 'pacman --color auto -S -u'
    [2014-10-19 14:57] [PACMAN] starting full system upgrade
    [2014-10-19 14:57] [PACMAN] Running 'pacman --color auto -Sy'
    [2014-10-19 14:57] [PACMAN] synchronizing package lists
    [2014-10-19 15:21] [PACMAN] Running 'pacman --color auto -S -u'
    [2014-10-19 15:21] [PACMAN] starting full system upgrade
    [2014-10-19 15:26] [PACMAN] Running 'pacman --color auto -Sy'
    [2014-10-19 15:26] [PACMAN] synchronizing package lists
    [2014-10-19 15:26] [PACMAN] Running 'pacman --color auto -S -u'
    [2014-10-19 15:26] [PACMAN] starting full system upgrade
    [2014-10-19 15:38] [PACMAN] removed lxpolkit (0.1.0-3)
    [2014-10-19 15:38] [PACMAN] upgraded glib2 (2.40.0-2 -> 2.42.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded at-spi2-core (2.12.0-1 -> 2.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded atk (2.12.0-1 -> 2.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded at-spi2-atk (2.12.1-1 -> 2.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded dconf (0.20.0-1 -> 0.22.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded mesa-dri (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded mesa (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded mesa-libgl (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded cairo (1.12.16-3 -> 1.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gdk-pixbuf2 (2.30.8-1 -> 2.31.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gtk-update-icon-cache (2.24.24-1 -> 2.24.25-1)
    [2014-10-19 15:38] [PACMAN] upgraded pango (1.36.6-1 -> 1.36.8-1)
    [2014-10-19 15:38] [PACMAN] installed adwaita-icon-theme (3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gtk3 (3.12.2-1 -> 3.14.3-2)
    [2014-10-19 15:38] [PACMAN] upgraded gsettings-desktop-schemas (3.12.2-1 -> 3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded baobab (3.12.1-1 -> 3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded boost-libs (1.56.0-1 -> 1.56.0-2)
    [2014-10-19 15:38] [PACMAN] upgraded boost (1.56.0-1 -> 1.56.0-2)
    [2014-10-19 15:38] [PACMAN] upgraded brltty (5.1-1 -> 5.1-2)
    [2014-10-19 15:38] [PACMAN] installed gnome-desktop (1:3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded evince (3.12.2-1 -> 3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded p11-kit (0.20.7-3 -> 0.22.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gnutls (3.3.8-2 -> 3.3.9-1)
    [2014-10-19 15:38] [PACMAN] upgraded v4l-utils (1.2.1-1 -> 1.6.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded ffmpeg (1:2.4.2-1 -> 1:2.4.2-2)
    [2014-10-19 15:38] [PACMAN] upgraded file (5.19-1 -> 5.20-1)
    [2014-10-19 15:38] [PACMAN] upgraded file-roller (3.12.2-1 -> 3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gtk2 (2.24.24-1 -> 2.24.25-1)
    [2014-10-19 15:38] [PACMAN] upgraded sqlite (3.8.6-1 -> 3.8.7-1)
    [2014-10-19 15:38] [PACMAN] upgraded firefox (32.0.3-1 -> 33.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded flashplugin (11.2.202.406-1 -> 11.2.202.411-1)
    [2014-10-19 15:38] [PACMAN] upgraded zeromq (4.0.4-4 -> 4.0.5-1)
    [2014-10-19 15:38] [PACMAN] upgraded fontforge (20140101-3 -> 20140101-4)
    [2014-10-19 15:38] [PACMAN] upgraded gcr (3.12.2-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gdl (3.12.0-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gtksourceview3 (3.12.3-1 -> 3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded openssl (1.0.1.i-1 -> 1.0.1.j-1)
    [2014-10-19 15:38] [PACMAN] upgraded libgit2 (1:0.21.1-1 -> 1:0.21.1-2)
    [2014-10-19 15:38] [PACMAN] upgraded libgit2-glib (0.0.20-1 -> 0.0.22-1)
    [2014-10-19 15:38] [PACMAN] upgraded libgee (0.14.0-1 -> 0.16.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded glib-networking (2.40.1-1 -> 2.42.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded libsoup (2.46.0-1 -> 2.48.0-1)
    [2014-10-19 15:38] [PACMAN] installed webkit2gtk (2.6.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gobject-introspection (1.40.0-1 -> 1.42.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded libpeas (1.10.1-1 -> 1.12.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gitg (3.14.0-1 -> 3.14.0-2)
    [2014-10-19 15:38] [PACMAN] upgraded libsigc++ (2.3.1-2 -> 2.4.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded glibmm (2.40.0-1 -> 2.42.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gnome-common (3.12.0-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gnome-keyring (3.12.2-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gtk-doc (1.20-1 -> 1.21-1)
    [2014-10-19 15:38] [PACMAN] upgraded gtkmm3 (3.12.0-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded gucharmap (3.12.1-1 -> 3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gvfs (1.20.2-1 -> 1.22.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gvfs-mtp (1.20.2-1 -> 1.22.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded gvfs-smb (1.20.2-1 -> 1.22.1-1)
    [2014-10-19 15:38] [PACMAN] installed java-environment-common (2-1)
    [2014-10-19 15:38] [PACMAN] upgraded jre7-openjdk-headless (7.u65_2.5.2-2 -> 7.u71_2.5.3-1)
    [2014-10-19 15:38] [PACMAN] upgraded xdg-utils (1.1.0.git20140630-1 -> 1.1.0.git20141009-1)
    [2014-10-19 15:38] [PACMAN] upgraded jre7-openjdk (7.u65_2.5.2-2 -> 7.u71_2.5.3-1)
    [2014-10-19 15:38] [PACMAN] upgraded jdk7-openjdk (7.u65_2.5.2-2 -> 7.u71_2.5.3-1)
    [2014-10-19 15:38] [PACMAN] upgraded less (468-1 -> 470-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-glib2 (2.40.0-1 -> 2.42.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-atk (2.12.0-1 -> 2.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-flashplugin (11.2.202.406-1 -> 11.2.202.411-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-gdk-pixbuf2 (2.30.8-1 -> 2.31.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-libtasn1 (4.1-1 -> 4.2-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-mesa-dri (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-mesa (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-mesa-libgl (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-mesa-vdpau (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-openssl (1.0.1.i-1 -> 1.0.1.j-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-p11-kit (0.20.7-3 -> 0.22.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-pango (1.36.6-1 -> 1.36.8-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-v4l-utils (1.2.1-1 -> 1.6.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded lib32-xz (5.0.5-1 -> 5.0.7-1)
    [2014-10-19 15:38] [PACMAN] upgraded libogg (1.3.1-2 -> 1.3.2-1)
    [2014-10-19 15:38] [PACMAN] upgraded librsvg (1:2.40.2-1 -> 1:2.40.5-1)
    [2014-10-19 15:38] [PACMAN] installed lxsession (1:0.5.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded mesa-vdpau (10.3.0-3 -> 10.3.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded vte-common (0.36.3-1 -> 0.38.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded vte3 (0.36.3-1 -> 0.38.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded nemiver (0.9.5-2 -> 0.9.5-3)
    [2014-10-19 15:38] [PACMAN] upgraded openssh (6.6p1-2 -> 6.7p1-1)
    [2014-10-19 15:38] [PACMAN] upgraded perl-extutils-depends (0.401-1 -> 0.402-1)
    [2014-10-19 15:38] [PACMAN] upgraded php (5.6.1-1 -> 5.6.2-1)
    [2014-10-19 15:38] [PACMAN] upgraded pygobject-devel (3.12.2-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded python-gobject (3.12.2-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded python2-gobject (3.12.2-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded python2-greenlet (0.4.4-1 -> 0.4.5-1)
    [2014-10-19 15:38] [PACMAN] upgraded thunderbird (31.1.2-1 -> 31.2.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded vala (0.24.0-1 -> 0.26.1-1)
    [2014-10-19 15:38] [ALPM-SCRIPTLET] In order to use the new version, reload all virtualbox modules manually.
    [2014-10-19 15:38] [PACMAN] upgraded virtualbox-host-modules (4.3.18-1 -> 4.3.18-3)
    [2014-10-19 15:38] [ALPM-SCRIPTLET] In order to use the new version, reload all virtualbox modules manually.
    [2014-10-19 15:38] [PACMAN] upgraded virtualbox-host-modules-lts (4.3.18-1 -> 4.3.18-4)
    [2014-10-19 15:38] [PACMAN] upgraded vlc (2.1.5-3 -> 2.1.5-4)
    [2014-10-19 15:38] [PACMAN] upgraded webkitgtk (2.4.5-1 -> 2.4.6-2)
    [2014-10-19 15:38] [PACMAN] upgraded webkitgtk2 (1.10.2-8 -> 2.4.6-2)
    [2014-10-19 15:38] [PACMAN] upgraded xcb-util (0.3.9-2 -> 0.4.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded xcb-util-image (0.3.9-2 -> 0.4.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded yelp-xsl (3.12.0-1 -> 3.14.0-1)
    [2014-10-19 15:38] [PACMAN] upgraded yelp-tools (3.12.1-1 -> 3.14.1-1)
    [2014-10-19 15:38] [PACMAN] upgraded zenity (3.12.1-2 -> 3.14.0-1)
    [2014-10-19 15:42] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.uDW/android-sdk-build-tools-r21.0.1-1-x86_64.pkg.tar'
    [2014-10-19 15:42] [PACMAN] upgraded android-sdk-build-tools (r20-1 -> r21.0.1-1)
    [2014-10-19 15:43] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.6sB/eclipse-vrapper-0.48.0-1-any.pkg.tar'
    [2014-10-19 15:43] [PACMAN] upgraded eclipse-vrapper (0.44.0-1 -> 0.48.0-1)
    [2014-10-19 15:46] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.SxE/google-chrome-38.0.2125.104-1-x86_64.pkg.tar'
    [2014-10-19 15:46] [ALPM-SCRIPTLET] (B[m[1m[34m==>(B[m[1m Updating desktop MIME database...(B[m
    [2014-10-19 15:46] [ALPM-SCRIPTLET] (B[m[1m[34m==>(B[m[1m Updating icon cache..(B[m
    [2014-10-19 15:46] [ALPM-SCRIPTLET] (B[m[1m[34m==>(B[m[1m[33m NOTE:(B[m[1m The binary is called: 'google-chrome-stable'(B[m
    [2014-10-19 15:46] [PACMAN] upgraded google-chrome (38.0.2125.101-1 -> 38.0.2125.104-1)
    [2014-10-19 15:47] [PACMAN] Running 'pacman --color auto -S extra/gconf-editor'
    [2014-10-19 15:47] [PACMAN] installed gconf-editor (3.0.1-3)
    [2014-10-19 15:57] [PACMAN] Running 'pacman --color auto -S -u'
    [2014-10-19 15:57] [PACMAN] starting full system upgrade
    [2014-10-19 15:58] [PACMAN] Running 'pacman -Rs caffeine-bzr'
    [2014-10-19 15:58] [PACMAN] removed caffeine-bzr (1:.600.29aed28-1)
    [2014-10-19 15:58] [PACMAN] removed python2-xlib (0.15rc1-7)
    [2014-10-19 15:58] [PACMAN] removed python2-notify (0.1.1-13)
    [2014-10-19 15:58] [PACMAN] removed kaa-metadata (0.7.7-5)
    [2014-10-19 15:58] [PACMAN] removed kaa-base (0.6.0-5)
    [2014-10-19 16:00] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.Sne/gdb-c++-pretty-svn-216437-1-any.pkg.tar'
    [2014-10-19 16:00] [ALPM-SCRIPTLET] Add the following line in your /etc/gdb/gdbinit:
    [2014-10-19 16:00] [ALPM-SCRIPTLET] source /usr/share/gdb/gdb-c++-pretty/gdb-c++-pretty.gdb
    [2014-10-19 16:00] [PACMAN] upgraded gdb-c++-pretty-svn (212304-1 -> 216437-1)
    [2014-10-19 16:02] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.Xqb/go-mtpfs-git-20140903-1-x86_64.pkg.tar'
    [2014-10-19 16:02] [PACMAN] upgraded go-mtpfs-git (20140625-1 -> 20140903-1)
    [2014-10-19 16:05] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.0Mv/powerline-fonts-git-r62.963daa1-1-any.pkg.tar'
    [2014-10-19 16:06] [ALPM-SCRIPTLET] Updating font cache... done
    [2014-10-19 16:06] [PACMAN] upgraded powerline-fonts-git (r53.99be848-1 -> r62.963daa1-1)
    [2014-10-19 16:09] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.KNY/cairo-compmgr-git-1:0.3.1.35.g719a997-3-x86_64.pkg.tar'
    [2014-10-19 16:09] [PACMAN] reinstalled cairo-compmgr-git (1:0.3.1.35.g719a997-3)
    [2014-10-19 16:11] [PACMAN] Running 'pacman -U /var/cache/pacman/pkg/vala-0.24.0-1-x86_64.pkg.tar.xz'
    [2014-10-19 16:11] [PACMAN] downgraded vala (0.26.1-1 -> 0.24.0-1)
    [2014-10-19 16:13] [PACMAN] Running 'pacman --color auto -U /tmp/yaourt-tmp-corax/PKGDEST.KOc/cairo-compmgr-git-1:0.3.1.35.g719a997-3-x86_64.pkg.tar'
    [2014-10-19 16:13] [PACMAN] reinstalled cairo-compmgr-git (1:0.3.1.35.g719a997-3)
    Since I updated yesterday, I have the latest versions of all packages (note that xf86-video-intel is still 2.99.916-3, it hasn't been updated). I run linux-lts 3.14.21-1 (because of other hibernation issues with linux >.<).
    Other useful information:
    I used UXA for xf86-video-intel, but switching to SNA doesn't solve the problem.
    I tried downgrading Firefox to 32.3 and gtk2 to 2.24.24, same problem.
    Last edited by Corax (2014-10-20 23:50:43)

    Update: actually this has nothing to do with i915 (I can see the issue earlier in the journal), and after hours of downgrading/reupgrading madness the problem just disappeared... It was probably a bug of Firefox because of the number of tabs opened in the same time or something like that... Maybe related to a website in particular, since I saw some libmozalloc segfault in the log. Anyway, topic invalidated.

  • [Solved] Multiple licenses?

    Hi,
    I'm redoing the PKGBUILD for powerline-fonts, but as the pack requires different licenses. I have them wrapped in the source tarball but I'm unable to install them for some reason. Is there a hook I need to include to have the dir under /usr/share/licenses/$pkgname created? I'm using the method outlined in the guidelines to install, but within a for loop.
    EDIT: Sorry, I typed this post just before I left.
    # Maintainer: Sergey Dovgal <arcadoss-f at ya.ru>
    # Contributor: Ellis Kenyo <elken.tdos at gmail.com>
    pkgname=powerline-fonts
    _gitname=powerline-fonts
    pkgver=861a3c6
    pkgrel=1
    depends=('fontconfig' 'xorg-font-utils')
    makedepends=('git')
    url=('git://github.com/Lokaltog/powerline-fonts')
    license=('Apache' 'custom:"SIL Open Font License"' 'custom:"Ubuntu Fonts License"' 'custom:"DejaVu Fonts
    License"')
    pkgdesc="All patched fonts for Powerline users"
    arch=('any')
    source=('git+https://github.com/Lokaltog/powerline-fonts.git' )
    install=$pkgname.install
    md5sums=('SKIP')
    pkgver() {
    cd $_gitname
    # Use the tag of the last commit
    git describe --always | sed 's|-|.|g'
    package() {
    install -d "$pkgdir/usr/share/fonts/TTF"
    for i in LICENSE.*; do
    install -Dm644 $i "${pkgdir}/usr/share/licenses/${pkgname}/$i";
    done
    #cd $_gitname
    #cp "$srcdir/Monaco_Linux-Powerline.ttf" "$pkgdir/usr/share/fonts/TTF/"
    #cp -dpr --no-preserve=ownership */*.ttf "$pkgdir/usr/share/fonts/TTF/"
    Last edited by elken (2013-10-25 21:10:45)

    It only creates the fontdir if the font.dir doesn't exist already, or is there a better way than that?
    # Maintainer: Ellis Kenyo <elken.tdos at gmail.com>
    pkgname=ttf-powerline-fonts-git
    _gitname=powerline-fonts
    pkgver=861a3c6
    pkgrel=1
    depends=('fontconfig' 'xorg-font-utils')
    makedepends=('git')
    url=('git://github.com/Lokaltog/powerline-fonts')
    license=('Apache' 'custom:"OFL"' 'custom:"UFL"' 'custom:"DFL "')
    pkgdesc="Patched fonts for Powerline users"
    arch=('any')
    source=('git+https://github.com/Lokaltog/powerline-fonts.git' )
    install=$pkgname.install
    md5sums=('SKIP')
    pkgver() {
    cd $srcdir/$_gitname
    printf "%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
    package() {
    cd $srcdir/$_gitname
    mkdir -p "$pkgdir/usr/share/fonts/TTF"
    mkdir -p "$pkgdir/usr/share/fonts/OTF"
    if [ ! -f /usr/share/fonts/OTF/fonts.dir ]; then
    "mkfontdir $pkgdir/usr/share/fonts/OTF";
    fi
    if [ ! -f /usr/share/fonts/TTF/fonts.dir ]; then
    mkfontdir "$pkgdir/usr/share/fonts/TTF";
    fi
    mkdir -p "$pkgdir/usr/share/licenses/$pkgname"
    find . -iname "*.ttf" -exec install -m644 {} "$pkgdir/usr/share/fonts/TTF" \;
    find . -iname "*.otf" -exec install -m644 {} "$pkgdir/usr/share/fonts/OTF" \;
    cp -vR --parents */*.txt "$pkgdir/usr/share/licenses/$pkgname"
    Last edited by elken (2013-10-24 15:03:24)

  • [SOLVED] Upgrade broke vim, tmux, j4-desktop (and perhaps more)

    I just upgraded my systems, and now several strange things are happening.
    I'm using powerline fonts in tmux and vim/gvim. In gvim, everything behaves normal, but in vim, the fonts are just plain broken. Typing space just writes Â.
    The fonts are also just plain broken in the terminal - tmux doesn't show anything in the statusline at all, while the output is garbled in vim.
    Trying to start j4-dmenu-desktop also gives an error:
    j4-dmenu-desktop --dmenu="dmenu -p 'open' -i -z "                                 
    SearchPath: /usr/share/applications/
    SearchPath: /home/simendsjo/.local/share/applications/
    terminate called after throwing an instance of 'std::logic_error'
      what():  basic_string::_S_construct null not valid
    [1]    18502 abort (core dumped)  j4-dmenu-desktop --dmenu="dmenu -p 'open' -i -z "
    I noticed the upgrade included glibc and openjdk among other things.
    I don't even know where to start trying to figure this out. Any help would be greatly appreciated.
    Last edited by simendsjo (2014-09-16 08:45:32)

    Scimmia wrote:What is the output of `locale` and `locale -a`?
    $ locale                                               
    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
    locale: Cannot set LC_ALL to default locale: No such file or directory
    LANG=en_US.UTF-8
    LC_CTYPE=en_US.UTF-8
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=
    $ locale -a                                           
    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
    locale: Cannot set LC_COLLATE to default locale: No such file or directory
    C
    POSIX
    nb_NO.utf8

  • [SOLVED] rxvt-unicode and Powerline patched fonts

    Hey all,
    I'm trying to make my zsh prompt look like this - https://gist.github.com/3712874
    As it says, it requires patched font. I downloaded two of them - Inconsolata-dz for Powerline and Menlo for Powerline.
    If in .Xresources I put Menlo as my font of choice, the prompt looks like in linked page - all characters are displayed properly.
    If, however, I put Inconsolata as my font of coice, charcters will fail to show up and those rectangles will be shown. (as if those characters do not exist in that font)
    Important thing to note is that BOTH fonts work fine in ViM (with Powerline plugin) - it shows characters which are displayed as rectangles in zsh prompt.
    Any ideas?
    Last edited by developej (2012-11-08 23:49:04)

    ! Font
    !URxvt*font: xft:Inconsolata-dz for Powerline:size=10
    URxvt*font: xft:Menlo for Powerline:regular:size=10
    i also tried xft:Inconsolata-dz for Powerline:Medium:size=10 - didn't work. if i change the font size, it is changed in the terminal too, so unless terminal can interpret size even though i didn't get the font right, i don't think that's it.
    i found inconsolata(non dz) for powerline, will try that one now
    edit: non dz version doesn't work, same thing as with dz
    Last edited by developej (2012-11-07 16:55:15)

  • Dwm special characters with tty font?

    Currently, I have dwm configured like so:
    http://i.imgur.com/JsTurIO.png
    But as you can see, in the upper left corner, my tag names aren't displaying properly, neither is the title of the directory I'm in (†††). I've tried the dwm-pango patch, but then I'm unable to get it to use the same font it uses currently for the menubar, which I would like it to do. I also have no idea what the name of the font it's currently using is.
    So, two questions: is there a way I can get special characters to show up with dwm while maintaining the same font, and if not, how can I switch the font in my terminal windows so that I can match the statusbar and my other windows? I suspect the answer to the second is just some line in .Xresources which I can probably figure out unless there's something more complicated, but I'd rather just use the same font I'm currently using, but fix the special characters problem.
    -- mod edit: read the Forum Etiquette and only post thumbnails http://wiki.archlinux.org/index.php/For … s_and_Code [jwr] --
    Last edited by davidjosepha (2014-03-04 22:32:51)

    Epictek wrote:
    davidjosepha wrote:
    I'm getting an error when I try to build...
    /usr/include/X11/Xft/Xft.h:39:22: fatal error: ft2build.h: No such file or directory
    However, I've made sure freetype2 is installed properly and that ft2build.h is where it's supposed to be. Why might this be happening?
    Edit: Managed to figure this out. But it's still not using a console font in dwm. How can I get it to use a font from /usr/share/kbd/consolefonts/?
    I'm trying to also get this to work but get the same error as you did.
    How did you do to fix it?
    You need to add a couple lines to config.mk in the source directory.
    @OP: It's not entirely clear what your goal is. The XFT patch allows for unicode .ttf fonts, and affects the entire statusbar; the current Pango patch allows for fonts in languages with unique character sets (Cyrillic, CJK, Thai, etc.) but some Pango features only affect the right-hand statusline. If you're trying to add, say, symbols or icons to your tag names for a little eye-candy, you can use the XFT patch and use unicode characters. If you're trying to use a font for your native language, Pango would be the better choice. From what I can tell (C often doesn't come easily to me), it seems each patch replaces console font support entirely for its respective alternative. I'm not aware of any solution that could allow you to use a console font in DWM while displaying special characters; you'll probably have to pick whichever patch you feel is less invasive and detrimental.
    EDIT: If you choose to apply a patch and then change the fonts in your terminal emulator, the latter depends on which terminal you're using. The wiki has articles on Xterm and Urxvt; other terminals will either have a configuration menu or file you can alter, probably mentioned in the man page.
    Last edited by ANOKNUSA (2014-04-12 16:04:44)

  • DWM: Fonts & Glyphs

    Essentially, I would like my DWM top bar to render fonts exactly as urxvt does. I've tried DWM-Pango in the AUR, but I get something similar to this at best:
    As you can see, I'd like the Japanese to appear the same size as it does in ncmpcpp. I'm using conky-cli to display my MPD status.

    This seems very much like your previous thread https://bbs.archlinux.org/viewtopic.php?id=101716
    While you may not have got the answer you were looking for there, opening another thread with no further information (other than a change of WM) seems gratuitous...
    Closing

  • Dwm 5.9 Compilation issues

    Ok guys, I really need your help.
    I am currently with dwm 5.8.2 (everything's fine) and I downloaded 5.9 via ABS.
    I launched a makepkg under ~/dwm. And next, I tried to apply this patch called pertag2. diff: https://github.com/simongmzlj/dwmhacks/ … rtag2.diff
    It succeeded. Used:
    patch -p1 < pertag2.diff
    And I modified my config.h as jokerboy suggested me here: https://bbs.archlinux.org/viewtopic.php … 45#p960545
    I haven't others patches.
    But when I try to compile it, I got many errors messages.
    dwm build options:
    CFLAGS = -std=c99 -pedantic -Wall -Os -I. -I/usr/include -I/usr/include/X11 -DVERSION="5.9" -DXINERAMA
    LDFLAGS = -s -L/usr/lib -lc -L/usr/lib/X11 -lX11 -L/usr/lib/X11 -lXinerama
    CC = cc
    CC dwm.c
    In file included from dwm.c:293:0:
    config.h:31:16: erreur: ‘tile’ undeclared here (not in a function)
    dwm.c: In function ‘buttonpress’:
    dwm.c:450:9: erreur: request for member ‘name’ in something not a structure or union
    dwm.c:450:9: erreur: request for member ‘name’ in something not a structure or union
    dwm.c:450:4: attention : passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default]
    /usr/include/string.h:399:15: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
    dwm.c:450:4: attention : passing argument 1 of ‘textnw’ from incompatible pointer type [enabled by default]
    dwm.c:236:12: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
    dwm.c: In function ‘createmon’:
    dwm.c:686:29: erreur: request for member ‘mfact’ in something not a structure or union
    dwm.c:686:36: attention : comparaison ordonnée de pointeur avec le zéro entier [-pedantic]
    dwm.c:686:61: erreur: request for member ‘mfact’ in something not a structure or union
    dwm.c:686:48: erreur: non concordance de type dans une expression conditionnelle
    dwm.c:686:16: erreur: incompatible types when assigning to type ‘double’ from type ‘const struct Layout *’
    dwm.c:686:3: attention : statement with no effect [-Wunused-value]
    dwm.c:687:31: erreur: request for member ‘nmaster’ in something not a structure or union
    dwm.c:687:40: attention : comparaison ordonnée de pointeur avec le zéro entier [-pedantic]
    dwm.c:687:46: erreur: ‘nmaster’ undeclared (first use in this function)
    dwm.c:687:46: note: each undeclared identifier is reported only once for each function it appears in
    dwm.c:687:67: erreur: request for member ‘nmaster’ in something not a structure or union
    dwm.c:687:18: attention : assignment makes integer from pointer without a cast [enabled by default]
    dwm.c:688:26: erreur: request for member ‘layout’ in something not a structure or union
    dwm.c: In function ‘drawbar’:
    dwm.c:767:10: erreur: request for member ‘name’ in something not a structure or union
    dwm.c:767:10: erreur: request for member ‘name’ in something not a structure or union
    dwm.c:767:3: attention : passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default]
    /usr/include/string.h:399:15: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
    dwm.c:767:3: attention : passing argument 1 of ‘textnw’ from incompatible pointer type [enabled by default]
    dwm.c:236:12: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
    dwm.c:769:19: erreur: request for member ‘name’ in something not a structure or union
    dwm.c:769:3: attention : passing argument 1 of ‘drawtext’ from incompatible pointer type [enabled by default]
    dwm.c:190:13: note: expected ‘const char *’ but argument is of type ‘const struct Layout *’
    dwm.c: Hors de toute fonction :
    dwm.c:1550:1: attention : ‘setnmaster’ defined but not used [-Wunused-function]
    dwm.c:1539:1: attention : ‘incnmaster’ defined but not used [-Wunused-function]
    dwm.c:1691:1: attention : ‘ntile’ defined but not used [-Wunused-function]
    make: *** [dwm.o] Erreur 1
    Here my config.h:
    /* See LICENSE file for copyright and license details. */
    /* appearance */
    static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
    static const char normbordercolor[] = "#cccccc";
    static const char normbgcolor[] = "#cccccc";
    static const char normfgcolor[] = "#000000";
    static const char selbordercolor[] = "#0066ff";
    static const char selbgcolor[] = "#0066ff";
    static const char selfgcolor[] = "#ffffff";
    static const unsigned int borderpx = 1; /* border pixel of windows */
    static const unsigned int snap = 32; /* snap pixel */
    static const Bool showbar = True; /* False means no bar */
    static const Bool topbar = True; /* False means bottom bar */
    static const Rule rules[] = {
    /* class instance title tags mask isfloating monitor */
    { "Gimp", NULL, NULL, 0, True, -1 },
    { "Firefox", NULL, NULL, 1 << 8, False, -1 },
    /* layout(s) */
    static const int nmaster = 1; /* clients in the master area */
    static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
    static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
    static const Layout layouts[] = {
    /* symbol arrange function */
    { "[]=", tile }, /* first entry is default */
    { "><>", NULL }, /* no layout function means floating behavior */
    { "[M]", monocle },
    { "[N]", ntile },
    /* tagging */
    static const Tag tags[] = {
    /* name layout mfact nmaster */
    { "1", &layouts[0], -1, -1 },
    { "2", &layouts[1], -1, -1 },
    { "3", &layouts[2], -1, -1 },
    { "4", &layouts[3], 0.40, -1 },
    { "5", &layouts[0], -1, -1 },
    { "6", &layouts[0], -1, -1 },
    { "7", &layouts[0], -1, -1 },
    { "8", &layouts[0], -1, -1 },
    { "9", &layouts[0], -1, -1 },
    /* key definitions */
    #define MODKEY Mod1Mask
    #define TAGKEYS(KEY,TAG) \
    { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
    { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
    /* helper for spawning shell commands in the pre dwm-5.0 fashion */
    #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
    /* commands */
    static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
    static const char *termcmd[] = { "uxterm", NULL };
    static Key keys[] = {
    /* modifier key function argument */
    { MODKEY, XK_p, spawn, {.v = dmenucmd } },
    { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
    { MODKEY, XK_b, togglebar, {0} },
    { MODKEY, XK_j, focusstack, {.i = +1 } },
    { MODKEY, XK_k, focusstack, {.i = -1 } },
    { MODKEY, XK_a, incnmaster, {.i = +1 } },
    { MODKEY, XK_z, incnmaster, {.i = -1 } },
    { MODKEY, XK_h, setmfact, {.f = -0.05} },
    { MODKEY, XK_l, setmfact, {.f = +0.05} },
    { MODKEY, XK_Return, zoom, {0} },
    { MODKEY, XK_Tab, view, {0} },
    { MODKEY|ShiftMask, XK_c, killclient, {0} },
    { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
    { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
    { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
    { MODKEY, XK_n, setlayout, {.v = &layouts[3]} },
    { MODKEY, XK_space, setlayout, {0} },
    { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
    { MODKEY, XK_0, view, {.ui = ~0 } },
    { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
    { MODKEY, XK_comma, focusmon, {.i = -1 } },
    { MODKEY, XK_period, focusmon, {.i = +1 } },
    { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
    { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
    TAGKEYS( XK_1, 0)
    TAGKEYS( XK_2, 1)
    TAGKEYS( XK_3, 2)
    TAGKEYS( XK_4, 3)
    TAGKEYS( XK_5, 4)
    TAGKEYS( XK_6, 5)
    TAGKEYS( XK_7, 6)
    TAGKEYS( XK_8, 7)
    TAGKEYS( XK_9, 8)
    { MODKEY|ShiftMask, XK_q, quit, {0} },
    /* button definitions */
    /* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
    static Button buttons[] = {
    /* click event mask button function argument */
    { ClkLtSymbol, 0, Button1, setlayout, {0} },
    { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
    { ClkWinTitle, 0, Button2, zoom, {0} },
    { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
    { ClkClientWin, MODKEY, Button1, movemouse, {0} },
    { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
    { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
    { ClkTagBar, 0, Button1, view, {0} },
    { ClkTagBar, 0, Button3, toggleview, {0} },
    { ClkTagBar, MODKEY, Button1, tag, {0} },
    { ClkTagBar, MODKEY, Button3, toggletag, {0} },
    dwm.c
    /* See LICENSE file for copyright and license details.
    * dynamic window manager is designed like any other X client as well. It is
    * driven through handling X events. In contrast to other X clients, a window
    * manager selects for SubstructureRedirectMask on the root window, to receive
    * events about window (dis-)appearance. Only one X connection at a time is
    * allowed to select for this event mask.
    * The event handlers of dwm are organized in an array which is accessed
    * whenever a new event has been fetched. This allows event dispatching
    * in O(1) time.
    * Each child of the root window is called a client, except windows which have
    * set the override_redirect flag. Clients are organized in a linked client
    * list on each monitor, the focus history is remembered through a stack list
    * on each monitor. Each client contains a bit array to indicate the tags of a
    * client.
    * Keys and tagging rules are organized as arrays and defined in config.h.
    * To understand everything else, start reading main().
    #include <errno.h>
    #include <locale.h>
    #include <stdarg.h>
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <X11/cursorfont.h>
    #include <X11/keysym.h>
    #include <X11/Xatom.h>
    #include <X11/Xlib.h>
    #include <X11/Xproto.h>
    #include <X11/Xutil.h>
    #ifdef XINERAMA
    #include <X11/extensions/Xinerama.h>
    #endif /* XINERAMA */
    /* macros */
    #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
    #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
    #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH))
    #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
    #define LENGTH(X) (sizeof X / sizeof X[0])
    #define MAX(A, B) ((A) > (B) ? (A) : (B))
    #define MIN(A, B) ((A) < (B) ? (A) : (B))
    #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
    #define WIDTH(X) ((X)->w + 2 * (X)->bw)
    #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
    #define TAGMASK ((1 << LENGTH(tags)) - 1)
    #define TEXTW(X) (textnw(X, strlen(X)) + dc.font.height)
    /* enums */
    enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
    enum { ColBorder, ColFG, ColBG, ColLast }; /* color */
    enum { NetSupported, NetWMName, NetWMState,
    NetWMFullscreen, NetActiveWindow, NetLast }; /* EWMH atoms */
    enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
    enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
    ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
    typedef union {
    int i;
    unsigned int ui;
    float f;
    const void *v;
    } Arg;
    typedef struct {
    unsigned int click;
    unsigned int mask;
    unsigned int button;
    void (*func)(const Arg *arg);
    const Arg arg;
    } Button;
    typedef struct Monitor Monitor;
    typedef struct Client Client;
    struct Client {
    char name[256];
    float mina, maxa;
    int x, y, w, h;
    int oldx, oldy, oldw, oldh;
    int basew, baseh, incw, inch, maxw, maxh, minw, minh;
    int bw, oldbw;
    unsigned int tags;
    Bool isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
    Client *next;
    Client *snext;
    Monitor *mon;
    Window win;
    typedef struct {
    int x, y, w, h;
    unsigned long norm[ColLast];
    unsigned long sel[ColLast];
    Drawable drawable;
    GC gc;
    struct {
    int ascent;
    int descent;
    int height;
    XFontSet set;
    XFontStruct *xfont;
    } font;
    } DC; /* draw context */
    typedef struct {
    unsigned int mod;
    KeySym keysym;
    void (*func)(const Arg *);
    const Arg arg;
    } Key;
    typedef struct {
    const char *symbol;
    void (*arrange)(Monitor *);
    } Layout;
    struct Monitor {
    char ltsymbol[16];
    int num;
    int by; /* bar geometry */
    int mx, my, mw, mh; /* screen size */
    int wx, wy, ww, wh; /* window area */
    unsigned int seltags;
    unsigned int sellt;
    unsigned int tagset[2];
    Bool showbar;
    Bool topbar;
    Client *clients;
    Client *sel;
    Client *stack;
    Monitor *next;
    Window barwin;
    const Layout *lt[2];
    int curtag;
    int prevtag;
    const Layout **lts;
    double *mfacts;
    int *nmasters;
    typedef struct {
    const char *name;
    const Layout *layout;
    float mfact;
    int nmaster;
    } Tag;
    typedef struct {
    const char *class;
    const char *instance;
    const char *title;
    unsigned int tags;
    Bool isfloating;
    int monitor;
    } Rule;
    /* function declarations */
    static void applyrules(Client *c);
    static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact);
    static void arrange(Monitor *m);
    static void arrangemon(Monitor *m);
    static void attach(Client *c);
    static void attachstack(Client *c);
    static void buttonpress(XEvent *e);
    static void checkotherwm(void);
    static void cleanup(void);
    static void cleanupmon(Monitor *mon);
    static void clearurgent(Client *c);
    static void clientmessage(XEvent *e);
    static void configure(Client *c);
    static void configurenotify(XEvent *e);
    static void configurerequest(XEvent *e);
    static Monitor *createmon(void);
    static void destroynotify(XEvent *e);
    static void detach(Client *c);
    static void detachstack(Client *c);
    static void die(const char *errstr, ...);
    static Monitor *dirtomon(int dir);
    static void drawbar(Monitor *m);
    static void drawbars(void);
    static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
    static void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
    static void enternotify(XEvent *e);
    static void expose(XEvent *e);
    static void focus(Client *c);
    static void focusin(XEvent *e);
    static void focusmon(const Arg *arg);
    static void focusstack(const Arg *arg);
    static unsigned long getcolor(const char *colstr);
    static Bool getrootptr(int *x, int *y);
    static long getstate(Window w);
    static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
    static void grabbuttons(Client *c, Bool focused);
    static void grabkeys(void);
    static void initfont(const char *fontstr);
    static void keypress(XEvent *e);
    static void killclient(const Arg *arg);
    static void manage(Window w, XWindowAttributes *wa);
    static void mappingnotify(XEvent *e);
    static void maprequest(XEvent *e);
    static void monocle(Monitor *m);
    static void movemouse(const Arg *arg);
    static Client *nexttiled(Client *c);
    static void pop(Client *);
    static void propertynotify(XEvent *e);
    static Monitor *ptrtomon(int x, int y);
    static void quit(const Arg *arg);
    static void resize(Client *c, int x, int y, int w, int h, Bool interact);
    static void resizeclient(Client *c, int x, int y, int w, int h);
    static void resizemouse(const Arg *arg);
    static void restack(Monitor *m);
    static void run(void);
    static void scan(void);
    static Bool sendevent(Client *c, Atom proto);
    static void sendmon(Client *c, Monitor *m);
    static void setclientstate(Client *c, long state);
    static void setfocus(Client *c);
    static void setlayout(const Arg *arg);
    static void setmfact(const Arg *arg);
    static void setnmaster(const Arg *arg);
    static void incnmaster(const Arg *arg);
    static void setup(void);
    static void showhide(Client *c);
    static void sigchld(int unused);
    static void spawn(const Arg *arg);
    static void tag(const Arg *arg);
    static void tagmon(const Arg *arg);
    static int textnw(const char *text, unsigned int len);
    static void ntile(Monitor *);
    static void togglebar(const Arg *arg);
    static void togglefloating(const Arg *arg);
    static void toggletag(const Arg *arg);
    static void toggleview(const Arg *arg);
    static void unfocus(Client *c, Bool setfocus);
    static void unmanage(Client *c, Bool destroyed);
    static void unmapnotify(XEvent *e);
    static Bool updategeom(void);
    static void updatebarpos(Monitor *m);
    static void updatebars(void);
    static void updatenumlockmask(void);
    static void updatesizehints(Client *c);
    static void updatestatus(void);
    static void updatetitle(Client *c);
    static void updatewmhints(Client *c);
    static void view(const Arg *arg);
    static Client *wintoclient(Window w);
    static Monitor *wintomon(Window w);
    static int xerror(Display *dpy, XErrorEvent *ee);
    static int xerrordummy(Display *dpy, XErrorEvent *ee);
    static int xerrorstart(Display *dpy, XErrorEvent *ee);
    static void zoom(const Arg *arg);
    /* variables */
    static const char broken[] = "broken";
    static char stext[256];
    static int screen;
    static int sw, sh; /* X display screen geometry width, height */
    static int bh, blw = 0; /* bar geometry */
    static int (*xerrorxlib)(Display *, XErrorEvent *);
    static unsigned int numlockmask = 0;
    static void (*handler[LASTEvent]) (XEvent *) = {
    [ButtonPress] = buttonpress,
    [ClientMessage] = clientmessage,
    [ConfigureRequest] = configurerequest,
    [ConfigureNotify] = configurenotify,
    [DestroyNotify] = destroynotify,
    [EnterNotify] = enternotify,
    [Expose] = expose,
    [FocusIn] = focusin,
    [KeyPress] = keypress,
    [MappingNotify] = mappingnotify,
    [MapRequest] = maprequest,
    [PropertyNotify] = propertynotify,
    [UnmapNotify] = unmapnotify
    static Atom wmatom[WMLast], netatom[NetLast];
    static Bool running = True;
    static Cursor cursor[CurLast];
    static Display *dpy;
    static DC dc;
    static Monitor *mons = NULL, *selmon = NULL;
    static Window root;
    /* configuration, allows nested code to access above variables */
    #include "config.h"
    /* compile-time check if all tags fit into an unsigned int bit array. */
    struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
    /* function implementations */
    void
    applyrules(Client *c) {
    const char *class, *instance;
    unsigned int i;
    const Rule *r;
    Monitor *m;
    XClassHint ch = { 0 };
    /* rule matching */
    c->isfloating = c->tags = 0;
    if(XGetClassHint(dpy, c->win, &ch)) {
    class = ch.res_class ? ch.res_class : broken;
    instance = ch.res_name ? ch.res_name : broken;
    for(i = 0; i < LENGTH(rules); i++) {
    r = &rules[i];
    if((!r->title || strstr(c->name, r->title))
    && (!r->class || strstr(class, r->class))
    && (!r->instance || strstr(instance, r->instance)))
    c->isfloating = r->isfloating;
    c->tags |= r->tags;
    for(m = mons; m && m->num != r->monitor; m = m->next);
    if(m)
    c->mon = m;
    if(ch.res_class)
    XFree(ch.res_class);
    if(ch.res_name)
    XFree(ch.res_name);
    c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
    Bool
    applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) {
    Bool baseismin;
    Monitor *m = c->mon;
    /* set minimum possible */
    *w = MAX(1, *w);
    *h = MAX(1, *h);
    if(interact) {
    if(*x > sw)
    *x = sw - WIDTH(c);
    if(*y > sh)
    *y = sh - HEIGHT(c);
    if(*x + *w + 2 * c->bw < 0)
    *x = 0;
    if(*y + *h + 2 * c->bw < 0)
    *y = 0;
    else {
    if(*x > m->mx + m->mw)
    *x = m->mx + m->mw - WIDTH(c);
    if(*y > m->my + m->mh)
    *y = m->my + m->mh - HEIGHT(c);
    if(*x + *w + 2 * c->bw < m->mx)
    *x = m->mx;
    if(*y + *h + 2 * c->bw < m->my)
    *y = m->my;
    if(*h < bh)
    *h = bh;
    if(*w < bh)
    *w = bh;
    if(resizehints || c->isfloating) {
    /* see last two sentences in ICCCM 4.1.2.3 */
    baseismin = c->basew == c->minw && c->baseh == c->minh;
    if(!baseismin) { /* temporarily remove base dimensions */
    *w -= c->basew;
    *h -= c->baseh;
    /* adjust for aspect limits */
    if(c->mina > 0 && c->maxa > 0) {
    if(c->maxa < (float)*w / *h)
    *w = *h * c->maxa + 0.5;
    else if(c->mina < (float)*h / *w)
    *h = *w * c->mina + 0.5;
    if(baseismin) { /* increment calculation requires this */
    *w -= c->basew;
    *h -= c->baseh;
    /* adjust for increment value */
    if(c->incw)
    *w -= *w % c->incw;
    if(c->inch)
    *h -= *h % c->inch;
    /* restore base dimensions */
    *w = MAX(*w + c->basew, c->minw);
    *h = MAX(*h + c->baseh, c->minh);
    if(c->maxw)
    *w = MIN(*w, c->maxw);
    if(c->maxh)
    *h = MIN(*h, c->maxh);
    return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
    void
    arrange(Monitor *m) {
    if(m)
    showhide(m->stack);
    else for(m = mons; m; m = m->next)
    showhide(m->stack);
    focus(NULL);
    if(m)
    arrangemon(m);
    else for(m = mons; m; m = m->next)
    arrangemon(m);
    void
    arrangemon(Monitor *m) {
    strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
    if(m->lt[m->sellt]->arrange)
    m->lt[m->sellt]->arrange(m);
    restack(m);
    void
    attach(Client *c) {
    c->next = c->mon->clients;
    c->mon->clients = c;
    void
    attachstack(Client *c) {
    c->snext = c->mon->stack;
    c->mon->stack = c;
    void
    buttonpress(XEvent *e) {
    unsigned int i, x, click;
    Arg arg = {0};
    Client *c;
    Monitor *m;
    XButtonPressedEvent *ev = &e->xbutton;
    click = ClkRootWin;
    /* focus monitor if necessary */
    if((m = wintomon(ev->window)) && m != selmon) {
    unfocus(selmon->sel, True);
    selmon = m;
    focus(NULL);
    if(ev->window == selmon->barwin) {
    i = x = 0;
    do {
    x += TEXTW(tags[i].name);
    } while(ev->x >= x && ++i < LENGTH(tags));
    if(i < LENGTH(tags)) {
    click = ClkTagBar;
    arg.ui = 1 << i;
    else if(ev->x < x + blw)
    click = ClkLtSymbol;
    else if(ev->x > selmon->ww - TEXTW(stext))
    click = ClkStatusText;
    else
    click = ClkWinTitle;
    else if((c = wintoclient(ev->window))) {
    focus(c);
    click = ClkClientWin;
    for(i = 0; i < LENGTH(buttons); i++)
    if(click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
    && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
    buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
    void
    checkotherwm(void) {
    xerrorxlib = XSetErrorHandler(xerrorstart);
    /* this causes an error if some other window manager is running */
    XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
    XSync(dpy, False);
    XSetErrorHandler(xerror);
    XSync(dpy, False);
    void
    cleanup(void) {
    Arg a = {.ui = ~0};
    Layout foo = { "", NULL };
    Monitor *m;
    view(&a);
    selmon->lt[selmon->sellt] = &foo;
    for(m = mons; m; m = m->next)
    while(m->stack)
    unmanage(m->stack, False);
    if(dc.font.set)
    XFreeFontSet(dpy, dc.font.set);
    else
    XFreeFont(dpy, dc.font.xfont);
    XUngrabKey(dpy, AnyKey, AnyModifier, root);
    XFreePixmap(dpy, dc.drawable);
    XFreeGC(dpy, dc.gc);
    XFreeCursor(dpy, cursor[CurNormal]);
    XFreeCursor(dpy, cursor[CurResize]);
    XFreeCursor(dpy, cursor[CurMove]);
    while(mons)
    cleanupmon(mons);
    XSync(dpy, False);
    XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
    void
    cleanupmon(Monitor *mon) {
    Monitor *m;
    if(mon == mons)
    mons = mons->next;
    else {
    for(m = mons; m && m->next != mon; m = m->next);
    m->next = mon->next;
    XUnmapWindow(dpy, mon->barwin);
    XDestroyWindow(dpy, mon->barwin);
    free(mon->mfacts);
    free(mon->nmasters);
    free(mon->lts);
    free(mon);
    void
    clearurgent(Client *c) {
    XWMHints *wmh;
    c->isurgent = False;
    if(!(wmh = XGetWMHints(dpy, c->win)))
    return;
    wmh->flags &= ~XUrgencyHint;
    XSetWMHints(dpy, c->win, wmh);
    XFree(wmh);
    void
    clientmessage(XEvent *e) {
    XClientMessageEvent *cme = &e->xclient;
    Client *c = wintoclient(cme->window);
    if(!c)
    return;
    if(cme->message_type == netatom[NetWMState] && cme->data.l[1] == netatom[NetWMFullscreen]) {
    if(cme->data.l[0] && !c->isfullscreen) {
    XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
    PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
    c->isfullscreen = True;
    c->oldstate = c->isfloating;
    c->oldbw = c->bw;
    c->bw = 0;
    c->isfloating = True;
    resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
    XRaiseWindow(dpy, c->win);
    else {
    XChangeProperty(dpy, cme->window, netatom[NetWMState], XA_ATOM, 32,
    PropModeReplace, (unsigned char*)0, 0);
    c->isfullscreen = False;
    c->isfloating = c->oldstate;
    c->bw = c->oldbw;
    c->x = c->oldx;
    c->y = c->oldy;
    c->w = c->oldw;
    c->h = c->oldh;
    resizeclient(c, c->x, c->y, c->w, c->h);
    arrange(c->mon);
    else if(cme->message_type == netatom[NetActiveWindow]) {
    if(!ISVISIBLE(c)) {
    c->mon->seltags ^= 1;
    c->mon->tagset[c->mon->seltags] = c->tags;
    pop(c);
    void
    configure(Client *c) {
    XConfigureEvent ce;
    ce.type = ConfigureNotify;
    ce.display = dpy;
    ce.event = c->win;
    ce.window = c->win;
    ce.x = c->x;
    ce.y = c->y;
    ce.width = c->w;
    ce.height = c->h;
    ce.border_width = c->bw;
    ce.above = None;
    ce.override_redirect = False;
    XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
    void
    configurenotify(XEvent *e) {
    Monitor *m;
    XConfigureEvent *ev = &e->xconfigure;
    Bool dirty;
    if(ev->window == root) {
    dirty = (sw != ev->width);
    sw = ev->width;
    sh = ev->height;
    if(updategeom() || dirty) {
    if(dc.drawable != 0)
    XFreePixmap(dpy, dc.drawable);
    dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
    updatebars();
    for(m = mons; m; m = m->next)
    XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
    arrange(NULL);
    void
    configurerequest(XEvent *e) {
    Client *c;
    Monitor *m;
    XConfigureRequestEvent *ev = &e->xconfigurerequest;
    XWindowChanges wc;
    if((c = wintoclient(ev->window))) {
    if(ev->value_mask & CWBorderWidth)
    c->bw = ev->border_width;
    else if(c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
    m = c->mon;
    if(ev->value_mask & CWX)
    c->x = m->mx + ev->x;
    if(ev->value_mask & CWY)
    c->y = m->my + ev->y;
    if(ev->value_mask & CWWidth)
    c->w = ev->width;
    if(ev->value_mask & CWHeight)
    c->h = ev->height;
    if((c->x + c->w) > m->mx + m->mw && c->isfloating)
    c->x = m->mx + (m->mw / 2 - c->w / 2); /* center in x direction */
    if((c->y + c->h) > m->my + m->mh && c->isfloating)
    c->y = m->my + (m->mh / 2 - c->h / 2); /* center in y direction */
    if((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight)))
    configure(c);
    if(ISVISIBLE(c))
    XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
    else
    configure(c);
    else {
    wc.x = ev->x;
    wc.y = ev->y;
    wc.width = ev->width;
    wc.height = ev->height;
    wc.border_width = ev->border_width;
    wc.sibling = ev->above;
    wc.stack_mode = ev->detail;
    XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
    XSync(dpy, False);
    /* TODO Check how many times createmon is called */
    Monitor *
    createmon(void) {
    Monitor *m;
    int i, numtags = LENGTH(tags) + 1;
    if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
    die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
    if(!(m->mfacts = calloc(sizeof(double), numtags)))
    die("fatal: could not malloc() %u bytes\n", sizeof(double) * numtags);
    if(!(m->nmasters = calloc(sizeof(int), numtags)))
    die("fatal: could not malloc() %u bytes\n", sizeof(int) * numtags);
    if(!(m->lts = calloc(sizeof(Layout *), numtags)))
    die("fatal: could not malloc() %u bytes\n", sizeof(Layout *) * numtags);
    m->tagset[0] = m->tagset[1] = 1;
    m->showbar = showbar;
    m->topbar = topbar;
    m->curtag = m->prevtag = 1;
    for(i = 1; i < numtags; i++) {
    m->mfacts[i] = tags[i - 1].mfact < 0 ? mfact : tags[i - 1].mfact;
    m->nmasters[i] = tags[i - 1].nmaster < 0 ? nmaster : tags[i - 1].nmaster;
    m->lts[i] = tags[i - 1].layout;
    m->lt[0] = m->lts[m->curtag];
    m->lt[1] = &layouts[1 % LENGTH(layouts)];
    strncpy(m->ltsymbol, m->lt[0]->symbol, sizeof m->ltsymbol);
    return m;
    void
    destroynotify(XEvent *e) {
    Client *c;
    XDestroyWindowEvent *ev = &e->xdestroywindow;
    if((c = wintoclient(ev->window)))
    unmanage(c, True);
    void
    detach(Client *c) {
    Client **tc;
    for(tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next);
    *tc = c->next;
    void
    detachstack(Client *c) {
    Client **tc, *t;
    for(tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext);
    *tc = c->snext;
    if(c == c->mon->sel) {
    for(t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
    c->mon->sel = t;
    void
    die(const char *errstr, ...) {
    va_list ap;
    va_start(ap, errstr);
    vfprintf(stderr, errstr, ap);
    va_end(ap);
    exit(EXIT_FAILURE);
    Monitor *
    dirtomon(int dir) {
    Monitor *m = NULL;
    if(dir > 0) {
    if(!(m = selmon->next))
    m = mons;
    else {
    if(selmon == mons)
    for(m = mons; m->next; m = m->next);
    else
    for(m = mons; m->next != selmon; m = m->next);
    return m;
    void
    drawbar(Monitor *m) {
    int x;
    unsigned int i, occ = 0, urg = 0;
    unsigned long *col;
    Client *c;
    for(c = m->clients; c; c = c->next) {
    occ |= c->tags;
    if(c->isurgent)
    urg |= c->tags;
    dc.x = 0;
    for(i = 0; i < LENGTH(tags); i++) {
    dc.w = TEXTW(tags[i].name);
    col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
    drawtext(tags[i].name, col, urg & 1 << i);
    drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
    occ & 1 << i, urg & 1 << i, col);
    dc.x += dc.w;
    dc.w = blw = TEXTW(m->ltsymbol);
    drawtext(m->ltsymbol, dc.norm, False);
    dc.x += dc.w;
    x = dc.x;
    if(m == selmon) { /* status is only drawn on selected monitor */
    dc.w = TEXTW(stext);
    dc.x = m->ww - dc.w;
    if(dc.x < x) {
    dc.x = x;
    dc.w = m->ww - x;
    drawtext(stext, dc.norm, False);
    else
    dc.x = m->ww;
    if((dc.w = dc.x - x) > bh) {
    dc.x = x;
    if(m->sel) {
    col = m == selmon ? dc.sel : dc.norm;
    drawtext(m->sel->name, col, False);
    drawsquare(m->sel->isfixed, m->sel->isfloating, False, col);
    else
    drawtext(NULL, dc.norm, False);
    XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->ww, bh, 0, 0);
    XSync(dpy, False);
    void
    drawbars(void) {
    Monitor *m;
    for(m = mons; m; m = m->next)
    drawbar(m);
    void
    drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
    int x;
    XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
    x = (dc.font.ascent + dc.font.descent + 2) / 4;
    if(filled)
    XFillRectangle(dpy, dc.drawable, dc.gc, dc.x+1, dc.y+1, x+1, x+1);
    else if(empty)
    XDrawRectangle(dpy, dc.drawable, dc.gc, dc.x+1, dc.y+1, x, x);
    void
    drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
    char buf[256];
    int i, x, y, h, len, olen;
    XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
    XFillRectangle(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.w, dc.h);
    if(!text)
    return;
    olen = strlen(text);
    h = dc.font.ascent + dc.font.descent;
    y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
    x = dc.x + (h / 2);
    /* shorten text if necessary */
    for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
    if(!len)
    return;
    memcpy(buf, text, len);
    if(len < olen)
    for(i = len; i && i > len - 3; buf[--i] = '.');
    XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
    if(dc.font.set)
    XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
    else
    XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
    void
    enternotify(XEvent *e) {
    Client *c;
    Monitor *m;
    XCrossingEvent *ev = &e->xcrossing;
    if((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
    return;
    c = wintoclient(ev->window);
    m = c ? c->mon : wintomon(ev->window);
    if(m != selmon) {
    unfocus(selmon->sel, True);
    selmon = m;
    else if(!c || c == selmon->sel)
    return;
    focus(c);
    void
    expose(XEvent *e) {
    Monitor *m;
    XExposeEvent *ev = &e->xexpose;
    if(ev->count == 0 && (m = wintomon(ev->window)))
    drawbar(m);
    void
    focus(Client *c) {
    if(!c || !ISVISIBLE(c))
    for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
    /* was if(selmon->sel) */
    if(selmon->sel && selmon->sel != c)
    unfocus(selmon->sel, False);
    if(c) {
    if(c->mon != selmon)
    selmon = c->mon;
    if(c->isurgent)
    clearurgent(c);
    detachstack(c);
    attachstack(c);
    grabbuttons(c, True);
    XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
    setfocus(c);
    else
    XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
    selmon->sel = c;
    drawbars();
    void
    focusin(XEvent *e) { /* there are some broken focus acquiring clients */
    XFocusChangeEvent *ev = &e->xfocus;
    if(selmon->sel && ev->window != selmon->sel->win)
    setfocus(selmon->sel);
    void
    focusmon(const Arg *arg) {
    Monitor *m;
    if(!mons->next)
    return;
    if((m = dirtomon(arg->i)) == selmon)
    return;
    unfocus(selmon->sel, True);
    selmon = m;
    focus(NULL);
    void
    focusstack(const Arg *arg) {
    Client *c = NULL, *i;
    if(!selmon->sel)
    return;
    if(arg->i > 0) {
    for(c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
    if(!c)
    for(c = selmon->clients; c && !ISVISIBLE(c); c = c->next);
    else {
    for(i = selmon->clients; i != selmon->sel; i = i->next)
    if(ISVISIBLE(i))
    c = i;
    if(!c)
    for(; i; i = i->next)
    if(ISVISIBLE(i))
    c = i;
    if(c) {
    focus(c);
    restack(selmon);
    unsigned long
    getcolor(const char *colstr) {
    Colormap cmap = DefaultColormap(dpy, screen);
    XColor color;
    if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
    die("error, cannot allocate color '%s'\n", colstr);
    return color.pixel;
    Bool
    getrootptr(int *x, int *y) {
    int di;
    unsigned int dui;
    Window dummy;
    return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui);
    long
    getstate(Window w) {
    int format;
    long result = -1;
    unsigned char *p = NULL;
    unsigned long n, extra;
    Atom real;
    if(XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
    &real, &format, &n, &extra, (unsigned char **)&p) != Success)
    return -1;
    if(n != 0)
    result = *p;
    XFree(p);
    return result;
    Bool
    gettextprop(Window w, Atom atom, char *text, unsigned int size) {
    char **list = NULL;
    int n;
    XTextProperty name;
    if(!text || size == 0)
    return False;
    text[0] = '\0';
    XGetTextProperty(dpy, w, &name, atom);
    if(!name.nitems)
    return False;
    if(name.encoding == XA_STRING)
    strncpy(text, (char *)name.value, size - 1);
    else {
    if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
    strncpy(text, *list, size - 1);
    XFreeStringList(list);
    text[size - 1] = '\0';
    XFree(name.value);
    return True;
    void
    grabbuttons(Client *c, Bool focused) {
    updatenumlockmask();
    unsigned int i, j;
    unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
    XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
    if(focused) {
    for(i = 0; i < LENGTH(buttons); i++)
    if(buttons[i].click == ClkClientWin)
    for(j = 0; j < LENGTH(modifiers); j++)
    XGrabButton(dpy, buttons[i].button,
    buttons[i].mask | modifiers[j],
    c->win, False, BUTTONMASK,
    GrabModeAsync, GrabModeSync, None, None);
    else
    XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
    BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
    void
    grabkeys(void) {
    updatenumlockmask();
    unsigned int i, j;
    unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
    KeyCode code;
    XUngrabKey(dpy, AnyKey, AnyModifier, root);
    for(i = 0; i < LENGTH(keys); i++) {
    if((code = XKeysymToKeycode(dpy, keys[i].keysym)))
    for(j = 0; j < LENGTH(modifiers); j++)
    XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
    True, GrabModeAsync, GrabModeAsync);
    void
    initfont(const char *fontstr) {
    char *def, **missing;
    int n;
    missing = NULL;
    dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
    if(missing) {
    while(n--)
    fprintf(stderr, "dwm: missing fontset: %s\n", missing[n]);
    XFreeStringList(missing);
    if(dc.font.set) {
    XFontStruct **xfonts;
    char **font_names;
    dc.font.ascent = dc.font.descent = 0;
    XExtentsOfFontSet(dc.font.set);
    n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
    while(n--) {
    dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent);
    dc.font.descent = MAX(dc.font.descent,(*xfonts)->descent);
    xfonts++;
    else {
    if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
    && !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
    die("error, cannot load font: '%s'\n", fontstr);
    dc.font.ascent = dc.font.xfont->ascent;
    dc.font.descent = dc.font.xfont->descent;
    dc.font.height = dc.font.ascent + dc.font.descent;
    #ifdef XINERAMA
    static Bool
    isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) {
    while(n--)
    if(unique[n].x_org == info->x_org && unique[n].y_org == info->y_org
    && unique[n].width == info->width && unique[n].height == info->height)
    return False;
    return True;
    #endif /* XINERAMA */
    void
    keypress(XEvent *e) {
    unsigned int i;
    KeySym keysym;
    XKeyEvent *ev;
    ev = &e->xkey;
    keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
    for(i = 0; i < LENGTH(keys); i++)
    if(keysym == keys[i].keysym
    && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
    && keys[i].func)
    keys[i].func(&(keys[i].arg));
    void
    killclient(const Arg *arg) {
    if(!selmon->sel)
    return;
    if(!sendevent(selmon->sel, wmatom[WMDelete])) {
    XGrabServer(dpy);
    XSetErrorHandler(xerrordummy);
    XSetCloseDownMode(dpy, DestroyAll);
    XKillClient(dpy, selmon->sel->win);
    XSync(dpy, False);
    XSetErrorHandler(xerror);
    XUngrabServer(dpy);
    void
    manage(Window w, XWindowAttributes *wa) {
    Client *c, *t = NULL;
    Window trans = None;
    XWindowChanges wc;
    if(!(c = calloc(1, sizeof(Client))))
    die("fatal: could not malloc() %u bytes\n", sizeof(Client));
    c->win = w;
    updatetitle(c);
    if(XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
    c->mon = t->mon;
    c->tags = t->tags;
    else {
    c->mon = selmon;
    applyrules(c);
    /* geometry */
    c->x = c->oldx = wa->x;
    c->y = c->oldy = wa->y;
    c->w = c->oldw = wa->width;
    c->h = c->oldh = wa->height;
    c->oldbw = wa->border_width;
    if(c->w == c->mon->mw && c->h == c->mon->mh) {
    c->isfloating = True;
    c->x = c->mon->mx;
    c->y = c->mon->my;
    c->bw = 0;
    else {
    if(c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
    c->x = c->mon->mx + c->mon->mw - WIDTH(c);
    if(c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
    c->y = c->mon->my + c->mon->mh - HEIGHT(c);
    c->x = MAX(c->x, c->mon->mx);
    /* only fix client y-offset, if the client center might cover the bar */
    c->y = MAX(c->y, ((c->mon->by == 0) && (c->x + (c->w / 2) >= c->mon->wx)
    && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
    c->bw = borderpx;
    wc.border_width = c->bw;
    XConfigureWindow(dpy, w, CWBorderWidth, &wc);
    XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
    configure(c); /* propagates border_width, if size doesn't change */
    updatesizehints(c);
    updatewmhints(c);
    XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
    grabbuttons(c, False);
    if(!c->isfloating)
    c->isfloating = c->oldstate = trans != None || c->isfixed;
    if(c->isfloating)
    XRaiseWindow(dpy, c->win);
    attach(c);
    attachstack(c);
    XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
    XMapWindow(dpy, c->win);
    setclientstate(c, NormalState);
    arrange(c->mon);
    void
    mappingnotify(XEvent *e) {
    XMappingEvent *ev = &e->xmapping;
    XRefreshKeyboardMapping(ev);
    if(ev->request == MappingKeyboard)
    grabkeys();
    void
    maprequest(XEvent *e) {
    static XWindowAttributes wa;
    XMapRequestEvent *ev = &e->xmaprequest;
    if(!XGetWindowAttributes(dpy, ev->window, &wa))
    return;
    if(wa.override_redirect)
    return;
    if(!wintoclient(ev->window))
    manage(ev->window, &wa);
    void
    monocle(Monitor *m) {
    unsigned int n = 0;
    Client *c;
    for(c = m->clients; c; c = c->next)
    if(ISVISIBLE(c))
    n++;
    if(n > 0) /* override layout symbol */
    snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
    for(c = nexttiled(m->clients); c; c = nexttiled(c->next))
    resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False);
    void
    movemouse(const Arg *arg) {
    int x, y, ocx, ocy, nx, ny;
    Client *c;
    Monitor *m;
    XEvent ev;
    if(!(c = selmon->sel))
    return;
    restack(selmon);
    ocx = c->x;
    ocy = c->y;
    if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
    None, cursor[CurMove], CurrentTime) != GrabSuccess)
    return;
    if(!getrootptr(&x, &y))
    return;
    do {
    XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
    switch(ev.type) {
    case ConfigureRequest:
    case Expose:
    case MapRequest:
    handler[ev.type](&ev);
    break;
    case MotionNotify:
    nx = ocx + (ev.xmotion.x - x);
    ny = ocy + (ev.xmotion.y - y);
    if(nx >= selmon->wx && nx <= selmon->wx + selmon->ww
    && ny >= selmon->wy && ny <= selmon->wy + selmon->wh) {
    if(abs(selmon->wx - nx) < snap)
    nx = selmon->wx;
    else if(abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
    nx = selmon->wx + selmon->ww - WIDTH(c);
    if(abs(selmon->wy - ny) < snap)
    ny = selmon->wy;
    else if(abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
    ny = selmon->wy + selmon->wh - HEIGHT(c);
    if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
    && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
    togglefloating(NULL);
    if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
    resize(c, nx, ny, c->w, c->h, True);
    break;
    } while(ev.type != ButtonRelease);
    XUngrabPointer(dpy, CurrentTime);
    if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) {
    sendmon(c, m);
    selmon = m;
    focus(NULL);
    Client *
    nexttiled(Client *c) {
    for(; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
    return c;
    void
    pop(Client *c) {
    detach(c);
    attach(c);
    focus(c);
    arrange(c->mon);
    void
    propertynotify(XEvent *e) {
    Client *c;
    Window trans;
    XPropertyEvent *ev = &e->xproperty;
    if((ev->window == root) && (ev->atom == XA_WM_NAME))
    updatestatus();
    else if(ev->state == PropertyDelete)
    return; /* ignore */
    else if((c = wintoclient(ev->window))) {
    switch(ev->atom) {
    default: break;
    case XA_WM_TRANSIENT_FOR:
    if(!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) &&
    (c->isfloating = (wintoclient(trans)) != NULL))
    arrange(c->mon);
    break;
    case XA_WM_NORMAL_HINTS:
    updatesizehints(c);
    break;
    case XA_WM_HINTS:
    updatewmhints(c);
    drawbars();
    break;
    if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
    updatetitle(c);
    if(c == c->mon->sel)
    drawbar(c->mon);
    Monitor *
    ptrtomon(int x, int y) {
    Monitor *m;
    for(m = mons; m; m = m->next)
    if(INRECT(x, y, m->wx, m->wy, m->ww, m->wh))
    return m;
    return selmon;
    void
    quit(const Arg *arg) {
    running = False;
    void
    resize(Client *c, int x, int y, int w, int h, Bool interact) {
    if(applysizehints(c, &x, &y, &w, &h, interact))
    resizeclient(c, x, y, w, h);
    void
    resizeclient(Client *c, int x, int y, int w, int h) {
    XWindowChanges wc;
    c->oldx = c->x; c->x = wc.x = x;
    c->oldy = c->y; c->y = wc.y = y;
    c->oldw = c->w; c->w = wc.width = w;
    c->oldh = c->h; c->h = wc.height = h;
    wc.border_width = c->bw;
    XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
    configure(c);
    XSync(dpy, False);
    void
    resizemouse(const Arg *arg) {
    int ocx, ocy;
    int nw, nh;
    Client *c;
    Monitor *m;
    XEvent ev;
    if(!(c = selmon->sel))
    return;
    restack(selmon);
    ocx = c->x;
    ocy = c->y;
    if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
    None, cursor[CurResize], CurrentTime) != GrabSuccess)
    return;
    XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
    do {
    XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
    switch(ev.type) {
    case ConfigureRequest:
    case Expose:
    case MapRequest:
    handler[ev.type](&ev);
    break;
    case MotionNotify:
    nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
    nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
    if(c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww
    && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
    if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
    && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
    togglefloating(NULL);
    if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
    resize(c, c->x, c->y, nw, nh, True);
    break;
    } while(ev.type != ButtonRelease);
    XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
    XUngrabPointer(dpy, CurrentTime);
    while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
    if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) {
    sendmon(c, m);
    selmon = m;
    focus(NULL);
    void
    restack(Monitor *m) {
    Client *c;
    XEvent ev;
    XWindowChanges wc;
    drawbar(m);
    if(!m->sel)
    return;
    if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
    XRaiseWindow(dpy, m->sel->win);
    if(m->lt[m->sellt]->arrange) {
    wc.stack_mode = Below;
    wc.sibling = m->barwin;
    for(c = m->stack; c; c = c->snext)
    if(!c->isfloating && ISVISIBLE(c)) {
    XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
    wc.sibling = c->win;
    XSync(dpy, False);
    while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
    void
    run(void) {
    XEvent ev;
    /* main event loop */
    XSync(dpy, False);
    while(running && !XNextEvent(dpy, &ev)) {
    if(handler[ev.type])
    handler[ev.type](&ev); /* call handler */
    void
    scan(void) {
    unsigned int i, num;
    Window d1, d2, *wins = NULL;
    XWindowAttributes wa;
    if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
    for(i = 0; i < num; i++) {
    if(!XGetWindowAttributes(dpy, wins[i], &wa)
    || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
    continue;
    if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
    manage(wins[i], &wa);
    for(i = 0; i < num; i++) { /* now the transients */
    if(!XGetWindowAttributes(dpy, wins[i], &wa))
    continue;
    if(XGetTransientForHint(dpy, wins[i], &d1)
    && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
    manage(wins[i], &wa);
    if(wins)
    XFree(wins);
    void
    sendmon(Client *c, Monitor *m) {
    if(c->mon == m)
    return;
    unfocus(c, True);
    detach(c);
    detachstack(c);
    c->mon = m;
    c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
    attach(c);
    attachstack(c);
    focus(NULL);
    arrange(NULL);
    void
    setclientstate(Client *c, long state) {
    long data[] = { state, None };
    XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
    PropModeReplace, (unsigned char *)data, 2);
    Bool
    sendevent(Client *c, Atom proto) {
    int n;
    Atom *protocols;
    Bool exists = False;
    XEvent ev;
    if(XGetWMProtocols(dpy, c->win, &protocols, &n)) {
    while(!exists && n--)
    exists = protocols[n] == proto;
    XFree(protocols);
    if(exists) {
    ev.type = ClientMessage;
    ev.xclient.window = c->win;
    ev.xclient.message_type = wmatom[WMProtocols];
    ev.xclient.format = 32;
    ev.xclient.data.l[0] = proto;
    ev.xclient.data.l[1] = CurrentTime;
    XSendEvent(dpy, c->win, False, NoEventMask, &ev);
    return exists;
    void
    setfocus(Client *c) {
    if(!c->neverfocus)
    XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
    sendevent(c, wmatom[WMTakeFocus]);
    void
    setlayout(const Arg *arg) {
    if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
    selmon->sellt ^= 1;
    if(arg && arg->v)
    selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
    strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
    if(selmon->sel)
    arrange(selmon);
    else
    drawbar(selmon);
    static void
    incnmaster(const Arg *arg) {
    int i;
    if(!arg || !selmon->lt[selmon->sellt]->arrange)
    return;
    i = selmon->nmasters[selmon->curtag] + arg->i;
    selmon->nmasters[selmon->curtag] = i < 0 ? 0 : i;
    arrange(selmon);
    static void
    setnmaster(const Arg *arg) {
    if(!arg || !selmon->lt[selmon->sellt]->arrange)
    return;
    selmon->nmasters[selmon->curtag] = arg->i > 0 ? arg->i : 0;
    arrange(selmon);
    /* arg > 1.0 will set mfact absolutly */
    void
    setmfact(const Arg *arg) {
    float f;
    if(!arg || !selmon->lt[selmon->sellt]->arrange)
    return;
    f = arg->f < 1.0 ? arg->f + selmon->mfacts[selmon->curtag] : arg->f - 1.0;
    if(f < 0.1 || f > 0.9)
    return;
    selmon->mfacts[selmon->curtag] = f;
    arrange(selmon);
    void
    setup(void) {
    XSetWindowAttributes wa;
    /* clean up any zombies immediately */
    sigchld(0);
    /* init screen */
    screen = DefaultScreen(dpy);
    root = RootWindow(dpy, screen);
    initfont(font);
    sw = DisplayWidth(dpy, screen);
    sh = DisplayHeight(dpy, screen);
    bh = dc.h = dc.font.height + 2;
    updategeom();
    /* init atoms */
    wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
    wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
    wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
    wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
    netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
    netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
    netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
    netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
    netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
    /* init cursors */
    cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
    cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
    cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
    /* init appearance */
    dc.norm[ColBorder] = getcolor(normbordercolor);
    dc.norm[ColBG] = getcolor(normbgcolor);
    dc.norm[ColFG] = getcolor(normfgcolor);
    dc.sel[ColBorder] = getcolor(selbordercolor);
    dc.sel[ColBG] = getcolor(selbgcolor);
    dc.sel[ColFG] = getcolor(selfgcolor);
    dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
    dc.gc = XCreateGC(dpy, root, 0, NULL);
    XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
    if(!dc.font.set)
    XSetFont(dpy, dc.gc, dc.font.xfont->fid);
    /* init bars */
    updatebars();
    updatestatus();
    /* EWMH support per view */
    XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
    PropModeReplace, (unsigned char *) netatom, NetLast);
    /* select for events */
    wa.cursor = cursor[CurNormal];
    wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask
    |EnterWindowMask|LeaveWindowMask|StructureNotifyMask
    |PropertyChangeMask;
    XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
    XSelectInput(dpy, root, wa.event_mask);
    grabkeys();
    void
    showhide(Client *c) {
    if(!c)
    return;
    if(ISVISIBLE(c)) { /* show clients top down */
    XMoveWindow(dpy, c->win, c->x, c->y);
    if((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
    resize(c, c->x, c->y, c->w, c->h, False);
    showhide(c->snext);
    else { /* hide clients bottom up */
    showhide(c->snext);
    XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
    void
    sigchld(int unused) {
    if(signal(SIGCHLD, sigchld) == SIG_ERR)
    die("Can't install SIGCHLD handler");
    while(0 < waitpid(-1, NULL, WNOHANG));
    void
    spawn(const Arg *arg) {
    if(fork() == 0) {
    if(dpy)
    close(ConnectionNumber(dpy));
    setsid();
    execvp(((char **)arg->v)[0], (char **)arg->v);
    fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
    perror(" failed");
    exit(EXIT_SUCCESS);
    void
    tag(const Arg *arg) {
    if(selmon->sel && arg->ui & TAGMASK) {
    selmon->sel->tags = arg->ui & TAGMASK;
    arrange(selmon);
    void
    tagmon(const Arg *arg) {
    if(!selmon->sel || !mons->next)
    return;
    sendmon(selmon->sel, dirtomon(arg->i));
    int
    textnw(const char *text, unsigned int len) {
    XRectangle r;
    if(dc.font.set) {
    XmbTextExtents(dc.font.set, text, len, NULL, &r);
    return r.width;
    return XTextWidth(dc.font.xfont, text, len);
    void
    ntile(Monitor *m) {
    int x, y, h, w, mw, nmax, nm;
    unsigned int i, n;
    Client *c;
    snprintf(m->ltsymbol, sizeof m->ltsymbol, "=%d]", m->nmasters[m->curtag]);
    for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
    c = nexttiled(m->clients);
    nmax = m->nmasters[m->curtag];
    nm = nmax == 1 ? 1 : MIN(n / 2, nmax);
    if(nm > n)
    nm = n;
    /* master */
    if(nm > 0) {
    mw = selmon->mfacts[selmon->curtag] * m->ww;
    h = m->wh / nm;
    if(h < bh)
    h = m->wh;
    y = m->wy;
    for(i = 0; i < nm; i++, c = nexttiled(c->next)) {
    resize(c, m->wx, y, (n == nm ? m->ww : mw) - 2 * c->bw,
    ((i + 1 == nm) ? m->wy + m->wh - y : h) - 2 * c->bw, False);
    if(h != m->wh)
    y = c->y + HEIGHT(c);
    n -= nm;
    } else
    mw = 0;
    if(n == 0)
    return;
    /* tile stack */
    x = m->wx + mw;
    y = m->wy;
    w = m->ww - mw;
    h = m->wh / n;
    if(h < bh)
    h = m->wh;
    for(i = 0; c; c = nexttiled(c->next), i++) {
    resize(c, x, y, w - 2 * c->bw,
    ((i + 1 == n) ? m->wy + m->wh - y : h) - 2 * c->bw, False);
    if(h != m->wh)
    y = c->y + HEIGHT(c);
    void
    togglebar(const Arg *arg) {
    selmon->showbar = !selmon->showbar;
    updatebarpos(selmon);
    XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
    arrange(selmon);
    void
    togglefloating(const Arg *arg) {
    if(!selmon->sel)
    return;
    selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
    if(selmon->sel->isfloating)
    resize(selmon->sel, selmon->sel->x, selmon->sel->y,
    selmon->sel->w, selmon->sel->h, False);
    arrange(selmon);
    void
    toggletag(const Arg *arg) {
    unsigned int newtags;
    unsigned int i;
    if(!selmon->sel)
    return;
    newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
    if(newtags) {
    selmon->sel->tags = newtags;
    if(newtags == ~0) {
    selmon->prevtag = selmon->curtag;
    selmon->curtag = 0;
    if(!(newtags & 1 << (selmon->curtag - 1))) {
    selmon->prevtag = selmon->curtag;
    for (i=0; !(newtags & 1 << i); i++);
    selmon->curtag = i + 1;
    selmon->sel->tags = newtags;
    selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
    arrange(selmon);
    void
    toggleview(const Arg *arg) {
    unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
    if(newtagset) {
    selmon->tagset[selmon->seltags] = newtagset;
    arrange(selmon);
    void
    unfocus(Client *c, Bool setfocus) {
    if(!c)
    return;
    grabbuttons(c, False);
    XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
    if(setfocus)
    XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
    void
    unmanage(Client *c, Bool destroyed) {
    Monitor *m = c->mon;
    XWindowChanges wc;
    /* The server grab construct avoids race conditions. */
    detach(c);
    detachstack(c);
    if(!destroyed) {
    wc.border_width = c->oldbw;
    XGrabServer(dpy);
    XSetErrorHandler(xerrordummy);
    XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
    XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
    setclientstate(c, WithdrawnState);
    XSync(dpy, False);
    XSetErrorHandler(xerror);
    XUngrabServer(dpy);
    free(c);
    focus(NULL);
    arrange(m);
    void
    unmapnotify(XEvent *e) {
    Client *c;
    XUnmapEvent *ev = &e->xunmap;
    if((c = wintoclient(ev->window)))
    unmanage(c, False);
    void
    updatebars(void) {
    Monitor *m;
    XSetWindowAttributes wa = {
    .override_redirect = True,
    .background_pixmap = ParentRelative,
    .event_mask = ButtonPressMask|ExposureMask
    for(m = mons; m; m = m->next) {
    m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
    CopyFromParent, DefaultVisual(dpy, screen),
    CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
    XDefineCursor(dpy, m->barwin, cursor[CurNormal]);
    XMapRaised(dpy, m->barwin);
    void
    updatebarpos(Monitor *m) {
    m->wy = m->my;
    m->wh = m->mh;
    if(m->showbar) {
    m->wh -= bh;
    m->by = m->topbar ? m->wy : m->wy + m->wh;
    m->wy = m->topbar ? m->wy + bh : m->wy;
    else
    m->by = -bh;
    Bool
    updategeom(void) {
    Bool dirty = False;
    #ifdef XINERAMA
    if(XineramaIsActive(dpy)) {
    int i, j, n, nn;
    Client *c;
    Monitor *m;
    XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
    XineramaScreenInfo *unique = NULL;
    for(n = 0, m = mons; m; m = m->next, n++);
    /* only consider unique geometries as separate screens */
    if(!(unique = (XineramaScreenInfo *)malloc(sizeof(XineramaScreenInfo) * nn)))
    die("fatal: could not malloc() %u bytes\n", sizeof(XineramaScreenInfo) * nn);
    for(i = 0, j = 0; i < nn; i++)
    if(isuniquegeom(unique, j, &info[i]))
    memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
    XFree(info);
    nn = j;
    if(n <= nn) {
    for(i = 0; i < (nn - n); i++) { /* new monitors available */
    for(m = mons; m && m->next; m = m->next);
    if(m)
    m->next = createmon();
    else
    mons = createmon();
    for(i = 0, m = mons; i < nn && m; m = m->next, i++)
    if(i >= n
    || (unique[i].x_org != m->mx || unique[i].y_org != m->my
    || unique[i].width != m->mw || unique[i].height != m->mh))
    dirty = True;
    m->num = i;
    m->mx = m->wx = unique[i].x_org;
    m->my = m->wy = unique[i].y_org;
    m->mw = m->ww = unique[i].width;
    m->mh = m->wh = unique[i].height;
    updatebarpos(m);
    else { /* less monitors available nn < n */
    for(i = nn; i < n; i++) {
    for(m = mons; m && m->next; m = m->next);
    while(m->clients) {
    dirty = True;
    c = m->clients;
    m->clients = c->next;
    detachstack(c);
    c->mon = mons;
    attach(c);
    attachstack(c);
    if(m == selmon)
    selmon = mons;
    cleanupmon(m);
    free(unique);
    else
    #endif /* XINERAMA */
    /* default monitor setup */
    if(!mons)
    mons = createmon();
    if(mons->mw != sw || mons->mh != sh) {
    dirty = True;
    mons->mw = mons->ww = sw;
    mons->mh = mons->wh = sh;
    updatebarpos(mons);
    if(dirty) {
    selmon = mons;
    selmon = wintomon(root);
    return dirty;
    void
    updatenumlockmask(void) {
    unsigned int i, j;
    XModifierKeymap *modmap;
    numlockmask = 0;
    modmap = XGetModifierMapping(dpy);
    for(i = 0; i < 8; i++)
    for(j = 0; j < modmap->max_keypermod; j++)
    if(modmap->modifiermap[i * modmap->max_keypermod + j]
    == XKeysymToKeycode(dpy, XK_Num_Lock))
    numlockmask = (1 << i);
    XFreeModifiermap(modmap);
    void
    updatesizehints(Client *c) {
    long msize;
    XSizeHints size;
    if(!XGetWMNormalHints(dpy, c->win, &size, &msize))
    /* size is uninitialized, ensure that size.flags aren't used */
    size.flags = PSize;
    if(size.flags & PBaseSize) {
    c->basew = size.base_width;
    c->baseh = size.base_height;
    else if(size.flags & PMinSize) {
    c->basew = size.min_width;
    c->baseh = size.min_height;
    else
    c->basew = c->baseh = 0;
    if(size.flags & PResizeInc) {
    c->incw = size.width_inc;
    c->inch = size.height_inc;
    else
    c->incw = c->inch = 0;
    if(size.flags & PMaxSize) {
    c->maxw = size

    The diff you use rename tile() to ntile(), you should not have tile in your config.h. The rest of errors probably relate to what the diff has nerfed, or should be gone once you fix that tile.
    I think you should stay on 5.8.2 until all the patches have support for 5.9 if you can't patch on patch on your own.
    (edit) that github repo has issues, it might be good idea to create issue if that patch really have compatible issue with 5.9. That would benefit all other patch users.
    Last edited by livibetter (2011-09-12 14:55:00)

Maybe you are looking for

  • Can I have two accounts for one IPod touch?

    I have two homes, two computers (one in each home), and one IPod touch. I already have an account set up on one computer in the one home. I have a second home that I'm at about one week per month. I just want to be able to buy itunes at the second ho

  • [FR] How to set default member in User POV Preview

    Hi! Does anyone know how to set the default member in User POV Preview for first time users? Example: For dimension Entity, the default member that appear in first login of user is the Top Level member "Dim_Entity", regardless of security. It happens

  • Purchase Req & Standard PO - Price is not getting Defaulted from Price List

    Dear All, Hope you are doing good!!! We are implementing R12.1 for one of our client. This query is pertaining to the Advance Pricing with Purchasing. Infact client wants to default the Purchase Requisition and Standard Purchase Order Price from Pric

  • Notebook layout view in pages

    hey everyone. is it possible in pages to have something on the order of the word:mac notebook layout funtionality?

  • An unknown error occurred. You may be able to continue without problems

    iMovie 6 continues to crash for me. I am receiving this error: An unknown error occurred. You may be able to continue without problems. I have restarted, deleted prefs, Repaired permissions. I am running latest Leopard OS (10.5.3). Any one experienci