IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Linux下快捷切换屏幕

    Yukang (moorekang@gmail.com)发表于 2012-08-09 00:00:00
    love 0

    screen

    在办公室工作的时候一般面对两个显示器,大部分时候左边用来看代码,右边用来写程序。双显示屏还是有助于提高工作效率的。有一点困扰我的是如果要切换屏幕一般得用鼠标,这对于 Emacs党是有些不能忍受的,右手离开键盘总是得停顿一下的感觉。今天找到一个解决办法。

    最终找到的是这个号称Linux下键盘精灵的一个程序:xdotool,下载下来编译安装。这个东西可以模拟鼠标和键盘的行为:

    比如:

    xdotool search "Mozilla Firefox" windowactivate --sync key --clearmodifiers ctrl+l 
    (快速切换倒firefox,并focus在地址输入栏)
    
    xdotool getmouselocation --shell  (获取当前鼠标位置等信息)
    X=880
    Y=443
    SCREEN=0
    WINDOW=16777250
    
    xdotool getactivewindow windowmove 100 100    # Moves to 100,100
    xdotool getactivewindow windowmove x 100      # Moves to x,100
    xdotool getactivewindow windowmove 100 y      # Moves to 100,y
    xdotool getactivewindow windowmove 100 y      # Moves to 100,y
    xdotool mousemove --screen 0 100 100          # Moves to screen 0 pos at 100,100
    

    有了上面windowmove命令,屏幕的切换就好实现了。写个丑陋的python脚本来保存当前的位置,切换到另外一个屏幕,再次调用的时候返回到原来的位置, 保存为mouse.py。

    
    #!/usr/bin/python
    import os
    import sys
    import commands
    
    data_f = "/tmp/window_data"
    now_info = commands.getoutput("xdotool getmouselocation --shell").split('\n')
    x = (now_info[1])[2:]
    y = (now_info[2])[2:]
    screen = (now_info[3])[7:]
    window = (now_info[4])[7:]
    
    def do_store():
        data = open(data_f, "w+")
        content = screen+"\n"+x+"\n"+y+"\n"+window
        data.write(content)
        data.close()
        
    def do_update():
        if screen == "1":
            new_sc = "0"
        else:
            new_sc = "1"
        cmd = "xdotool mousemove --screen " + new_sc +  " 0 0"
        commands.getoutput(cmd)
    
    if os.path.exists(data_f):
        data = open(data_f, "r+")
        content = data.readlines()
        data.close()
        screen = content[0][0:-1]
        old_x = content[1][0:-1]
        old_y = content[2][0:-1]
        old_window = content[3]
        if old_window != window:
            cmd = "xdotool mousemove -w " + old_window + " " + old_x + " " + old_y
            commands.getoutput(cmd)
            do_store()
        else:
            do_store()
            do_update()
    else:
        do_store()
        do_update()
    

    最后,通过Emacs下绑定快捷键来调用这个脚本即可实现两个屏幕之间的切换,又可以远离鼠标了。哈哈。

    (defun switch-screen()
      (interactive)
      (start-process "mouse.py" nil "bash" "-c" 
                     "/home/yukang/apps/bin/mouse.py"))
    
    (global-set-key (kbd "C-x q") 'switch-screen)
    

    Jekyll下写点东西快多了。



沪ICP备19023445号-2号
友情链接