需求描述
想要写个工具可以方便修改hosts文件,没有找到现成的工具就打算扩展sublime去实现。
步骤:
1.扩展sublime,实现插件方法探索
2.定义插件快捷键
3.修改hosts文件业务实现
实现:
1.扩展sublime确实简单,在Tools -> New Plugin下点击即可生成demo式的插件。插件的名字修改命名为SaveHosts,按crtl+`调出执行面板后执行view.run_command('save_host')可查看插件的效果
2.在Preferences->Key bindings-User下点击,打开为用户配置快捷键的配置文件,文件路径为/home/userName/.config/sublime-text-3/Packages/User/Default (Linux).sublime-keymap。文件内容为
[
{"keys": ["ctrl+shift+h"], "command": "save_host"}
]
3.业务实现
取得当前文件路径,调用shell cp完成,有一点是需要用到sudo,不过由于目前只是自己使用,直接将密码写进命令
import sublime, sublime_plugin, os
class SaveHostCommand(sublime_plugin.TextCommand):
<span style="white-space:pre"> </span>def run(self, edit):
<span style="white-space:pre"> </span>file_name = self.view.file_name();
<span style="white-space:pre"> </span>cmd = 'echo zhong | sudo -S cp ' + file_name + ' /etc/hosts ';
<span style="white-space:pre"> </span>#cmd = 'echo zhong | sudo -S cp ' + file_name + ' ~/hosts ';
<span style="white-space:pre"> </span>os.system(cmd);
<span style="white-space:pre"> </span>sublime.message_dialog(file_name);
4. 成品(window版)
import sublime, sublime_plugin
class SwitchHostsCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.run_command('save');
file_name = self.view.file_name();
if(file_name.find('win7_hosts')<0):
return;
try:
srcIO = open(file_name, 'r');
destIO = open('C:\Windows\System32\drivers\etc\hosts', 'w');
destIO.write(srcIO.read());
sublime.message_dialog(file_name);
except Exception, e:
raise
finally:
srcIO.close();
destIO.close();
参考:
插件开发 API http://mux.alimama.com/posts/549#sublime.View
http://www.admin10000.com/document/2889.html
快捷键 http://www.cnblogs.com/cydonia/archive/2013/05/29/3105659.html
python 调用shell http://blog.youkuaiyun.com/my2010sam/article/details/18315785
sudo权限实现 http://www.cnblogs.com/huashiyiqike/p/3606165.html