Atom-Editor: Deaktivieren Sie das Anti-Aliasing

7

Ich benutze Sublime Text 2 seit einiger Zeit und versuche, zum Atom-Editor von GitHub zu wechseln. Wahrscheinlich ist das einzige Problem, das ich noch nicht gelöst habe, das Rendern von Schriftarten. Der Text im Atom-Editor ist sehr verschwommen.

Überall sonst (einschließlich Chrome) ist der Text scharf und gut lesbar. Aber nicht für Atom. Zum Vergleich: Textwiedergabe für Atom (erste Zeile) und Sublime Text 2 (zweite Zeile).

Geben Sie hier die Bildbeschreibung ein

Beide Editoren verwenden das Monokai-Thema mit derselben Schriftart (Consolas, Größe 12) und derselben Schriftfarbe.

Mein Betriebssystem ist Windows 8.1 Pro x64 und ich habe ClearType deaktiviert. Ich verwende die neueste Version von Atom, die derzeit 1.0.11 ist.

Ich habe bereits eine umfangreiche Suche durchgeführt und viele Lösungen gefunden, aber keine davon hat funktioniert. Zum Beispiel: dies , das , das und das .


AKTUALISIEREN

Ich habe in diesem Bereich einige Fortschritte erzielt. Wenn ich DirectWrite deaktiviere, wird der Text schärfer, andere Bilder und Grafiken jedoch zackiger. Aber da ich 99% der Zeit auf den Text schaue, ist dies kein Problem.

Meine Lösung zum Deaktivieren von DirectWrite besteht darin, --disable-direct-writebeim Starten von Atom über die Eingabeaufforderung hinzuzufügen . Ich bin jedoch mit dieser Lösung nicht zufrieden, da sie nicht funktioniert, wenn ich Atom über das Startmenü, die Taskleiste oder das Kontextmenü ("Mit Atom öffnen") öffne.

Aktualisierte Frage : Wie füge ich --disable-direct-writeAtom dauerhaft Argumente hinzu, damit sie beim Starten über die Taskleiste , das Startmenü oder das Kontextmenü Mit Atom öffnen gelten .

alesc
quelle
1
Hmm, das Rendern von Text scheint auf meinem Windows-Computer nur verschwommen zu sein, wenn ich ClearType deaktiviert habe - und wie Sie -webkit-font-smoothingscheint das Festlegen der Option unter Windows nichts zu bewirken.
Durchbruch
1
Wenn Sie den Quellcode problemlos hacken und neu kompilieren möchten, sollten Sie in der Lage sein, die atom/src/browser/atom-window.coffeeDatei zu ändern , indem Sie die direct-writeOption auf ändern false. Dies ist in der AtomWindowKlasse festgelegt, sodass es möglicherweise auch möglich ist, Änderungen mit Skripten vorzunehmen (dies wird jetzt untersucht).
Durchbruch
Nett! Ich hoffe, Sie haben etwas Einfaches und Effektives gefunden. Da alle paar Tage eine neue Atom-Version angekündigt wird und das Kompilieren ein komplexer Prozess ist, ist dies wahrscheinlich nicht bequem. Stellen Sie sicher, dass Sie eine Antwort schreiben, um das Kopfgeld zu erhalten.
Alesc

Antworten:

3

Ich habe das Problem mit einem benutzerdefinierten Skript nach dem Update gelöst, das Registrierungseinträge und Verknüpfungen im Startmenü korrigiert, um das --disable-direct-writeArgument hinzuzufügen .

Verknüpfungen

Wie ich in der Antwort von @ codeSwift4Life angegeben habe, funktioniert das Anhängen --disable-direct-writenicht mit Verknüpfungen zum Update.exeProzess (der eigentlich ein Squirrel- Programm ist). Ich habe jedoch herausgefunden, wie Argumente an den --processStart atom.exeBefehl angehängt werden können . Siehe dieses Problem.

Wenn Sie die Atom-Verknüpfung zum Anhängen ändern möchten --disable-direct-write, müssen Sie sie daher ändern von:

C:\Users\USERNAME\AppData\Local\atom\Update.exe --processStart atom.exe

zu einer der folgenden Zeilen:

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"

Kontextmenü

Um das Kontextmenü "Mit Atom öffnen" zu ändern, müssen Sie einige Registrierungseinträge aktualisieren. Ändern Sie sie von:

X:\Path\to\atom\app-1.0.xx\atom.exe "%V"

zu:

X:\Path\to\atom\app-1.0.xx\atom.exe "%V" --disable-direct-write

Automatisiertes Skript nach dem Update

Da es jedoch viele Registrierungseinträge gibt und Sie nach jedem Update alles wiederholen müssen (und Updates sehr häufig sind), sind manuelle Änderungen nicht möglich.

Deshalb habe ich ein automatisiertes Post-Update-Skript erstellt, das alles automatisch aktualisiert. Sie müssen es nur nach jedem Atom-Update ausführen.

Die Basis meines Post-Update-Skripts war dieses Kaffeeskript , das eigentlich das Aktienskript ist, das alle unsere manuellen Änderungen überschreibt.

Sie müssen das oben genannte Skript folgendermaßen ändern:

Veränderung:

createShortcuts = (callback) ->
  spawnUpdate(['--createShortcut', exeName], callback)

zu:

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

Veränderung:

  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)

zu:

  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)

Die atomExeVariable ist wie folgt definiert (setzen Sie sie oben, aber nach den requireZeilen):

# 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')

Außerdem müssen Sie suchen / ersetzen process.execPathdurch atomExe. Dies ist erforderlich, da das Skript direkt über Node ausgeführt wird und die processVariable auf Node anstelle von Atom zeigt.

Fügen Sie abschließend am Ende des Skripts die folgenden Zeilen hinzu, um Verknüpfungen und Registrierungsaktualisierungen auszuführen:

# Update shortcuts, install context menu
updateShortcuts ->
  installContextMenu ->

Das Skript wird mit ausgeführt coffee squirrel-update.coffee. Sie sollten es in einen neuen Unterordner innerhalb des AppData\Local\atomOrdners legen . Sie benötigen außerdem fs-plusund coffee-scripterfolgreich um Knoten Pakete , um das Skript auszuführen.

alesc
quelle
2

Wenn Sie den Atom-Quellcode problemlos hacken möchten, können Sie das Direktschreiben manuell deaktivieren, indem Sie die folgende Datei im Quellbaum ändern: atom/src/browser/atom-window.coffee

Insbesondere in den Zeilen 29-31:

  'web-preferences':
    'direct-write': true
    'subpixel-font-scaling': false

Ich glaube nicht, dass die direct-writeOption für die Skript-API verfügbar ist, daher müssten Sie Atom manuell ändern und neu kompilieren. Ich würde auch die subpixel-font-scalingOption ausprobieren , die auch dazu beitragen könnte, die Klarheit der Textwiedergabe zu erhöhen.

Durchbruch
quelle
Ich habe eine bessere Lösung gefunden. Siehe meine Antwort für weitere Details.
Alesc
0

Öffnen Sie im Dateibrowser. C:\Users\your-username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\GitHub, IncKlicken Sie dann mit der rechten Maustaste auf Atom und wählen Sie Eigenschaften. Fügen Sie dann unter Ziel --disable-direct-writeam Ende hinzu. Stellen Sie sicher, dass Sie your-usernameden Namen Ihres Basisordners ersetzen . Stellen Sie außerdem sicher, dass Sie andere Verknüpfungen beheben, wenn sie vorhanden sind.

Eigenschaften

juniorRubyist
quelle
Haben Sie Ihre Lösung sogar ausprobiert? Weil es nicht funktioniert. Dies war das erste, was ich getan habe, bevor ich das Update geschrieben und das Kopfgeld festgelegt habe. Und auch (wenn es funktioniert hat) ist dies nur die Lösung zum Starten von Atom über das Startmenü. Mein primäres Ziel ist es, das Kontextmenü "Mit Atom öffnen" zu reparieren, das Sie in der Registrierung aktualisieren müssen - es ändert sich jedoch nach jedem Atom-Update.
Alesc
Eine vorübergehende HKEY_CLASSES_ROOT\*\shell\Atom\command--disable-direct-write
Umgehung