From 53ed23f8c2c9945097fc6e61c5dd990c54da94c4 Mon Sep 17 00:00:00 2001 From: Jamalludeen Date: Sat, 30 May 2026 22:06:25 +0430 Subject: [PATCH 1/5] docs(main): clarify launcher entrypoint --- main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.py b/main.py index 120132c..39f9117 100644 --- a/main.py +++ b/main.py @@ -7,9 +7,11 @@ def main(): + """Start the Tkinter GUI launcher.""" import tkinter as tk parser = argparse.ArgumentParser( + prog="python main.py", description="Launch the Port Scanner GUI", epilog="Use --version to print the installed app version and exit.", ) From 564b6ecfb024447c62ec8837b121bfa22adeb9c7 Mon Sep 17 00:00:00 2001 From: Jamalludeen Date: Sat, 30 May 2026 22:06:45 +0430 Subject: [PATCH 2/5] docs(package): document public exports --- portscanner/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/portscanner/__init__.py b/portscanner/__init__.py index ffcfe59..5cbf72e 100644 --- a/portscanner/__init__.py +++ b/portscanner/__init__.py @@ -1,3 +1,5 @@ +"""Public package exports for the port scanner app.""" + __version__ = "0.2.1" @@ -9,6 +11,7 @@ def get_version() -> str: from .utils import export_to_file, copy_to_clipboard from .gui import PortScannerApp +# Keep the top-level package import friendly for the GUI and scripts. __all__ = [ "__version__", "get_version", From 5d9690ddb8f6004956589f450dd6078e58da2b0b Mon Sep 17 00:00:00 2001 From: Jamalludeen Date: Sat, 30 May 2026 22:07:06 +0430 Subject: [PATCH 3/5] feat(gui): add clipboard helper for license action --- portscanner/gui.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/portscanner/gui.py b/portscanner/gui.py index ba119b7..19c749f 100644 --- a/portscanner/gui.py +++ b/portscanner/gui.py @@ -231,7 +231,7 @@ def create_widgets(self): font=("Segoe UI", 10, "bold"), bg="#6c6cff", fg="white", - command=lambda: self.root.clipboard_append("MIT License - see LICENSE file"), + command=self.copy_license_to_clipboard, ) copy_license_btn.pack(anchor=tk.W, pady=(0, 12)) @@ -695,6 +695,11 @@ def _queue_reset_buttons(self): def _queue_error_dialog(self, title, message): self.root.after(0, messagebox.showerror, title, message) + def copy_license_to_clipboard(self): + self.root.clipboard_clear() + self.root.clipboard_append("MIT License - see LICENSE file") + self.root.update_idletasks() + def _validate_host_field(self): val = self.normalize_host(self.host_entry.get().strip()) try: From f4d79c11fbf31e3562080dabd7bf6937aa2e5908 Mon Sep 17 00:00:00 2001 From: Jamalludeen Date: Sat, 30 May 2026 22:07:27 +0430 Subject: [PATCH 4/5] docs(gui): mention targeted test runs in help --- portscanner/gui.py | 1 + 1 file changed, 1 insertion(+) diff --git a/portscanner/gui.py b/portscanner/gui.py index 19c749f..d77fa7e 100644 --- a/portscanner/gui.py +++ b/portscanner/gui.py @@ -719,6 +719,7 @@ def show_help(self): "- Enter a target host or IP and press Scan.\n" "- Adjust start/end ports, thread count, and timeout.\n" "- Use python main.py --version to confirm the installed build.\n" + "- Use python run_tests.py --pattern=banner for targeted test runs.\n" "- The window title updates with the scan target and final open-port count.\n" "- Oversized scan ranges are rejected to avoid accidental heavy scans.\n" "- Use Export/Copy to save results.\n" From ca9145b8d84feeb33a5cf32ff3c90b24f3e00141 Mon Sep 17 00:00:00 2001 From: Jamalludeen Date: Sat, 30 May 2026 22:08:05 +0430 Subject: [PATCH 5/5] docs(readme): note launcher and help hints --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d85817e..0556663 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,9 @@ python run_tests.py -q python run_tests.py --pattern=banner ``` +The GUI help dialog also mentions the launcher version flag and the targeted +test-run pattern so you can find them quickly from inside the app. + CI is configured via GitHub Actions to run the shared `run_tests.py` entrypoint. ## Banner detection