|
@@ -38,6 +38,29 @@ const parseArgs = function (window, options, callback, ...args) {
|
|
|
return [window, options, callback]
|
|
|
}
|
|
|
|
|
|
+const normalizeAccessKey = (text) => {
|
|
|
+ if (typeof text !== 'string') return text
|
|
|
+
|
|
|
+ // macOS does not have access keys so remove single ampersands
|
|
|
+ // and replace double ampersands with a single ampersand
|
|
|
+ if (process.platform === 'darwin') {
|
|
|
+ return text.replace(/&(&?)/g, '$1')
|
|
|
+ }
|
|
|
+
|
|
|
+ // Linux uses a single underscore as an access key prefix so escape
|
|
|
+ // existing single underscores with a second underscore, replace double
|
|
|
+ // ampersands with a single ampersand, and replace a single ampersand with
|
|
|
+ // a single underscore
|
|
|
+ if (process.platform === 'linux') {
|
|
|
+ return text.replace(/_/g, '__').replace(/&(.?)/g, (match, after) => {
|
|
|
+ if (after === '&') return after
|
|
|
+ return `_${after}`
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return text
|
|
|
+}
|
|
|
+
|
|
|
const checkAppInitialized = function () {
|
|
|
if (!app.isReady()) {
|
|
|
throw new Error('dialog module can only be used after app is ready')
|
|
@@ -171,6 +194,10 @@ module.exports = {
|
|
|
throw new TypeError('Buttons must be an array')
|
|
|
}
|
|
|
|
|
|
+ if (options.normalizeAccessKeys) {
|
|
|
+ buttons = buttons.map(normalizeAccessKey)
|
|
|
+ }
|
|
|
+
|
|
|
if (title == null) {
|
|
|
title = ''
|
|
|
} else if (typeof title !== 'string') {
|