diff --git a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
index 5831288b76dce2cf091b485388a4f8487f1f48f4..b3585d6216d0915d6ba783765de8ce5a99b9f015 100644
--- a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
+++ b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
@@ -34,6 +34,7 @@ if current_OS == 'Windows':
     #
 
     import os
+    upload_disk = 'Disk not found'
     target_file_found = False
     target_drive_found = False
     for drive in drives:
@@ -66,7 +67,9 @@ if current_OS == 'Windows':
       env.Replace(
           UPLOAD_PORT = upload_disk
       )
-
+      print 'upload disk: ' , upload_disk
+    else:
+       print '\nUnable to find destination disk.  File must be copied manually. \n'
 
 
 if current_OS == 'Linux':
@@ -76,6 +79,7 @@ if current_OS == 'Linux':
     #
 
     import os
+    upload_disk = 'Disk not found'
     target_file_found = False
     target_drive_found = False
     medias = os.listdir('/media')  #
@@ -85,11 +89,15 @@ if current_OS == 'Linux':
         target_drive_found = True
         upload_disk = '/media/' + media + '/' + target_drive + '/'
       for drive in drives:
-        files = os.listdir('/media/' + media + '/' + drive )  #
-        if target_filename in files:
-          if target_file_found == False:
-            upload_disk = '/media/' + media + '/' + drive + '/'
-            target_file_found = True
+        try:
+          files = os.listdir('/media/' + media + '/' + drive )
+        except:
+          continue
+        else:
+          if target_filename in files:
+            if target_file_found == False:
+              upload_disk = '/media/' + media + '/' + drive + '/'
+              target_file_found = True
 
     #
     # set upload_port to drive if found
@@ -101,6 +109,9 @@ if current_OS == 'Linux':
         UPLOAD_FLAGS = "-P$UPLOAD_PORT",
         UPLOAD_PORT = upload_disk
       )
+      print 'upload disk: ' , upload_disk
+    else:
+       print '\nUnable to find destination disk.  File must be copied manually. \n'
 
 
 if current_OS == 'Darwin':  # MAC
@@ -110,19 +121,23 @@ if current_OS == 'Darwin':  # MAC
     #
 
     import os
+    upload_disk = 'Disk not found'
     drives = os.listdir('/Volumes')  #  human readable names
     target_file_found = False
     target_drive_found = False
     if target_drive in drives and target_file_found == False:  # set upload if not found target file yet
       target_drive_found = True
-      upload_disk = '/Volumes/' + drive + '/'
+      upload_disk = '/Volumes/' + target_drive + '/'
     for drive in drives:
-      target_file_found = True
-      filenames = os.listdir('/Volumes/' + drive + '/')
-      if target_filename in filenames:
-        if target_file_found == False:
-          upload_disk = '/Volumes/' + drive + '/'
-        target_file_found = True
+      try:
+        filenames = os.listdir('/Volumes/' + drive + '/')   # will get an error if the drive is protected
+      except:
+        continue
+      else:
+        if target_filename in filenames:
+          if target_file_found == False:
+            upload_disk = '/Volumes/' + drive + '/'
+          target_file_found = True
     #
     # set upload_port to drive if found
     #
@@ -132,3 +147,6 @@ if current_OS == 'Darwin':  # MAC
       env.Replace(
           UPLOAD_PORT = upload_disk
       )
+      print '\nupload disk: ' , upload_disk, '\n'
+    else:
+       print '\nUnable to find destination disk.  File must be copied manually. \n'
diff --git a/buildroot/share/atom/auto_build.py b/buildroot/share/atom/auto_build.py
index 59ef3512b920bde8c2adab64cbf42222e0e7ebf5..498140b47143438debfa5515190925045d7565aa 100644
--- a/buildroot/share/atom/auto_build.py
+++ b/buildroot/share/atom/auto_build.py
@@ -204,7 +204,7 @@ def resolve_path(path):
        #get line and column numbers
         line_num = 1
         column_num = 1
-        line_start = path.find(':')
+        line_start = path.find(':', 2)                  # use 2 here so don't eat Windows full path
         column_start = path.find(':', line_start + 1)
         if column_start == -1:
           column_start = len(path)
@@ -218,57 +218,69 @@ def resolve_path(path):
         if not(column_start == column_end):
           column_num = path[ column_start + 1 : column_end]
           if column_num == '':
-            column_num = 1
+            column_num = 0
 
+        index_end = path.find(',')
+        if 0 <= index_end:
+            path = path[ : index_end]  # delete comma and anything after
+        index_end = path.find(':', 2)
+        if 0 <= index_end:
+            path = path[ : path.find(':', 2)]  # delete the line number and anything after
 
-        path = path[ : path.find(':')]  # delete the line number and anything after
         path = path.replace('\\','/')
 
-      # resolve as many '../' as we can
-        while 0 <= path.find('../'):
-          end =  path.find('../') - 1
-          start = path.find('/')
-          while 0 <= path.find('/',start) and end > path.find('/',start):
-            start = path.find('/',start) + 1
-          path = path[0:start] + path[end + 4: ]
-
-        # this is an alternative to the above - it just deletes the '../' section
-        # start_temp = path.find('../')
-        # while 0 <= path.find('../',start_temp):
-        #   start = path.find('../',start_temp)
-        #   start_temp = start  + 1
-        # if 0 <= start:
-        #   path = path[start + 2 : ]
-
-
-        start = path.find('/')
-        if not(0 == start):            # make sure path starts with '/'
-          while 0 == path.find(' '):    # eat any spaces at the beginning
-            path = path[ 1 : ]
-          path = '/' + path
+        if 1 == path.find(':') and current_OS == 'Windows':
+          return path, line_num, column_num                    # found a full path - no need for further processing
+        elif 0 == path.find('/') and (current_OS == 'Linux' or current_OS == 'Darwin'):
+          return path, line_num, column_num                    # found a full path - no need for further processing
 
-        if current_OS == 'Windows':
-          search_path = path.replace('/', '\\')  # os.walk uses '\' in Windows
         else:
-          search_path = path
-
-        start_path = os.path.abspath('')
 
-    # search project directory for the selection
-        found = False
-        full_path = ''
-        for root, directories, filenames in os.walk(start_path):
-          for filename in filenames:
-                  if  0 <= root.find('.git'):              # don't bother looking in this directory
-                    break
-                  full_path = os.path.join(root,filename)
-                  if 0 <= full_path.find(search_path):
-                    found = True
-                    break
-          if found:
-            break
+          # resolve as many '../' as we can
+            while 0 <= path.find('../'):
+              end =  path.find('../') - 1
+              start = path.find('/')
+              while 0 <= path.find('/',start) and end > path.find('/',start):
+                start = path.find('/',start) + 1
+              path = path[0:start] + path[end + 4: ]
+
+            # this is an alternative to the above - it just deletes the '../' section
+            # start_temp = path.find('../')
+            # while 0 <= path.find('../',start_temp):
+            #   start = path.find('../',start_temp)
+            #   start_temp = start  + 1
+            # if 0 <= start:
+            #   path = path[start + 2 : ]
+
+
+            start = path.find('/')
+            if not(0 == start):            # make sure path starts with '/'
+              while 0 == path.find(' '):    # eat any spaces at the beginning
+                path = path[ 1 : ]
+              path = '/' + path
+
+            if current_OS == 'Windows':
+              search_path = path.replace('/', '\\')  # os.walk uses '\' in Windows
+            else:
+              search_path = path
+
+            start_path = os.path.abspath('')
+
+        # search project directory for the selection
+            found = False
+            full_path = ''
+            for root, directories, filenames in os.walk(start_path):
+              for filename in filenames:
+                      if  0 <= root.find('.git'):              # don't bother looking in this directory
+                        break
+                      full_path = os.path.join(root,filename)
+                      if 0 <= full_path.find(search_path):
+                        found = True
+                        break
+              if found:
+                break
 
-        return full_path, line_num, column_num
+            return full_path, line_num, column_num
 
 # end - resolve_path
 
@@ -324,6 +336,9 @@ def open_file(path):
         elif current_OS == 'Linux':
 
               command = file_path  + ':' + str(line_num) + ':' + str(column_num)
+              index_end = command.find(',')
+              if 0 <= index_end:
+                  command = command[ : index_end]  # sometimes a comma magically appears, don't want it
               running_apps = subprocess.Popen('ps ax -o cmd', stdout=subprocess.PIPE, shell=True)
               (output, err) = running_apps.communicate()
               temp = output.split('\n')
@@ -336,7 +351,7 @@ def open_file(path):
                   return False , ''
 
               (success_sublime, editor_path_sublime) = find_editor_linux('sublime_text',temp)
-              (success_atom, editor_path_atom) = find_editor+linux('atom',temp)
+              (success_atom, editor_path_atom) = find_editor_linux('atom',temp)
 
               if success_sublime:
                   subprocess.Popen([editor_path_sublime, command])
@@ -350,6 +365,9 @@ def open_file(path):
         elif current_OS == 'Darwin':  # MAC
 
               command = file_path  + ':' + str(line_num) + ':' + str(column_num)
+              index_end = command.find(',')
+              if 0 <= index_end:
+                  command = command[ : index_end]  # sometimes a comma magically appears, don't want it
               running_apps = subprocess.Popen('ps axwww -o command', stdout=subprocess.PIPE, shell=True)
               (output, err) = running_apps.communicate()
               temp = output.split('\n')
@@ -424,8 +442,11 @@ def get_build_last():
         date_last = 0.0
         DIR__pioenvs = os.listdir('.pioenvs')
         for name in DIR__pioenvs:
+          if 0 <= name.find('.') or 0 <= name.find('-'):   # skip files in listing
+            continue
           DIR_temp = os.listdir('.pioenvs/' + name)
           for names_temp in DIR_temp:
+
             if 0 == names_temp.find('firmware.'):
               date_temp = os.path.getmtime('.pioenvs/' + name + '/' + names_temp)
               if date_temp > date_last:
@@ -941,7 +962,7 @@ class output_window(Text):
         Text.__init__(self, self.frame, borderwidth=3, relief="sunken")
         self.config(tabs=(400,))  # configure Text widget tab stops
         self.config(background = 'black', foreground = 'white', font= ("consolas", 12), wrap = 'word', undo = 'True')
-        self.config(height  = 24, width = 120)
+        self.config(height  = 24, width = 100)
         self.config(insertbackground = 'pale green')  # keyboard insertion point
         self.pack(side='left', fill='both', expand=True)