7

Я уже некоторое время использую 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 ответа3

3

Я решил проблему с помощью специального сценария после обновления, который исправляет записи реестра и ярлыки меню «Пуск», чтобы добавить аргумент --disable-direct-write .

Ярлыки

Как я уже говорил в ответе @ codeSwift4Life, добавление --disable-direct-write не будет работать с ярлыками для процесса Update.exe (который на самом деле является программой Squirrel ). Тем не менее, я узнал, как добавить аргументы команды --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 . Это необходимо, потому что сценарий будет запускаться напрямую через 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 , который также может помочь повысить четкость отображения текста.

0

Откройте в браузере файлов. C:\Users\your-username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\GitHub, Inc Затем щелкните правой кнопкой мыши на Atom и выберите свойства. Затем под target добавьте --disable-direct-write в конце. Убедитесь, что вы заменили your-username вашей домашней папки. Также убедитесь, что если есть другие ярлыки, вы их исправите.

свойства

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .