請問linux下能用AHK嗎?

曾經我以為(難道有人跟我說)linux因為過於強大,不需要AHK,但是我錯了。

現在如果我希望把一篇文章的所需字體從.ttf文件剪下来,做成一個.woff文件,那就需要用到ahk。

只好到虛擬機的windows裏去做了。

不過聽說python等工具是可以發送硬件指令的,例如按下某個鍵。或許我也可以考慮用python来實現按鍵操作?

不能,官网

https://www.autohotkey.com/

我知道是不能的,我想問的是有沒有替代方案。

你需要的是百度良心二号
https://kekee000.github.io/fonteditor/
我猜你要做的事情是这个
使用百度字体编辑器删除不必要字体,减少字体文件体积 - 风沙渡 - 博客园 (cnblogs.com)

linux下的正常思路是批处理bash,不是ahk。

好像能,官网有个用C#实现的AutoHotkey版本,一直在更新
https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248

我用的是fontforge,百度那個功能一樣。

我要做的是自動挑出文章所需的字體,而百度字體編輯器沒有這個功能。

如果是批處理,其實windows也有。

不過確實,如果懂bash的話就不必用AHK来實現了。

更新:简单的原理代码有兴趣的可以去改一下。

// 使用方法:
// 1、开启F12调试,源码,找到 e.list && t.ttfManager.removeGlyf(e.list) 这一行,当前格式化后代码为33704,设置断点
// 2、导入字体文件
// 3、尝试删除一个字符,并在弹出的对话框中点击确定
// 4、控制台运行 window.a=t;
// 5、修改本代码中“我的文章”换成自己的文章或字符集合
// 6、复制下面的代码并在控制台下运行
// 7、字符成功删除后,在界面中选择要导出的字体
// 8、使用undo恢复原来的字符集并进行下一文章的转换

比较麻烦的是一开始拆闭包的操作需要进入调试界面,其他的代码可以移植到油猴或者直接在控制台做循环,当然,最好还是改源码。


//辅助函数
function unique(arr){
    var newArr = [];
    for(var i = 0; i < arr.length; i++){
        if(newArr.indexOf(arr[i]) == -1){
            newArr.push(arr[i])
        }
    }
    return newArr;
}
// 主要过程
let text="你的文章";
let uniTextArr= unique(text.split(''));
let nochars=[];
a.ttfManager.ttf.ttf.glyf.forEach(function(e,i){
        if(i<1)return;
	let thechar=e.unicode?String.fromCharCode(e.unicode[0]):-1;	
	if (uniTextArr.indexOf(thechar)==-1){
		nochars.push(i);
	}
});
a.ttfManager.removeGlyf(nochars);
// 导出下载默认会被edge拦截,手动操作比较好
a.exporter.export(a.ttfManager.get(),{type:'woff',function(t){console.log(t)}})

写了一段代码,可以实现这个功能。闭包太讨厌了。用源码很容易加入这个工具,但非常不喜欢js的开发环境,我还在尝试用bookmarklet。我在考虑要不要直接访问ttf文件格式做这个事情。

你實現了甚麼功能?是指「把一篇文章所需字體摳出再保存成.woff」的功能?用js?

对的,功能实现了,不过还是有一些手动的操作。楼上的代码更新了,你可以看一下。如果你只是一两篇文章,我可以帮你手动处理一下。