Skip to content

Instantly share code, notes, and snippets.

@egel
Last active April 8, 2024 23:00
Show Gist options
  • Save egel/b7beba6f962110596660 to your computer and use it in GitHub Desktop.
Save egel/b7beba6f962110596660 to your computer and use it in GitHub Desktop.
Auto-remove Sublime's license popup
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sublime_plugin
import subprocess
from time import sleep
import sys
cl = lambda line: subprocess.Popen(line, shell=True, stdout=subprocess.PIPE).communicate()[0].strip()
log = lambda message: sys.stderr.write("Log: %s\n" % message)
sublimeMainWindowTitle = " - Sublime Text (UNREGISTERED)"
class LicenseWindowKiller(sublime_plugin.EventListener):
def seek_n_close(self):
sublimePid = int(cl("""wmctrl -lp | grep "%s" | awk '{print $3}'""" % sublimeMainWindowTitle).decode())
if sublimePid:
sublimeMainWindowId = cl("""wmctrl -lp | grep "%s" | awk '{print $1}'""" % sublimeMainWindowTitle).decode()
sublimeSecondWindowId = cl("""wmctrl -lp | grep %s | awk '{ids[$1]++}{for (id in ids){if (id != "%s"){printf id}}}'""" % (sublimePid, sublimeMainWindowId)).decode()
if sublimeSecondWindowId:
sublimeSecondWindowTitle = cl("""wmctrl -lp | grep %s | awk '{print $5}'""" % sublimeSecondWindowId).decode()
if not sublimeSecondWindowTitle:
cl("wmctrl -i -c %s" % sublimeSecondWindowId)
return True
return False
def on_pre_save_async(self, *args):
seek = True
counter = 10
while seek:
sleep(.5)
counter -= 1
if counter < 0:
seek = False
seek = not self.seek_n_close()
@DinleyH
Copy link

DinleyH commented Aug 18, 2023

Here is a working windows version: it works by closing the dialog box the moment it appears. its instant more or less, I never see the box anymore.

Windowkill.py

`import sublime_plugin
import ctypes
import time

TARGET_CLASS_NAME = "#32770"

class DialogBoxKiller(sublime_plugin.EventListener):

def close_dialog_boxes(self):
    EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
    
    def get_window_class_name(hwnd):
        buff = ctypes.create_unicode_buffer(256)  # Assuming class name won't be longer than 256 characters
        ctypes.windll.user32.GetClassNameW(hwnd, buff, len(buff))
        return buff.value
    
    def enum_windows_callback(hwnd, lparam):
        class_name = get_window_class_name(hwnd)
        if class_name == TARGET_CLASS_NAME:
            ctypes.windll.user32.SendMessageW(hwnd, 0x0010, 0, 0)  # 0x0010 is WM_CLOSE
        return True

    ctypes.windll.user32.EnumWindows(EnumWindowsProc(enum_windows_callback), 0)
    
def on_pre_save_async(self, *args):
    time.sleep(0.1)  # Brief delay to ensure dialog has time to appear if it does
    self.close_dialog_boxes()

`

FYI this also works with SFTP.

@DinleyH
Copy link

DinleyH commented Aug 18, 2023

For a working windows version and instructions on how to install sublime plugins:

https://gist.github.com/DinleyH/e222834ddb3533d59fd7cafccf612f07

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment