<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>七星庐 &#187; 经验技巧</title>
	<atom:link href="http://qixinglu.com/category/technique/feed" rel="self" type="application/rss+xml" />
	<link>http://qixinglu.com</link>
	<description>潜心修炼，早日成仙。GNU/Linux、Ubuntu、Firefox、LiveCD、游戏MOD。</description>
	<lastBuildDate>Tue, 27 Jul 2010 11:38:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Nautilus解压到指定目录右键脚本</title>
		<link>http://qixinglu.com/archives/nautilus_extract_there_script?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=nautilus_extract_there_script</link>
		<comments>http://qixinglu.com/archives/nautilus_extract_there_script#comments</comments>
		<pubDate>Mon, 26 Jul 2010 07:24:42 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[nautilus]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=2706</guid>
		<description><![CDATA[我就是那种文件放不分类不舒服夫司机，早在Windows下使用winrar的时候，喜欢那个解压到默认的目录的功能，就是打开一个压缩包，点击解压，默认目录是早已指定的目录（专门用来放乱七八糟懒得分类的文件），解压后就打开该目录。 这个功能相当实用，但是7zip却没有这功能一度让我非常纠结（7zip你什么时候能改进一下界面啊？超越winrar不成问题啊），在linux下一直就是先解压到当前目录，再复制过去，到如今有点烦矣，打算写个nautilus右键脚本。 代码在这里，把“path”变量改成你想要的目录，扔到“~/.gnome2/nautilus-scripts”目录下就行了，作用解压后打开目录，超简单。 还以为很复杂，果然是事在人为。]]></description>
			<content:encoded><![CDATA[<p>我就是那种文件放不分类不舒服夫司机，早在Windows下使用winrar的时候，喜欢那个解压到默认的目录的功能，就是打开一个压缩包，点击解压，默认目录是早已指定的目录（专门用来放乱七八糟懒得分类的文件），解压后就打开该目录。</p>
<p>这个功能相当实用，但是7zip却没有这功能一度让我非常纠结（7zip你什么时候能改进一下界面啊？超越winrar不成问题啊），在linux下一直就是先解压到当前目录，再复制过去，到如今有点烦矣，打算写个nautilus右键脚本。</p>
<p>代码在<a href="https://code.google.com/p/muzuiget-toolbox/source/browse/trunk/shell_scripts/extract_there.sh">这里</a>，把“path”变量改成你想要的目录，扔到“~/.gnome2/nautilus-scripts”目录下就行了，作用解压后打开目录，超简单。</p>
<p>还以为很复杂，果然是事在人为。<span id="more-2706"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/nautilus_extract_there_script/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>删除歌词中的垃圾信息脚本</title>
		<link>http://qixinglu.com/archives/clear_lyric_file_script_clslrc?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=clear_lyric_file_script_clslrc</link>
		<comments>http://qixinglu.com/archives/clear_lyric_file_script_clslrc#comments</comments>
		<pubDate>Fri, 16 Jul 2010 14:24:55 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[歌词]]></category>
		<category><![CDATA[脚本]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=2685</guid>
		<description><![CDATA[网上的歌词（lrc）文件质量参差不齐，有的歌词制作者喜欢把自己的联系信息（比如QQ，邮箱，网址）写歌词条目件中，不但开头结尾都有，中间音乐过渡时也有，真的让人很烦。 而lrc格式本来就专门定义个“[by: XXX]”的标签来记录歌词制作者信息，这标签默认不会显示，也就不会骚扰到使用者了，写在歌词条目中不就是spam了？听歌时谁去有功夫关心你的联系信息。 所以我写个命令来删除掉这些信息，落个清净，其实不难，就一个sed足矣。 sed -i -r '/^.*(qq&#124;http&#124;e-?mail).*$/Id' *.lrc 写成脚本方便以后调用。 clslrc *.lrc sed加“-i”参数直接修改文件，请自行备份。 我觉得歌词显示程序应该提供这个功能，忽略掉包含指定关键词的行。]]></description>
			<content:encoded><![CDATA[<p>网上的歌词（lrc）文件质量参差不齐，有的歌词制作者喜欢把自己的联系信息（比如QQ，邮箱，网址）写歌词条目件中，不但开头结尾都有，中间音乐过渡时也有，真的让人很烦。</p>
<p>而lrc格式本来就专门定义个“[by: XXX]”的标签来记录歌词制作者信息，这标签默认不会显示，也就不会骚扰到使用者了，写在歌词条目中不就是spam了？听歌时谁去有功夫关心你的联系信息。</p>
<p>所以我写个命令来删除掉这些信息，落个清净，其实不难，就一个sed足矣。<span id="more-2685"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/^.*(qq|http|e-?mail).*$/Id'</span> <span style="color: #000000; font-weight: bold;">*</span>.lrc</pre></div></div>

<p>写成<a href="https://code.google.com/p/muzuiget-toolbox/source/browse/trunk/shell_scripts/clslrc.sh">脚本</a>方便以后调用。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">clslrc <span style="color: #000000; font-weight: bold;">*</span>.lrc</pre></div></div>

<p>sed加“-i”参数直接修改文件，请自行备份。</p>
<p>我觉得歌词显示程序应该提供这个功能，忽略掉包含指定关键词的行。</p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/clear_lyric_file_script_clslrc/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>小技巧3个：firefox、smplayer和exaile</title>
		<link>http://qixinglu.com/archives/tips_about_firefox_mplayer_exaile?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tips_about_firefox_mplayer_exaile</link>
		<comments>http://qixinglu.com/archives/tips_about_firefox_mplayer_exaile#comments</comments>
		<pubDate>Thu, 17 Jun 2010 18:56:39 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[exaile]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[smplayer]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=2597</guid>
		<description><![CDATA[近来积累若干小技巧，单发有凑数嫌疑，于是合并发。 Ubuntu的Firefox里Google的https搜索 就是Firefox的搜索栏那个Google搜索使用https，这些教程早满天飞了，就是修改配置文件夹下面那个“search.json”文件，找到Google的地址把http修改成https，保存重启Firefox搞定。 可是这方法在Ubuntu下是不奏效的，重启后又会跳回http的，原因是ubuntu对Firefox的相关文件重新打包。在“/usr/lib/firefox-addons/”有一坨，这就解释到为什么把Amazon等搜索引擎删掉后，升级Firefox又跑回来了。要修改的是 sudo vim /usr/lib/firefox-addons/searchplugins/en-US/google.xml 目录中“en-US”应该是对应你使用的语言变量的，估计使用中文包的话应该是“zh-CN”，把文件中的3个http改成https就行了。 smplayer把字幕也附加在截图里 更新：在首选项“字幕”设置里就有这个选项了，囧死了，请无视这段。 默认设置下smplayer的截图没有包含字幕，但我就是不相信mplayer不会提供这个选项，翻手册，对ass字幕在视频滤镜“-vf”里加上“ass,screenshot”就行了，比如 mplayer -sub subtitle_file.srt -ass -vf ass,screenshot video_file.avi 对于smplayer是在设置的”高级“->“MPlayer选项”的第一栏里加上“-vf ass,screenshot”就行了。 exaile的mp3标签乱码问题 linux下的mp3乱码是个常见又恼人的问题，网上很多教程都是叫怎么用命令转换编码，这真是麻烦事，只用linux就好，相信还有不少人在用xp，转换后linux下没问题了，但又轮到windows下乱码了。 况且在墙内有偶然下散曲的习惯，下载的mp3文件的标签真是有他娘混乱就有他娘的混乱（mp3的标签标准一开始没制定好造成今日混乱的局面），我甚至发现我有的mp3的title标签使用shift_jis编码，而artist却用gbk编码。 所以单靠转换是不行的，所以，直接让播放器识别这些编码才是王道，ubuntu的默认播放器是rhythmbox，由C写成的，改起来很麻烦，而且我对它的布局颇有不爽，因此出局，所以我用pygtk的exaile。 exaile的mp3编码问题早有人想开发组反馈过，不过人家说还要讨论（还讨论毛，完全没体会到天朝人民生活在各种编码的水深火热之中），因此只能做些Dirty Hack了。 其实那个bug页面和exaile-cn项目就有补丁解决了，才几行代码而已。然而我有些mp3实在过于诡异，还会有乱码，经研究是这个mp3做得不太标准，mutagen这个处理mp3标签的库没处理好，有部分字符没能处理，便宣告失败，出现乱码。因此我做了点改动，让它忽略掉无法处理的字符，就显示能处理的字符好了。 更新：新补丁代码对网络地址同样有效。 改过后补丁依然放到我的Google Code上，执行下列命令使用 wget http://bit.ly/beqzn0 sudo patch /usr/lib/exaile/xl/trax/track.py exaile_tag_encode.patch rm ~/.local/share/exaile/music.db 最后一行是删除exiale的缓存数据库，让它重新从mp3中读取标签，不然的话播放列表依然乱码。 希望mp3和各种非unicode编码等混帐东西早日从地球上消失。]]></description>
			<content:encoded><![CDATA[<p>近来积累若干小技巧，单发有凑数嫌疑，于是合并发。</p>
<h3>Ubuntu的Firefox里Google的https搜索</h3>
<p>就是Firefox的搜索栏那个Google搜索使用https，这些教程早满天飞了，就是修改配置文件夹下面那个“search.json”文件，找到Google的地址把http修改成https，保存重启Firefox搞定。</p>
<p>可是这方法在Ubuntu下是不奏效的，重启后又会跳回http的，原因是ubuntu对Firefox的相关文件重新打包。在“/usr/lib/firefox-addons/”有一坨，这就解释到为什么把Amazon等搜索引擎删掉后，升级Firefox又跑回来了。要修改的是</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>firefox-addons<span style="color: #000000; font-weight: bold;">/</span>searchplugins<span style="color: #000000; font-weight: bold;">/</span>en-US<span style="color: #000000; font-weight: bold;">/</span>google.xml</pre></div></div>

<p>目录中“en-US”应该是对应你使用的语言变量的，估计使用中文包的话应该是“zh-CN”，把文件中的3个http改成https就行了。<span id="more-2597"></span></p>
<h3>smplayer把字幕也附加在截图里</h3>
<p><strong>更新：</strong>在首选项“字幕”设置里就有这个选项了，囧死了，请无视这段。</p>
<p>默认设置下smplayer的截图没有包含字幕，但我就是不相信mplayer不会提供这个选项，翻手册，对ass字幕在视频滤镜“-vf”里加上“ass,screenshot”就行了，比如</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-sub</span> subtitle_file.srt <span style="color: #660033;">-ass</span> <span style="color: #660033;">-vf</span> ass,screenshot video_file.avi</pre></div></div>

<p>对于smplayer是在设置的”高级“->“MPlayer选项”的第一栏里加上“-vf ass,screenshot”就行了。</p>
<p><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F2992664%2Fblog%2F2010%2Ftips_about_firefox_mplayer_exaile.jpg&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" alt="smplayer截图带字幕" style="width: 640px"/></p>
<h3>exaile的mp3标签乱码问题</h3>
<p>linux下的mp3乱码是个常见又恼人的问题，网上很多教程都是叫怎么用命令转换编码，这真是麻烦事，只用linux就好，相信还有不少人在用xp，转换后linux下没问题了，但又轮到windows下乱码了。</p>
<p>况且在墙内有偶然下散曲的习惯，下载的mp3文件的标签真是有他娘混乱就有他娘的混乱（mp3的标签标准一开始没制定好造成今日混乱的局面），我甚至发现我有的mp3的title标签使用shift_jis编码，而artist却用gbk编码。</p>
<p>所以单靠转换是不行的，所以，直接让播放器识别这些编码才是王道，ubuntu的默认播放器是rhythmbox，由C写成的，改起来很麻烦，而且我对它的布局颇有不爽，因此出局，所以我用pygtk的exaile。</p>
<p>exaile的mp3编码问题早有人想开发组反馈过，不过人家说<a href="https://bugs.launchpad.net/exaile/+bug/135985">还要讨论</a>（还讨论毛，完全没体会到天朝人民生活在各种编码的水深火热之中），因此只能做些Dirty Hack了。</p>
<p>其实那个bug页面和<a href="http://code.google.com/p/exaile-cn/">exaile-cn</a>项目就有补丁解决了，才几行代码而已。然而我有些mp3实在过于诡异，还会有乱码，经研究是这个mp3做得不太标准，<a href="http://code.google.com/p/mutagen/">mutagen</a>这个处理mp3标签的库没处理好，有部分字符没能处理，便宣告失败，出现乱码。因此我做了点改动，让它忽略掉无法处理的字符，就显示能处理的字符好了。</p>
<p><strong>更新：</strong>新补丁代码对网络地址同样有效。</p>
<p>改过后补丁依然放到<a href="https://code.google.com/p/muzuiget-toolbox/source/browse/trunk/patch/exaile_tag_encode.patch">我的Google Code上</a>，执行下列命令使用</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>bit.ly<span style="color: #000000; font-weight: bold;">/</span>beqzn0
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">patch</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>exaile<span style="color: #000000; font-weight: bold;">/</span>xl<span style="color: #000000; font-weight: bold;">/</span>trax<span style="color: #000000; font-weight: bold;">/</span>track.py exaile_tag_encode.patch
<span style="color: #c20cb9; font-weight: bold;">rm</span> ~<span style="color: #000000; font-weight: bold;">/</span>.local<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>exaile<span style="color: #000000; font-weight: bold;">/</span>music.db</pre></div></div>

<p>最后一行是删除exiale的缓存数据库，让它重新从mp3中读取标签，不然的话播放列表依然乱码。</p>
<p>希望mp3和各种非unicode编码等混帐东西早日从地球上消失。</p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/tips_about_firefox_mplayer_exaile/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>用aria2c加速apt-get下载的脚本</title>
		<link>http://qixinglu.com/archives/use_aria2c_to_speed_up_apt-get_download_script?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=use_aria2c_to_speed_up_apt-get_download_script</link>
		<comments>http://qixinglu.com/archives/use_aria2c_to_speed_up_apt-get_download_script#comments</comments>
		<pubDate>Tue, 15 Jun 2010 08:55:48 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[aria2c]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=2560</guid>
		<description><![CDATA[我广州这里ADSL使用PPA源那一个叫做抓狂啊，下载速度只有1xxxB（是B不是KB），更新个chromium都慢得想死，而我又发现用aria2c下载的话，却基本有20K的速度，好运的话也能上50K。而且貌似网易源对单文件下载限速了，apt-get基本只有50K上下的速度，而用aria2c下载，基本上能榨干我的带宽，很爽。 于是写了个脚本，调用aria2c来下载apt-get的文件。原理很简单，使用“apt-get”的“&#8211;print-uris”参数来输出deb文件下载地址，然后传给aria2c下载，文件先放到临时文件夹，全部下载好后移动到apt的缓存文件夹，再次调用apt-get来安装，这样apt-get就不会再下载了。 本来就写了个比较简单的脚本，用了好一段时间，稳定耐操，如果放出来给别人用，就得要完善点，要加上诸如检查命令行参数等各种错误处理之类的代码，突然发觉写这种代码很无趣，本来区区几行代码就搞定一个问题，加上这些错误处理反而变得复杂，测试又麻烦和无聊，所以不写了，不完善就不完善，反正我就解决个小问题而已。 代码依然扔在我的Google Code上，我就扔到“/usr/local/bin&#8221;里 cd /usr/local/bin wget http://bit.ly/bDTVen 当然别忘记先装上aria2包，参数就是apt-get那三个，不用sudo运行，当下载好后会自己执行”sudo apt-get”的。嫌名字长的alias一下。 apt-aria2c install packages_name apt-aria2c upgrade apt-aria2c dist-upgrade 发现就是我两年前的一篇文章技巧脚本实现。]]></description>
			<content:encoded><![CDATA[<p>我广州这里ADSL使用PPA源那一个叫做抓狂啊，下载速度只有1xxxB（是B不是KB），更新个chromium都慢得想死，而我又发现用aria2c下载的话，却基本有20K的速度，好运的话也能上50K。而且貌似网易源对单文件下载限速了，apt-get基本只有50K上下的速度，而用aria2c下载，基本上能榨干我的带宽，很爽。</p>
<p>于是写了个脚本，调用aria2c来下载apt-get的文件。原理很简单，使用“apt-get”的“&#8211;print-uris”参数来输出deb文件下载地址，然后传给aria2c下载，文件先放到临时文件夹，全部下载好后移动到apt的缓存文件夹，再次调用apt-get来安装，这样apt-get就不会再下载了。<span id="more-2560"></span></p>
<p>本来就写了个比较简单的脚本，用了好一段时间，稳定耐操，如果放出来给别人用，就得要完善点，要加上诸如检查命令行参数等各种错误处理之类的代码，突然发觉写这种代码很无趣，本来区区几行代码就搞定一个问题，加上这些错误处理反而变得复杂，测试又麻烦和无聊，所以不写了，不完善就不完善，反正我就解决个小问题而已。</p>
<p>代码依然扔在我的<a href="http://code.google.com/p/muzuiget-toolbox/source/browse/trunk/shell_scripts/apt-aria2c.sh">Google Code</a>上，我就扔到“/usr/local/bin&#8221;里</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>bit.ly<span style="color: #000000; font-weight: bold;">/</span>bDTVen</pre></div></div>

<p>当然别忘记先装上aria2包，参数就是apt-get那三个，不用sudo运行，当下载好后会自己执行”sudo apt-get”的。嫌名字长的alias一下。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">apt-aria2c <span style="color: #c20cb9; font-weight: bold;">install</span> packages_name
apt-aria2c upgrade
apt-aria2c dist-upgrade</pre></div></div>

<p>发现就是我两年前的<a href="http://qixinglu.com/archives/accelerate_ubuntu_update_with_dta_and_wget">一篇文章</a>技巧脚本实现。</p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/use_aria2c_to_speed_up_apt-get_download_script/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Vim对比同一窗口内文本</title>
		<link>http://qixinglu.com/archives/vim_diff_current_window_text?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=vim_diff_current_window_text</link>
		<comments>http://qixinglu.com/archives/vim_diff_current_window_text#comments</comments>
		<pubDate>Sat, 24 Apr 2010 13:53:39 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=2384</guid>
		<description><![CDATA[标题起得真纠结，其实就是用vim对比两段文本，地球人都知道用vim来对比文本文件不同很简单，用“vimdiff”来打开就行了，我的问题是，从剪贴板分两次粘贴一段文本，直接对比一下，不想保存为文件再打开对比。 比如，smplayer的“音频”菜单，“滤镜”里有个选项是”音量正常化”，效果是让声音大声一点。我要找出这个选项对应的mplayer的参数是什么，一个方法是去啃mplayer那个超长的manpage。另一个方法是，打开smplayer的“选项”菜单，“查看日志”的&#8221;Mplayer&#8221;选项（快捷键Ctrl+M），这样就看到smplayer调用mplayer所用的命令行参数了。 /usr/bin/mplayer -noquiet -nofs -nomouseinput -sub-fuzziness 1 -identify -slave -vo xv -ao oss -nokeepaspect -framedrop -nodr -double -input nodefault-bindings:conf=/dev/null -stop-xscreensaver -wid 65011727 -monitorpixelaspect 1 -ass -embeddedfonts -ass-line-spacing 0 -ass-font-scale 1 -ass-force-style PlayResX=512,PlayResY=320,Name=Default,Fontname=WenQuanYi Micro Hei,Fontsize=20,PrimaryColour=&#38;H00ffffff,BackColour=&#38;H00000000,OutlineColour=&#38;H00000000,Bold=0,Italic=0,Alignment=2,BorderStyle=1,Outline=1,Shadow=0,MarginL=20,MarginR=20,MarginV=40 -fontconfig -font WenQuanYi Micro Hei &#8230; <a href="http://qixinglu.com/archives/vim_diff_current_window_text">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>标题起得真纠结，其实就是用vim对比两段文本，地球人都知道用vim来对比文本文件不同很简单，用“vimdiff”来打开就行了，我的问题是，从剪贴板分两次粘贴一段文本，直接对比一下，不想保存为文件再打开对比。</p>
<p><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F2992664%2Fblog%2F2010%2Fvim_diff_current_window_text.png&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" alt="smplayer音量正常化" /></p>
<p>比如，smplayer的“音频”菜单，“滤镜”里有个选项是”音量正常化”，效果是让声音大声一点。我要找出这个选项对应的mplayer的参数是什么，一个方法是去啃mplayer那个超长的manpage。另一个方法是，打开smplayer的“选项”菜单，“查看日志”的&#8221;Mplayer&#8221;选项（快捷键Ctrl+M），这样就看到smplayer调用mplayer所用的命令行参数了。<span id="more-2384"></span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-noquiet</span> <span style="color: #660033;">-nofs</span> <span style="color: #660033;">-nomouseinput</span> <span style="color: #660033;">-sub-fuzziness</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-identify</span> <span style="color: #660033;">-slave</span> <span style="color: #660033;">-vo</span> xv <span style="color: #660033;">-ao</span> oss <span style="color: #660033;">-nokeepaspect</span> <span style="color: #660033;">-framedrop</span> <span style="color: #660033;">-nodr</span> <span style="color: #660033;">-double</span> <span style="color: #660033;">-input</span> nodefault-bindings:<span style="color: #007800;">conf</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #660033;">-stop-xscreensaver</span> <span style="color: #660033;">-wid</span> <span style="color: #000000;">65011727</span> <span style="color: #660033;">-monitorpixelaspect</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-ass</span> <span style="color: #660033;">-embeddedfonts</span> <span style="color: #660033;">-ass-line-spacing</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-ass-font-scale</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-ass-force-style</span> <span style="color: #007800;">PlayResX</span>=<span style="color: #000000;">512</span>,<span style="color: #007800;">PlayResY</span>=<span style="color: #000000;">320</span>,<span style="color: #007800;">Name</span>=Default,<span style="color: #007800;">Fontname</span>=WenQuanYi Micro Hei,<span style="color: #007800;">Fontsize</span>=<span style="color: #000000;">20</span>,<span style="color: #007800;">PrimaryColour</span>=<span style="color: #000000; font-weight: bold;">&amp;</span>H00ffffff,<span style="color: #007800;">BackColour</span>=<span style="color: #000000; font-weight: bold;">&amp;</span>H00000000,<span style="color: #007800;">OutlineColour</span>=<span style="color: #000000; font-weight: bold;">&amp;</span>H00000000,<span style="color: #007800;">Bold</span>=<span style="color: #000000;">0</span>,<span style="color: #007800;">Italic</span>=<span style="color: #000000;">0</span>,<span style="color: #007800;">Alignment</span>=<span style="color: #000000;">2</span>,<span style="color: #007800;">BorderStyle</span>=<span style="color: #000000;">1</span>,<span style="color: #007800;">Outline</span>=<span style="color: #000000;">1</span>,<span style="color: #007800;">Shadow</span>=<span style="color: #000000;">0</span>,<span style="color: #007800;">MarginL</span>=<span style="color: #000000;">20</span>,<span style="color: #007800;">MarginR</span>=<span style="color: #000000;">20</span>,<span style="color: #007800;">MarginV</span>=<span style="color: #000000;">40</span> <span style="color: #660033;">-fontconfig</span> <span style="color: #660033;">-font</span> WenQuanYi Micro Hei <span style="color: #660033;">-subfont-autoscale</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-subfont-osd-scale</span> <span style="color: #000000;">20</span> <span style="color: #660033;">-subfont-text-scale</span> <span style="color: #000000;">20</span> <span style="color: #660033;">-subcp</span> CP936 <span style="color: #660033;">-vid</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-subpos</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-volume</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-nocache</span> <span style="color: #660033;">-ss</span> <span style="color: #000000;">744</span> <span style="color: #660033;">-osdlevel</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-vf-add</span> screenshot <span style="color: #660033;">-slices</span> <span style="color: #660033;">-channels</span> <span style="color: #000000;">2</span> <span style="color: #660033;">-af</span> <span style="color: #007800;">volnorm</span>=<span style="color: #000000;">1</span>,scaletempo,<span style="color: #007800;">equalizer</span>=<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span> <span style="color: #660033;">-softvol</span> <span style="color: #660033;">-softvol-max</span> <span style="color: #000000;">110</span> <span style="color: #660033;">-overlapsub</span> <span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/</span>Playground<span style="color: #000000; font-weight: bold;">/</span>Movie<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>电视<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>连续剧<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #000000; font-weight: bold;">/</span>生活大爆炸<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>生活大爆炸.第三季<span style="color: #7a0874; font-weight: bold;">&#93;</span>.The.Big.Bang.Theory.S03E19.The.Wheaton.Recurrence.720p.HDTV.x264-CTU.mkv</pre></div></div>

<p>再关闭这个”音量正常化”选项，再看一下命令行参数，对比两次的不同就知道这个选项所相关的参数了。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-noquiet</span> <span style="color: #660033;">-nofs</span> <span style="color: #660033;">-nomouseinput</span> <span style="color: #660033;">-sub-fuzziness</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-identify</span> <span style="color: #660033;">-slave</span> <span style="color: #660033;">-vo</span> xv <span style="color: #660033;">-ao</span> oss <span style="color: #660033;">-nokeepaspect</span> <span style="color: #660033;">-framedrop</span> <span style="color: #660033;">-nodr</span> <span style="color: #660033;">-double</span> <span style="color: #660033;">-input</span> nodefault-bindings:<span style="color: #007800;">conf</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #660033;">-stop-xscreensaver</span> <span style="color: #660033;">-wid</span> <span style="color: #000000;">65011727</span> <span style="color: #660033;">-monitorpixelaspect</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-ass</span> <span style="color: #660033;">-embeddedfonts</span> <span style="color: #660033;">-ass-line-spacing</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-ass-font-scale</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-ass-force-style</span> <span style="color: #007800;">PlayResX</span>=<span style="color: #000000;">512</span>,<span style="color: #007800;">PlayResY</span>=<span style="color: #000000;">320</span>,<span style="color: #007800;">Name</span>=Default,<span style="color: #007800;">Fontname</span>=WenQuanYi Micro Hei,<span style="color: #007800;">Fontsize</span>=<span style="color: #000000;">20</span>,<span style="color: #007800;">PrimaryColour</span>=<span style="color: #000000; font-weight: bold;">&amp;</span>H00ffffff,<span style="color: #007800;">BackColour</span>=<span style="color: #000000; font-weight: bold;">&amp;</span>H00000000,<span style="color: #007800;">OutlineColour</span>=<span style="color: #000000; font-weight: bold;">&amp;</span>H00000000,<span style="color: #007800;">Bold</span>=<span style="color: #000000;">0</span>,<span style="color: #007800;">Italic</span>=<span style="color: #000000;">0</span>,<span style="color: #007800;">Alignment</span>=<span style="color: #000000;">2</span>,<span style="color: #007800;">BorderStyle</span>=<span style="color: #000000;">1</span>,<span style="color: #007800;">Outline</span>=<span style="color: #000000;">1</span>,<span style="color: #007800;">Shadow</span>=<span style="color: #000000;">0</span>,<span style="color: #007800;">MarginL</span>=<span style="color: #000000;">20</span>,<span style="color: #007800;">MarginR</span>=<span style="color: #000000;">20</span>,<span style="color: #007800;">MarginV</span>=<span style="color: #000000;">40</span> <span style="color: #660033;">-fontconfig</span> <span style="color: #660033;">-font</span> WenQuanYi Micro Hei <span style="color: #660033;">-subfont-autoscale</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-subfont-osd-scale</span> <span style="color: #000000;">20</span> <span style="color: #660033;">-subfont-text-scale</span> <span style="color: #000000;">20</span> <span style="color: #660033;">-subcp</span> CP936 <span style="color: #660033;">-vid</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-subpos</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-volume</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-nocache</span> <span style="color: #660033;">-ss</span> <span style="color: #000000;">93</span> <span style="color: #660033;">-osdlevel</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-vf-add</span> screenshot <span style="color: #660033;">-slices</span> <span style="color: #660033;">-channels</span> <span style="color: #000000;">2</span> <span style="color: #660033;">-af</span> scaletempo,<span style="color: #007800;">equalizer</span>=<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span> <span style="color: #660033;">-softvol</span> <span style="color: #660033;">-softvol-max</span> <span style="color: #000000;">110</span> <span style="color: #660033;">-overlapsub</span> <span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/</span>Playground<span style="color: #000000; font-weight: bold;">/</span>Movie<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>电视<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>连续剧<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #000000; font-weight: bold;">/</span>生活大爆炸<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>生活大爆炸.第三季<span style="color: #7a0874; font-weight: bold;">&#93;</span>.The.Big.Bang.Theory.S03E19.The.Wheaton.Recurrence.720p.HDTV.x264-CTU.mkv</pre></div></div>

<p>从这么长的命令行看出不同来还真考点眼力，既然vim有对比功能，就让vim来搞定，保护眼睛。</p>
<p>打开vim，插入模式下按“Shift+Insert”粘贴第一段，再运行ex命令“:new”分割新建一个窗口来粘贴第二段。经过看手册，在两个窗口都运行“:diffthis”就能对比不同了，不过切换窗口再运行命令还是比较麻烦，再看手册，还发现个“:windo”命令，即对当前标签的所有窗口运行命令，vim还真想的真周到，粘贴好后直接运行</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>windo diffthis</pre></div></div>

<p>就行了，不过还有不爽，就是diff时取消了自动换行（即“:set nowrap”)，看时需要右翻页，要把它整回来，而ex命令可以用“|”来连接运行的，所以用</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>windo diffthis <span style="color: #000000;">|</span> set warp</pre></div></div>

<p>一步搞定。</p>
<p><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F2992664%2Fblog%2F2010%2Fvim_diff_current_window_text_1.png&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" alt="vim对比结果" /></p>
<p>可以看到，与”音量正常化”这个选项相关参数是“ -af volnorm=1”，运行</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-af</span> <span style="color: #007800;">volnorm</span>=<span style="color: #000000;">1</span> movie_file.avi</pre></div></div>

<p>来确认一下，确实是这个无误，编辑“~/.mplayer/config”，追加一行</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">af=volnorm=1</pre></div></div>

<p>即可让mplayer默认启用这个参数，不用每次都在命令行里输入。</p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/vim_diff_current_window_text/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>临时关掉bash恼人的文件名补全功能</title>
		<link>http://qixinglu.com/archives/temporarily_disable_bash_auto_completion?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=temporarily_disable_bash_auto_completion</link>
		<comments>http://qixinglu.com/archives/temporarily_disable_bash_auto_completion#comments</comments>
		<pubDate>Mon, 15 Mar 2010 15:30:55 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=2268</guid>
		<description><![CDATA[大家都知道bash里有个文件自动补全功能，按两下Tab键显示出候选补全文件名，不同程序会显示相应的文件类型（根据扩展名来判断），例如mplayer会显示媒体文件（如avi、mpg、mkv），而不会显示文本文件（如txt、cfg、ini），而vim则是反过来，这样的一直以来相当好用，不过还是有些时候还是挺烦人的。 有时我想用vim的diff功能来比较文件，比如两个java的class文件，虽然class文件是二进制文件，但在vim中可以转换成十六进制来显示，方便比较。打了vim命令后，按两下Tab并补全候选不会有class文件，所以你得手动输入。 mplayer的一个参数“-ass-styles”，这个参数用于使用外部ass字幕的样式，后面接一个ass文件的路径，用样也不会显示出来，因为bash的自动补全里并没有为这个参数定义过。 这两个例子只是最近用到，其实一直以来也遇过这种情况，很多时候我会把按两次Tab来当ls命令使用，看看目录下有什么文件，但这样会让某些文件没显示出来，让你误以为文件不存在，当前目录短文件名就直接输入算了，好几层的目录和长文件名就麻烦，对于这种情况，我的土方法是 把打了一半的命令行Ctrl+C掉，然后用ls看列一下，复制粘贴路径出来 或者先直接补全路径后，把光标移回开头输入命令名 这样太不够效率了，尤其是在调试时，命令参数记得比路径还要熟的，干脆关掉这个文件扩展名检测功能好了。 我记得bash的补全脚本在“/etc/bash_completion”，这个文件好长，稍微看了一下，发现有关联的代码，比如这段看来就是定义补全的扩展名 complete -f -X '!*.fig' xfig complete -f -X '!*.@(mid?(i)&#124;MID?(I)&#124;cmf&#124;CMF)' playmidi complete -f -X '!*.@(mid?(i)&#124;MID?(I)&#124;rmi&#124;RMI&#124;rcp&#124;RCP&#124;[gr]36&#124;[GR]36&#124;g18&#124;G18&#124;mod&#124;MOD&#124;xm&#124;XM&#124;it&#124;IT&#124;x3m&#124;X3M&#124;kar&#124;KAR)' timidity complete -f -X '*.@(o&#124;so&#124;so.!(conf)&#124;a&#124;rpm&#124;gif&#124;GIF&#124;jp?(e)g&#124;JP?(E)G&#124;mp3&#124;MP3&#124;mp?(e)g&#124;MPG&#124;avi&#124;AVI&#124;asf&#124;ASF&#124;ogg&#124;OGG&#124;class&#124;CLASS)' vi vim gvim rvim view rview rgvim rgview gview complete -f -X '*.@(o&#124;so&#124;so.!(conf)&#124;a&#124;rpm&#124;gif&#124;GIF&#124;jp?(e)g&#124;JP?(E)G&#124;mp3&#124;MP3&#124;mp?(e)g&#124;MPG&#124;avi&#124;AVI&#124;asf&#124;ASF&#124;ogg&#124;OGG&#124;class&#124;CLASS)' &#8230; <a href="http://qixinglu.com/archives/temporarily_disable_bash_auto_completion">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>大家都知道bash里有个文件自动补全功能，按两下Tab键显示出候选补全文件名，不同程序会显示相应的文件类型（根据扩展名来判断），例如mplayer会显示媒体文件（如avi、mpg、mkv），而不会显示文本文件（如txt、cfg、ini），而vim则是反过来，这样的一直以来相当好用，不过还是有些时候还是挺烦人的。</p>
<ul>
<li>有时我想用vim的diff功能来比较文件，比如两个java的class文件，虽然class文件是二进制文件，但在vim中可以转换成十六进制来显示，方便比较。打了vim命令后，按两下Tab并补全候选不会有class文件，所以你得手动输入。</li>
<li>mplayer的一个参数“-ass-styles”，这个参数用于使用外部ass字幕的样式，后面接一个ass文件的路径，用样也不会显示出来，因为bash的自动补全里并没有为这个参数定义过。</li>
</ul>
<p><span id="more-2268"></span></p>
<p>这两个例子只是最近用到，其实一直以来也遇过这种情况，很多时候我会把按两次Tab来当ls命令使用，看看目录下有什么文件，但这样会让某些文件没显示出来，让你误以为文件不存在，当前目录短文件名就直接输入算了，好几层的目录和长文件名就麻烦，对于这种情况，我的土方法是</p>
<ul>
<li>把打了一半的命令行Ctrl+C掉，然后用ls看列一下，复制粘贴路径出来</li>
<li>或者先直接补全路径后，把光标移回开头输入命令名</li>
</ul>
<p>这样太不够效率了，尤其是在调试时，命令参数记得比路径还要熟的，干脆关掉这个文件扩展名检测功能好了。</p>
<p>我记得bash的补全脚本在“/etc/bash_completion”，这个文件好长，稍微看了一下，发现有关联的代码，比如这段看来就是定义补全的扩展名</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-X</span> <span style="color: #ff0000;">'!*.fig'</span> xfig
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-X</span> <span style="color: #ff0000;">'!*.@(mid?(i)|MID?(I)|cmf|CMF)'</span> playmidi
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-X</span> <span style="color: #ff0000;">'!*.@(mid?(i)|MID?(I)|rmi|RMI|rcp|RCP|[gr]36|[GR]36|g18|G18|mod|MOD|xm|XM|it|IT|x3m|X3M|kar|KAR)'</span> timidity
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-X</span> <span style="color: #ff0000;">'*.@(o|so|so.!(conf)|a|rpm|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)'</span> <span style="color: #c20cb9; font-weight: bold;">vi</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> gvim rvim view rview rgvim rgview gview
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-X</span> <span style="color: #ff0000;">'*.@(o|so|so.!(conf)|a|rpm|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)'</span> emacs
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-X</span> <span style="color: #ff0000;">'!*.@(exe|EXE|com|COM|scr|SCR|exe.so)'</span> wine</pre></div></div>

<p>直接执行complete会输出当前定义过补全的命令，看样子也是在“/etc/bash_completion”里定义的</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot; mplayer\| vim&quot;</span>
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-o</span> filenames <span style="color: #660033;">-F</span> _mplayer <span style="color: #c20cb9; font-weight: bold;">mplayer</span>
<span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-o</span> filenames <span style="color: #660033;">-F</span> _filedir_xspec <span style="color: #c20cb9; font-weight: bold;">vim</span></pre></div></div>

<p>man了一下complete命令，没有手册，属于builtin命令，上网找，简介在<a href="http://www.gnu.org/software/bash/manual/bashref.html#Programmable-Completion-Builtins">这里</a>，用法在<a href="http://www.gnu.org/software/bash/manual/bashref.html#Programmable-Completion">这里</a>。</p>
<p>大概看了一下用法，就是“complete 补全行为选项 命令名”</p>
<ul>
<li>“-F” 执行指定函数名，候选结果保存在“COMPREPLY”数组变量里，补全功能更强大，可以实现命令参数补全，函数名在“/etc/bash_completion”定义的。</li>
<li>“-f” 补全文件名，后可跟“-X”参数。</li>
<li>“-X” 过滤表达式，符合表达式的文件名会被排除，即不会在补全候选显示出来，如果以感叹号开头，则表示反转，即符合表达式的文件名才显示。</li>
<li>“-o” 补全类型，“filenames”表示补全的是一个文件，跟“-f”参数使用才有效；其它值如“dirnames”表示补全目录。</li>
</ul>
<p>“-F” 执行的函数比“-f -X”更早执行，这样说起来有点混乱，我测试了一下，</p>
<ol>
<li>当你输入好“命令名 ”，按两下Tab键，开始补全。</li>
<li>bash执行了“-F”指定的函数，函数执行完后输出数组变量“COMPREPLY”的结果，这个变量值有可能为空。</li>
<li>继续根据“-f -X”里的表达式，符合表达式的文件名不则显示，同时结果再根据“-o”指定补全类型来决定是否显示。</li>
</ol>
<p>就以vim和mplayer举例</p>
<ul>
<li>对于vim来说，它最终被定义的行为这样</li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-o</span> filenames <span style="color: #660033;">-F</span> _filedir_xspec <span style="color: #660033;">-f</span> <span style="color: #660033;">-X</span> <span style="color: #ff0000;">'*.@(o|so|so.!(conf)|a|rpm|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)'</span> <span style="color: #c20cb9; font-weight: bold;">vim</span></pre></div></div>

<p>先执行”_filedir_xspec“函数，而这个函数执行后变量“COMPREPLY”为空，所以什么也没输出。接着补全文件名，可以看“class”字符串在表达式里面，所以不显示。如果删掉“class|”再运行，就可以匹配class文件了。</p>
<li>对于mplayer，它最终被定义的行为这样

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-o</span> filenames <span style="color: #660033;">-F</span> _mplayer <span style="color: #c20cb9; font-weight: bold;">mplayer</span></pre></div></div>

<p>先执行了”_mplayer“函数，这个函数在“/etc/bash_completion”代码非常多，mplayer的选项参数都打上去了，所以能补全mplayer的选项参数。到补全文件名时，没有指定过滤表达式，所以什么都没做。亦即它的补全功能全由“_mplayer”函数完成。
</ul>
<p>以上结果纯属连猜带蒙，若有错误，烦请指正，为了介绍一个小功能码了这么多字容易嘛我，所以</p>
<ul>
<li>临时禁用vim的补全功能就是</li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #c20cb9; font-weight: bold;">vim</span></pre></div></div>

<li>保留路径补全，但不要扩展名检测，不指定“-X”即可</li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-f</span> <span style="color: #c20cb9; font-weight: bold;">vim</span></pre></div></div>

<li>只补全文件</li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-o</span> filenames <span style="color: #660033;">-f</span> <span style="color: #c20cb9; font-weight: bold;">vim</span></pre></div></div>

<li>只补全目录</li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">complete</span> <span style="color: #660033;">-o</span> dirnames <span style="color: #c20cb9; font-weight: bold;">vim</span></pre></div></div>

</ul>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/temporarily_disable_bash_auto_completion/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vim也是个播放器</title>
		<link>http://qixinglu.com/archives/vim_is_ascii_player?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=vim_is_ascii_player</link>
		<comments>http://qixinglu.com/archives/vim_is_ascii_player#comments</comments>
		<pubDate>Fri, 08 Jan 2010 07:59:34 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[ascii-art]]></category>
		<category><![CDATA[aview]]></category>
		<category><![CDATA[mplayer]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=2075</guid>
		<description><![CDATA[昨天清理Google Reader未读，看到这篇文章，类似的效果我看过Word，Excel版，不过用记事本是第一次看到，有点意思，当然记事本没有宏功能，它的翻页功能肯定使用其它程序控制的。 连Windows那个简陋的记事本也能放动画了，作为“编辑器之神”的Vim不可能不行吧，于是我蛋疼起来就折腾一下，做了个Vim版，猛击这个链接来看视频。 MPlayer来播放 其实把电影当成字符来播放根本就不是什么新玩意，mplayer早就有这个功能 mplayer -vo aa -monitorpixelaspect 0.5 filename 因为aa输出驱动不能保持正确比例（mplayer的“-aspect”参数），改用“-monitorpixelaspect 0.5”后比例比较正常。它也有一些快捷键 1、2键为控制对比度 3、4键控制亮度 5键切换快速渲染 6键切换抖动方式 7键反转效果 a键则是切换回mplayer控制方式 把“aa”换成“caca”就是彩色输出。不过Ubuntu 9.10自带的mplayer没有把这个“aa”视频输出驱动编译进去，medibuntu的版本就有，搞错，应该是smlplayer作者编译的版本。用ubuntu-tweak添加个第三方源更新下mplayer就行，最版版本中名为“Mplayer”的源好像又被移除了，手动添加ppa源页面。 mplayer使用的是aa-project项目的aalib库(在Ubuntu名字改成“libaa”)，看看更新历史，1998年3月10日第一版，最后更新2001年4月25日，这东西是非常非常古老的，那个年代的hacker玩ascii-art真是想多变态就能玩多变态。这玩意是Linuxer装逼必备的，各位装逼犯们，有兴趣想知道怎么做继续看下去。 注意：下面的写的都是在Linux下完成的，只用到mplayer、aview和一些linux命令，windows用户需要自找代替工具，但原理是一样的。额外使用的工具、代码和最终结果文本可以猛击这里下载。 更新：留言中的jiazhoulvke同学写了个shell脚本，自动完成下文的一系列操作，使用简单，不想理解原理来折腾的可以下载来看看，里面有使用说明。 Vim来播放 mplayer的播放原理不难理解，mplayer解码视频，把每一帧传给libaa来生成ascii文本，再把ascii文本转换成图像传给X显示出来。现在不用mplayer转换图像来播放了，把libaa转换过后的ascii文本弄出来，用Vim来播放。 可是想通过mplayer把这些字符提取出来没那么简单，因为它没有提供直接输出文本的选项，所以得换个思路，如下 先用mplayer来把视频的每一帧保存为图像，mplayer支持png和jpg输出，经过测试，png不压缩体积巨大，压缩速度又慢，反正这里的视频本来就是黑白的，不用那么高要求，jpg就够了，体积也很理想。 然后再用其它工具来把图像转换ascii文本，这里找到一个，是LDCN介绍过aview，通过manpage，发现也是用libaa库，连选项都是跟mplayer的一样。 再把转换后的文本合并为一个。 用Vim来打开合并后文件，编写脚本实现自动翻页。 准备工作 先建立一个空的临时文件夹，把flv文件复制进去，源视频用flashgot从这个页面抓下来的，用smplayer看一下flv的信息 文件名：“bad_apple.flv” 大小：6m 分辨率：448&#215;336 帧速：15fps 文件不算大，还是黑白的，更方便转成ascii了。接下来的都是终端操作了，先建立几个工作目录。 mkdir jpg &#8230; <a href="http://qixinglu.com/archives/vim_is_ascii_player">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>昨天清理Google Reader未读，看到<a href="http://kisshi.com/2009/12/30/zi-fu-di/">这篇文章</a>，类似的效果我看过Word，Excel版，不过用记事本是第一次看到，有点意思，当然记事本没有宏功能，它的翻页功能肯定使用其它程序控制的。</p>
<p>连Windows那个简陋的记事本也能放动画了，作为“编辑器之神”的Vim不可能不行吧，于是我蛋疼起来就折腾一下，做了个Vim版，猛击<a href="http://v.youku.com/v_show/id_XMTQ0MjM4Nzg4.html">这个链接</a>来看视频。<span id="more-2075"></span></p>
<p><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F2992664%2Fblog%2Fvim_is_ascii_player.png&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" alt="" /></p>
<h3>MPlayer来播放</h3>
<p>其实把电影当成字符来播放根本就不是什么新玩意，mplayer早就有这个功能</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-vo</span> aa <span style="color: #660033;">-monitorpixelaspect</span> <span style="color: #000000;">0.5</span> filename</pre></div></div>

<p>因为aa输出驱动不能保持正确比例（mplayer的“-aspect”参数），改用“-monitorpixelaspect 0.5”后比例比较正常。它也有一些快捷键</p>
<ul>
<li>1、2键为控制对比度</li>
<li>3、4键控制亮度</li>
<li>5键切换快速渲染</li>
<li>6键切换抖动方式</li>
<li>7键反转效果</li>
<li>a键则是切换回mplayer控制方式</li>
</ul>
<p>把“aa”换成“caca”就是彩色输出。不过Ubuntu 9.10自带的mplayer没有把这个“aa”视频输出驱动编译进去，<del datetime="2010-02-26T13:21:16+00:00">medibuntu的版本就有</del>，搞错，应该是smlplayer作者编译的版本。<del datetime="2010-02-26T13:23:00+00:00">用ubuntu-tweak添加个第三方源更新下mplayer就行</del>，最版版本中名为“Mplayer”的源好像又被移除了，手动添加<a href="https://launchpad.net/~rvm/+archive/mplayer">ppa源页面</a>。</p>
<p><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F2992664%2Fblog%2Fvim_is_ascii_player_1.png&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" alt="" /></p>
<p>mplayer使用的是<a href="http://aa-project.sourceforge.net/">aa-project项目</a>的aalib库(在Ubuntu名字改成“libaa”)，看看更新历史，1998年3月10日第一版，最后更新2001年4月25日，这东西是非常非常古老的，那个年代的hacker玩ascii-art真是想多变态就能玩多变态。这玩意是Linuxer装逼必备的，各位装逼犯们，有兴趣想知道怎么做继续看下去。</p>
<p><strong>注意：</strong>下面的写的都是在Linux下完成的，只用到mplayer、aview和一些linux命令，windows用户需要自找代替工具，但原理是一样的。额外使用的工具、代码和最终结果文本可以<a href="http://muzuiget-toolbox.googlecode.com/files/vim_ascii_player.zip">猛击这里</a>下载。</p>
<p><strong>更新</strong>：留言中的<a href="http://qixinglu.com/archives/vim_is_ascii_player#comment-545">jiazhoulvke同学</a>写了个shell脚本，自动完成下文的一系列操作，使用简单，不想理解原理来折腾的可以下载来看看，里面有使用说明。</p>
<h3>Vim来播放</h3>
<p>mplayer的播放原理不难理解，mplayer解码视频，把每一帧传给libaa来生成ascii文本，再把ascii文本转换成图像传给X显示出来。现在不用mplayer转换图像来播放了，把libaa转换过后的ascii文本弄出来，用Vim来播放。</p>
<p>可是想通过mplayer把这些字符提取出来没那么简单，因为它没有提供直接输出文本的选项，所以得换个思路，如下</p>
<ol>
<li>先用mplayer来把视频的每一帧保存为图像，mplayer支持png和jpg输出，经过测试，png不压缩体积巨大，压缩速度又慢，反正这里的视频本来就是黑白的，不用那么高要求，jpg就够了，体积也很理想。</li>
<li>然后再用其它工具来把图像转换ascii文本，这里找到一个，是LDCN<a href="http://linuxdesktop.cn/2007/12/01/convert-image-to-ascii.html">介绍过aview</a>，通过manpage，发现也是用libaa库，连选项都是跟mplayer的一样。</li>
<li>再把转换后的文本合并为一个。</li>
<li>用Vim来打开合并后文件，编写脚本实现自动翻页。</li>
</ol>
<ol>
<li>
<h4>准备工作</h4>
</li>
<p>先建立一个空的临时文件夹，把flv文件复制进去，源视频用flashgot从<a href="http://v.youku.com/v_show/id_XMTMzNzQ5NzQ4.html">这个页面</a>抓下来的，用smplayer看一下flv的信息</p>
<ul>
<li>文件名：“bad_apple.flv”</li>
<li>大小：6m</li>
<li>分辨率：448&#215;336</li>
<li>帧速：15fps</li>
</ul>
<p>文件不算大，还是黑白的，更方便转成ascii了。接下来的都是终端操作了，先建立几个工作目录。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> jpg pgm txt</pre></div></div>

<li>
<h4>提取图像</h4>
</li>
<p>执行下面的命令，所有帧都会输出为jpg放到“jpg”目录下</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> jpg
<span style="color: #c20cb9; font-weight: bold;">mplayer</span> <span style="color: #660033;">-vo</span> jpeg ..<span style="color: #000000; font-weight: bold;">/</span>bad_apple.flv</pre></div></div>

<p>转换也很快，不过最好不要打开文件管理器来看啊哈，几千文件在里面。转换后3283个文件共20.6 MB。</p>
<li>
<h4>转换为pgm</h4>
</li>
<p>把图像转换为ascii文本的工具是aview，就在“aview”这个包里，在安装（这时还不需要安装）后用asciiview来查看图像。</p>
<p>为什么不是用“aview”呢？那是因为aview只支持pnm、pgm、pbm、ppm的格式，对于常见的png和jpg不支持，怎么办呢？转换一下咯，所以就有了asciiview这个脚本，它的作用就是先把图像转换成pgm格式再调用aview来显示。它用的是imagemagick的convert命令，但这里不用asciiview了，直接自己先转换好了。继续在“jpg”目录下执行</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">*</span>.jpg; <span style="color: #000000; font-weight: bold;">do</span> convert <span style="color: #660033;">-colorspace</span> gray <span style="color: #007800;">$i</span> ..<span style="color: #000000; font-weight: bold;">/</span>pgm<span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${i%.jpg}</span>.pgm; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>经过漫长的等待后，在“pgm”目录出现一堆pgm文件了，图像变成灰阶图形，体积增大至471.3MB。</p>
<li>
<h4>转换成ascii</h4>
</li>
<p>这时候就能把pgm转换成ascii文本了，郁闷的是aview不支持直接在命令行直接输出结果，我翻遍它的文档都找不到相应的选项，所以如果你想保存结果，得用aview打开，按“s”键，然后答几个问题，如保存高宽度啊，字体啊，文件名啊这些问题。娘啊，我可是有3千多个要转换啊，手动保存得何年何月啊？</p>
<p>下面两个方法选一个</p>
<p><strong>旧方法</strong>：修改aview源码重新编译<br />
这里省略千字的折腾过程，最后我是下载源码来修改aview来实现这个功能的，改过的aview命名为“aview-mod”。用aview-mod来把pgm转换为txt，执行下面命令</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>pgm
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">*</span>.pgm; <span style="color: #000000; font-weight: bold;">do</span> aview-mod <span style="color: #660033;">-driver</span> stdout <span style="color: #660033;">-contrast</span> <span style="color: #000000;">32</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'$d'</span> <span style="color: #000000; font-weight: bold;">&gt;</span> ..<span style="color: #000000; font-weight: bold;">/</span>txt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${i%.pgm}</span>.txt; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p><strong>新方法</strong>：脚本处理，推荐<br />
其实aview也支持命令行输出，只不过用法比较诡异，而不是直接输出单张结果，而是一个空白页和2张ascii页面，所以要配合再sed处理一下，截取其中一张</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>pgm
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">*</span>.pgm; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #7a0874; font-weight: bold;">echo</span> q <span style="color: #000000; font-weight: bold;">|</span> aview <span style="color: #660033;">-driver</span> stdout <span style="color: #660033;">-kbddriver</span> stdin <span style="color: #660033;">-contrast</span> <span style="color: #000000;">32</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'27,+24p'</span> <span style="color: #000000; font-weight: bold;">&gt;</span> ..<span style="color: #000000; font-weight: bold;">/</span>txt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${i%.pgm}</span>.txt; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>那堆txt齐刷刷地放到“txt”文件夹下，一共6.3 MB。</p>
<li>
<h4>合并文本</h4>
</li>
<p>无难度</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>txt
<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">*</span>.txt <span style="color: #000000; font-weight: bold;">&gt;</span> ..<span style="color: #000000; font-weight: bold;">/</span>bad_apple.txt</pre></div></div>

<li>
<h4>Vim翻页脚本</h4>
</li>
<p>需要写一个脚本来实现自动翻页，在Vim的丰富文档帮助下，不用研究多久就写出来了。每隔67毫秒向下移动25行，因为1000ms/15fps=67，一共有3283个txt。脚本名为“ascii_player.vim”。</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #804040;">function</span><span style="color: #000000;">!</span> AsciiPlayer<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    set nowrap
    set scrolloff=<span style="color: #000000; font-weight:bold;">0</span>
    set columns=<span style="color: #000000; font-weight:bold;">80</span>        
    set lines=<span style="color: #000000; font-weight:bold;">26</span>           
    normal gg
    <span style="color: #804040;">let</span> i = <span style="color: #000000; font-weight:bold;">1</span>
    <span style="color: #804040;">while</span> i <span style="color: #000000;">&lt;</span> <span style="color: #000000; font-weight:bold;">3283</span>
        <span style="color: #804040;">execute</span> <span style="color: #C5A22D;">&quot;normal 25<span style="">\&lt;</span>CR&gt;zt&quot;</span>
        redraw
        <span style="color: #804040;">let</span> i = i <span style="color: #000000;">+</span> <span style="color: #000000; font-weight:bold;">1</span>
        sleep 67m
    <span style="color: #804040;">endwhile</span>
endfunction
<span style="color: #668080;">command</span><span style="color: #000000;">!</span> AsciiPlayer <span style="color: #804040;">call</span> AsciiPlayer<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<li>
<h4>运行脚本</h4>
</li>
<p>用vim打开“bad_apple.txt”，执行两条ex命令</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>source ascii_player<span style="color: #000000;">.</span>vim
<span style="color: #000000;">:</span>AsciiPlayer</pre></div></div>

<p>就可以欣赏了，哇哈哈哈，一种无法抵挡装逼感油然而生。
</ol>
<h3>一些补充</h3>
<ul>
<li>当然你也可以用gvim来看，可惜刷新太慢，像放幻灯片。而在终端下vim翻页可是嗖嗖的，非常流畅。</li>
<li>其实也不一定用vim来看，也可以是其它程序，只要它能实现定时自动翻页，刷新够流畅就可以。</li>
<li>这里用的是终端默认大小，即80&#215;25，当然也可以更大，但你的硬盘也得够大，libaa也有不少参数可选。</li>
<li>这里用的例子视频默认是黑白的，如果是彩色的，有个东西叫<a href="http://zh.wikipedia.org/wiki/%E4%BA%8C%E5%80%BC%E5%8C%96">二值化</a>，GIMP有这个功能，把彩色图像换成失真度较低的黑白图像是个体力活。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/vim_is_ascii_player/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>用montage命令来创建拼贴图片</title>
		<link>http://qixinglu.com/archives/montage_create_composite_image?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=montage_create_composite_image</link>
		<comments>http://qixinglu.com/archives/montage_create_composite_image#comments</comments>
		<pubDate>Fri, 13 Nov 2009 10:29:37 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[montage]]></category>

		<guid isPermaLink="false">http://qixinglu.com/?p=1901</guid>
		<description><![CDATA[博客独立后才知道图片流量的可贵，本来外国有很多出色的又免费的图片托管服务，呃，这牢骚再发下去又得爆粗了。 入正题，很早之前我投了一篇Nin1LinuxCD的稿子到LinuxToy，现在回看觉得这篇文章写得挺失败，就是觉得图片太多，还是640&#215;480的图片，这堆图片浏览者通常只会瞄一下，所以不值得贴那么多还那么大还那么多还耗流量，布局也不好看。所以我觉得弄成拼贴画更好。不知道我说“拼贴画”准不准确，就是把多张图片缩略后成NxM排列，效果就是这样的 开始我就想到用convert命令，遵循黑客的RTFM的原则，我看了manpage，在“Image Sequence Operators”试了相关参数，都没发现所需要的效果，觉得manpage也写的太简单了，于是上ImageMagick的官网找更详细的FM，来，膜拜一下。发现应该用“montage”这个命令才对，原来就是“蒙太奇”的意思。最简单的用法就是 montage file1 file2 file3 ... output_file 最后一个参数为输出文件，我用 montage *.png ../1.png 就输出上面的图片了，排列大小都是自动计算的，当然也指定。 这效果命令是 montage -resize 50% -geometry -0-0 -tile 3x *.png ../2.jpg “-resize 50%“指把原图缩小50%，“-geometry -0-0”指各图之间距离为0，也就不留空隙。“-tile 3x”指按3列排列。再来个拼贴画效果 命令是 montage -resize 50% -geometry -30-30 -tile 3x +polaroid *.png &#8230; <a href="http://qixinglu.com/archives/montage_create_composite_image">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>博客独立后才知道图片流量的可贵，本来外国有很多出色的又免费的图片托管服务，呃，这牢骚再发下去又得爆粗了。</p>
<p>入正题，很早之前我投了一篇Nin1LinuxCD的稿子到LinuxToy，现在回看觉得这篇文章写得挺失败，就是觉得图片太多，还是640&#215;480的图片，这堆图片浏览者通常只会瞄一下，所以不值得贴那么多还那么大还那么多还耗流量，布局也不好看。所以我觉得弄成拼贴画更好。不知道我说“拼贴画”准不准确，就是把多张图片缩略后成NxM排列，效果就是这样的<span id="more-1901"></span></p>
<p><a href="http://www.flickr.com/photos/muzuiget/4099712417/" title="montage_create_composite_image by muzuiget, on Flickr"><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Ffarm3.static.flickr.com%2F2697%2F4099712417_0b0009b434_o.jpg&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" width="384" height="378" alt="montage_create_composite_image" /></a></p>
<p>开始我就想到用convert命令，遵循黑客的RTFM的原则，我看了manpage，在“Image Sequence Operators”试了相关参数，都没发现所需要的效果，觉得manpage也写的太简单了，于是上ImageMagick的官网找更详细的FM，来，<a href="http://www.imagemagick.org/Usage/">膜拜一下</a>。发现应该用“montage”这个命令才对，原来就是“蒙太奇”的意思。最简单的用法就是</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">montage file1 file2 file3 ... output_file</pre></div></div>

<p>最后一个参数为输出文件，我用</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">montage <span style="color: #000000; font-weight: bold;">*</span>.png ..<span style="color: #000000; font-weight: bold;">/</span>1.png</pre></div></div>

<p>就输出上面的图片了，排列大小都是自动计算的，当然也指定。</p>
<p><a href="http://www.flickr.com/photos/muzuiget/4099712419/" title="montage_create_composite_image_1 by muzuiget, on Flickr"><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Ffarm3.static.flickr.com%2F2553%2F4099712419_cfaf929e9c.jpg&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" width="500" height="375" alt="montage_create_composite_image_1" /></a></p>
<p>这效果命令是</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">montage <span style="color: #660033;">-resize</span> <span style="color: #000000;">50</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #660033;">-geometry</span> <span style="color: #660033;">-<span style="color: #000000;">0</span>-0</span> <span style="color: #660033;">-tile</span> 3x <span style="color: #000000; font-weight: bold;">*</span>.png ..<span style="color: #000000; font-weight: bold;">/</span>2.jpg</pre></div></div>

<p>“-resize 50%“指把原图缩小50%，“-geometry -0-0”指各图之间距离为0，也就不留空隙。“-tile 3x”指按3列排列。再来个拼贴画效果</p>
<p><a href="http://www.flickr.com/photos/muzuiget/4099712421/" title="montage_create_composite_image_2 by muzuiget, on Flickr"><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Ffarm3.static.flickr.com%2F2771%2F4099712421_8953c3e0d8.jpg&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" width="500" height="396" alt="montage_create_composite_image_2" /></a></p>
<p>命令是</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">montage <span style="color: #660033;">-resize</span> <span style="color: #000000;">50</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #660033;">-geometry</span> <span style="color: #660033;">-<span style="color: #000000;">30</span>-30</span> <span style="color: #660033;">-tile</span> 3x +polaroid <span style="color: #000000; font-weight: bold;">*</span>.png ..<span style="color: #000000; font-weight: bold;">/</span>3.jpg</pre></div></div>

<p>比上条命令就是多了个“+polaroid”，原来就是“<a href="http://zh.wikipedia.org/zh-cn/%E5%AE%9D%E4%B8%BD%E6%9D%A5">宝丽来</a>”的意思。</p>
<p>再给几个参考链接，montage的<a href="http://www.imagemagick.org/script/montage.php">简单介绍</a>，<a href="http://www.imagemagick.org/Usage/montage/">详细手册</a>，图文并茂，先看图再看命令就会用了。也有<a href="http://lifegoo.pluskid.org/wiki/ImageMagick.html">中文的简单说明</a>，选项基本和convert通用，不过选项如此之多，预览也比较麻烦，还是等高人写个GUI。</p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/montage_create_composite_image/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AUR安装时手动下载软件包</title>
		<link>http://qixinglu.com/archives/install_from_aur_manually_download_file?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=install_from_aur_manually_download_file</link>
		<comments>http://qixinglu.com/archives/install_from_aur_manually_download_file#comments</comments>
		<pubDate>Sat, 01 Aug 2009 03:03:08 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[AUR]]></category>

		<guid isPermaLink="false">http://muzuiget.blog.ubuntu.org.cn/?p=1678</guid>
		<description><![CDATA[Archlinux的aur库的确很强大，软件丰富，下载个PKGBUILD文件，执行makepkg就自动帮你检测依赖，并到自动下载软件的二进制/源代码包，配置编译参数，然后编译，看着屏幕刷刷闪动，一种历史的装逼自豪感油然而生。而又有yaourt这样的工具，安装软件真实超级方便。 问题是下载软件包时那个过程，小文件网速快时倒好，但大文件就麻烦了，比如之前我要装eclipse-jee。软件包有188M之巨，倒不想makepkg自己来单线程龟速下载吧。如果安装包下载地址刚好在墙外，需要代理，设置代理也很麻烦吧，所以更想用Firefox的DTA下载好。然后安装时直接调用就行，不要makepkg自己去下载。 获取软件的下载地址 打开PKGBUILD文件，就找到这么一行 source=(eclipse.sh eclipse.desktop http://download.eclipse.org/technology/epp/downloads/release/${_eclipse_name}/R/${pkgname}-${_eclipse_name}-linux-gtk${_arch}.tar.gz) 这个就是软件的下载地址啦，至于用“${}”括起来的字符串变量如“${pkgname}”会被替换成实际内容（包名，版本号等），所以要获实际下载地址得自己替换掉这些字符串，实际的下载地址如下 http://download.eclipse.org/technology/epp/downloads/release/galileo/R/eclipse-jee-galileo-linux-gtk.tar.gz 好吧，不想自己手动转换就在makepkg下载时，直接按CTRL+C中断，那样就获得下载的实际地址啦，复制出来用其它工具下载吧。 验证下载文件 手动下载后还要验证一下是否这个PKGBUILD文件要用的文件，版本号不对是不能安装的，用md5sum来计算出文件的校验码，然后复制在PKGBUILD文件查找一下，比如“eclipse-jee-galileo-linux-gtk.tar.gz”的md5为“fd7cd057aff2d5034208f57aa9cfd72d”，PKGBUILD文件有这个校验码，所以没下载错鸟。 如果你中断了makepkg的下载，会在PKGBUILD文件下有“下载文件名.part”的文件存在（还是看上图），删掉它，把你下载好的文件放到PKGBUILD文件同目录下，再次运行makepkg，这时makepkg发现文件下载好了，校验码也对了，所以开始编译构建pkg包了，你也可以开始装逼鸟。 使用yaourt时 不过我喜欢用yaourt来直接下载PKGBUILD，所以makepkg使用临时文件夹不是当前目录，而是跑到“/tmp/yaourt-tmp-你的用户名/aur-软件包名/软件包名”，如eclipse-jee就是“/tmp/yaourt-tmp-muzuiget/aur-eclipse-jee/eclipse-jee”，其实跳到这个目录很简单，当yaourt问你是否要编辑PKGBUILD文件时，打看终端一个新标签（快捷键CTRT+SHIFT+T），因为新标签的工作目录就是当前标签的工作目录。 然后就在这个目录下建一个你自己下载好的软件包软链接，当然移动复制也可以，但注意yaourt安装软件后会清空这个文件夹，所以要保留软件的安装包的话，建个软链接就好了。 这样大件的eclipse-jee就安装好了。]]></description>
			<content:encoded><![CDATA[<p>Archlinux的<a href="http://aur.archlinux.org/">aur</a>库的确很强大，软件丰富，下载个PKGBUILD文件，执行makepkg就自动帮你检测依赖，并到自动下载软件的二进制/源代码包，配置编译参数，然后编译，看着屏幕刷刷闪动，一种历史的装逼自豪感油然而生。而又有yaourt这样的工具，安装软件真实超级方便。</p>
<p>问题是下载软件包时那个过程，小文件网速快时倒好，但大文件就麻烦了，比如之前我要装<a href="http://aur.archlinux.org/packages.php?ID=18067">eclipse-jee</a>。软件包有188M之巨，倒不想makepkg自己来单线程龟速下载吧。如果安装包下载地址刚好在墙外，需要代理，设置代理也很麻烦吧，所以更想用Firefox的DTA下载好。然后安装时直接调用就行，不要makepkg自己去下载。<span id="more-1678"></span></p>
<ol>
<li>获取软件的下载地址</li>
<p>打开PKGBUILD文件，就找到这么一行</p>
<p><code>source=(eclipse.sh eclipse.desktop</p>
<p>http://download.eclipse.org/technology/epp/downloads/release/${_eclipse_name}/R/${pkgname}-${_eclipse_name}-linux-gtk${_arch}.tar.gz)</code></p>
<p>这个就是软件的下载地址啦，至于用“${}”括起来的字符串变量如“${pkgname}”会被替换成实际内容（包名，版本号等），所以要获实际下载地址得自己替换掉这些字符串，实际的下载地址如下</p>
<p><code>http://download.eclipse.org/technology/epp/downloads/release/galileo/R/eclipse-jee-galileo-linux-gtk.tar.gz</code></p>
<p>好吧，不想自己手动转换就在makepkg下载时，直接按CTRL+C中断，那样就获得下载的实际地址啦，复制出来用其它工具下载吧。</p>
<p><a href="http://www.flickr.com/photos/muzuiget/4070924973/" title="install_from_aur_manually_download_file by muzuiget, on Flickr"><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Ffarm3.static.flickr.com%2F2711%2F4070924973_79259dc0a3.jpg&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" width="500" height="245" alt="install_from_aur_manually_download_file" /></a></p>
<li>验证下载文件</li>
<p>手动下载后还要验证一下是否这个PKGBUILD文件要用的文件，版本号不对是不能安装的，用md5sum来计算出文件的校验码，然后复制在PKGBUILD文件查找一下，比如“eclipse-jee-galileo-linux-gtk.tar.gz”的md5为“fd7cd057aff2d5034208f57aa9cfd72d”，PKGBUILD文件有这个校验码，所以没下载错鸟。</p>
<p><a href="http://www.flickr.com/photos/muzuiget/4070924975/" title="install_from_aur_manually_download_file_1 by muzuiget, on Flickr"><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Ffarm3.static.flickr.com%2F2485%2F4070924975_fb8e7a9d57_o.jpg&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" width="374" height="169" alt="install_from_aur_manually_download_file_1" /></a></p>
<p>如果你中断了makepkg的下载，会在PKGBUILD文件下有“下载文件名.part”的文件存在（还是看上图），删掉它，把你下载好的文件放到PKGBUILD文件同目录下，再次运行makepkg，这时makepkg发现文件下载好了，校验码也对了，所以开始编译构建pkg包了，你也可以开始装逼鸟。</p>
<li>使用yaourt时</li>
<p>不过我喜欢用yaourt来直接下载PKGBUILD，所以makepkg使用临时文件夹不是当前目录，而是跑到“/tmp/yaourt-tmp-你的用户名/aur-软件包名/软件包名”，如eclipse-jee就是“/tmp/yaourt-tmp-muzuiget/aur-eclipse-jee/eclipse-jee”，其实跳到这个目录很简单，当yaourt问你是否要编辑PKGBUILD文件时，打看终端一个新标签（快捷键CTRT+SHIFT+T），因为新标签的工作目录就是当前标签的工作目录。</p>
<p><a href="http://www.flickr.com/photos/muzuiget/4070924979/" title="install_from_aur_manually_download_file_2 by muzuiget, on Flickr"><img src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Ffarm3.static.flickr.com%2F2620%2F4070924979_8f8ed2eed4.jpg&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*" width="500" height="209" alt="install_from_aur_manually_download_file_2" /></a></p>
<p>然后就在这个目录下建一个你自己下载好的软件包软链接，当然移动复制也可以，但注意yaourt安装软件后会清空这个文件夹，所以要保留软件的安装包的话，建个软链接就好了。
</ol>
<p>这样大件的eclipse-jee就安装好了。</p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/install_from_aur_manually_download_file/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用虚拟机实现校园网和ADSL双网合一</title>
		<link>http://qixinglu.com/archives/adsl_campusnet_double_net?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=adsl_campusnet_double_net</link>
		<comments>http://qixinglu.com/archives/adsl_campusnet_double_net#comments</comments>
		<pubDate>Mon, 20 Apr 2009 22:13:13 +0000</pubDate>
		<dc:creator>muzuiget</dc:creator>
				<category><![CDATA[经验技巧]]></category>
		<category><![CDATA[校园网]]></category>

		<guid isPermaLink="false">http://muzuiget.blog.ubuntu.org.cn/?p=1444</guid>
		<description><![CDATA[校园网和ADSL双网合一不是什么新鲜事，搜一下就有很多，但我这个方法是不同的，先说网上流传的方法吧 网上的方法通常都是要求双网卡或者双路由器，至于选择那条线路，需要修改系统路由表，也就是要指明去哪个ip段就经哪条线路，换个网络还要查查网站IP，改路由表，超级麻烦的，设置起来还要接触一大堆网络概念，甚是麻烦。 而我这个方法简单易懂（不然以我这水平也搞不出来），只需要单网卡单路由器或双网卡，这些都是宿舍标配了吧，而且经那条线路是根据程序选择的，也就是说你可以用迅雷下电影经校园网，玩游戏浏览网页经ADSL，无需要修改什么路由表，也不用接触一大堆网络概念，设置只需简单几步，还很方便切换，只是需要一个比较强劲运行得起虚拟机的电脑就行了，对现在的电脑来说运行虚拟机小意思啦。 单网卡单路由器的设置 首先是接线，因为只有一个网卡，校园网那条就需借用路由器了，找一条网线把路由器的Lan口和校园网接口连起来，看清楚了，是Lan，Wan口还是接ADSL的modem的。 然后虚拟机设置，假设我真机是Linux，要经ADSL，虚拟机XP，要经校园网（锐捷破客户端只能用XP），其实真机和虚拟机是什么系统都行，能拨号就行了。 把Virtualbox的网络连接方式选择桥接，英文是“Bridged Network”，别搞错，选择接路由器的网卡。 启动虚拟机，这时虚拟机也是ADSL的（因为路由器自动分配了ip），但用校园网拨号器拨号后，发现连通了，ip变成了校园网的ip的，这样就搞定了。 就是这么简单，真机的程序是经ADSL，虚拟机的程序经校园网，如果不把虚拟机当成虚拟出来的话，实际上不就是两台电脑分别连接ADSL和校园网吗？ 所以我说经那条线路是根据程序选择的，想用迅雷下电影经校园网，那就在虚拟机运行，玩游戏浏览网页经ADSL，那就经真机运行。底层的一堆复杂线路选择规则都由虚拟机搞定了，不需要担心去某个IP段要经那条，而是关心程序在不在虚拟机中。 双网卡设置 双网卡我没条件试了，虽然我的笔记本还有个无线网卡，但是路由器不是无线，不过理论上是这样的，方法也差不多。 一条接校园网接口，一条路由器。 把Virtualbox的网络连接方式选择桥接，不过是桥接到连校园网的那块网卡。 映射下载目录 校园网通常都是用来下大文件的吧，带宽大，满世界都是迅雷、BT、emlue抢资源，造成响应速度慢，不适合打游戏。但如果下好后的文件还要虚拟机上转到真机上来，几G的东西转起来是很麻烦的，还会另虚拟机的虚拟磁盘映像变大，碎片多，带来性能损失。 有一个方法能解决，就是在虚拟机中利用共享文件夹功能把下载文件夹挂载到真机的某个文件夹，那么下载时写入内容实际上就是直接写到真机的文件夹里面了。 选择Virtualbox的当前虚拟机的“设备”菜单，选择分配数据空间，选择一个文件夹为共享文件夹，并允许可写。 假设虚拟机是XP，那么选“网上邻居”，点“文件夹”弹出树目录，展开“网络邻居”-&#62;“整个网络”-&#62;“VirtuaBox Shared Folder”看到共享的文件夹，在共享的文件夹点右键，选择“映射网络驱动器”，把它映射为“Z”盘，多个文件夹可以依次类推。 这样在我的电脑里就多了个Z盘，把什么迅雷啊，BT，emule的下载目录都指向这个Z盘，这样就直接把下载内容存到真机里去了。 这样就能把ADSL和校园网的优点结合了，双网合一了，娃哈哈哈哈。绝对没搞错的哦，通过查外网地址真机确实是ADSL地址，而虚拟机是学校地址，写这篇文件的功夫都把个4G电影下载回来了，128K的ADSL小水管能做到吗？ 有时间再为这篇文章画个图 Linux单网卡多IP 那么Linux还能不能直接访问虚拟机的IP呢？答案是能，给网卡再添加一个ip就行了 sudo ifconfig eth0:1 123.456.789.123 其中123.456.789.123为跟虚拟机同子网的IP，通常把把最后一位改一下就行了。配合之前的《用虚拟机做代理终于在Linux下上到校园网了》，再在虚拟机里架设代理，令真机的程序也能通过代理方式来切换到校园网线路，还真他妈的方便啊。]]></description>
			<content:encoded><![CDATA[<p>校园网和ADSL双网合一不是什么新鲜事，<a href="http://www.google.com/search?q=ADSL+%E6%A0%A1%E5%9B%AD%E7%BD%91+%E5%8F%8C%E7%BD%91%E5%90%88%E4%B8%80">搜一下</a>就有很多，但我这个方法是不同的，先说网上流传的方法吧</p>
<ul>
<li>网上的方法通常都是要求双网卡或者双路由器，至于选择那条线路，需要修改系统路由表，也就是要指明去哪个ip段就经哪条线路，换个网络还要查查网站IP，改路由表，超级麻烦的，设置起来还要接触一大堆网络概念，甚是麻烦。</li>
<li>而我这个方法简单易懂（不然以我这水平也搞不出来），只需要单网卡单路由器或双网卡，这些都是宿舍标配了吧，而且经那条线路是根据程序选择的，也就是说你可以用迅雷下电影经校园网，玩游戏浏览网页经ADSL，无需要修改什么路由表，也不用接触一大堆网络概念，设置只需简单几步，还很方便切换，只是需要一个比较强劲运行得起虚拟机的电脑就行了，对现在的电脑来说运行虚拟机小意思啦。</li>
<p><span id="more-1444"></span></ul>
<h3>单网卡单路由器的设置</h3>
<ol>
<li> 首先是接线，因为只有一个网卡，校园网那条就需借用路由器了，找一条网线把路由器的Lan口和校园网接口连起来，看清楚了，是Lan，Wan口还是接ADSL的modem的。</li>
<li>然后虚拟机设置，假设我真机是Linux，要经ADSL，虚拟机XP，要经校园网（锐捷破客户端只能用XP），其实真机和虚拟机是什么系统都行，能拨号就行了。</li>
<li>把Virtualbox的网络连接方式选择桥接，英文是“Bridged Network”，别搞错，选择接路由器的网卡。</li>
<li>启动虚拟机，这时虚拟机也是ADSL的（因为路由器自动分配了ip），但用校园网拨号器拨号后，发现连通了，ip变成了校园网的ip的，这样就搞定了。</li>
</ol>
<p>就是这么简单，真机的程序是经ADSL，虚拟机的程序经校园网，如果不把虚拟机当成虚拟出来的话，实际上不就是两台电脑分别连接ADSL和校园网吗？</p>
<p>所以我说经那条线路是根据程序选择的，想用迅雷下电影经校园网，那就在虚拟机运行，玩游戏浏览网页经ADSL，那就经真机运行。底层的一堆复杂线路选择规则都由虚拟机搞定了，不需要担心去某个IP段要经那条，而是关心程序在不在虚拟机中。</p>
<h3>双网卡设置</h3>
<p>双网卡我没条件试了，虽然我的笔记本还有个无线网卡，但是路由器不是无线，不过理论上是这样的，方法也差不多。</p>
<ol>
<li>一条接校园网接口，一条路由器。</li>
<li>把Virtualbox的网络连接方式选择桥接，不过是桥接到连校园网的那块网卡。</li>
</ol>
<h3>映射下载目录</h3>
<p>校园网通常都是用来下大文件的吧，带宽大，满世界都是迅雷、BT、emlue抢资源，造成响应速度慢，不适合打游戏。但如果下好后的文件还要虚拟机上转到真机上来，几G的东西转起来是很麻烦的，还会另虚拟机的虚拟磁盘映像变大，碎片多，带来性能损失。</p>
<p>有一个方法能解决，就是在虚拟机中利用共享文件夹功能把下载文件夹挂载到真机的某个文件夹，那么下载时写入内容实际上就是直接写到真机的文件夹里面了。</p>
<ol>
<li> 选择Virtualbox的当前虚拟机的“设备”菜单，选择分配数据空间，选择一个文件夹为共享文件夹，并允许可写。</li>
<li>假设虚拟机是XP，那么选“网上邻居”，点“文件夹”弹出树目录，展开“网络邻居”-&gt;“整个网络”-&gt;“VirtuaBox Shared Folder”看到共享的文件夹，在共享的文件夹点右键，选择“映射网络驱动器”，把它映射为“Z”盘，多个文件夹可以依次类推。</li>
<li>这样在我的电脑里就多了个Z盘，把什么迅雷啊，BT，emule的下载目录都指向这个Z盘，这样就直接把下载内容存到真机里去了。</li>
</ol>
<p>这样就能把ADSL和校园网的优点结合了，双网合一了，娃哈哈哈哈。绝对没搞错的哦，通过查外网地址真机确实是ADSL地址，而虚拟机是学校地址，写这篇文件的功夫都把个4G电影下载回来了，128K的ADSL小水管能做到吗？</p>
<p>有时间再为这篇文章画个图</p>
<h3>Linux单网卡多IP</h3>
<p>那么Linux还能不能直接访问虚拟机的IP呢？答案是能，给网卡再添加一个ip就行了</p>
<p><code>sudo ifconfig eth0:1 123.456.789.123</code></p>
<p>其中123.456.789.123为跟虚拟机同子网的IP，通常把把最后一位改一下就行了。配合之前的<a href="http://qixinglu.com/archives/vm-proxy-linux-use-campusnet">《用虚拟机做代理终于在Linux下上到校园网了》</a>，再在虚拟机里架设代理，令真机的程序也能通过代理方式来切换到校园网线路，还真他妈的方便啊。</p>
]]></content:encoded>
			<wfw:commentRss>http://qixinglu.com/archives/adsl_campusnet_double_net/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
