开发一个在sublime下的markdown图片插件

安装

首先安装一些需要用的东西

  1. pywin32
  2. PIL
  3. spy++
  4. WinHotKey

安装pywin32

这个是用来操作windows
这个要根据自己的windows版本和python版本来安装, 比如我的windows 64, python 2.7
我就安装这个
pywin32-220.win-amd64-py2.7.exe

安装PIL

这个是用来操作剪切板
注意的就是: 如果是64的系统, 官网只有32的, 现在有不是官网的64版本, 我提供一个下载地址:
PIL-fork-1.1.7.win-amd64-py2.7.exe

spy++

这个是用来获取所有的windows窗口的信息, 比如说窗口的类名
这个可以下载绿色的版本, 用完后可以直接删除

WinHotKey

这个软件可以定义快捷键, 很实用

查询sublime的类名

打开spy++, 从所有的窗口中找到sublime窗口(前提是打开了sublime)

我的是这样的, 然后右键-属性-类-类名

类名就是PX_WINDOW_CLASS

获取到sublime窗口

根据上面的到的类名, 获取窗口句柄, 然后获取到窗口信息

1
2
pwin = win32gui.FindWindow('PX_WINDOW_CLASS', None)
sublime_win_name = win32gui.GetWindowText(pwin)

得到的信息是这样的:

1
F:\hexo\source\_posts\hexo\开发一个在sublime下的markdown图片插件.md ? (_posts) - Sublime Text (UNREGISTERED)

使用正则获取到md文件的父路径和md文件名

1
2
3
result = re.search('(^.+)\\\(.+\\.md).*', sublime_win_name)
md_path = result.group(1) + '\\'
md_name = result.group(2).replace('.md', '')

得到的结果是这样的:

1
2
F:\hexo\source\_posts\hexo\
开发一个在sublime下的markdown图片插件.md

从剪切板获取到并存储

  1. 使用PIL库很方便的把剪切板的图片转换成图片文件
  2. 生成的文件名使用当前的时间戳, 避免文件重复
  3. 图片存储路径为当前md文件同级目录,如我的:
    1
    2
    3
    4
    5
    6
    im = ImageGrab.grabclipboard()
    md_image_path = md_path + r'\\' + md_name
    if not os.path.exists(md_image_path):
    os.makedirs(md_image_path)
    image_file = '%d.png' % int(time())
    im.save(md_image_path + r'\\' + image_file, 'PNG')

将图片的相对路径复制到剪切板

图片存储之后, 自动生成一个类似![]()的代码, 然后放到剪切板, 我们只需要
CTR+V 复制就可以用了

1
setText('![](%s)' % (md_name + r'/' + image_file))

制作运行脚本

我们要执行这个py文件, 会弹出cmd窗口, 很难看, 怎么办?
我们做成一个vbs文件, 就可以不出现CMD窗口了, 我的是run.vbs, 内容如下:

1
2
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c C:\Python27\pythonw.exe run.py",vbhide

指定快捷键

使用WinHotkey,给你的vbs文件指定一个快捷键, 以后一个快捷键就搞定了

完整代码

我放在github上
完整代码