Linux

Linux

如何将脚本中的 HTML 作为富文本发送到剪贴板?我的最终目标是创建一个脚本,以便我可以将源文件中的内容粘贴到电子邮件中,但我希望有一个通用答案可以将其粘贴到任何接受富文本的程序中。

粘贴到电子邮件中的用法示例:

  1. 在 vim 中打开源文件
  2. 使用:TOhtml命令创建带有 vim 语法高亮的 html 文件
  3. 使用此处的答案将 html 复制为富文本
  4. 粘贴到电子邮件中(此电子邮件无需脚本)

有关的:将差异输出粘贴到 Microsoft Outlook 中并突出显示语法

有关的:将 markdown 输入复制到剪贴板作为富文本

答案1

Linux

通过这个答案

cat text.html | xclip -t text/html

苹果

通过这个答案

cat text.html | textutil -stdin -format html -convert rtf -stdout | pbcopy

视窗

在旧版 Windows 中,你只能复制纯文本(通过这个答案)。

type text.html | clip

在 PowerShell 中你可以复制富文本:

type text.html | Set-Clipboard -AsHtml

如果您创建 C:\sandbox\pbcopy.ps1:

type $args[0] | Set-Clipboard -AsHtml

然后你可以启用脚本然后从任何地方运行它(cmd.exe,.bat 文件等):

powershell C:\sandbox\pbcopy.ps1 text.html

一些不同的 Cygwin 命令复制到 Windows 剪贴板,然后好像cygwin 提供了 xclip,因此如果您有 cygwin,您可能可以在 Windows 上使用 Linux 解决方案。

答案2

还有 Pandoc 解决方案

根据此处的答案进行开发

方案 1

  • 使用:TOhtml,这将为你提供一个包含转换后的 html 的新缓冲区。接下来,使用:w ! xclip -t text/html -selection clipboard

  • 当我将其粘贴到 libreoffice 中时,它有行号。我尝试禁用它们,然后重复。这很有效。

使用 Pandoc 的解决方案:

  • 我更喜欢这个,格式更好,而且是一行代码

    :w ! pandoc -s -t html | xclip -t text/html -selection clipboard

一些解释:

  • :w ! {cmd}将缓冲区通过管道传输到 shell 命令中的 {cmd}
  • pandoc -s -t html将获取输入并转换为 html。我认为你可以省略“-t html”
  • “|” 用作管道,因为它被解释为 shell 命令
  • xclip -t text/html -selection clipboard链接中给出了答案吗Linux 答案

编辑:尝试将命令分配给键绑定不起作用。似乎管道正在以通常的 vim 方式使用。

我的解决方法是定义一个函数:

function Html()
    let mytext = execute('w ! pandoc -s -t html | xclip -t text/html -selection clipboard')
    return mytext
endfunction

然后分配一个键绑定来调用此函数:

nnoremap <leader>h :call Html()<cr>

希望这能有所帮助。如果有人有更简单的解决方案,请评论!

答案3

Mac,适用于 Google Docs

对于在 Mac 上的 Chrome 中运行的 Google Docs/Sheets,您可以使用此片段

#!/usr/bin/env swift

// Based on https://github.com/chbrown/macos-pasteboard/issues/8#issuecomment-906537204
import Cocoa
import Foundation

let pasteboard: NSPasteboard = .general

let dataTypeName : String = "public.html"
let dataType = NSPasteboard.PasteboardType(rawValue: dataTypeName)
var text : String = ""
while let line = readLine() {
    text += line
    text += "\n"
}
let data = text.data(using: .utf8)!
pasteboard.clearContents()
pasteboard.setData(data,  forType: dataType)
exit(0)
echo '<b>qwerty</b>' | ./pbcopy_html.swift

请注意,它会粘贴仅有的在 Google Docs 中,在其他地方粘贴会失败。


要从剪贴板中提取 html 内容,pbpaste可以使用 plain:

pbpaste -Prefer public.html

答案4

使用电子邮件CSS!使用UTF8编码html文件!

从命令行运行 http( HTML-eMail.html) 电子邮件:

powershell .\mail-http.ps1

邮件-http.ps1:

$time = get-date 

$from    = '[email protected]'
$to      = '[email protected]'
$subject = 'eMail-HTML ' + $time

$server=smtp.gmail.com;$port=587

$encoding = [System.Text.Encoding]::UTF8

$email=new-object Net.Mail.MailMessage($from, $to, $subject, $body)
$email.DeliveryNotificationOptions=[System.Net.Mail.DeliveryNotificationOptions]::Delay
$email.IsBodyHtml = $true
$email.Priority = [System.Net.Mail.MailPriority]::High

$email.BodyEncoding=$encoding

$email.Body = gc '.\HTML-eMail.html' -encoding UTF8

$smtp=new-object Net.Mail.SmtpClient($server,$port)
$smtp.EnableSSL = $true
$smtp.Timeout = 30000  #ms
$smtp.Credentials=New-Object System.Net.NetworkCredential($from, 'derParol'); 

$smtp.Send($email)

HTML-电子邮件.html:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">

...

</html>

相关内容