laughing-hipster/.atom/packages/atom-terminal/lib/atom-terminal.coffee

80 lines
2.5 KiB
CoffeeScript

exec = require('child_process').exec
path = require('path')
platform = require('os').platform
###
Opens a terminal in the given directory, as specefied by the config
###
open_terminal = (dirpath) ->
# Figure out the app and the arguments
app = atom.config.get('atom-terminal.app')
args = atom.config.get('atom-terminal.args')
# get options
setWorkingDirectory = atom.config.get('atom-terminal.setWorkingDirectory')
surpressDirArg = atom.config.get('atom-terminal.surpressDirectoryArgument')
runDirectly = atom.config.get('atom-terminal.MacWinRunDirectly')
# Start assembling the command line
cmdline = "\"#{app}\" #{args}"
# If we do not supress the directory argument, add the directory as an argument
if !surpressDirArg
cmdline += "\"#{dirpath}\""
# For mac, we prepend open -a unless we run it directly
if platform() == "darwin" && !runDirectly
cmdline = "open -a " + cmdline
# for windows, we prepend start unless we run it directly.
if platform() == "win32" && !runDirectly
cmdline = "start \"\" " + cmdline
# Set the working directory if configured
if setWorkingDirectory
exec cmdline, cwd: dirpath if dirpath?
else
exec cmdline if dirpath?
module.exports =
activate: ->
atom.workspaceView.command "atom-terminal:open", => @open()
atom.workspaceView.command "atom-terminal:open-project-root", => @openroot()
open: ->
filepath = atom.workspaceView.find('.tree-view .selected')?.view()?.getPath?()
if filepath
open_terminal path.dirname(filepath)
openroot: ->
if atom.project.path
open_terminal atom.project.path
# Set per-platform defaults
if platform() == 'darwin'
# Defaults for Mac, use Terminal.app
module.exports.configDefaults = {
app: 'Terminal.app'
args: ''
surpressDirectoryArgument: false
setWorkingDirectory: false
MacWinRunDirectly: false
}
else if platform() == 'win32'
# Defaults for windows, use cmd.exe as default
module.exports.configDefaults = {
app: 'C:\\Windows\\System32\\cmd.exe'
args: ''
surpressDirectoryArgument: false
setWorkingDirectory: true
MacWinRunDirectly: false
}
else
# Defaults for all other systems (linux I assume), use xterm
module.exports.configDefaults = {
app: '/usr/bin/xterm'
args: ''
surpressDirectoryArgument: true
setWorkingDirectory: true
MacWinRunDirectly: false
}