mirror of
https://github.com/marktext/marktext.git
synced 2025-05-02 07:31:18 +08:00
Set dark theme when first saving (#901)
This commit is contained in:
parent
960b065a88
commit
2e50b62d99
@ -27,7 +27,7 @@
|
|||||||
"postinstall": "npm run rebuild && npm run lint:fix",
|
"postinstall": "npm run rebuild && npm run lint:fix",
|
||||||
"build:muya": "cd src/muya && webpack --progress --colors --config webpack.config.js",
|
"build:muya": "cd src/muya && webpack --progress --colors --config webpack.config.js",
|
||||||
"release:muya": "npm run build:muya && cd src/muya && npm publish",
|
"release:muya": "npm run build:muya && cd src/muya && npm publish",
|
||||||
"rebuild": "electron-rebuild -f -w keyboard-layout -o keyboard-layout",
|
"rebuild": "electron-rebuild -f -o keyboard-layout,vscode-windows-registry",
|
||||||
"gen-third-party": "node tools/generateThirdPartyLicense.js",
|
"gen-third-party": "node tools/generateThirdPartyLicense.js",
|
||||||
"validate-licenses": "node tools/validateLicenses.js"
|
"validate-licenses": "node tools/validateLicenses.js"
|
||||||
},
|
},
|
||||||
@ -262,6 +262,9 @@
|
|||||||
"webpack-hot-middleware": "^2.24.3",
|
"webpack-hot-middleware": "^2.24.3",
|
||||||
"webpack-merge": "^4.2.1"
|
"webpack-merge": "^4.2.1"
|
||||||
},
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"vscode-windows-registry": "1.0.1"
|
||||||
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git@github.com:marktext/marktext.git"
|
"url": "git@github.com:marktext/marktext.git"
|
||||||
|
@ -82,9 +82,9 @@ class App {
|
|||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
app.dock.setMenu(dockMenu)
|
app.dock.setMenu(dockMenu)
|
||||||
|
|
||||||
// listen for system theme change and change Mark Text own `dark` and `light`,
|
// Listen for system theme change and change Mark Text own `dark` and `light`.
|
||||||
// In macOS 10.14 Mojave,
|
// In macOS 10.14 Mojave, Apple introduced a new system-wide dark mode for
|
||||||
// Apple introduced a new system-wide dark mode for all macOS computers.
|
// all macOS computers.
|
||||||
systemPreferences.subscribeNotification(
|
systemPreferences.subscribeNotification(
|
||||||
'AppleInterfaceThemeChangedNotification',
|
'AppleInterfaceThemeChangedNotification',
|
||||||
() => {
|
() => {
|
||||||
|
34
src/main/platform/win32/registry.js
Executable file
34
src/main/platform/win32/registry.js
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
import { isWindows } from '../../config'
|
||||||
|
|
||||||
|
let GetStringRegKey = null
|
||||||
|
if (isWindows) {
|
||||||
|
try {
|
||||||
|
GetStringRegKey = require('vscode-windows-registry').GetStringRegKey
|
||||||
|
} catch (e) {
|
||||||
|
// Ignore webpack build error on macOS and Linux.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const winHKEY = {
|
||||||
|
HKCU: 'HKEY_CURRENT_USER',
|
||||||
|
HKLM: 'HKEY_LOCAL_MACHINE',
|
||||||
|
HKCR: 'HKEY_CLASSES_ROOT',
|
||||||
|
HKU: 'HKEY_USERS',
|
||||||
|
HKCC: 'HKEY_CURRENT_CONFIG'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the registry key value.
|
||||||
|
*
|
||||||
|
* @param {winHKEY} hive The registry key
|
||||||
|
* @param {string} path The registry subkey
|
||||||
|
* @param {string} name The registry name
|
||||||
|
* @returns {string|null|undefined} The registry key value or null/undefined.
|
||||||
|
*/
|
||||||
|
export const getStringRegKey = (hive, path, name) => {
|
||||||
|
try {
|
||||||
|
return GetStringRegKey(hive, path, name)
|
||||||
|
} catch (e) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,21 @@
|
|||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { ipcMain, BrowserWindow } from 'electron'
|
import { ipcMain, BrowserWindow, systemPreferences } from 'electron'
|
||||||
import { isOsx } from './config'
|
import { isOsx, isWindows } from './config'
|
||||||
import appWindow from './window'
|
import appWindow from './window'
|
||||||
import { getPath, hasSameKeys, log, ensureDir } from './utils'
|
import { getPath, hasSameKeys, log, ensureDir } from './utils'
|
||||||
|
import { getStringRegKey, winHKEY } from './platform/win32/registry.js'
|
||||||
|
|
||||||
|
const isDarkSystemMode = () => {
|
||||||
|
if (isOsx) {
|
||||||
|
return systemPreferences.isDarkMode()
|
||||||
|
} else if (isWindows) {
|
||||||
|
// NOTE: This key is a 32-Bit DWORD but converted to JS string!
|
||||||
|
const buf = getStringRegKey(winHKEY.HKCU, 'Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize', 'AppsUseLightTheme')
|
||||||
|
return buf === '' // zero (0)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
class Preference {
|
class Preference {
|
||||||
constructor () {
|
constructor () {
|
||||||
@ -30,6 +42,9 @@ class Preference {
|
|||||||
fs.writeFileSync(userDataPath, content, 'utf-8')
|
fs.writeFileSync(userDataPath, content, 'utf-8')
|
||||||
|
|
||||||
userSetting = this.loadJson(userDataPath)
|
userSetting = this.loadJson(userDataPath)
|
||||||
|
if (isDarkSystemMode()) {
|
||||||
|
userSetting.theme = 'dark'
|
||||||
|
}
|
||||||
this.validateSettings(userSetting)
|
this.validateSettings(userSetting)
|
||||||
} else {
|
} else {
|
||||||
userSetting = this.loadJson(userDataPath)
|
userSetting = this.loadJson(userDataPath)
|
||||||
|
12
yarn.lock
12
yarn.lock
@ -7202,6 +7202,11 @@ nan@^2.10.0, nan@^2.9.2:
|
|||||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
|
||||||
integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
|
integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
|
||||||
|
|
||||||
|
nan@^2.12.1:
|
||||||
|
version "2.13.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
|
||||||
|
integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==
|
||||||
|
|
||||||
nanomatch@^1.2.1, nanomatch@^1.2.9:
|
nanomatch@^1.2.1, nanomatch@^1.2.9:
|
||||||
version "1.2.13"
|
version "1.2.13"
|
||||||
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
|
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
|
||||||
@ -11050,6 +11055,13 @@ void-elements@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
|
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
|
||||||
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
|
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
|
||||||
|
|
||||||
|
vscode-windows-registry@1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-windows-registry/-/vscode-windows-registry-1.0.1.tgz#bc9f765563eb6dc1c9ad9a41f9eaacc84dfadc7c"
|
||||||
|
integrity sha512-q0aKXi9Py1OBdmXIJJFeJBzpPJMMUxMJNBU9FysWIXEwJyMQGEVevKzM2J3Qz/cHSc5LVqibmoUWzZ7g+97qRg==
|
||||||
|
dependencies:
|
||||||
|
nan "^2.12.1"
|
||||||
|
|
||||||
vue-electron@^1.0.6:
|
vue-electron@^1.0.6:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/vue-electron/-/vue-electron-1.0.6.tgz#e798e03180b8933539defe31f92e53b9242b9406"
|
resolved "https://registry.yarnpkg.com/vue-electron/-/vue-electron-1.0.6.tgz#e798e03180b8933539defe31f92e53b9242b9406"
|
||||||
|
Loading…
Reference in New Issue
Block a user