Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何触发富文本的复制 #29

Open
ayangweb opened this issue Jun 26, 2024 · 17 comments
Open

如何触发富文本的复制 #29

ayangweb opened this issue Jun 26, 2024 · 17 comments
Labels
bug Something isn't working

Comments

@ayangweb
Copy link

The feature request | 需求描述

大佬,怎么正确的触发富文本的复制啊,我这里一直都是 has_html 为 true,has_rich_text 为 false!

#[command]
async fn has_html(manager: State<'_, ClipboardManager>) -> Result<bool> {
    Ok(manager.has(ContentFormat::Html))
}

#[command]
async fn has_rich_text(manager: State<'_, ClipboardManager>) -> Result<bool> {
    Ok(manager.has(ContentFormat::Rtf))
}

Proposed solution | 解决方案

求解惑,谢谢大佬😁

@ChurchTao
Copy link
Owner

你去 word 里面复制东西,就是富文本

@ayangweb
Copy link
Author

你去 word 里面复制东西,就是富文本

您说的是 Microsoft Word 吗?我去 windows 虚拟机下载一个试试!

@ayangweb
Copy link
Author

ayangweb commented Jun 26, 2024

你去 word 里面复制东西,就是富文本

大佬,确实是识别到了,不过获取到的富文本内容是空字符串!

EcoCopy_80

image

我复制的做笔记这三字,html 正常识别到了内容,富文本为空!

#[command]
async fn read_rich_text(manager: State<'_, ClipboardManager>) -> Result<String> {
    Ok(manager.context.get_rich_text().unwrap())
}
export const readRichText = async (): Promise<ClipboardPayload> => {
	const richText = await invoke<string>(CLIPBOARD_PLUGIN.READ_RICH_TEXT);

	return {
		value: richText,
		search: richText,
		size: richText.length,
	};
};

@ayangweb
Copy link
Author

ayangweb commented Jun 27, 2024

你去 word 里面复制东西,就是富文本

大佬,确实是识别到了,不过获取到的富文本内容是空字符串!

EcoCopy_80

image 我复制的做笔记这三字,html 正常识别到了内容,富文本为空!
#[command]
async fn read_rich_text(manager: State<'_, ClipboardManager>) -> Result<String> {
    Ok(manager.context.get_rich_text().unwrap())
}
export const readRichText = async (): Promise<ClipboardPayload> => {
	const richText = await invoke<string>(CLIPBOARD_PLUGIN.READ_RICH_TEXT);

	return {
		value: richText,
		search: richText,
		size: richText.length,
	};
};

@ChurchTao 大佬,空了帮忙看看这个问题,谢谢😁

@ChurchTao
Copy link
Owner

@ayangweb 在windows上跑的时候,当剪贴板上有富文本时,打印一下 context.available_formats() 的结果,贴上来我看下

@ayangweb
Copy link
Author

@ayangweb 在windows上跑的时候,当剪贴板上有富文本时,打印一下 context.available_formats() 的结果,贴上来我看下

我现在这个是 macos 上下了 word,可以打印给你看不,必须 windows 吗,虚拟机操作起来不是很流畅🤣

@ChurchTao
Copy link
Owner

都行,但是 macos 上应该是能复制到值的吧

@ayangweb
Copy link
Author

都行,但是 macos 上应该是能复制到值的吧

我上面给您发的截图就是 MacOS 的操作,获取到了空的富文本内容

@ChurchTao
Copy link
Owner

嗯嗯 那一样 打印一下

@ayangweb
Copy link
Author

context.available_formats()

image
#[command]
async fn has_rich_text(manager: State<'_, ClipboardManager>) -> Result<bool> {
    let has_rtf = manager.has(ContentFormat::Rtf);

    println!("\n\nhas_rtf: {has_rtf}\n\n");

    if has_rtf {
        let types = manager.context.available_formats().unwrap();

        println!("{types:?}\n\n");

        let rtf = manager.context.get_rich_text().unwrap();

        println!("rtf: {rtf:?}\n\n");
    }

    Ok(has_rtf)
}

@ChurchTao
Copy link
Owner

确实无法读取到,我回头查下什么毛病,估计是word的格式不是很通用。

@ChurchTao ChurchTao added the bug Something isn't working label Jun 27, 2024
@ayangweb
Copy link
Author

确实无法读取到,我回头查下什么毛病,估计是word的格式不是很通用。

👌🏻

@ayangweb
Copy link
Author

大佬,有空记得修复下这个问题哦!😘

@ChurchTao
Copy link
Owner

嗯 周末一起

@ayangweb
Copy link
Author

OK,随时有空

@ChurchTao
Copy link
Owner

@ayangweb 这个我思考了一下,我觉得针对于某些软件特有的 RTF格式库里不会去做兼容,本库只会读取通用格式的RTF,这一点目前是这样的,但是可能某些常用软件还是可以兼顾到一下,我后续调研一下各个系统中标准的格式有哪些。

不过咱们这个库是有这个能力去读取任意格式的内容的,可以通过 available_formats 得到此刻剪贴板上有哪些格式,然后例如使用 get_buffer("public.html") 读区到 public.html 格式的内容,当然因为不清楚格式内容是什么,所以只能以二进制字节流返回,需要使用者清楚格式内容是什么,这两个API可以很好的针对某些软件特殊的格式去读写内容。

题外话,问一句,为啥EcoPaste Star涨那么快,你是有在宣传吗?

@ayangweb
Copy link
Author

ayangweb commented Aug 2, 2024

好嘞,佬!那就先暂时不管那几个特殊的 app,我看 chatgpt 官方客户端的 rtf 可以正常拿到!

EcoPaste 我是有宣传,发了一些文章,也被很多公众号推送了!🌹

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants