Add native file dialog support on X11
This commit is contained in:
parent
d0939bcfc7
commit
68fa52618b
6
NEWS.md
6
NEWS.md
|
@ -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
|
||||
|
|
74
outnoted2.py
74
outnoted2.py
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue