Page 1 sur 1

[dwm] patch nmaster (résolu)

Publié : lun. 10 mai 2010, 18:28
par Marzikill
Bonjour !

Je découvre depuis peu les joies des tillings managers, et je dois dire que je ne suis pas déçu par dwm. wmiii, en mieux. ;)
Cependant, j'ai un petit soucis lorsqu'il s'agit d'inclure un fichier .c pour apporter de nouvelles fonctionnalités au wm. En effet, comme décrit sur le site officiel, et sur la plupart des fichiers de configuration que j'ai pu voir, il faut tout d'abord insérer un #include"file.c". Seulement, c'est ici que j'ai le problème.
In file included from config.h:36:0,
from dwm.c:255:
nmaster.c: In function ‘incnmaster’:
nmaster.c:18:20: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:18:31: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:18:58: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:20:17: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:21:20: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:22:18: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:23:2: erreur: too few arguments to function ‘arrange’
dwm.c:135:13: note: declared here
nmaster.c: In function ‘setnmaster’:
nmaster.c:28:20: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:28:31: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:28:58: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:30:17: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:31:2: erreur: too few arguments to function ‘arrange’
dwm.c:135:13: note: declared here
nmaster.c: In function ‘ntile’:
nmaster.c:41:28: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:42:17: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:43:8: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:43:35: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:48:9: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:48:20: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:49:8: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:51:9: erreur: déréférencement d'un pointeur de type incomplet
nmaster.c:52:8: erreur: déréférencement d'un pointeur de type incomplet
etc etc...

Mon config.h :

Code : Tout sélectionner

/* See LICENSE file for copyright and license details. */

/* appearance */
static const char font[]            = "-*-*-medium-*-*-*-10-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#cccccc";
static const char normbgcolor[]     = "#000000";
static const char normfgcolor[]     = "#D5D5D5";
static const char selbordercolor[]  = "#9B3C35";
static const char selbgcolor[]      = "#000000";
static const char selfgcolor[]      = "#688C57";
static const unsigned int borderpx  = 2;        /* border pixel of windows */
static const unsigned int snap      = 32;       /* snap pixel */
static const unsigned int gappx     = 3;        /* gap pixel between windows */ 
static const Bool showbar           = True;     /* False means no bar */
static const Bool topbar            = True;     /* False means bottom bar */


/* tagging */
static const char *tags[] = { "[Web]", "[Chat]", "[Sys]", "[Files]", "[Dll]", "[Film]", "[Foo]", "[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 },
	{ "Pidgin",             NULL,       NULL,       2,            False,       -1 },
	{ "Deluge",             NULL,       NULL,       5,            False,       -1 },
	{ "Vlc",                NULL,       NULL,       0,            True,        -1 },
	{ "Gnome-mplayer",      NULL,       NULL,       0,            True,        -1 },
};

/* layout(s) */
static const float mfact      = 0.55; /* factor of master area size [0.05..0.95] */
static const Bool resizehints = False; /* True means respect size hints in tiled resizals */
static const int nmaster = 2;  /* default number of clients in the master area */

#include "nmaster.c"

static const Layout layouts[] = {
	/* symbol     arrange function */
	{ "[T]",      tile },    /* first entry is default */
	{ "[~]",      NULL },    /* no layout function means floating behavior */
	{ "[M]",      monocle },
        { "-|=",      ntile },
};

/* key definitions */
#define MODKEY Mod1Mask
#define MODKEY2 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[]  = { "uxterm", "-fa", "xft:Bitstream Vera Sans Mono:style=Roman:pixelsize=12:antialias=true",                NULL };

/* Programs */
static const char *navigator[]       = { "firefox",                        NULL };
static const char *chat[]            = { "pidgin",                         NULL };
static const char *torrent[]         = { "deluge",                         NULL };
static const char *verbes[]          = { "verbiste-gtk",                   NULL };
static const char *printScreen[]     = { "scrot", "~/Capture/png",         NULL };
static const char *printSel[]        = { "scrot", "-bs", "~/Capture/png",  NULL };
static const char *shutdown[]        = { "sudo", "halt",                   NULL };
static const char *reboot[]          = { "sudo", "reboot",                 NULL };
static const char *nextSong[]        = { "mpc", "next",                    NULL };
static const char *prevSong[]        = { "mpc", "prev",                    NULL };
static const char *togglePlay[]      = { "mpc", "toggle",                  NULL };
static const char *soundUp[]         = { "amixer", "sset", "PCM", "3+", "unmute",  NULL };
static const char *soundDown[]       = { "amixer", "sset", "PCM", "3-", "unmute",  NULL };

static Key keys[] = {
	/* modifier                     key        function        argument */
	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
	{ MODKEY,                       XK_Return, spawn,          {.v = termcmd } },
        /* Program launching */ 
	{ MODKEY2,                      XK_i, spawn,               {.v = navigator } },
	{ MODKEY2,                      XK_c, spawn,               {.v = chat } },
	{ MODKEY2,                      XK_t, spawn,               {.v = torrent } },
	{ MODKEY2,                      XK_v, spawn,               {.v = verbes } },
	{ MODKEY2,                      XK_p, spawn,               {.v = printScreen } },
	{ MODKEY|MODKEY2,               XK_v, spawn,               {.v = printSel } },
        /* End program launching */
        /* Sound managing */ 
	{ MODKEY|ControlMask,           XK_a, spawn,               {.v = nextSong } },
	{ MODKEY|ControlMask,           XK_z, spawn,               {.v = prevSong } },
	{ MODKEY|ControlMask,           XK_s, spawn,               {.v = togglePlay } },
	{ MODKEY|ControlMask,           XK_q, spawn,               {.v = soundUp } },
	{ MODKEY|ControlMask,           XK_w, spawn,               {.v = soundDown } },
        /* End mpd managing */
        /* Power */
	{ MODKEY|ShiftMask,             XK_s, spawn,               {.v = shutdown } },
	{ MODKEY|ShiftMask,             XK_r, spawn,               {.v = reboot } },
        /* End power */
	{ 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_BackSpace, zoom,           {0} },
	{ MODKEY,                       XK_Tab,    view,           {0} },
	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
        /*Layout bindings */
	{ 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_b,      setlayout,      {.v = &layouts[4]} },
        { MODKEY,                       XK_g,      setlayout,      {.v = &layouts[5]} },
	{ MODKEY,                       XK_space,  setlayout,      {0} },
        /*End layout binding */
	{ 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(                        0x26,                      0)
        TAGKEYS(                        0xe9,                      1)
        TAGKEYS(                        0x22,                      2)
        TAGKEYS(                        0x27,                      3)
        TAGKEYS(                        0x28,                      4)
        TAGKEYS(                        0x2d,                      5)
        TAGKEYS(                        0xe8,                      6)
        TAGKEYS(                        0x5f,                      7)
        TAGKEYS(                        0xe7,                      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} },
};
Sauriez vous d'où vient le problème ? C'est sûrement tout bête, car j'ai l'impression d'être le seul à qui ce cas se pose.

Amicalement
Marzikill.

--> conflit avec le patch pertag.diff, version 5.7.2

Re: [dwm] Inclure un fichier .c

Publié : lun. 10 mai 2010, 18:44
par benjarobin
Sans le fichier concerne "nmaster.c" je ne vois pas comment on peut aider.
De plus inclure un fichier .c je n'aime pas cela du tout en terme de design.
Normalement tu créer un fichier .h que tu implémente dans le .c (Celui-ci inclura le fichier .h)
Et tu rajoute le include du fichier .h dans config.h

De plus comment tu compile...

Re: [dwm] Inclure un fichier .c

Publié : lun. 10 mai 2010, 18:58
par tuxce
vérifies si t'as récupéré le bon nmaster.c, s'il correspond pas à la version de dwm, c'est pas le bon.

http://dwm.suckless.org/patches/nmaster

Re: [dwm] patch nmaster

Publié : lun. 10 mai 2010, 19:33
par Marzikill
Merci pour vos réponses.
Je vais tenter d'être le plus clair possible.

Tout d'abord, la méthode que j'utilise est celle conseillée sur le site de dwm. N'y connaissant (pas grand chose) au C, je ne sais pas pourquoi ce n'est pas esthétique. ;)
Mon fichier nmaster.c est strictement celui récupéré sur le site officiel.
Je compile suivant la méthode préconisée via le wiki dwm sur archlinux.org :

Code : Tout sélectionner

makepkg -efi --skipinteg

dans mon répertoire contenant le dossier src/.

Enfin, j'ai téléchargé le dernier nmaster.c (mais le même problème se pose sur tous les fichiers .c que j'ai essayé (push.c, bstack.c, gaplessgrid.c ...). Je précise que ma version de dwm est celle disponible sur [community], à savoir la 5.7.2-2. Le problème viendrait de la différence de versions ?


Merci pour votre aide.
Amicalement
Marzikill.

Re: [dwm] patch nmaster

Publié : lun. 10 mai 2010, 21:48
par tuxce
Tu peux donner le lien d'où t'as téléchargé nmaster.c ?

Re: [dwm] patch nmaster

Publié : mar. 11 mai 2010, 18:50
par Marzikill
Ici
Je suis le seul a avoir ce problème ?

Re: [dwm] patch nmaster

Publié : mar. 11 mai 2010, 20:24
par tuxce
justement celui ci est pour la version 5.6.x, regarde la page dont j'ai donné le lien.

Re: [dwm] patch nmaster

Publié : mar. 11 mai 2010, 20:50
par Marzikill
J'ai beau essayer avec la version de nmaster-sym.c estampillée 5.7.1, cela ne fonctionne pas. Toujours la même erreur, a savoir "nmaster-sym.c:18:20: erreur: déréférencement d'un pointeur de type incomplet", tout comme pour la version 5.6.1.

Re: [dwm] patch nmaster

Publié : mar. 11 mai 2010, 22:00
par tuxce
je sais pas comment tu fais pour avoir cette erreur:

Code : Tout sélectionner

mkdir dwm
cd dwm
yaourt -G dwm
cd src/dwm-5.7.2/
wget "http://dwm.suckless.org/patches/nmaster-sym.c" -O nmaster.c
cd ../..
# rajouter:
# static const int nmaster = 2;  
# #include "nmaster.c"
# dans config.h
makepkg -efi --skipinteg

Re: [dwm] patch nmaster

Publié : mar. 11 mai 2010, 22:43
par Marzikill
Heh bien... Moi non plus. Je n'en ai franchement aucune idée !
Je suppose que je vais devoir reprendre tout depuis le début, proprement.
Car ta méthode fonctionne parfaitement ! :D
Cela pourrait-il venir des patchs .diff que j'ai appliqué au dwm.c ?

Merci pour ton aide. ;)

Re: [dwm] patch nmaster

Publié : mar. 11 mai 2010, 22:45
par tuxce
Marzikill a écrit : Cela pourrait-il venir des patchs .diff que j'ai appliqué au dwm.c ?
déjà que j'ai eu du mal à te faire dire le lien de téléchargement, j'allais attendre longtemps pour savoir que t'avais patché... :|

Re: [dwm] patch nmaster

Publié : mer. 12 mai 2010, 12:53
par Marzikill
Oups, désolé.
Donc oui, dwm est patché avec les patchs (ceux de suckless) suivants : attachabove-5.6.1.diff, dwm-5.7.2-pertag.diff, dwm-uselessgap-5.8.diff.
Cela change-t-il quelque chose ?

Edit : Après quelques essais, cela vient bien des patchs, plus précisément du patch pertag.diff. Cela est tout de même ennuyeux. Il était bien pratique.