Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions promptpack/gui/settings_dialog.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import os
import sys
import tkinter as tk
from tkinter import Toplevel, ttk, simpledialog
from ..settings import save_settings
Expand Down Expand Up @@ -48,6 +50,33 @@ def configure_settings(app):
lambda e: canvas.configure(scrollregion=canvas.bbox("all"))
)

# Scroll fix (cross-platform, sicuro)
def _on_mousewheel(event):
if event.widget.winfo_exists():
canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")

def _on_linux_scroll(event):
if event.num == 4:
canvas.yview_scroll(-1, "units")
elif event.num == 5:
canvas.yview_scroll(1, "units")

def _bind_scroll_events(widget):
if os.name == "nt" or sys.platform == "darwin":
widget.bind("<Enter>", lambda e: canvas.bind_all("<MouseWheel>", _on_mousewheel))
widget.bind("<Leave>", lambda e: canvas.unbind_all("<MouseWheel>"))
else:
widget.bind("<Enter>", lambda e: (
canvas.bind_all("<Button-4>", _on_linux_scroll),
canvas.bind_all("<Button-5>", _on_linux_scroll)
))
widget.bind("<Leave>", lambda e: (
canvas.unbind_all("<Button-4>"),
canvas.unbind_all("<Button-5>")
))

_bind_scroll_events(scrollable)

style = ttk.Style(win)
style.configure("Heading.TLabel", font=("TkDefaultFont", 15, "bold"))

Expand Down Expand Up @@ -91,7 +120,7 @@ def prompt_list(title, key):
token_frame.pack(pady=5)
token_menu = ttk.OptionMenu(token_frame, app.max_tokens_choice, preset_label, *preset_names, command=lambda *_: toggle_entry())
token_menu.pack()
# remove hover highlight from dropdown menu

menu_widget = token_menu["menu"]
bg = "#2d2d2d" if app.theme.get() == "dark" else "#ffffff"
fg = "#dcdcdc" if app.theme.get() == "dark" else "#000000"
Expand Down Expand Up @@ -134,4 +163,3 @@ def save_and_close():
win.destroy()

ttk.Button(scrollable, text=app.t("save"), command=save_and_close).pack(pady=10)

53 changes: 53 additions & 0 deletions promptpack/locales/de.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"source": "Quelle",
"source_folder": "Quellordner",
"browse": "Durchsuchen",
"select_files": "Dateien auswählen",
"preview": "Vorschau",
"copy": "In die Zwischenablage kopieren",
"browser": "Im Browser anzeigen",
"open_browser_tip": "Vorschau im Standardbrowser öffnen",
"live_preview": "Live-Vorschau",
"output": "Ausgabe",
"dest_folder": "Zielordner",
"generate": "Erzeugen",
"settings": "⚙️ Einstellungen",
"settings_tip": "Anwendungseinstellungen konfigurieren",
"settings_title": "Einstellungen",
"default_selection": "Standardauswahl",
"allowed_exts": "Standardmäßig erlaubte Erweiterungen",
"excluded_dirs": "Standardmäßig ausgeschlossene Verzeichnisse",
"excluded_files": "Standardmäßig ausgeschlossene Dateien",
"output_opts": "Ausgabeoptionen",
"export_format": "Exportformat:",
"include_headings": "Dateiüberschriften einfügen",
"use_code": "Codeblöcke verwenden",
"tree_only": "Nur Verzeichnisstruktur",
"token_limit": "Token-Limit",
"theme": "Design",
"light": "Hell",
"dark": "Dunkel",
"language": "Sprache",
"english": "Englisch",
"italian": "Italienisch",
"save": "Speichern",
"select_files_title": "Dateien zur Auswahl",
"select_deselect": "Alle auswählen/abwählen",
"confirm": "Auswahl bestätigen",
"no_files": "Keine Dateien",
"no_preview": "Keine Dateien für Vorschau ausgewählt.",
"copied": "Kopiert",
"content_copied": "Inhalt wurde in die Zwischenablage kopiert",
"preview_copied": "Vorschau wurde in die Zwischenablage kopiert",
"error": "Fehler",
"select_source_first": "Bitte zuerst den Quellordner auswählen",
"limit_reached": "Limit erreicht",
"limit_msg": "Token-Limit von {max} erreicht. Einige Dateien wurden übersprungen.",
"done": "Fertig",
"files_generated": "Erzeugte Dateien:\n{msg}",
"no_selected": "Keine Dateien ausgewählt",
"need_folders": "Bitte Quell- und Zielordner auswählen",
"token_header": "Token-Schätzung: {count} (verbleibend {remaining})\n{sep}\n",
"tokens": "Tokens: {tokens} / {max}",
"project_label": "Projekt: {name} – {date}"
}
53 changes: 53 additions & 0 deletions promptpack/locales/ru.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"source": "Источник",
"source_folder": "Исходная папка",
"browse": "Обзор",
"select_files": "Выбрать файлы",
"preview": "Предпросмотр",
"copy": "Копировать в буфер обмена",
"browser": "Открыть в браузере",
"open_browser_tip": "Открыть предпросмотр в браузере по умолчанию",
"live_preview": "Живой предпросмотр",
"output": "Вывод",
"dest_folder": "Папка назначения",
"generate": "Сгенерировать",
"settings": "⚙️ Настройки",
"settings_tip": "Настроить параметры приложения",
"settings_title": "Настройки",
"default_selection": "Выбор по умолчанию",
"allowed_exts": "Допустимые расширения (по умолчанию)",
"excluded_dirs": "Исключённые папки (по умолчанию)",
"excluded_files": "Исключённые файлы (по умолчанию)",
"output_opts": "Параметры вывода",
"export_format": "Формат экспорта:",
"include_headings": "Включить заголовки файлов",
"use_code": "Использовать блоки кода",
"tree_only": "Только структура",
"token_limit": "Лимит токенов",
"theme": "Тема",
"light": "Светлая",
"dark": "Тёмная",
"language": "Язык",
"english": "Английский",
"italian": "Итальянский",
"save": "Сохранить",
"select_files_title": "Выберите файлы для включения",
"select_deselect": "Выбрать/снять все",
"confirm": "Подтвердить выбор",
"no_files": "Нет файлов",
"no_preview": "Файлы для предпросмотра не выбраны.",
"copied": "Скопировано",
"content_copied": "Содержимое скопировано в буфер обмена",
"preview_copied": "Предпросмотр скопирован в буфер обмена",
"error": "Ошибка",
"select_source_first": "Сначала выберите исходную папку",
"limit_reached": "Достигнут лимит",
"limit_msg": "Достигнут лимит {max} токенов. Некоторые файлы были пропущены.",
"done": "Готово",
"files_generated": "Сгенерированные файлы:\n{msg}",
"no_selected": "Файлы не выбраны",
"need_folders": "Выберите исходную и целевую папки",
"token_header": "Оценка токенов: {count} (осталось {remaining})\n{sep}\n",
"tokens": "Токены: {tokens} / {max}",
"project_label": "Проект: {name} – {date}"
}
11 changes: 6 additions & 5 deletions promptpack/__main__.spec → promptpack/promptpack.spec
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(
['__main__.py'],
pathex=[],
['promptpack/__main__.py'],
pathex=['.'],
binaries=[],
datas=[],
hiddenimports=[],
hiddenimports=['pathspec', 'markdown'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
Expand All @@ -22,7 +23,7 @@ exe = EXE(
a.binaries,
a.datas,
[],
name='__main__',
name='promptpack',
debug=False,
bootloader_ignore_signals=False,
strip=False,
Expand All @@ -35,5 +36,5 @@ exe = EXE(
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['icon.ico'],
icon=['promptpack.ico'],
)
2 changes: 1 addition & 1 deletion promptpack/tokenizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
try:
import tiktoken # type: ignore
except Exception: # pragma: no cover - optional dependency
tiktoken = None
tiktoken = None # fallback if tiktoken is missing

try:
from anthropic import Anthropic # type: ignore
Expand Down
Loading