在 notepad++ 中,我想要一种使用 AHK 的方法,使用 pandoc 快速将其从 txt 导出为 pdf。
我已经完成了一半的代码。它不起作用。我想要做的是
- 转到编辑>复制到剪贴板>将当前文件路径复制到剪贴板
- 打开命令行
写入“pandoc -o ^v Del3 pdf space ^v enter”
^!e:: Send, {Alt Down}e{Alt Up} Sleep, 100 Send, {Down 8} Sleep, 300 Send, {Enter 2} Run, cmd.exe Sleep, 500 Send, pandoc -o Send, {Ctrl Down}v{Ctrl Up}
我做错了什么?正确的脚本是什么样的?
编辑:
按下 8 并输入 2 将我的 TXT 文件路径放入剪贴板。我想在命令行中写入的内容不是
pandoc -o“%剪贴板%”
反而
pandoc -o 路径到文件.pdf 路径到文件.txt
在哪里路径到文件.txt就是我剪贴板中的内容。(所以我需要输入 DEL3 PDF SPACE PASTE ENTER)。我该如何实现呢?
答案1
尝试直接从运行命令运行 Pandoc,并将剪贴板作为参数传递
Run, pandoc -o "%Clipboard%"
关于您的编辑:
; Remove file-ending
fileNamePath := RegExReplace(Clipboard, "\..*$", "")
; Run command
Run, pandoc -o "%fileNamePath%.pdf" "%Clipboard%"
答案2
关于代码的第一部分,您还可以受益于使用 WinMenuSelectItem 来获得更快的速度/可靠性来选择菜单项,而无需发送击键并等待菜单响应。
这适用于大多数菜单,例如 Notepad++ 中的菜单(但不适用于 Microsoft Ribbon 应用程序)。
将上面的代码片段合并到示例中...
^!e::
lastClip := clipboardAll ; save the clipboard contents so they don't get overwritten
clipboard := ""
WinMenuSelectItem, A,,Edit,Copy to Clipboard,Current Full File path to Clipboard ; A = Active Window... make sure menu descriptions match exactly
clipWait, 1 ; wait for new clipboard contents max 1 second
if ErrorLevel
{
MsgBox, The attempt to copy failed
clipboard := lastClip
return
}
; Remove file-ending
fileNamePath := RegExReplace(Clipboard, "\..*$", "")
; Run command
Run, pandoc -o "%fileNamePath%.pdf" "%Clipboard%"
clipboard := lastClip ; restore clipboard to previous contents
return
在上面的代码中,“A”表示活动窗口。我实际上没有尝试测试此代码……只需确保菜单项名称与您想要选择的内容完全匹配即可。