
§1. General Purposes: Why I wrote this?
在 Ubuntu 系统开发最舒服的一点就是可以开心地使用 Terminal。这是个好东西,尤其当你熟悉大部分的常用命令之后,对日常的代码工作还有部署真是太有帮助了。熟练正确使用 Terminal 大概是一个合格的算法工程师应当具备的能力吧。但是很多时候,在使用 Terminal 的时候会遇到一些不方便的地方,比如你用 ctrl + alt + t
打开一个 Terminal,你发现它的起始位置在你的 home
目录下面,好麻烦是不是?你得疯狂 cd
到相应的位置,即使使用 tab
也是一个不小的工作量,尤其当你的目录结构非常深的时候。这时你会想,怎样能够快速地打开我已经通过 Files 进入的文件夹位置,也就是说,如何在当前目录下打开 Terminal?
§2. First Attempt: How could we get access to this functionality?
第一步先是实现这个功能。在网上很容易搜到这样的一些办法:
sudo apt-get install nautilus-open-terminal
nautilus -q
没错,这个操作在 Ubuntu 16.04 上是可行的。但是在Ubuntu 18.04 上你会发现第一个包你找不到了。事实上也不用着急,高级的版本总有高级的办法,只需要执行下面这个语句即可。
sudo apt-get install nautilus
nautilus -q
好了你就拥有了右键 Open In Terminal
按钮。
§3. Second Attempt: How to optimize this functionality?
用着用着你会发现,在某些情况下,这个方法还不是特别好。比如某些情况下你的文件夹里东西特别多,你根本找不到空的地方让你按右键。这时我们就需要一个快捷键方式让你在当前目录打开 Terminal。先安装几个包:
sudo apt-get install xdotool xclip
配置脚本:
sudo vim /usr/bin/openterminal.sh
编辑 .sh
脚本:
#!/bin/bash
#record the current ClipBoard
#clipboard_current=$(xclip -o)
pid_list=`xdotool search --class "nautilus"`
#loop for the right window
for i in $pid_list
do
name=`xdotool getwindowname "$i"`
name_lower=$(echo $name | tr [a-z] [A-Z])
if echo "$name_lower" | grep -qwi ".*desktop*";then
echo "desktop window"
elif echo "$name_lower" | grep -qwi ".*nautilus*";then
echo "nautilus window"
else
id=$i
fi
done
#get the current working directory
wait=`xdotool windowfocus $id`
sleep 0.2
wait=`xdotool key Ctrl+l`
sleep 0.2
wait=`xdotool key Ctrl+c`
sleep 0.1
path=$(xclip -o)
wait=`xdotool key Escape`
sleep 0.1
gnome-terminal --working-directory ${path}
添加执行权限:
sudo chmod +x /usr/bin/openterminal.sh
在键盘上设置快捷键:
好了至此你可以使用 Ctrl + G
来快捷打开 Terminal 了。
特别补充:
- 这里脚本之所以这么复杂是因为在 Ubuntu 18.04 中好像必须先聚焦到 Files 才能正确执行
Ctrl+l
操作。我尝试使用等待操作是因为你必须等待一会儿才能正确得到copy
的地址,保证反馈时间在 1s 内我都是可以接受的。如果各位读者对效率有要求,不妨试试去掉等待时间。还有上面的查找过程如果是焦点本身在 Files 的情况下,可能可以去掉。 - 根据评论区读者遇到的问题,可以在路径变量外面包裹引号,来解决路径中包含空格的问题。这里感谢 @fgc346 以及每一位热心的技术爱好者。
§4. Summary: What I have done?
我采用的系统是 Ubuntu 18.04,所以有些地方可能跟大家不一样,请大家按需参考。这里我推荐使用 terminator 作为 Terminal 环境,真是太方便太好看了。写到这里,以上。