Awesome 入门安装、配置、使用(纯入门实用主义)

本文适合:
不会lua编程、=不求杂七杂八只求还能够比较有效率的工作、学习的实用主义者。

openSUSE里安装awesome我感觉比Deb系方便,因为已经有了vicious包和branding包。Deb系的awesome-extra也倒是包括了vicious。

安装:
openSUSE里安装awesome很方便。提供了好几个包。我推荐安装awesome-vicious(这个有显示电池等功能)和awesome-branding-openSUSE(这个把awesome的一些外观按照蜥蜴的绿色风格调整了一下)。 这两个包应该会依赖其他一些包,包括awesome本身和awesome-freedesktop(这个包含了让awesome通用其他桌面环境的菜单的功能),自然也包括lua。

装好这几个包,openSUSE里基本上可以打开awesome来操作了。很方便。

就本人而言,纯粹入门实用主义者。也不深究其配置,只做了一点最初级的傻瓜配置,绝非什么高手。高手都用的urxvt这样的玩意儿。我就是个实用主义者,花一点时间随便配置一下了事了,根本无需多少编程基础也能配置。

预备:复制/etc/xdg/awesome 到~/.config/awesome
然后编辑~/.config/awesome/rc.lua

配置1:设置终端、编辑器
因为我是KDE用户,也把KDE作为备用环境,就直接拉了一堆KDE程序进来用。很明显会降低一些速度的,毕竟awesome很小巧而KDE很庞大(但是还是比Windows/OSX快得多啊)

在文件里按照这个注释,可以搜索到配置默认程序的地方,我把终端设置为konsole,编辑器设置为vim。当然大牛么就是urxvt之流了。

-- This is used later as the default terminal and editor to run.
terminal = "konsole"
editor = "vim"
editor_cmd = terminal .. " -e " .. editor

配置2:赶走讨厌的浮动
awesome作为平铺管理器,默认布局竟然是浮动!!果断把浮动赶到后面去:

-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
    awful.layout.suit.tile,
    awful.layout.suit.tile.left,
    awful.layout.suit.tile.bottom,
    awful.layout.suit.tile.top,
    awful.layout.suit.fair,
    awful.layout.suit.fair.horizontal,
    awful.layout.suit.spiral,
    awful.layout.suit.spiral.dwindle,
    awful.layout.suit.floating,
    awful.layout.suit.max,
    awful.layout.suit.max.fullscreen,
    awful.layout.suit.magnifier
}

补充1:配置各个tag的内容:
就在配置布局的后面。默认是用for循环直接配置掉所有tag。我很懒,直接不改了。因为我一般就是左右分割布局,偶尔自己轮转到上下平铺布局,极其偶然的情况下才使用magnifier布局。

配置3:默认启动几个程序
这里我又懒了。openSUSE里fcitx无需单独配置。
在rc.lua末尾,加入:

function run_once(cmd)
  findme = cmd
  firstspace = cmd:find(" ")
  if firstspace then
    findme = cmd:sub(0, firstspace-1)
  end
  awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")")
end

run_once("nm-applet")
run_once("kmix")
run_once("synaptiks")

前面定义run_once函数,防止重新载入awesome时反复运行程序,代码拷贝自官方wiki。
然后三个run_once定义要启动的程序:
nm-applet:GNOME的networkmanager界面
kmix:KDE的混音器(我太懒不在乎这点速度,实际上可以通过后面绑定按键的做法把音量键绑定到alsa命令上操作的)
synaptiks:这货已经停止更新了。但是openSUSE里打过补丁还能用。我的触摸板在Debian正常,openSUSE里跳,所以启动一个这个来关闭触摸板。更好的办法是用syndaemon。

别的我就都没管了。基本够用了。

配置4:去掉vicious里的不用内容。
vicious里我要用什么?就是一个电池和CPU检测。别的纯粹浪费顶部空间,比如天气什么的,我是不想用。于是把他们屏蔽掉。

    -- Add widgets to the wibox - order matters
    mywibox[s].widgets = {
        {
            mylauncher,
            mytaglist[s],
            mypromptbox[s],
            layout = awful.widget.layout.horizontal.leftright
        },
        mylayoutbox[s],

        mytextclock,
        separator,
        spacer,

        kbdcfg.widget,
        spacer,
        separator,
        spacer,

        mycpuwidget,
        spacer,
        separator,
        spacer,

        mybattery,
        spacer,
        separator,
        spacer,

        -- mynetwidget,
        -- spacer,
        -- separator,
        -- spacer,

        -- wifi,
        -- spacer,
        -- separator,
        -- spacer,

        -- myweatherwidget,
        -- spacer,
        -- separator,
        -- spacer,
        s == 1 and mysystray or nil,
        mytasklist[s],
        layout = awful.widget.layout.horizontal.rightleft
    }
end                                

把netwidget、wifi、myweatherwidget给注释掉了。
然后再把这几个widget的定义也给注释掉

-- Initialize widget
-- mynetwidget = widget({ type = "textbox" })
-- Register widget
-- vicious.register(mynetwidget, vicious.widgets.net, "${eth0 down_kb} / ${eth0 up_kb}", 1)

-- wifi
-- provides wireless information for a requested interface
-- takes the network interface as an argument, i.e. "wlan0"
-- returns a table with string keys: {ssid}, {mode}, {chan}, {rate}, {link}, {linp} and {sign}
-- wifi = widget({ type = "textbox" })
-- vicious.register(wifi, vicious.widgets.wifi, "${link}", 121, "wlan0")



-- Weather widget
-- myweatherwidget = widget({ type = "textbox" })
-- weather_t = awful.tooltip({ objects = { myweatherwidget },})
-- vicious.register(myweatherwidget, vicious.widgets.weather,
--                 function (widget, args)
--                     weather_t:set_text("City: " .. args"{city}"] .."\nWind: " .. args"{windkmh}"] .. "km/h " .. args"{wind}"] .. "\nSky: " .. args"{sky}"] .. "\nHumidity: " .. args"{humid}"] .. "%")
--                     return args"{tempc}"] .. "C"
--                 end, 1800, "EDDN")
--                 --'1800': check every 30 minutes.
--                 --'EDDN': Nuernberg ICAO code.

配置5:增加几个键位
在globalkeys = awful.util.table.join里增加

注意:键的名称不同电脑可能不同,可以安装xev并且用之获得。

注意:在这里必须注意整个globalkeys的最后一个定义结束之后,不能有逗号",",前面的定义里有逗号

键位1:PrtSc键截图。我安装了scrot。停止更新好几年了,但是能用好用,我懒就直接OBS里下载了,并且安装不订阅源。

    awful.key({}, "Print", function()
                awful.util.spawn("scrot -e 'mv $f ~/图片/ 2>/dev/null'") end),

这个用scrot截图并且存到图片目录里。

键位2:切换xrandr模式
因为是双显,我用几个模式。很多地方可以找到复杂的显示器轮转代码,官网上就有,可以拷贝来用。我觉得很麻烦,轮转需要重启awesome,转来转去,其实我要用的只有三个方案:LVDS1单独使用,就是只使用笔记本的屏幕,这个是大家通用的。LVDS1+VGA1扩展,这个是自己桌子上用的,就是VGA1外显向右扩展,形成双桌面(awesome是真正的双显,就是两个显示器像两个桌面一样操作)。第三个,就是VGA1镜像LVDS1,也就是投影的时候用,外显/投影仪镜像当前桌面。
这个我早就发现很多普通DE用户都弄不清楚,包括windows、mac的轮转,搞得来很多教授焦头烂额。KDE的配置显然人性化得多了。但是最好的办法还是把自己常用的方案绑定好,直接用,轮转都不要轮转。

    awful.key({}, "XF86AudioPrev", function()
                awful.util.spawn("xrandr --output VGA1 --off") end),
    awful.key({}, "XF86AudioPlay", function()
                awful.util.spawn("xrandr --output VGA1 --right-of LVDS1 --auto") end),
    awful.key({}, "XF86AudioNext", function()
                awful.util.spawn("xrandr --output VGA1 --auto --same-as LVDS1") end),

我这个代码里把:播放上一首、播放、播放下一首这三个操控音乐的Fn按键给绑定到了xrandr命令上面。
只需要按这三个键就可以操控显示器。不需要轮转。轮转的话有一些内容,比如向上扩展啊、只用外显啊,我用不到的。

键位3:快速启动程序
awesome里面Mod4(就是win键)+r,可以启动程序,但是仍然需要打程序名字。
常用的程序可以直接绑定键位启动。
我看到awesome默认没有用Mod1(也就是Alt,这是考虑到有的人喜欢把Modkey从Mod4改到1),我启动程序就用Mod4+Mod1了吧。
以下配置:
win+Alt+f 启动firefox
win+Alt+r 终端启动ranger文件管理器
win+Alt+m 终端启动mutt
win+Alt+k 启动Kile(LaTeX的IDE)
win+Alt+y 启动firefox隐私窗口

    awful.key({ modkey, "Mod1" }, "f", function()
                awful.util.spawn("firefox") end),
    awful.key({ modkey, "Mod1" }, "r", function()
                awful.util.spawn("konsole -e ranger") end),
    awful.key({ modkey, "Mod1" }, "m", function()
                awful.util.spawn("konsole -e mutt") end),
        awful.key({ modkey, "Mod1" }, "k", function()
                awful.util.spawn("kile") end),
        awful.key({ modkey, "Mod1" }, "y", function()
                awful.util.spawn("firefox -private-window") end)

注意firefox隐私窗口是我最后一项,所以后面没有逗号。否则会载入失败。

补充2:指定窗口行为
在awful.rules.rules里面可以配置指定窗口的行为。比如默认把firefox送到某一个屏幕的某一个tag等等。我觉得我自己每次临时调整花不了两个时间,而且每次工作摆放窗口的位置也不尽相同,就没有配置。
想要配置这个的,用xprop获取窗口的class,就能配置了。

常用 awesome 默认键位:

Mod4 我全部用 win 替代了,因为在大部分电脑上 Mod4 就是有 windows 图标的按键。

启动程序

win+r:输入名称启动程序
附加: 自己配置的快速启动键位

窗口、屏幕、tag 轮转

win+j/k: 轮转窗口
win+ 左 / 右箭头:轮转 tag
win+ 数字:快速切换到指定 tag(很实用,我觉得比左右箭头方便很多)
win+Ctrl+j/k:论转屏幕

窗口的操作

win+Shift+j/k:轮转窗口的位置
win+Shift+c:关闭窗口
win+Shift+ 数字:将窗口传输到制定 tag
win+o:将窗口传输到下一个屏幕

布局的操作

win+ 空格:正序轮转布局
win+Shift+ 空格:逆序轮转布局
win+h/l:调整分割大小

记住这几个按键,基本上 awesome 在工作效率上就可以轻松超过各类桌面环境了。

我搭配使用的程序全部都是很入门级的、平易近人的程序,而不是大神用的程序。

很多程序并不是最高效率操作的程序:

文件管理器

终端里面用 Ranger 无疑,很好用,但是感觉不太好配置。我一般就是拿来快速移动目录,启动 PDF 用的。移动速度非常快。vim 键位。
图形的我目前用的 dolphin。主要是看中了其内嵌 konsole 并且联动终端的功能。感觉是各大 DE 中最强的图形 FM,比 GNOME 的,还有 Windows 的文件浏览器、OSX 的 Finder 要强很多。
当然还有一个考虑中的就是 Krusader,是 KDE 的双面板 FM,很多年前用过,感觉可能是全平台下除了 TC 之外最强的双面板,明显比 OSX 的 pathfinder 强很多。但是感觉太进阶了一点,对我来说不急着用。

浏览器

网络浏览器毫无疑问是 Firefox。比 Chrome 可能慢一点点,但是流畅、强大得多。和 awesome 一起用的毫无疑问又有 Vimperator 这一神器。结合起来我觉得是当之无愧的浏览神器。luakit、uzbl 都一段时间没有更新了。我感觉它们很难和 Vimperator 竞争。Chrome 的框架要死板很多,其 vimium 和 Vimperator 完全不在一个量级。
PDF 浏览我一般采用 Ranger 里快速切换目录,然后用 zathura 浏览的方法,还是比较方便的。firefox 的 PDF 渲染不行,尤其是 computer modern 的 LaTeX 生成物渲染得很难看。

其他

Kile 有 vim 模式,舒服,而且有内嵌 konsole,我可以在直接操控 mercurial 版本控制。

最后,新电脑才半年,i 键彻底磨平,还有几个键快要磨平。。
电脑用太多了。。

Awesome 快捷键是很不错的东西。可以借鉴到其它 DE 比如 KDE。微软搞的 Win 键在那么好的位置但是并没有多大的用处,KDE 自己的快捷键也很少用到 win 键,比如 krun 的那个 Alt + F2,F2 实在是太远了,我是笔记本还要多按一个 Fn 键,实在是太痛苦了,果断改成 win + r 了。这样打开程序用 krun 快速不少。

码一个,KDE 着实方便等用虚拟机试试看

哈哈。确实如此。
很多 DE 的键位都没有 awesome 舒服。

但是绝大部分 DE 用户可能并非快捷键用户。我认识的计算机用户中,大部分都是点鼠标型的。实际上快捷键值得记忆。记住几个,就可以极大提高生产力了。

恩。KDE 着实方便。

我一直认为 KDE 是全平台最先进最好的桌面环境。

不过现在 awesome 用着顺手,已经 1 个礼拜没进过 KDE 了。 但是我还在用 KDE,我用 dolphin,用 Kmix、用 konsole。

说到快捷键强烈建议大家如果有空把 vim 和 Emacs 都接触一下,其实并不难,只要一两个星期你就可以掌握两种编辑器的基本操作了。我觉得都学的好处比起这点时间来实在是不算什么。我总结至少有以下几种好处:

  1. 刚说的,快捷键,集中掌握最常见的两类快捷键。vim 和 Emacs 的键位都有很广泛的应用。vim 的快捷键很有用, Vimperator 就不说了,在 Okular 中也可以使用 hjkl 来导航非常方便。Emacs 的快捷键据说甚至比 vim 运用更广泛,在论坛发帖的时候你都可以通过 C-a 和 C-e 来移动到行首行末。最有用的就是 Linux 下的终端了。比如你要升级系统不小心把 sudo zypper update 错打成了 suod zypper update,像我之前就是傻乎乎的方向键移到前面,删除修改,不仅是慢而且搞得心情不好。其实完全可以通过 Alt-b 移动到 suod 的词尾然后一个 C-t 就直接修改好了,改好了直接回车就可以运行。当然一些基础的 linux 教程也会介绍一些终端下快捷键,但不如直接学习 Emacs 集中。(也许因为 Emacs 是 GNU 的第一个作品,他的很多操作习惯被带到了很多其他 GNU 软件中,有人甚至说学 Emacs 就是为了掌握常用快捷键)

  2. 通过掌握另外一种编辑器可以给你新的视野,从而提高对编辑的认识。所谓他山之玉可以功石。比如我,之前基本用 vim,学习了 Emacs 才发现之前 vim 的方法很多都是错误,并且觉得一些地方 vim 可以学习 Emacs 的方式定制和使用更加高效 (我想反过来也是的,只是因为我先学的 vim:))。比如「导航」,vim 的导航太方便了,Emacs 原生就支持 vim 模式,很多 Emacs 大牛也都是用 vim 的快捷键导航。但是我发现我之前使用 vim 的时候就因为 vim 的导航太过于方便而忽略了导航技巧。我甚至是使用 j 键来翻页的!相反,由于 Emacs 的导航定位能力不强,反而让你思考如何快速定位,让你学着整词移动,整页移动,和通过搜索定位。再比如,vim 和 Emacs 都有缓冲区的感念,但是在很多 vim 的初级教程中并不太重视,他们更多在意移动的技巧。而 Emacs 由于移动方面的弱势更多的会教大家通过缓冲区组织文件来提高效率,而这点往往为 vim 的初学者忽略(在著名的《vi 和 vim 编辑器》中作者专用一节来讲缓冲区)。又比如「模式」,Emacs 重模式,通过「模式」来定制。有了 vimscript 的 vim 通过对不同文件定制不同的行为来提高效率也是不错的想法。我觉得通过学习 Emacs 让我更好的理解 vim,能更了解他的优点和不足,以及让我一下子明白了为何以前看到的一些 vim 配置很糟糕(比如默认启动就切分多个窗口,用一个窗口显示目录)。

  3. 可以「真正地」解决编辑器归属问题:)虽然在这里把他列为最后一点,但对很多人来说这似乎才是最重要的,是「终身大事」。很多人会纠结 vim/Emacs,确实都是很了不起的编辑器,很多时候是看你干什么工作和适不适合你的习惯。但是你不自己试一下是不可能有自己准确的判断的。你没有使用经验看别人的推荐也好争论也好都只能是瞎猜。所以建议都尝试。有了经验,加上自己思考才能做出适合自己的决定。同样的,很多的 DE 也好 wm 也好,不要急着说 Gnome 不好而 KDE 好,最好都试一下。多尝试新事物生活才丰富,才避免武断。

最后给大家推荐一篇老文 《七个高效文本编辑习惯》](http://blog.jobbole.com/44891/) ,这篇 vim 作者写的著名文章让我最后决定还是使用 Emacs 了:)

对的。多尝试是好的。
不过从另一个角度说,用好一个比尝试很多没一个用好要好。

vim 和 emacs 我都用过,不过我感觉在编辑上还是 vim 比较强。 Emacs 的快捷键确实用得比 vim 广泛,因为 Emacs 没有模式,而 vim 有模式的切换。世界上大部分软件并没有模式的切换。

其实我还是 kate 用户。因为 kate 有 vim 模式。
visual mode 不兼容就算了。用 visual mode 的时候我会用 vim。 有时候用用 kate 也挺舒服的。 但是现在在 awesome 底下,还是终端开得多,vim 用得多,kate 用得少。

以我的渣经验,按照《七个高效的文本编辑习惯》的分类,似乎 vim 在编辑「单个文件」的时候有优势而 Emacs 更多优势在编辑「多个文件」,在和各种工具协调。除去自身就带有很多「乱七八糟」的工具外调用外部程序也是 Emacs 来的爽(比如 Emacs 有个 git-emacs,非常舒服,简直比直接用 git 还舒服)。真要深入学习还要考虑是选择 elisp 还是 vimscript。在某些语言比如 lisp,Emacs 就是标准的 IDE, Emacs 的 Ruby mode 更是 Ruby 的创始人亲自操刀。

但这都不是我放弃 vim 的原因。不用 vim 是因为中文输入法!如果是写代码,注释用英文 vim 当然爽了。但对于一个非码农来说其实绝大多数时间不是写代码!在 vim 中切换输入法是最头疼的事情了。本来就是分很多模式,现在还要多一种「中文模式」。再有 vimwiki 虽然小巧方便,但是有些功能还不够全面,这点比不上 org-mode。在这份非常「误导人的」 Emacs 著名用户 名单里有两位作家和一位政治家不是偶然的。如果是写文章快速移动就不再那么重要了。而所谓的「不要重复输入」也不重要了。可以说避开了 Emacs 的一些缺点。

所以在我的眼里 Emacs 不适合写代码而适合写小说。。。。。但是 Emacs 有一点我不喜欢。。。。Emacs 的宗教意味太浓了。。。。

同样的为何不使用 Awesome 而继续用 KDE 因为以高度依赖 KDE 软件。还因为有时候需要用一些绘图软件,而绘图软件在 Awesome 中打开给人感觉怪怪的。。。可以考虑花 500 块钱入手一个二手 IBM 装 Awesome 当打字机。。。。

强烈推荐文字工作者使用 Awesome,这确实比 KDE 舒服。或者你在 KDE 下开一个全屏 Emacs。。。。。更多的时候不是软件自己不好,而是在做一些事的时候不太适合。

我也是用 j 翻页的

看来我也要再次尝试尝试 Emacs

用 j 翻页真不是好习惯,快速定位是 vim 的大优势,但是不注意方法同样无法体现出高效。用 j 翻页屏幕快速滚动这段时间就是垃圾时间,这时候你不能编辑也不能看清屏幕上的内容,还无法准确的翻页。

Emacs 其实不难,通过交替使用翻页、词移动、句移动小拇指的压力也还可以不是很大。。。。有些笔记本把 Ctrl 键放在 Fn 键右边就另论了。。。。
除了开始用的两天老是左手按着 Ctrl 右手会情不自禁的按了 k 外学习过程基本算愉快。。。。像现在 org-mode 是自带的,平时写写文章基本不用配置。

我还是觉得 Emacs 适合写文档小说。。。。Emacs 的一些标记语言的模式比如 XML 和 LaTex 模式貌似非常强大(有一些特殊的快捷键可以避免多余的重复的输入)。。。。

哈哈。确实 vim 切换中文输入法不太舒服。

不过我还是喜欢 vim 单键操作。就是使用中文输入法的时候需要增加一个输入法的切换。
但是还是比 emacs 少按一颗键啊。。

我暂时保持淡定,专注学业,等以后再看看 Emacs。我上一次尝试 Emacs 是为了 org-mode,还是读大学之前。用了一个礼拜就被打回 vim 了:-)

vim+1

哈哈。我也是 vim 党。

好久没来了,挖个粉 :joy:

对于 Vim 和输入法配合的问题,我现在是用 emacs + evil-mode 和一个控制 fcitx 的 elisp 脚本,打中文与打英文基本没什么区别。
github.com/zhfuzzy/evil-fcitx.el

要是纯 Vim 也有一个类似的脚本 vim.org/scripts/script.php?script_id=3764
这个和 Emacs + evil-mode + evil-fcitx.el 的方案相比,输入法的状态在每个 buffer 是独立的。不过 Emacs 的版本可以在 normal-mode 下使用 f t / 时临时切换为中文输入法并在 f t / 命令结束后切换回英文输入法。

!](https://raw.githubusercontent.com/zhfuzzy/evil-fcitx.el/master/screencast/typical-usage.gif)

对于我来说,用 emacs 就可以相对自由的设置字体,用 helm flycheck 等等,还是更爽一些。

这个脚本正常情况下,在 x-window/terminal 下都可以使用。不过看到过有人说 x-window 下的 Emacs 在有些设置下会无法捕获输入法,好像是和 Locale 的设置有关,反正我现在用 en_US.UTF-8 也没有什么问题。。

Vim 和 Emacs 都学习了一段时间,总是感觉 Vim 有些别扭。

一直 vim