Add native file dialog support on X11

This commit is contained in:
No Time To Play 2024-01-30 06:58:37 +00:00
parent d0939bcfc7
commit 68fa52618b
2 changed files with 72 additions and 8 deletions

View File

@ -1,5 +1,11 @@
# OutNoted project news
## [Unreleased]
### Added
* Ability to use native file dialogs on X11 (via Zenity)
## [2.0 beta] - 2024-01-28
Forked from version 1.3.2

View File

@ -29,6 +29,9 @@ import webbrowser
import os.path
import sys
import shutil
import subprocess
if sys.version_info.major >= 3:
from tkinter import *
from tkinter import ttk
@ -447,6 +450,12 @@ def handle_new():
else:
status["text"] = "New outline canceled."
def file_dir():
if outline_filename != None:
return os.path.dirname(outline_filename)
else:
return "."
def handle_open():
global outline_filename
@ -459,10 +468,17 @@ def handle_open():
if not do_open:
status["text"] = "Opening canceled."
return
choice = askopenfilename(
title="Open existing outline",
filetypes=file_types,
parent=top)
if (top.tk.call('tk', 'windowingsystem') == 'x11'
and shutil.which("zenity") != None):
choice = open_with_zenity(outline_filename)
else:
choice = askopenfilename(
title="Open existing outline",
initialdir=file_dir(),
filetypes=file_types,
parent=top)
if len(choice) == 0:
status["text"] = "Opening canceled."
elif not os.path.isfile(choice):
@ -473,6 +489,23 @@ def handle_open():
elif load_file(choice):
outline_filename = choice
def open_with_zenity(file_name):
if file_name != None:
zenity_cmd = ["zenity", "--file-selection",
"--title", "Open existing outline",
"--filename", file_name,
"--file-filter", "All files | *",
"--file-filter", "Org Mode files | *.org",
"--file-filter", "Markdown / Gemini | *.md *.gmi"]
else:
zenity_cmd = ["zenity", "--file-selection",
"--title", "Open existing outline",
"--file-filter", "All files | *",
"--file-filter", "Org Mode files | *.org",
"--file-filter", "Markdown / Gemini | *.md *.gmi"]
proc = subprocess.run(zenity_cmd, capture_output=True)
return proc.stdout.decode().rstrip()
def handle_save():
if outline_filename == None:
handle_saveas()
@ -482,15 +515,40 @@ def handle_save():
def handle_saveas():
global outline_filename
choice = asksaveasfilename(
title="Save outline as...",
filetypes=file_types,
parent=top)
if (top.tk.call('tk', 'windowingsystem') == 'x11'
and shutil.which("zenity") != None):
choice = save_with_zenity(outline_filename)
else:
choice = asksaveasfilename(
title="Save outline as...",
initialdir=file_dir(),
filetypes=file_types,
parent=top)
if len(choice) == 0:
status["text"] = "Save canceled."
elif save_file(choice):
outline_filename = choice
def save_with_zenity(file_name):
if file_name != None:
zenity_cmd = ["zenity", "--file-selection",
"--title", "Save outline as...",
"--save", "--confirm-overwrite",
"--filename", file_name,
"--file-filter", "All files | *",
"--file-filter", "Org Mode files | *.org",
"--file-filter", "Markdown / Gemini | *.md *.gmi"]
else:
zenity_cmd = ["zenity", "--file-selection",
"--title", "Save outline as...",
"--save", "--confirm-overwrite",
"--file-filter", "All files | *",
"--file-filter", "Org Mode files | *.org",
"--file-filter", "Markdown / Gemini | *.md *.gmi"]
proc = subprocess.run(zenity_cmd, capture_output=True)
return proc.stdout.decode().rstrip()
def handle_find():
global search
if search != None: