mirror of
https://github.com/atom/atom.git
synced 2026-02-17 10:01:25 -05:00
64 lines
2.2 KiB
CoffeeScript
64 lines
2.2 KiB
CoffeeScript
Registry = require 'winreg'
|
|
Path = require 'path'
|
|
|
|
exeName = Path.basename(process.execPath)
|
|
appPath = "\"#{process.execPath}\""
|
|
fileIconPath = "\"#{Path.join(process.execPath, '..', 'resources', 'cli', 'file.ico')}\""
|
|
isBeta = appPath.includes(' Beta')
|
|
appName = exeName.replace('atom', (if isBeta then 'Atom Beta' else 'Atom' )).replace('.exe', '')
|
|
|
|
class ShellOption
|
|
constructor: (key, parts) ->
|
|
@key = key
|
|
@parts = parts
|
|
|
|
isRegistered: (callback) =>
|
|
new Registry({hive: 'HKCU', key: "#{@key}\\#{@parts[0].key}"})
|
|
.get @parts[0].name, (err, val) =>
|
|
callback(not err? and val? and val.value is @parts[0].value)
|
|
|
|
register: (callback) =>
|
|
doneCount = @parts.length
|
|
@parts.forEach (part) =>
|
|
reg = new Registry({hive: 'HKCU', key: if part.key? then "#{@key}\\#{part.key}" else @key})
|
|
reg.create( -> reg.set part.name, Registry.REG_SZ, part.value, -> callback() if --doneCount is 0)
|
|
|
|
deregister: (callback) =>
|
|
@isRegistered (isRegistered) =>
|
|
if isRegistered
|
|
new Registry({hive: 'HKCU', key: @key}).destroy -> callback null, true
|
|
else
|
|
callback null, false
|
|
|
|
update: (callback) =>
|
|
new Registry({hive: 'HKCU', key: "#{@key}\\#{@parts[0].key}"})
|
|
.get @parts[0].name, (err, val) =>
|
|
if err? or not val?
|
|
callback(err)
|
|
else
|
|
@register callback
|
|
|
|
exports.appName = appName
|
|
|
|
exports.fileHandler = new ShellOption("\\Software\\Classes\\Applications\\#{exeName}",
|
|
[
|
|
{key: 'shell\\open\\command', name: '', value: "#{appPath} \"%1\""},
|
|
{key: 'shell\\open', name: 'FriendlyAppName', value: "#{appName}"},
|
|
{key: 'DefaultIcon', name: '', value: "#{fileIconPath}"}
|
|
]
|
|
)
|
|
|
|
contextParts = [
|
|
{key: 'command', name: '', value: "#{appPath} \"%1\""},
|
|
{name: '', value: "Open with #{appName}"},
|
|
{name: 'Icon', value: "#{appPath}"}
|
|
]
|
|
|
|
exports.fileContextMenu = new ShellOption("\\Software\\Classes\\*\\shell\\#{appName}", contextParts)
|
|
|
|
exports.folderContextMenu = new ShellOption("\\Software\\Classes\\Directory\\shell\\#{appName}", contextParts)
|
|
|
|
exports.folderBackgroundContextMenu = new ShellOption("\\Software\\Classes\\Directory\\background\\shell\\#{appName}",
|
|
JSON.parse(JSON.stringify(contextParts).replace('%1', '%V'))
|
|
)
|