Редактор Atom: отключить сглаживание
Я уже некоторое время использую Sublime Text 2 и пытаюсь переключиться на редактор Atom в GitHub. Вероятно, единственная проблема, которую я до сих пор не решил, это рендеринг шрифтов. Текст в редакторе Atom очень размытый.
Повсюду (включая Chrome) текст четкий и хорошо читается. Но не для Атома. Для сравнения: отрисовка текста для 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".
3 ответа
Я решил проблему с помощью специального сценария после обновления, который исправляет записи реестра и ярлыки меню "Пуск", чтобы добавить --disable-direct-write
аргумент.
Ярлыки
Как я уже сказал в ответе @codeSwift4Life, добавляя --disable-direct-write
не будет работать с ярлыками на Update.exe
процесс (который на самом деле является программой Белка). Однако я узнал, как добавлять аргументы к --processStart atom.exe
команда. Смотрите эту проблему.
Поэтому, если вы хотите изменить ярлык Atom, чтобы добавить --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
, Это необходимо, потому что скрипт будет запускаться напрямую через узел, а process
переменная указывает на узел вместо атома.
Наконец, добавьте следующие строки в конец скрипта, чтобы выполнить ярлыки и обновления реестра:
# Update shortcuts, install context menu
updateShortcuts ->
installContextMenu ->
Сценарий выполняется с coffee squirrel-update.coffee
, Вы должны поместить его в новую подпапку внутри AppData\Local\atom
папка. Вам также понадобится fs-plus
а также coffee-script
Пакеты узлов для успешного запуска скрипта.
Если вам удобно взламывать исходный код 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
опция, которая также может помочь повысить четкость отображения текста.
Откройте в браузере файлов. C:\Users\your-username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\GitHub, Inc
Затем щелкните правой кнопкой мыши на Atom, выберите свойства. Затем под цель, добавьте --disable-direct-write
в конце. Убедитесь, что вы замените your-username
с именем вашей домашней папки. Также убедитесь, что если есть другие ярлыки, вы их исправите.
ht tps://user super.ru/images/b41b3d8705d66336017beeeff01c2ab01ec83a82.png