13

Nodejs实现复制内容到剪贴板

 3 years ago
source link: https://segmentfault.com/a/1190000040173190
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

需求如下:

index.txt 的内容进行格式转换后复制到剪贴板。

index.txt

莲子心中苦,梨儿腹内酸。--明末清初.金圣叹
雨入花心,自成甘苦。水归器内,各现方圆。--明末清初.金圣叹

真读书人天下少,不如意事古今多。--明末清初.金圣叹
  {
    "content": "莲子心中苦,梨儿腹内酸。--明末清初.金圣叹"
  },
  {
    "content": "雨入花心,自成甘苦。水归器内,各现方圆。--明末清初.金圣叹"
  },
  {
    "content": "真读书人天下少,不如意事古今多。--明末清初.金圣叹"
  },

读取index.txt中的内容

生成一个copy.bat文件,写入 clip < result.txt

将转换后的内容保存到result.txt ,写入文件是考虑到特殊字符会导致命令执行失败

因为clip命令只支持GBK编码,但是nodejs在写入文件时不支持GBK编码,则需要iconv-lite进行转码,否则中文会出现乱码。

执行copy.bat,实现内容复制到剪贴板,删除copy.batresult.txt

视频地址 - nodejs实现复制内容到剪贴板
npm包 - sf-copy-to-clipboard

const file_os = require("fs");
const contentStr = file_os.readFileSync("index.txt", "utf-8");
const exec = require('child_process').exec;
const iconv = require('iconv-lite');
let sentenceList = contentStr.split("\r\n").filter((sentence) => sentence != "").map((sentence) => ({ content: sentence }));
let resultStr = JSON.stringify(sentenceList);
resultStr = resultStr.substring(1, resultStr.length - 1);
resultStr = iconv.encode(resultStr, 'gbk');
copyToClipboard(resultStr, () => {
    console.log('已经复制到剪切板');
})
function copyToClipboard(text, func) {

    let resultfileName = "result.txt";
    let command = `clip < ${resultfileName} `;
    file_os.writeFileSync(resultfileName, resultStr);

    var cmdFileName = 'copy.bat';
    file_os.writeFileSync(cmdFileName, command);
    exec(cmdFileName, function (err, stdout, stderr) {
        if (err || stderr) return console.log(err, stdout, stderr);
        // 用nodejs删除文件
        file_os.unlinkSync(cmdFileName);
        file_os.unlinkSync(resultfileName);
        func(text, stdout);
    });
};

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK