在我學習 Rust 的冒險中,我決定嘗試列印到剪貼板的 cli 內容。我以前在 Swift 中做過這個,所以我認為我在 Rust 中會遇到很多問題。
但是我很難列印回傳的內容NSArray。我花了幾個小時玩不同的功能,但沒有取得太大進展。
我擁有的 Swift 代碼有效:
import Foundation
import AppKit
let pasteboard = NSPasteboard.general
func reload() -> [String]{
var clipboardItems: [String] = []
for element in pasteboard.pasteboardItems! {
if let str = element.string(forType: NSPasteboard.PasteboardType(rawValue: "public.utf8-plain-text")) {
clipboardItems.append(str)
}
}
return clipboardItems;
}
// Access the item in the clipboard
while true {
let firstClipboardItem = reload()
print(firstClipboardItem);
sleep(1);
}
下面是 Rust 代碼:
use cocoa::appkit::{NSApp, NSPasteboard, NSPasteboardReading, NSPasteboardTypeString};
use cocoa::foundation::NSArray;
fn main() {
unsafe {
let app = NSApp();
let pid = NSPasteboard::generalPasteboard(app);
let changec = pid.changeCount();
let pid_item = pid.pasteboardItems();
if pid_item.count() != 0 {
let items = &*pid_item.objectAtIndex(0);
println!("{:?}", items);
}
println!("{:?}", *pid.stringForType(NSPasteboardTypeString));
}
}
上面的代碼產生:*<NSPasteboardItem: 0x6000021a3de0>*
編輯:
我取得了一些進展,但堅持到了最后一點。我已經設法從剪貼板中取出第一個 UTF8 字符。
我遇到的問題是如果我復制文本:World系統將回圈正確的單詞長度次數,但在這種情況下只會列印第一個字母W。下面的輸出:
TEXT 'W'
TEXT 'W'
TEXT 'W'
TEXT 'W'
TEXT 'W'
我想弄清楚的一點是如何轉移到下一個 i8。我似乎無法找到指向下一個 i8 的方法。
NSString 函式UTF8String()回傳*const i8. 我正在為如何閱讀文本而摸不著頭腦。
use cocoa::appkit::{NSApp, NSPasteboard, NSPasteboardTypeString};
use cocoa::foundation::{NSArray, NSString};
fn main() {
unsafe {
let app = NSApp();
let pid = NSPasteboard::generalPasteboard(app);
let changec = pid.changeCount();
let nsarray_ptr = pid.pasteboardItems();
if nsarray_ptr.count() != 0 {
for i in 0..NSArray::count(nsarray_ptr) {
let raw_item_ptr = NSArray::objectAtIndex(nsarray_ptr, i);
let itm = raw_item_ptr.stringForType(NSPasteboardTypeString);
for u in 0..itm.len() {
let stri = itm.UTF8String();
println!("TEXT {:?}", *stri as u8 as char);
}
}
}
}
}
到目前為止,所有看過/評論過這個的人,謝謝。
uj5u.com熱心網友回復:
在閱讀了可可提供的一些測驗后,我弄清楚了我需要做什么。
下面的代碼列印剪貼板的內容。感謝那些為我指明正確方向的人。
use cocoa::appkit::{NSApp, NSPasteboard, NSPasteboardTypeString};
use cocoa::foundation::{NSArray, NSString};
use std::{str, slice};
fn main() {
unsafe {
let app = NSApp();
let pid = NSPasteboard::generalPasteboard(app);
let nsarray_ptr = pid.pasteboardItems();
if nsarray_ptr.count() != 0 {
for i in 0..NSArray::count(nsarray_ptr) {
let raw_item_ptr = NSArray::objectAtIndex(nsarray_ptr, i);
let itm = raw_item_ptr.stringForType(NSPasteboardTypeString);
let stri = itm.UTF8String() as *const u8;
let clipboard = str::from_utf8(slice::from_raw_parts(stri, itm.len()))
.unwrap();
println!("{}", clipboard);
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504421.html
