我已经使用 Sublime Text 2 一段时间了,现在正尝试切换到 GitHub 的 Atom 编辑器。我可能唯一还没有解决的问题是字体渲染。Atom 编辑器中的文本是非常模糊的。
在其他地方(包括 Chrome),文本清晰易读。但 Atom 不行。比较:Atom(第一行)和 Sublime Text 2(第二行)的文本渲染。
两个编辑器都使用 Monokai 主题,并使用相同的字体(Consolas,12 号)和字体颜色。
我的操作系统是 Windows 8.1 Pro x64,并且已禁用 ClearType。我正在使用最新版本的 Atom,目前是 1.0.11。
我已经进行了广泛的搜索并找到了很多解决方案,但都没有奏效。例如:这,这,这, 和这。
更新
我在这个话题上取得了一些进展。如果我禁用 DirectWrite,那么文本会变得更清晰,但其他图像和图形会变得更粗糙。但由于我 99% 的时间都在看文本,所以这不是问题。
我禁用 DirectWrite 的解决方案是--disable-direct-write
在从命令提示符启动 Atom 时添加。但是,我对这个解决方案并不满意,因为当我从“开始”菜单、任务栏或上下文菜单(“使用 Atom 打开”)打开 Atom 时,它不起作用。
更新的问题:如何永久添加--disable-direct-write
参数到 Atom,以便它在从启动时应用任务栏,开始菜单或者使用 Atom 打开上下文菜单。
答案1
我已经使用自定义的更新后脚本解决了该问题,该脚本修复了注册表项和开始菜单快捷方式以添加参数--disable-direct-write
。
快捷方式
正如我在@codeSwift4Life的回答中所说,附加功能--disable-direct-write
不适用于该Update.exe
过程的快捷方式(这实际上是松鼠程序)。然而,我做过了解如何将参数附加到--processStart atom.exe
命令。请参阅这问题。
因此,如果您希望将 Atom 快捷方式更改为 append --disable-direct-write
,则必须将其从:
C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe
更改为以下其中一行:
C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe -a "--disable-direct-write"
C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe --process-start-args "--disable-direct-write"
上下文菜单
要更改“使用 Atom 打开”上下文菜单,您必须更新一些注册表项。将它们从以下位置更改:
X:\Path\to\atom\app-1.0.xx\atom.exe "%V"
到:
X:\Path\to\atom\app-1.0.xx\atom.exe "%V" --disable-direct-write
自动更新后脚本
但由于注册表项太多,而且你必须重复一切每次更新后(更新非常频繁),手动更改是不可行的。
因此我创建了一个自动更新后脚本,它可以自动更新所有内容。你只需在每次 Atom 更新后运行它即可。
我的更新后脚本的基础是这个咖啡脚本,这实际上是覆盖我们所有手动更改的库存脚本。
您必须按以下方式更改上述脚本:
改变:
createShortcuts = (callback) ->
spawnUpdate(['--createShortcut', exeName], callback)
到:
createShortcuts = (callback) ->
spawnUpdate(['--createShortcut', exeName, '--process-start-args', '--disable-direct-write'], callback)
改变:
installMenu = (keyPath, arg, callback) ->
args = [keyPath, '/ve', '/d', 'Open with Atom']
addToRegistry args, ->
args = [keyPath, '/v', 'Icon', '/d', process.execPath]
addToRegistry args, ->
args = ["#{keyPath}\\command", '/ve', '/d', "#{process.execPath} \"#{arg}\""]
addToRegistry(args, callback)
到:
installMenu = (keyPath, arg, callback) ->
args = [keyPath, '/ve', '/d', 'Open with Atom']
addToRegistry args, ->
args = [keyPath, '/v', 'Icon', '/d', atomExe]
addToRegistry args, ->
args = ["#{keyPath}\\command", '/ve', '/d', "#{atomExe} \"#{arg}\" --disable-direct-write"]
addToRegistry(args, callback)
变量atomExe
定义如下(放在顶部,但在行之后require
):
# Get the latest version of atom.exe
parentDir = fs.listSync('..').filter (x) -> x.indexOf('app-') > -1;
[..., atomDir] = parentDir
atomExe = path.join(path.resolve(atomDir), 'atom.exe')
另外,您必须查找/替换process.execPath
。atomExe
这是必需的,因为脚本将直接通过 Node 运行,并且process
变量指向 Node 而不是 Atom。
最后,将以下几行添加到脚本末尾,以执行快捷方式和注册表更新:
# Update shortcuts, install context menu
updateShortcuts ->
installContextMenu ->
该脚本使用 执行coffee squirrel-update.coffee
。您应该将其放入AppData\Local\atom
文件夹内的新子文件夹中。您还需要fs-plus
和coffee-script
节点包才能成功运行该脚本。
答案2
如果您愿意破解 Atom 源代码,则可以通过修改源树中的以下文件手动禁用直接写入:atom/src/browser/atom-window.coffee
具体来说,在第29-31行:
'web-preferences':
'direct-write': true
'subpixel-font-scaling': false
我不认为该direct-write
选项已公开给脚本 API,因此您必须手动修改并重新编译 Atom。我也会尝试该subpixel-font-scaling
选项,它也可能有助于提高文本渲染清晰度。