Atom 编辑器:禁用抗锯齿

ale*_*esc 7 fonts anti-aliasing text-editors windows-8.1 atom-editor

我一直在使用 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。

我已经进行了广泛的搜索并找到了很多解决方案,但都没有奏效。例如:thisthisthisthis


更新

我在这个话题上取得了一些进展。如果我禁用 DirectWrite,则文本会变得更加清晰,但其他图像和图形会变得更加锯齿状。但因为我 99% 的时间都在看文本,所以这不是问题。

我禁用 DirectWrite 的解决方案是在--disable-direct-write从命令提示符启动 Atom 时添加。但是,我对这个解决方案并不满意,因为当我从开始菜单、任务栏或上下文菜单(“用 Atom 打开”)打开 Atom 时它不起作用。

更新的问题:如何--disable-direct-write向 Atom永久添加参数,以便在从TaskbarStart MenuOpen with Atom上下文菜单启动时应用。

ale*_*esc 3

我已经使用自定义更新后脚本解决了该问题,该脚本修复了注册表项和“开始”菜单快捷方式以添加参数--disable-direct-write

快捷方式

正如我在 @codeSwift4Life 的回答中所述,附加操作--disable-direct-write不适用于Update.exe进程的快捷方式(这实际上是一个Squirrel程序)。但是,我确实找到了如何将参数附加到--processStart atom.exe命令中。看到这个问题。

因此,如果您希望将 Atom 快捷方式更改为append --disable-direct-write,则必须将其更改为:

C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe
Run Code Online (Sandbox Code Playgroud)

到以下行之一:

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"
Run Code Online (Sandbox Code Playgroud)

上下文菜单

要更改“使用 Atom 打开”上下文菜单,您必须更新一些注册表项。将它们更改为:

X:\Path\to\atom\app-1.0.xx\atom.exe "%V"
Run Code Online (Sandbox Code Playgroud)

到:

X:\Path\to\atom\app-1.0.xx\atom.exe "%V" --disable-direct-write
Run Code Online (Sandbox Code Playgroud)

自动更新后脚本

但由于有很多注册表项,并且每次更新后都必须重复所有操作(并且更新非常频繁),因此手动更改是不可行的。

因此,我创建了一个自动更新后脚本,它会自动更新所有内容。您只需在每次 Atom 更新后运行它即可。

我的更新后脚本的基础是这个咖啡脚本,它实际上是覆盖我们所有手动更改的库存脚本。

您必须按以下方式更改上述脚本:

改变:

createShortcuts = (callback) ->
  spawnUpdate(['--createShortcut', exeName], callback)
Run Code Online (Sandbox Code Playgroud)

到:

createShortcuts = (callback) ->
  spawnUpdate(['--createShortcut', exeName, '--process-start-args', '--disable-direct-write'], callback)
Run Code Online (Sandbox Code Playgroud)

改变:

  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)
Run Code Online (Sandbox Code Playgroud)

到:

  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)
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

另外,您必须查找/替换process.execPathatomExe. 这是必需的,因为脚本将直接通过 Node 运行,并且process变量指向 Node 而不是 Atom。

最后,将以下行添加到脚本末尾,以执行快捷方式和注册表更新:

# Update shortcuts, install context menu
updateShortcuts ->
  installContextMenu ->
Run Code Online (Sandbox Code Playgroud)

该脚本使用 执行coffee squirrel-update.coffee。您应该将其放入AppData\Local\atom文件夹内的新子文件夹中。您还需要fs-pluscoffee-script节点包才能成功运行脚本。