之前的文章中,介绍了我在GNU/Linux图形界面环境下所使用的工具集合。其基本目的是在保证占用最少系统资源的条件下,将电脑操作效率推向极致。这样的工具组合尤如瑞士军刀一般,简洁、高效、功能全面。与之对应,在Windows系统下,该如何实现类似的操作习惯呢?如GNU/Linux命令行工具与图形界面软件,类似于Sawfish窗口管理器的功能,以及多桌面。本文将介绍我自己的解决方案。

首先,为了能够享用GNU/Linux系统下命令行工具带来的种种便利与高效,我在Windows下安装了Cygwin。Cygwin是一个在windows平台上运行的类UNIX模拟环境,是Cygnus Solutions公司开发的自由软件。Cygwin 提供一个UNIX模拟DLL以及在其上层构建的多种可以在 Linux 系统中找到的软件包,在Windows XP SP3以上的版本提供良好的支持。在Cygwin老的版本中,终端程序基于的是Windows的cmd.exe,无法对其进行字体、颜色风格等的设置。目前Cygwin提供的mintty终端程序则可以进行很好的个性化定置,尤其是可以配置成Solarized色彩风格,具有一定的视力保护功能。这一配置可以在这里下载到。其以bash脚本的形式提供了明色调与暗色调两种风格。只要将风格设置脚本加入到~/.bashrc中即可:

source ~/%your directory%/sol.light
or
source ~/%your directory%/sol.dark

接下来,需要说明Cygwin的使用方式。除了GNU/Linux的命令行工具外,Cygwin提供了相当丰富的X视窗图形界面程序,如Emacs、Octave。而且,相对于Cygwin多年以前的老版本,这些图形界面程序的稳定性已经有了很大的提高,完全可以将它们作为日常必备的软件。而回想数年之前,自己需要分别独立安装专为Windows编译的Emacs、Octave、Gnuplot、Maxima、Texlive等工具,它们之间的相互协作总是存在一定的问题。而现在,所有这些软件可以在统一的Cygwin/X环境下运行,路径名、文件名也都符合GNU/Linux习惯,所以使用起来和在原生的GNU/Linux下是一样的。为了使用这些图形界面软件,我将Cygwin在Windows下的X视窗服务器XWin作为Windows系统的自动加载项,在登录后便会自动启动。启动项的创建可以有两种方式。一是运行startxwin命令:

C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; startxwin"

该方式的好处是在X server启动时,会自动运行~/.xinitrc中的内容。这样,就可以自动启动诸如mintty、Emacs这些常用的软件。不过,该方法目前无法成功启动X server。所以需要采用第二种方式,即运行xwin命令:

C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; xwin -multiwindow -clipboard"

该方法不去读~/.xinitrc文件,只能在~/.XWinrc中设置系统托盘图标的右键菜单项。因而,无法设置随X server一起启动的程序。

有了Cygwin带来的GNU/Linux下的诸多命令行工具和图形界面软件,那么如何像在真正的GNU/Linux环境下实现类似于Sawfish窗口管理器所拥有的功能呢?例如:

  • 用快捷键启动某个特定程序,但在启动前如果该程序已启动,则将其主窗口调到前台;
  • 用快捷键对窗口进行操作,如最大化、最小化、移动、置于所有窗口前端,等等。

幸好有Autohotkey这个软件,上述Sawfish所拥有的功能都可以用其来模拟。通过配置,我实现的功能有:

  • 交换大小写锁定键Caps Lock与左Control键,对于经常使用Emacs的人来说,这一点是很有必要的。
  • 启动常用程序的快捷键设置:
    • Win+1:Cygwin mintty终端程序
    • Win+2:Total Commander文件管理器
    • Win+3:Emacs
    • Win+4:Stardict电子词典
    • Win+5:Firefox浏览器
  • 窗口操作:
    • Win+m:窗口最大化
    • Win+r:窗口还原
    • Win+i:窗口最小化
    • Ctrl+Alt+j,l,i,k:左、右、上、下移动窗口
    • Win+left,right,up,down:将窗口向左、右、上、下移动直至碰到另一个窗口或者屏幕边界
    • Win+c:让窗口位于屏幕中央
    • Win+=:增加窗口宽度
    • Win+-:减小窗口宽度
    • Win+Shift+=:增加窗口高度
    • Win+Shift+-:减小窗口高度
    • Win+Shift+h:水平最大化窗口直至窗口碰到另一个窗口或者屏幕边界
    • Win+Shift+v:垂直最大化窗口直至窗口碰到另一个窗口或者屏幕边界
    • Win+t:让窗口位于其它窗口上方及恢复其原来层次
    • Win+k:关闭窗口
    • Win+?:显示当前窗口的ahk_class,这对于窗口的匹配有用

以上配置的脚本如下:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. ; swap caps lock and left control
#IfWinActive
+Capslock::Capslock
Capslock::Control SetTitleMatchMode 2 ; Cygwin mintty terminal
#1::
IfWinExist ahk_class mintty
{
WinActivate
}
else
{
Run C:\cygwin\bin\mintty.exe
WinWait ahk_class mintty
WinActivate
}
return ; Total commander
#2::
IfWinExist Total Commander 7.56a
{
WinActivate
}
else
{
Run C:\totalcmd\TOTALCMD.EXE
WinWait Total Commander 7.50a
WinActivate
}
return ; Emacs
#3::
IfWinExist Emacs@
{
WinActivate
}
return ; Stardict
#4::
IfWinExist 星际译王
{
WinActivate
}
else
{
Run, C:\Program Files (x86)\StarDict\stardict.exe, C:\Program Files (x86)\Common Files\GTK\2.0\bin
WinWait StarDict
WinActivate
}
return ; Firefox
#5::
IfWinExist ahk_class MozillaWindowClass
{
WinActivate
}
else
{
Run C:\Program Files (x86)\Mozilla Firefox\firefox.exe
WinWait ahk_class MozillaWindowClass
WinActivate
}
return ; maximize window
#m::
WinMaximize, A
Return ; minimize windows
#i::
WinMinimize, A
Return ; restore window
#r::
WinRestore, A
Return ; move window left
^!j::
WinGetPos, X, Y, , , A
WinMove, A, , X-10, Y
Return ; move window right
^!l::
WinGetPos, X, Y, , , A
WinMove, A, , X+10, Y
Return ; move window up
^!i::
WinGetPos, X, Y, , , A
WinMove, A, , X, Y-10
Return ; move window down
^!k::
WinGetPos, X, Y, , , A
WinMove, A, , X, Y+10
Return ; move window left most
#Left::
WinGetPos, X, Y, W, H, A
; WinMove, A, , 72, Y
WinMove, A, , 0, Y
Return ; move window right most
#Right::
WinGetPos, X, Y, W, H, A
WinMove, A, , A_ScreenWidth - W, Y
Return ; move window top most
#Up::
WinGetPos, X, Y, W, H, A
WinMove, A, , X, 0
Return ; move window down most
#Down::
WinGetPos, X, Y, W, H, A
WinMove, A, , X, A_ScreenHeight - H - 40
Return ; center window
#c::
WinGetPos, X, Y, W, H, A
; WinMove, A, , (A_ScreenWidth - 72)/2 - W/2 + 72, A_ScreenHeight/2 - H/2
WinMove, A, , A_ScreenWidth/2 - W/2, (A_ScreenHeight - 40)/2 - H/2 + 40
Return ; increase window width
#=::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W+10, H
Return ; decrease window width
#-::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W-10, H
Return ; increase window height
#+=::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W, H+10
Return ; decrease window height
#+-::
WinGetPos, X, Y, W, H, A
WinMove, A, , , , W, H-10
Return ; expand window horizontally
#+h::
WinGetPos, X, Y, W, H, A
; WinMove, A, , 72, Y, A_ScreenWidth - 72, H
WinMove, A, , 0, Y, A_ScreenWidth, H
Return ; expand window vertically
#+v::
WinGetPos, X, Y, W, H, A
; WinMove, A, , X, 0, W, A_ScreenHeight
WinMove, A, , X, 0, W, A_ScreenHeight - 40
Return ; toggle window on top
#t::
WinSet,AlwaysOnTop,Toggle,A
Return ; close window
#k::
WinClose, A
Return ; get window class
#?::
WinGetClass, win_cls, A
MsgBox, %win_cls%

最后,想要在Windows下实现多个桌面,则直接安装VirtualWin软件即可。

在Windows上创建同样的Linux操作环境的更多相关文章

  1. 怎么在自己的windows上创建虚拟机(linux centos7)

    怎么在自己的windows上创建虚拟机(linux centos7) 作为一个非科班出身自学的小白,踩过很多的坑,特此留下记录 宿主机:windows10系统 8G 64位操作系统 虚拟机:linux ...

  2. 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!

    今年微软Build 2016大会最让开发人员兴奋的消息之一,就是在Windows上可以原生运行Linux bash,对开发人员来说,这是一个喜闻乐见的消息. 1 安装 你必须安装开发者预览版本,才能使 ...

  3. 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件

    在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...

  4. windows上传文件到 linux的hdfs

    一.windows上传文件到 linux的hdfs 1.先在 centos 上开启 hdfs, 用 jps 可以看到下面信息, 说明完成开启 2.在win上配置 hadoop (https://www ...

  5. github上创建java项目简单操作

    github上创建java项目简单操作 参考L: github上创建java项目简单操作 - CSDN博客http://blog.csdn.net/qq_29392425/article/detail ...

  6. JMC监控(Windows上远程连接监控Linux服务器的JVM)

    Windows上远程连接监控Linux服务器的JVM:1.Linux服务器上配置:在Tomcat的tomcat-wms/bin/catalina.sh中添加CATALINA_OPTS="-X ...

  7. Windows上传文件到linux 使用winscp

    Windows上传文件到linux 使用winscp, winscp下载目录 https://sourceforge.net/projects/winscp/postdownload?source=d ...

  8. Linux和Windows上实现的异同-Linux的自适应ACK

    上周有同事问,延迟ACK到底对应用层会产生什么后果,我也不知道该如何作答,于是丢了一个链接: TCP之Delay ACK在Linux和Windows上实现的异同-Linux的自适应ACK: 是的,这是 ...

  9. windows上使用SecureCRT连接linux

    前言: SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件.这样操作的时候不必进入到linux桌面,可以更方便的 ...

随机推荐

  1. VS2013全攻略(安装,技巧,快捷键,插件)!

    工欲善其事,必先利其器.VS2013全攻略(安装,技巧,快捷键,插件)! 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥>承蒙大家喜爱和编辑推荐,在此 ...

  2. go语言 strconv.ParseInt 的例子

    golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大,看的我口水直流. func ParseInt(s string, base int, bitSize int ...

  3. Vnix项目正式启动

    历经3年的学习时间,我从Puppy Linux到各种常见的Linux发行版,从Gentoo Linux再到LFS,期间学会了LiveCD.中文化定制.服务器搭建.Google Key Search.C ...

  4. mac osx 10.9安装配置macvim

    如果你已经安装了macvim,升级后又不能用了,建议你可以看看http://kodira.de/2013/10/macvim-osx-10-9-mavericks/这篇文章,如果你还没有安装,下面由我 ...

  5. xhEditor入门基础

    一.下载最新版本xhEditor:http://xheditor.com/download  (官网无法下载,CSDN提供下载:http://download.csdn.net/detail/itmy ...

  6. Android开发过程中git、repo、adb、grep等指令的使用

    chown 是一条在Unix系统中用于设置文件所有者和文件关联组的命令. 需要超级用户的权限才能执行此命令.只有超级用户和属于组的文件所有者才能变更文件关联组.非特权用户(非超级用户)如需要设置关联组 ...

  7. [置顶] Android系统移植与调试之------->Amlogic方案编译步骤

    1. 拷贝Amlogic的SourceCode 切换目录到  /home/roco/work/amlogic/SourceCode/mx0831-0525下将mx0831-0525.tgz拷贝到  / ...

  8. 初识sql server 2000-数据库的连接

    这段时间主要进行学生信息管理系统的实现,所以与数据库打交道是难免的,我也是刚敲过5个数据库例子的小鸟,对数据库的理解还欠佳,不足之处大鸟飞过还请指点. 安装完sql server2000之后,首先要做 ...

  9. 最近学习了下BI(商业智能)做报表

    最近公司购买了Style intelligence 出的BI报表工具,接触新的东西不是很容易上手,这个东西是别的项目组用的,我们项目组由于进度比较快就让我先到他们项目组帮他们,为了使用这个东西,他们已 ...

  10. 弃用个人博客站重返CSDN缘由

    最近悄然关闭了自己的个人博客小站,重新返回了CSDN写博客.恰逢周末,闲暇尚有,敲击键盘记录一下. 其实最初关闭个人基于SAE的个人博客站是一周前开始的,想想自己的博客已经有两周年多的时间了,刚刚创建 ...