+ -
当前位置:首页 → 问答吧 → DWM窗口管理器[Xft特性][热键简介]

DWM窗口管理器[Xft特性][热键简介]

时间:2008-02-01

来源:互联网

DWM一个很小的窗口管理器.
如果说KDE,GNOME五官齐全,那DWM就是一个骷髅人(就那么一堆骨头,刚好能用:P).

简介
DWM在3.5的时候,就可以支持中文显示了.不过因为X Core的核心配置字体方式太多繁复而显示中文很难.
DWM支持热键,自定颜色和简单的常规输入状态条.
轻便是它最大的特点.

更新簡介:
代码:
5.5
更新一下补丁,只是在之前的补丁上稍微修改下就可以用了:-D
设置方法照旧.

不过遇到一个小问题:Xft中的XftTextExternUtf8函数会出现警告语句(被我无视后正常使用:P),有时间会看看的.
历史:
代码:
4.8 -> 4.9 
更詳細的規則配置。
增加一個布局結構配置。
4.9版本

注意:
53樓有takethat兄弟4.9的xft補丁
:P 其實我也做了,不過近來忙沒有寫配置,
4.9的配置變化大了點

特点:
代码:
× 简单,轻便,快速。
× 可读取标准输入作为状态条。
× 标签式的桌面管理。
× 一站式安装,配置通过源代码,单一文件。
× 自定义颜色。
× 热键。
dwm.4.8.xft.jpg

配置
就是一个config.h如果要改变配置,只有重新编译(或是自己修改二进制:P)
[外观]
代码:
/* 边框大小 */
#define BORDERPX 1
/* 字体设置(这里写的是打了Xft补丁的配置,如果没有打,就用x core的方式填写 */
#define FONT "WenQuanYi Bitmap Song:size=8"
/* 默认边框颜色 */
#define NORMBORDERCOLOR "#CCCCCC"
/* 默认背景颜色 */
#define NORMBGCOLOR "#CCCCCC"
/* 默认前景颜色 */
#define NORMFGCOLOR "#000000"
/* 选中边框颜色 */
#define SELBORDERCOLOR "#0066FF"
/* 选中背景颜色 */
#define SELBGCOLOR "#0066FF"
/* 选中前景颜色 */
#define SELFGCOLOR "#FFFFFF"
[标签]
代码:
/*
 这里请注意,完全能够用中文标示,可是最后排序的时候,要读取这个标签请使用tags[数字],数字从0开始。
 比如tags[0]就是“通用”,tags[1]是“网络”。
 MAXTAGLEN是16个字符。
 */
const char tags[][MAXTAGLEN] = { "通用", "网络", "系统" };
[窗口标签分配规则]
代码:
/* 
 前三個逗号前是窗口一个子字符串。
 第四個逗號前,是字符串,對應tags的配置。
 最後一個,是浮动的开关,默认的有两大类,一个是浮动,一个固定排版。(排版下面有说明)

 在哪里读取窗口的信息呢?
 使用xprop吧,里面的WM_WINDOW_ROLE,WM_CLASS,WM_NAME就是我们需要的。
*/
Rule rules[] = {
        /* class        instance        title tags ref  isfloating */
        { "Gimp",     NULL, NULL, NULL, True },
        { "Opera", "Opera", NULL, tags[1], False },
        { NULL, "vim", NULL, NULL, False },
};
[布局]
代码:
/*
 在本布局裏面使用的窗口打開方式,
 比如是一些 */
/* geometries, s{x,y,w,h} and bh are already initualized here */
/* 函數名 X坐標 Y坐標 bw wx wy ww wh mx my mw mh tx ty tw th mox moy mow moh */
#define MFACT 0.55      /* master width factor [0.1 .. 0.9] */
DEFGEOM(single, 0, 0, sw, 0, bh, sw, sh-bh, wx, wy, mfact*sw, wh, mx+mw, wy, ww-mw, wh, wx, wy, ww, wh)

/* 布局窗口啟動方式 */
Geom geoms[] = {
        /* symbol       function */
        { "固|", single },     /* first entry is default */
};

/* 布局 */
#define RESIZEHINTS True        /* 如果为False,就是放弃尺寸,直接使用平铺 */
#define SNAP 32 /* 最小尺寸? */
/*
 { "浮", floating,     True },
 第一个逗号前是标签,就是使用的时候显示的一种方法。可以中文。
 第二个逗号前是布局方法,这里是窗口出现的时候排版方式,可以在最后提供是否浮动窗口,默认提供四种。
 floating, 简单浮动
 tilev, 横向平铺
 tileh, 纵向平铺
 monocle ?属于浮动
 第三个是窗口是否浮动。
*/
Layout layouts[] = {
        { "浮", floating,      True },
        { "固=", tilev, False },
        { "固|", tileh, False },
        { "[M]", monocle,     True },
};
[热键]
代码:
/*
 第一个逗号前是主组合键,包括ctrl,atl,shift,使用“|”来代表组合。
 第二个逗号前是次组合键,包括功能键(回车,删除),字符键。
 第三个逗号钱是方法,包括:
 spawn:运行你指定的命令,我们的dmenu_run就是这么来的。 最后参数必须是执行用的命令(string)
 focusnext,focusprev:焦点后移和前移。 最后参数NULL
 reapply:重新以你正在的桌面标签为基本标签,运作一次规则。最后参数NULL
 zoom:完全没有成功过的缩放。最后参数NULL
 viewpretag:返回上一个桌面标签。最后参数NULL
 setlayout:设置桌面布局。最后参数是布局的名字
 togglefloating:切换是否浮动。最后参数NULL
 killclient:强制关闭窗口。最后参数NULL
 view:查看桌面标签。最后参数可以是NULL(全局查看)或是tags[数字]指定的桌面标签
 toggleview:同时查看多个桌面标签。最后参数tags[数字]指定的桌面标签
 tag:切换指定的窗口到达指定的桌面标签。最后参数tags[数字]指定的桌面标签
 toggletag:指定窗口被设定多个桌面标签,最后参数tags[数字]指定的桌面标签
 quit:退出dwm。最后参数NULL
*/
#define MODKEY Mod1Mask /* 主组合键 Alt */
Key keys[] = {
        /* modifier key function        argument */
        { MODKEY, XK_p, spawn, "exec dmenu_run -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" },
        { MODKEY|ShiftMask, XK_Return,  spawn, "exec tilda" },
        { MODKEY, XK_j, focusnext,      NULL },
        { MODKEY, XK_k, focusprev,      NULL },
        { MODKEY, XK_r, reapply,        NULL },
        { MODKEY, XK_Return,    zoom, NULL },
        { MODKEY, XK_Tab, viewprevtag,  NULL },
        { MODKEY, XK_m, setlayout,      "[M]" },
        { MODKEY, XK_f, setlayout,      "浮" },
        { MODKEY, XK_v, setlayout,      "固=" },
        { MODKEY, XK_h, setlayout,      "固|" },
        { MODKEY|ShiftMask, XK_space,   togglefloating, NULL },
        { MODKEY, XK_F4, killclient,    NULL },
        { MODKEY, XK_0, view, NULL },
        { MODKEY, XK_1, view, tags[0] }, 
爆 炸后几天内,成千上万被称为“清理者”的工人被匆忙调集到切尔诺贝利来制服这座充满辐射的炼狱。煤矿工人在炽热的石墨堆芯下挖掘,以便泵入液氮来冷却核 燃料。直升机驾驶员空投了4500吨铅、沙子、黏土和其它物料来竭力熄灭火焰。军人们定时冲上顶部,将炸飞的、冒着烟的石墨块铲回反应堆中心。参与这次行 动的3400名超级勇士被不敬地称为“生物 机器人”,他们当中
        { MODKEY, XK_2, view, tags[1] },
        { MODKEY, XK_3, view, tags[2] },
        { MODKEY, XK_4, view, tags[3] },
        { MODKEY, XK_5, view, tags[4] },
        { MODKEY, XK_6, view, tags[5] },
        { MODKEY, XK_7, view, tags[6] },
        { MODKEY, XK_8, view, tags[7] },
        { MODKEY, XK_9, view, tags[8] },
        { MODKEY|ControlMask, XK_1, toggleview, tags[0] },
        { MODKEY|ControlMask, XK_2, toggleview, tags[1] },
        { MODKEY|ControlMask, XK_3, toggleview, tags[2] },
        { MODKEY|ControlMask, XK_4, toggleview, tags[3] },
        { MODKEY|ControlMask, XK_5, toggleview, tags[4] },
        { MODKEY|ShiftMask, XK_0, tag, NULL },
        { MODKEY|ShiftMask, XK_1, tag, tags[0] },
        { MODKEY|ShiftMask, XK_2, tag, tags[1] },
        { MODKEY|ShiftMask, XK_3, tag, tags[2] },
        { MODKEY|ShiftMask, XK_4, tag, tags[3] },
        { MODKEY|ShiftMask, XK_5, tag, tags[4] },
        { MODKEY|ControlMask|ShiftMask, XK_1, toggletag,        tags[0] },
        { MODKEY|ControlMask|ShiftMask, XK_2, toggletag,        tags[1] },
        { MODKEY|ControlMask|ShiftMask, XK_3, toggletag,        tags[2] },
        { MODKEY|ControlMask|ShiftMask, XK_4, toggletag,        tags[3] },
        { MODKEY|ControlMask|ShiftMask, XK_5, toggletag,        tags[4] },
        { MODKEY|ShiftMask, XK_q, quit, NULL },
};
注意这一行:
代码:
#define FONT "WenQuanYi Bitmap Song:size=8" /* 字体设置 */
因为我写了点Xft补丁.这里使用了fontconfig来配置字体.
中文显示现在好多了.

全部的热键定义在(库路径)/X11/keysymdef.h 和 (库路径)/X11/keysym.h
这里列出常用的几个
代码:
#define XK_Shift_L 0xffe1 /* Left shift */
#define XK_Shift_R 0xffe2 /* Right shift */
#define XK_Control_L 0xffe3 /* Left control */
#define XK_Control_R 0xffe4 /* Right control */
#define XK_Caps_Lock 0xffe5 /* Caps lock */
#define XK_Shift_Lock 0xffe6 /* Shift lock */

#define XK_Meta_L 0xffe7 /* Left meta */
#define XK_Meta_R 0xffe8 /* Right meta */
#define XK_Alt_L 0xffe9 /* Left alt */
#define XK_Alt_R 0xffea /* Right alt */
#define XK_Super_L 0xffeb /* Left super */
#define XK_Super_R 0xffec /* Right super */

/*
 * Latin 1
 * (ISO/IEC 8859-1 = Unicode U+0020..U+00FF)
 * Byte 3 = 0
 */
#ifdef XK_LATIN1
#define XK_space 0x0020 /* U+0020 SPACE */
#define XK_exclam 0x0021 /* U+0021 EXCLAMATION MARK */
#define XK_quotedbl 0x0022 /* U+0022 QUOTATION MARK */
#define XK_numbersign 0x0023 /* U+0023 NUMBER SIGN */
#define XK_dollar 0x0024 /* U+0024 DOLLAR SIGN */
#define XK_percent 0x0025 /* U+0025 PERCENT SIGN */
#define XK_ampersand 0x0026 /* U+0026 AMPERSAND */
#define XK_apostrophe 0x0027 /* U+0027 APOSTROPHE */
#define XK_quoteright 0x0027 /* deprecated */
#define XK_parenleft 0x0028 /* U+0028 LEFT PARENTHESIS */
#define XK_parenright 0x0029 /* U+0029 RIGHT PARENTHESIS */
#define XK_asterisk 0x002a /* U+002A ASTERISK */
#define XK_plus 0x002b /* U+002B PLUS SIGN */
#define XK_comma 0x002c /* U+002C COMMA */
#define XK_minus 0x002d /* U+002D HYPHEN-MINUS */
#define XK_period 0x002e /* U+002E FULL STOP */
#define XK_slash 0x002f /* U+002F SOLIDUS */
#define XK_0 0x0030 /* U+0030 DIGIT ZERO */
#define XK_1 0x0031 /* U+0031 DIGIT ONE */
#define XK_2 0x0032 /* U+0032 DIGIT TWO */
#define XK_3 0x0033 /* U+0033 DIGIT THREE */
#define XK_4 0x0034 /* U+0034 DIGIT FOUR */
#define XK_5 0x0035 /* U+0035 DIGIT FIVE */
#define XK_6 0x0036 /* U+0036 DIGIT SIX */
#define XK_7 0x0037 /* U+0037 DIGIT SEVEN */
#define XK_8 0x0038 /* U+0038 DIGIT EIGHT */
#define XK_9 0x0039 /* U+0039 DIGIT NINE */
#define XK_colon 0x003a /* U+003A COLON */
#define XK_semicolon 0x003b /* U+003B SEMICOLON */
#define XK_less 0x003c /* U+003C LESS-THAN SIGN */
#define XK_equal 0x003d /* U+003D EQUALS SIGN */
#define XK_greater 0x003e /* U+003E GREATER-THAN SIGN */
#define XK_question 0x003f /* U+003F QUESTION MARK */
#define XK_at 0x0040 /* U+0040 COMMERCIAL AT */
#define XK_A 0x0041 /* U+0041 LATIN CAPITAL LETTER A */
#define XK_B 0x0042 /* U+0042 LATIN CAPITAL LETTER B */
#define XK_C 0x0043 /* U+0043 LATIN CAPITAL LETTER C */
#define XK_D 0x0044 /* U+0044 LATIN CAPITAL LETTER D */
#define XK_E 0x0045 /* U+0045 LATIN CAPITAL LETTER E */
#define XK_F 0x0046 /* U+0046 LATIN CAPITAL LETTER F */
#define XK_G 0x0047 /* U+0047 LATIN CAPITAL LETTER G */
#define XK_H 0x0048 /* U+0048 LATIN CAPITAL LETTER H */
#define XK_I 0x0049 /* U+0049 LATIN CAPITAL LETTER I */
#define XK_J 0x004a /* U+004A LATIN CAPITAL LETTER J */
#define XK_K 0x004b /* U+004B LATIN CAPITAL LETTER K */
#define XK_L 0x004c /* U+004C LATIN CAPITAL LETTER L */
#define XK_M 0x004d /* U+004D LATIN CAPITAL LETTER M */
#define XK_N 0x004e /* U+004E LATIN CAPITAL LETTER N */
#define XK_O 0x004f /* U+004F LATIN CAPITAL LETTER O */
#define XK_P 0x0050 /* U+0050 LATIN CAPITAL LETTER P */
#define XK_Q 0x0051 /* U+0051 LATIN CAPITAL LETTER Q */
#define XK_R 0x0052 /* U+0052 LATIN CAPITAL LETTER R */
#define XK_S 0x0053 /* U+0053 LATIN CAPITAL LETTER S */
#define XK_T 0x0054 /* U+0054 LATIN CAPITAL LETTER T */
#define XK_U 0x0055 /* U+0055 LATIN CAPITAL LETTER U */
#define XK_V 0x0056 /* U+0056 LATIN CAPITAL LETTER V */
#define XK_W 0x0057 /* U+0057 LATIN CAPITAL LETTER W */
#define XK_X 0x0058 /* U+0058 LATIN CAPITAL LETTER X */
#define XK_Y 0x0059 /* U+0059 LATIN CAPITAL LETTER Y */
#define XK_Z 0x005a /* U+005A LATIN CAPITAL LETTER Z */
#define XK_bracketleft 0x005b /* U+005B LEFT SQUARE BRACKET */
#define XK_backslash 0x005c /* U+005C REVERSE SOLIDUS */
#define XK_bracketright 0x005d /* U+005D RIGHT SQUARE BRACKET */
#define XK_asciicircum 0x005e /* U+005E CIRCUMFLEX ACCENT */
#define XK_underscore 0x005f /* U+005F LOW LINE */
#define XK_grave 0x0060 /* U+0060 GRAVE ACCENT */
#define XK_quoteleft 0x0060 /* deprecated */
#define XK_a 0x0061 /* U+0061 LATIN SMALL LETTER A */
#define XK_b 0x0062 /* U+0062 LATIN SMALL LETTER B */
#define XK_c 0x0063 /* U+0063 LATIN SMALL LETTER C */
#define XK_d 0x0064 /* U+0064 LATIN SMALL LETTER D */
#define XK_e 0x0065 /* U+0065 LATIN SMALL LETTER E */
#define XK_f 0x0066 /* U+0066 LATIN SMALL LETTER F */
#define XK_g 0x0067 /* U+0067 LATIN SMALL LETTER G */
#define XK_h 0x0068 /* U+0068 LATIN SMALL LETTER H */
#define XK_i 0x0069 /* U+0069 LATIN SMALL LETTER I */
#define XK_j 0x006a /* U+006A LATIN SMALL LETTER J */
#define XK_k 0x006b /* U+006B LATIN SMALL LETTER K */
#define XK_l 0x006c /* U+006C LATIN SMALL LETTER L */
#define XK_m 0x006d /* U+006D LATIN SMALL LETTER M */
#define XK_n 0x006e /* U+006E LATIN SMALL LETTER N */
#define XK_o 0x006f /* U+006F LATIN SMALL LETTER O */
#define XK_p 0x0070 /* U+0070 LATIN SMALL LETTER P */
#define XK_q 0x0071 /* U+0071 LATIN SMALL LETTER Q */
#define XK_r 0x0072 /* U+0072 LATIN SMALL LETTER R */
#define XK_s 0x0073 /* U+0073 LATIN SMALL LETTER S */
#define XK_t 0x0074 /* U+0074 LATIN SMALL LETTER T */
#define XK_u 0x0075 /* U+0075 LATIN SMALL LETTER U */
#define XK_v 0x0076 /* U+0076 LATIN SMALL LETTER V */
#define XK_w 0x0077 /* U+0077 LATIN SMALL LETTER W */
#define XK_x 0x0078 /* U+0078 LATIN SMALL LETTER X */
#define XK_y 0x0079 /* U+0079 LATIN SMALL LETTER Y */
#define XK_z 0x007a /* U+007A LATIN SMALL LETTER Z */
#define XK_braceleft 0x007b /* U+007B LEFT CURLY BRACKET */
#define XK_bar 0x007c /* U+007C VERTICAL LINE */
#define XK_braceright 0x007d /* U+007D RIGHT CURLY BRACKET */
#define XK_asciitilde 0x007e /* U+007E TILDE */
附上一个我使用的启动脚本:
~/.xinitrc
PHP 代码:
#!/bin/sh

# Default Fix My Board
xmodmap /other/Backup/fix/xmodmap &

# Base Env Var Setup
X_ENV="dwm"

# Open office fix
export OOO_FORCE_DESKTOP=gnome

# Input System
export LANG=zh_CN.UTF-8 
export XIM=fcitx
export XIM_PROGRAM=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
fcitx -d

# Wall Page
feh --bg-center .wp.png &

# Default Exec 
tilda -h 2>&1 > /dev/null &

# dwm ENV
if [ $X_ENV ]; then
  export AWT_TOOLKIT=MToolkit
  while true
  do
    . ~/.status.bar
  done | exec dwm
fi 
~/.status.bar
PHP 代码:
#!/bin/bash

# 标准检查
p_list="opera:Op pidgin:PG vim:Vi";
G_CODE="";
for index in $p_list
do
  p=`expr match $index '\(.*\):'`
  s=`expr match $index '.*:\(.*\)'`
  G_CODE += "`pgrep $p > /dev/null && echo [$s]`"
done

# 特殊程序
MPD="[`mpc | sed -n '2s/\[\(.*\)\].*/\1/;2s/playing/Music/p;'`]";
DATE="`date +%m.%d` `date +%H:%M`";

echo "$G_CODE$MPD $DATE"

# 每三十秒才更新一次,太快会很占用CPU,毕竟我不需要秒
sleep 30s 
如果有任何的不明白,请说明:)
有错误也请大方指出,谢谢:)
上传的图像
dwm-4.7.xft.png (59.7 KB, 427 次查看)
上传的附件
xft.patch.gz (2.0 KB, 32 次查看)

作者: SCys   发布时间: 2008-02-01

你终于研究出来了,呵呵。
DWM貌似没有风格或者主题之类的东西的。

作者: Xorcerer   发布时间: 2008-02-01

完全没有.不过是简单的边框颜色配置.
把XFT添加进去,没有发现体积扩大多少.还是原来的28KB
--
而且编译一次需要....5秒
--
现在就是对它的进一步添加功能,
最主要还是窗口管理的加强.
---
代码少,还是少的好.

作者: SCys   发布时间: 2008-02-01

已经用dwm很久了,公司、家里都用它,非常喜欢,呵呵。
写了个简陋的程序,可以在任务栏上显示时间,系统负荷,和网络链接状况。
代码:
#!/bin/sh
wlanIF="ath0"
interval=1
rx=0
tx=0
net_gettrans(){
 traffic=$(ifconfig $wlanIF | grep bytes | cut -d: -f2-3)
 rx=${traffic%% *}
 tx=${traffic#*:}
 tx=${tx%% *}

 rx=$(( $rx/1000 ))
 tx=$(( $tx/1000 ))
}

while true; do
 rxp=$rx
 txp=$tx
 net_gettrans
 net="Up/Dn $(( ($tx - $txp) / $interval ))/$(( ($rx - $rxp) / $interval )) KB/s"

 wifi="wifi $(iwconfig $wlanIF | grep Link | cut -d= -f2 | cut -d' ' -f1)"

 time="$(cut -d' ' -f-3 /proc/loadavg) |$(date '+%l:%M')"
 
 echo "$net | $wifi | $time"
 sleep $interval
done | /usr/local/bin/dwm

作者: biinn   发布时间: 2008-02-02

很好
喜欢这个脚本.自己也用了下,没有修改,:)

作者: SCys   发布时间: 2008-02-02

SCys 兄果然應約,謝謝!

昨天試了一下還未搞定,是否補丁不打不能用?我的機器是英文的,沒打補丁。

作者: d00m3d   发布时间: 2008-02-02

引用:
作者: biinn
已经用dwm很久了,公司、家里都用它,非常喜欢,呵呵。
写了个简陋的程序,可以在任务栏上显示时间,系统负荷,和网络链接状况。
代码:
#!/bin/sh
wlanIF="ath0"
interval=1
rx=0
tx=0
net_gettrans(){
 traffic=$(ifconfig $wlanIF | grep bytes | cut -d: -f2-3)
 rx=${traffic%% *}
 tx=${traffic#*:}
 tx=${tx%% *}

 rx=$(( $rx/1000 ))
 tx=$(( $tx/1000 ))
}

while true; do
 rxp=$rx
 txp=$tx
 net_gettrans
 net="Up/Dn $(( ($tx - $txp) / $interval ))/$(( ($rx - $rxp) / $interval )) KB/s"

 wifi="wifi $(iwconfig $wlanIF | grep Link | cut -d= -f2 | cut -d' ' -f1)"

 time="$(cut -d' ' -f-3 /proc/loadavg) |$(date '+%l:%M')"
 
 echo "$net | $wifi | $time"
 sleep $interval
done | /usr/local/bin/dwm
biinn 因為 dwm 連 fvwm 都放棄了,真想盡快搞定它

不知何故,起動後在頂頭的 toolbar 無論怎樣 click 都沒反應的 :(

作者: d00m3d   发布时间: 2008-02-02

引用:
作者: d00m3d
biinn 因為 dwm 連 fvwm 都放棄了,真想盡快搞定它

不知何故,起動後在頂頭的 toolbar 無論怎樣 click 都沒反應的 :(
DOOM 老大真是有心人,连我用过fvwm都记得。
toolbar不能点很奇怪,不过我从来不点。alt+1,2,3...就可以切换了。

作者: biinn   发布时间: 2008-02-02

引用:
作者: d00m3d
SCys 兄果然應約,謝謝!

昨天試了一下還未搞定,是否補丁不打不能用?我的機器是英文的,沒打補丁。
我的机器也是英文的,下载dwm源码直接编译就可以用了。没打过补丁。不过我的不是LFS,呵呵。

作者: biinn   发布时间: 2008-02-02

我暈,原來還有 hot key 可用

dwm 官方網站資料很缺乏,google 也沒找到多少有用的,請問 biinn 及 SCys 兩位哪裡有 dwm 教程之類的?

作者: d00m3d   发布时间: 2008-02-02

引用:
作者: d00m3d
我暈,原來還有 hot key 可用

dwm 官方網站資料很缺乏,google 也沒找到多少有用的,請問 biinn 及 SCys 兩位哪裡有 dwm 教程之類的?
很少,而且郵件列表也是很稀少的.
記得上次查資料的時候發現不少台灣地區的人用DWM.
---
補丁為的是XFT字體,就是中文,打不打都可以顯示中文,
打了後設置中文方面比較易懂,

作者: SCys   发布时间: 2008-02-02

看來還是不能偷懶,要再搜集資料,仔細看看配置文檔才行了

作者: d00m3d   发布时间: 2008-02-02

我也最爱用dwm,建议 man dwm 看看,貌似有很详细的说明

作者: kikiwarm   发布时间: 2008-02-03

看起来很 cool(也很另类) 的东西,,,笔记本上试试先:)。

问个 BC问题,就是 dwm 下 tray icon 哪里去了?

作者: 晨想   发布时间: 2008-02-03

dwm 下没有 icon,自然也就没有 tray icon。

作者: biinn   发布时间: 2008-02-03

但是有的程序有icon的,就是不支持咯?

作者: 晨想   发布时间: 2008-02-03

应该是不支持的。我的pidgin就没有tray icon。
不过dwm的toolbar接受标准输入,所以你可以往上面写任何你想要显示的信息。

作者: biinn   发布时间: 2008-02-03

如果需要系统工具条.
这里介绍两个:
bzen
trayer
都是常用的.
----
bzen 比较强大,能够作为菜单使用,不过配置很复杂.
下次我也介绍下.
trayer 很简单,

作者: SCys   发布时间: 2008-02-03

引用:
作者: kikiwarm
我也最爱用dwm,建议 man dwm 看看,貌似有很详细的说明
我认为Man仅仅是介绍.
很多热键的启动方式和处理方式都没有写出来,
推荐看看台湾的资料.好像有几篇好的.不过Google的排名很后那种.
---

Google. Dwm最多的是Vista系统的外壳资料.汗.

作者: SCys   发布时间: 2008-02-03

劳烦 SCys 把台湾资料的连结贴出来參考一下

作者: d00m3d   发布时间: 2008-02-03

好难找T_T
d00m3兄弟,
---
那个时候应该把页面记录下来的.

---
迟点我写个全面的一点的设置吧,我现在快要回家了.没有时间来看代码呢.
一年一度和家里人吃饭
---
对了,补充一点,没有办法让一个软件一开始就全部标签(tag)下显示.
在热键设置中第三个参数是用来作为定义使用什么方法的.

作者: SCys   发布时间: 2008-02-03

期待中,预祝兄弟鼠年行大运,新年进步!

作者: d00m3d   发布时间: 2008-02-03

同喜
大家都要快乐新年,新年快乐

作者: SCys   发布时间: 2008-02-04

引用:
作者: SCys
很少,而且郵件列表也是很稀少的.
記得上次查資料的時候發現不少台灣地區的人用DWM.
---
補丁為的是XFT字體,就是中文,打不打都可以顯示中文,
打了後設置中文方面比較易懂,
打了补丁是不是就可以用雅黑等字体了?

作者: jjxu   发布时间: 2008-03-03

引用:
作者: jjxu
打了补丁是不是就可以用雅黑等字体了?
YES.
---
近来忙都没有腾出时间来搞这个。
:(

作者: SCys   发布时间: 2008-03-03

一群强人,在我这个用fvwm+wmaker的人看来,依然那么个性。专程来赞一个

作者: mzli   发布时间: 2008-03-03

俺一直用KDE,
KDE的多媒体性能比较强劲,
虽然编译起来有点辛苦……

顺便过来看一下,


顶!!!

作者: 青铜镜   发布时间: 2008-03-03

引用:
作者: SCys
如果需要系统工具条.
这里介绍两个:
bzen
trayer
都是常用的.
----
bzen 比较强大,能够作为菜单使用,不过配置很复杂.
下次我也介绍下.
trayer 很简单,
是dzen吗?

作者: sssslang   发布时间: 2008-03-04

引用:
作者: sssslang
是dzen吗?
我錯:)
是dzen.

作者: SCys   发布时间: 2008-03-05

今天写了个脚本用于启动的:)
代码:
#!/bin/bash
proc_list="opera:OP gvim:gV mysql:mS smb:Sb postgres:pS httpd:Ap";

code="";
for index in $proc_list;
do
 proc=`expr match $index '\(.*\):'`;
 name=`expr match $index '.*:\(.*\)'`;
 num=`pgrep $proc | wc -l`;
 if [ $num != "0" ]; then
 code+="[$name";
 [[ $num > 1 ]] && code+=":$num";
 code+="]";
 fi
done;

code+=" "`date +"%m-%d %H:%M"`

echo $code;

sleep 20s
在.xinitrc或是你启动X的地方来添加
代码:
while true;
do
. ~/.status.bar
done | exec dwm

作者: SCys   发布时间: 2008-03-16

有没有在dwm下成功安装中文输入法呢?

作者: byjxy   发布时间: 2008-03-17

中文输入和dwm没关系的。
我的fcitx可以用。

作者: biinn   发布时间: 2008-03-17

真是个好东西,但是这个dwm下面中文输入好不好装的呢,有什么需要配置或注意的么

作者: byjxy   发布时间: 2008-03-19

真是个好东西,但是这个dwm下面中文输入好不好装的呢,scim还是fcitx?有什么需要配置或注意的么,我的LFS还没中文输入呢

作者: byjxy   发布时间: 2008-03-19

不好意思,刷新太慢了,帖子发重了,谢谢biinn的热心

作者: byjxy   发布时间: 2008-03-19

搜了很久,dwm 的网上资源实在,为了鼓励楼主多书好文,就让楼主受精吧 :)

作者: d00m3d   发布时间: 2008-03-20

我是在.xinitrc中加了一句
fcitx -d&,(在exec dwm之前)这样使用slim或者startx后,输入法就可用了

作者: Blahster   发布时间: 2008-03-20

在freebsd下,dwm与console切换时会有dwm退出的现象,烦!
有人知道是什么原因否?fvwm很正常,但我舍不得dwm T_T

作者: LaoLang_cool   发布时间: 2008-03-21

freebsd?
应该和X有关系多点。你X的版本是多少。去看看对应的X Bug表。

作者: SCys   发布时间: 2008-03-21

你的补丁做得不错,不过如果能够同时设置两种字体分别显示英文和中文就更好了。看了一下代码,原来的是用font.set来做到这个的。你的补丁ms只支持设置一种字体(我对xft库不熟悉:P)。希望你能够继续研究下去。
下面贴一个状态脚本:

代码:
#!/bin/bash 

AWKS_M='/^MemTotal/ {mtotal=$2}; 
/^MemFree/ {mfree=$2}; 
/^Active/ {mactive=$2}; 
/^Cached/ {mcached=$2}; 
/^SwapTotal/ {swtotal=$2}; 
/^SwapFree/ {swfree=$2}; 
/^temperatures/ {temp=$2}; 
/^speed/ {fspd=$2}; 
/^CPU/ {nu1=$2; nt1=$3; nu2=$4; nt2=$5; ou1=$6; ot1=$7; ou2=$8; ot2=$9;}; 
END { 
if (nt1 != "0") print "CPU1:",int((nu1-ou1)/(nt1-ot1)*100) "%"; 
if (nt2 != "0") print "CPU2:",int((nu2-ou2)/(nt2-ot2)*100) "%"; 
if (temp != "0") print temp "C",fspd "c"; 
 print "| Mem:",int(((mtotal-mfree)/mtotal)*100) "%","Swap:",int(((swtotal-swfree)/swtotal)*100) "%";}' 
 
AWKS_ST='/cpu0/ {total1=$2+$3+$4+$5; use1=$2+$3+$4}; 
/cpu1/ {total2=$2+$3+$4+$5;use2=$2+$3+$4}; 
END { 
print use1,total1; 
if (total2 && use2) print use2,total2; 
else print "0 0"; 
} 
' 
SLEEP=4 
DATEFMT="+%a %x %H:%M" 
 
INTERFACE=eth0 
 
MEMINFO=/proc/meminfo 
FAN= 
TERM= 
[ -f /proc/acpi/ibm/fan ] && FAN=/proc/acpi/ibm/fan 
[ -f /proc/acpi/ibm/thermal ] && TERM=/proc/acpi/ibm/thermal 
 
OCPU=`awk "$AWKS_ST" /proc/stat` 
RXB=`cat /sys/class/net/${INTERFACE}/statistics/rx_bytes` 
TXB=`cat /sys/class/net/${INTERFACE}/statistics/tx_bytes` 
while :; do 
 
 # get new rx/tx counts 
 RXBN=`cat /sys/class/net/${INTERFACE}/statistics/rx_bytes` 
 TXBN=`cat /sys/class/net/${INTERFACE}/statistics/tx_bytes` 
 NCPU=`awk "$AWKS_ST" /proc/stat` 
 
 # calculate the rates 
 # format the values to 4 digit fields 
 RXR=$(printf "%4d\n" $(echo "($RXBN - $RXB) / 1024/${SLEEP}" | bc)) 
 TXR=$(printf "%4d\n" $(echo "($TXBN - $TXB) / 1024/${SLEEP}" | bc)) 
 
 # print out the rates with some nice formatting 
 #MSG=`echo $NCPU $OCPU | awk "$AWKS_CPU"`" "`awk "$AWKS_M" $MEMINFO $FAN ${TERM}`" | ${INTERFACE}: D ${RXR}kB U ${TXR}kB" 
 MSG=`(echo -e "CPU: $NCPU ${OCPU}\n"; cat $MEMINFO $FAN ${TERM}) | awk "$AWKS_M"`" | ${INTERFACE}: D ${RXR}kB U ${TXR}kB" 
 echo $MSG "|" `date "$DATEFMT"` 
 
 # reset old rates 
 RXB=$RXBN; TXB=$TXBN; OCPU=$NCPU 
 
 sleep $SLEEP 
done
可保存为statusbar.sh在.xinitrc文件中
代码:
statusbar.sh | dwm
能够显示CPU使用率,CPU温度,风扇转速(需要修改/proc文件位置),内存使用率,网络下载速度

作者: takethat   发布时间: 2008-03-21

今天试了以前正常的arch livecd 0.72,内核是22的,也是不能上,100次中只有一次成功(夸张了点),看来不是设置问题。

作者: LaoLang_cool   发布时间: 2008-03-22

引用:
作者: takethat
你的补丁做得不错,不过如果能够同时设置两种字体分别显示英文和中文就更好了。看了一下代码,原来的是用font.set来做到这个的。你的补丁ms只支持设置一种字体(我对xft库不熟悉:P)。希望你能够继续研究下去。
...
你能够想像到两种字体配置都支持的混乱吗:)
---
我一开始也是打算这样,可是发现:
在显示一个字的时候,不知道使用哪一种字体配置为准。
不论xft,还是x font core都能够自我配置。
---
如果兄弟确实想要,我今天回去尝试下,不过要修改的地方比较多点。可能会超过2000行大关了:)

作者: SCys   发布时间: 2008-03-22

引用:
作者: SCys
你能够想像到两种字体配置都支持的混乱吗:)
---
我一开始也是打算这样,可是发现:
在显示一个字的时候,不知道使用哪一种字体配置为准。
不论xft,还是x font core都能够自我配置。
---
如果兄弟确实想要,我今天回去尝试下,不过要修改的地方比较多点。可能会超过2000行大关了:)
兄弟,我今天写了一下,发现无法按两种都有的情况下配置字体。
已那种为中心呢?
我都提供了方法来开关xft了。

作者: SCys   发布时间: 2008-03-23

SCys果然是有求必应的老实人,给位别给他太大压力哦。

作者: Xorcerer   发布时间: 2008-03-24

引用:

引用:
作者: SCys
你能够想像到两种字体配置都支持的混乱吗:)
---
我一开始也是打算这样,可是发现:
在显示一个字的时候,不知道使用哪一种字体配置为准。
不论xft,还是x font core都能够自我配置。
---
如果兄弟确实想要,我今天回去尝试下,不过要修改的地方比较多点。可能会超过2000行大关了:)
兄弟,我今天写了一下,发现无法按两种都有的情况下配置字体。
已那种为中心呢?
我都提供了方法来开关xft了。
兄弟,大概是我没有说清楚,其实我的想法就是字体可以这样配置: "snap:size=8,simsun:size=8",这样我可以用snap来显示英文,用simsun来显示中文。

我说的这个特性是gtk+/pango可以提供的,但是对于xft来说,它只能使用XftDrawStringUtf8来对非英文字符进行渲染。
其实utf8字符针对每个不同地区的字符集都是有编码区间的,可以将需要显示的字符分成英文和非英文两种,然后分别用不同的字体进行渲染。

但是这个功能的实现估计是要仿照XftDrawStringUtf8的代码进行重写了,这个工作可不轻松,估计代码量会大增。

在原来的dwm代码中,它是使用XmbDrawString来实现多字体的显示,它的渲染方式也是差不多的,把需要显示的字符分成不同的字符集,比如ISO8859-1,GB2312.1980-1,然后根据字符的类型,选用不同的字符集进行渲染。
我的想法是:在xft中,能够用第一个字体渲染的字符就用第一个进行显示,在第一个字体中没有的字符,用第二个字体进行渲染。
所以主要的问题是怎么判断能否用某个字体来渲染某个字符。
在这里有一个思路,就是utf8字符针对每个不同地区的字符集都是有编码区间,所以可以根据字符的特征位来判断应该用什么字体进行渲染。


这个问题可以研究一下,但是加到dwm中确实不合适,代码量比较大,渲染速度也会下降的。

作者: takethat   发布时间: 2008-03-24