公司一直在用谷歌的G Suite作为主要的沟通和协作平台,所以这几年一直把Gmail作为主力的邮件和沟通平台在使用,对于Google给Gmail的很多Lab功能还是很感兴趣的,其中有一个叫做“Quote Selected Text”,当时也没注意这个功能是啥意思,enable了之后在使用过程中突然发现了这个,然后就觉得很好用,具体就是如果你想在你的回复邮件的正文里引用给你邮件的一些内容,你可以选择highlight这些内容之后,点击“Reply”,然后在回复的邮件的窗口里,这些内容自动被引用,非常的方便,一直用这个功能大概几年了,突然前段时间发现这样做的时候没有引用了,觉得非常的不方便,然后去搜索谷歌,才发现谷歌给把几个lab功能包括这个下线了!!!
这真是一个很郁闷的事情,为什么其他的lab功能我不用还在哪里,而这个总用的被拿掉,后来看了谷歌用户论坛的一些讨论才了解,原来是谷歌说功能被拿下有两个意思,一个是不好,就干脆不提供了,一个是好,准备放到Addon里给付费的企业用户使用,反正不管咋样,下线的就是没了,帖子里提了很多什么找谷歌投诉之类的,但貌似都跟之前的谷歌其他方面的投诉一样,基本没什么作用,那个帖子很长,往后翻着翻着,突然发现有个大哥说,其实用脚本也能实现,我就看了一下,原来是用AutoHotKey这个工具加上Gmail的Enable了keyboard shortcut这个功能之后组合实现,哇塞,居然真有能人,赶紧下载尝试了一下,脚本如下:
; gmail "quote" selected text
; hotkey for reply `
SetTitleMatchMode,RegEx ; "substring" will work too
#If WinActive("ahk_exe chrome.exe") ; hotkey only for chrome
`:: ; hotkey used "`"
Sendmode Event
SetKeyDelay, 200
Send ^c ; copy
Send r ; reply
Send {return} ; next line
Send ^+9 ; format -> quote
Send ^+v ; paste as plain text
Send {return} ; next line
Send {Down} ; coursor down
Send {Backspace} ; erase quote in wrong plac
Send {return}
Send {Up}
Send {return} ; next line
Send ^] ; add tab
return
#IfWinActive
但测试之后随即发现这个脚本只能引用选择的文字,回复窗口里其他的内容都没了,我们公司要求必须有签名,然后前面沟通的邮件也应该都在,所以这个不是我能接收的,必须要改啊,看来还要自己动手啊。
找出了AutoHotkey的手册,仔细研究了一下,看了看脚本,貌似理论上可以恢复成原来功能的样子,虽然不能100%吧,但80~90%貌似可以,那就开工吧,虽然已经有一年多没写脚本了,但还应该没啥大问题。。开始写,然后测试,期间各种艰辛,主要是这个脚本工具不熟悉,怎么debug也不知道,反正就这么稀里糊涂的改呗,什么脚本动作过快,浏览器的copy,paste太慢导致变量为空,什么企业版的可以配置keyboard shortcut导致部分快捷键被disable,什么翻页动作不对,什么clipboard内容paste出来的时候编码转换等等,不过万幸的是,居然这个脚本让偶给搞定了,哈哈。。赶紧去回了个帖子,告知有更好的脚本,取之于社区,回报于社区吗!
下面简略的说一下这个脚本的使用方法,具体的步骤等,基本都是抄那个论坛的,我翻译一下而已:
- 从这里下载和安装AutoHotKey,有很多版本,我用的1.1的
- 在文本编辑器里把下面的脚本贴入,然后保存成文件名:gmail-quotesel.ahk 的文件,文件名随意,你想用什么都行,但后缀不能变
- 你可以在理解的基础上继续修改这个脚本,当然你要确定你知道怎么改,哈哈
- 其中一个主要的是修改你自己的快捷键,因为有时候快捷键有冲突
- 在Windows的环境里双击gmail-quotesel.ahk装入内存,然后就可以进入Chrome打开Gmail使用了
- 如果你不想每次双击它,就把ahk文件放到你的startup 启动目录里,windows可以自动在启动的时候调用它。
最终代码是:
SetTitleMatchMode,RegEx
#If (WinActive("Inbox -") && WinActive("ahk_exe chrome.exe"))
;;;F11::
^q::
;==Get copied text into var
clipboard = ; Empty the clipboard
Send ^c ; copy
Clipwait
varSelectedText := ClipboardAll ;save copied content
clipboard = ; Empty the clipboard
;==Get to reply windows
Send r ; reply all
sleep 500
;==Get all text in reply windows
Send ^a ; select all
Send ^c ; copy
Clipwait
ClipSaved := ClipboardAll ;save original email content
;==Paste copied text and quote it
clipboard = ; Empty the clipboard
Clipboard := varSelectedText
Clipwait
Send ^a ; select all
Send ^v ; paste as plain text
Send ^a ; select all
Send ^+i ; format -> Italics
Send ^+9 ; format -> quote
;==Jump to end of email
Send {end} ; unselect
Send {return} ; next line
Send ^+\ ; clean format
;==paste reply windows text
clipboard := ClipSaved
Send ^v ; paste
sleep 500
clipboard = ; Empty the clipboard
varSelectedText :=
ClipSaved :=
Send {PgUp} ; go back to beginning of email content
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {PgUp}
Send {return} ; next line
Send {return} ; next line
Send {PgUp}
Send Dear
return
#if
脚本里的注释我觉得已经很清楚了,如果还不清楚,欢迎回帖来讨论。
If you have any questions or any thing need to clarify, please leave your comments here.
文章评论