在办公室工作的时候一般面对两个显示器,大部分时候左边用来看代码,右边用来写程序。双显示屏还是有助于提高工作效率的。有一点困扰我的是如果要切换屏幕一般得用鼠标,这对于
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 下写点东西快多了。