mirror of
https://github.com/aphrody-labs/wordcraft.git
synced 2026-10-13 19:26:53 +00:00
Open Word documents with WordCraft by default (file associations + Options button) (#304)
* Open Word documents with WordCraft from the system (#295) Register WordCraft for Word, RTF and ODT files on Windows and Linux without taking over anyone's defaults, and add File > Options > General > "Make WordCraft the default for Word documents..." where the system allows it. - Windows MSI: a ProgId per type (.docx .docm .dotx .dotm .doc .dot .rtf .odt, plus .md and .txt as Open With candidates only) with the app icon and `"wordcraft.exe" "%1"`, OpenWithProgids, Applications\wordcraft.exe SupportedTypes, and Capabilities + RegisteredApplications so WordCraft shows in Settings > Default apps. New component with its own GUID. - Linux: the desktop entry declares the macro-enabled, template and legacy Word types and text/rtf; AppStream lists the media types. deb, rpm, AppImage and both Flatpak manifests use this same file. - macOS: Info.plist also lists legacy .doc. - The Options button runs `ui.makeDefaultApp` through a new Services::make_default_app hook: Windows opens ms-settings:defaultapps on WordCraft's page; Linux and BSD run `xdg-mime default ai.storyteller.wordcraft.desktop <types>` (refused inside Flatpak or without an installed desktop entry); macOS shows the Finder Get Info hint; the web shows nothing. The status bar reports the outcome. Strings translated in every catalog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Review fixes for #304: keep Make default out of programmatic dispatch ui.makeDefaultApp is refused when run programmatically (control channel, MCP, macros, scripts); only a click on File > Options > General > Make WordCraft the default… reaches the host's hook, so no agent can change the user's system default apps or open system settings. Test: programmatic_calls_cannot_change_the_default_apps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Default-app strings in the newer catalogs; the button's test looks for a General-pane label --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>
This commit is contained in:
25 files changed
+546
-12
No files matched your search
+1
-1
@@ -201,7 +201,7 @@ Ranked, to beta (detail and remaining milestones in [docs/roadmap.md](docs/roadm
|
|||||||
| 2026-10-10 | Draw tab: pen, pencil and highlighter ink, stroke eraser, Select, Review › Hide Ink; ink saved to DOCX as DrawingML freeforms (#307); catalog 399/431 (92.6%) |
|
| 2026-10-10 | Draw tab: pen, pencil and highlighter ink, stroke eraser, Select, Review › Hide Ink; ink saved to DOCX as DrawingML freeforms (#307); catalog 399/431 (92.6%) |
|
||||||
| 2026-10-10 | Draw Table and Eraser (#303): a pen draws one-cell tables and splits cells along drawn lines; the eraser merges the cells beside a border. Catalog 393/431 (91.2%) |
|
| 2026-10-10 | Draw Table and Eraser (#303): a pen draws one-cell tables and splits cells along drawn lines; the eraser merges the cells beside a border. Catalog 393/431 (91.2%) |
|
||||||
| 2026-10-10 | DOCX charts, SmartArt and OLE objects survive open and save with their parts (#319) |
|
| 2026-10-10 | DOCX charts, SmartArt and OLE objects survive open and save with their parts (#319) |
|
||||||
| 2026-10-10 | Full re-measure against Word for Mac 16.113.4 and progress docs to the craftrules standard (this page, `docs/target-app-parity.md`, `gaps.md`, `roadmap.md`, `architecture.md`, format/layout/UI/hardware/localization parity; `docs/parity.md` → `docs/parity-checklist.md`). Landed the same day (~80 PRs): equations with OMML and an Equation tab (#191); Word 97-2003 `.doc` import (#145); right-to-left and Persian text (#207); Zotero integration (#189); Read Aloud player (#190); text boxes and floating objects editable (#46) and placed like Word (#136); floating tables (#137); track-changes fixes (#125, #244); typing parity with Word (#204); hidden text (#173); save prompts and AutoSave rules (#151); LaTeX import/export (#11); keytips and mini-toolbar (#43); Spanish, Ukrainian and Brazilian Portuguese interfaces; system theme (#249); Linux file dialogs no longer freeze (#246); Chinese UI font on Windows (#248); every installed font weight (#239); cell text direction (#245); Paste Special (#235), Advanced Find (#234), Column Selection (#237), Style Inspector (#236), custom table styles (#256), View gridlines (#243), zoom buttons (#232), inertial touchpad scrolling (#252), File Info fields kept (#268), ¶ in mixed-direction paragraphs (#278), Serbian interface (#250), table Height/Width boxes, AutoFit Contents and Table Properties (#44), AutoSave switch greyed out with the reason where it can't save (.md/.txt/.html, unsaved, browser) (#196, #176), OpenGL fallback on Windows PCs without a DirectX 12 driver (#316), Columns, Symbol and Field dialogs (#321), Tabs and Borders and Shading dialogs (#320); free rotation and flips for pictures, shapes and text boxes with a rotation handle (#332); v0.4.0 released |
|
| 2026-10-10 | Full re-measure against Word for Mac 16.113.4 and progress docs to the craftrules standard (this page, `docs/target-app-parity.md`, `gaps.md`, `roadmap.md`, `architecture.md`, format/layout/UI/hardware/localization parity; `docs/parity.md` → `docs/parity-checklist.md`). Landed the same day (~80 PRs): equations with OMML and an Equation tab (#191); Word 97-2003 `.doc` import (#145); right-to-left and Persian text (#207); Zotero integration (#189); Read Aloud player (#190); text boxes and floating objects editable (#46) and placed like Word (#136); floating tables (#137); track-changes fixes (#125, #244); typing parity with Word (#204); hidden text (#173); save prompts and AutoSave rules (#151); LaTeX import/export (#11); keytips and mini-toolbar (#43); Spanish, Ukrainian and Brazilian Portuguese interfaces; system theme (#249); Linux file dialogs no longer freeze (#246); Chinese UI font on Windows (#248); every installed font weight (#239); cell text direction (#245); Paste Special (#235), Advanced Find (#234), Column Selection (#237), Style Inspector (#236), custom table styles (#256), View gridlines (#243), zoom buttons (#232), inertial touchpad scrolling (#252), File Info fields kept (#268), ¶ in mixed-direction paragraphs (#278), Serbian interface (#250), table Height/Width boxes, AutoFit Contents and Table Properties (#44), AutoSave switch greyed out with the reason where it can't save (.md/.txt/.html, unsaved, browser) (#196, #176), OpenGL fallback on Windows PCs without a DirectX 12 driver (#316), Columns, Symbol and Field dialogs (#321), Tabs and Borders and Shading dialogs (#320); free rotation and flips for pictures, shapes and text boxes with a rotation handle (#332); v0.4.0 released; file associations on Windows and Linux with a Make-default button in Options (#295) |
|
||||||
| 2026-10-09 | Interface languages follow the system or Options (#12; zh-hans, zh-hant, ja); TOC page numbers as an updatable field (#52); rotating log file (#17); window geometry remembered (#38) |
|
| 2026-10-09 | Interface languages follow the system or Options (#12; zh-hans, zh-hant, ja); TOC page numbers as an updatable field (#52); rotating log file (#17); window geometry remembered (#38) |
|
||||||
| 2026-10-08 | v0.2.0 and v0.3.0 released; Flatpak and AppImage auto-update (#22) |
|
| 2026-10-08 | v0.2.0 and v0.3.0 released; Flatpak and AppImage auto-update (#22) |
|
||||||
| 2026-10-07 | v0.1.0 released; contributor credits in About (#6) |
|
| 2026-10-07 | v0.1.0 released; contributor credits in About (#6) |
|
||||||
|
|||||||
@@ -0,0 +1,181 @@
|
|||||||
|
//! File › Options › General › Make WordCraft the default for Word documents (#295).
|
||||||
|
//!
|
||||||
|
//! The installers register WordCraft for Word, RTF and ODT files without taking over the
|
||||||
|
//! defaults (`packaging/windows/wordcraft.wxs`, the `.desktop` file's `MimeType=`, `Info.plist`).
|
||||||
|
//! This is the button that makes it the default when the user asks:
|
||||||
|
//! - **Windows** doesn't let apps set defaults: it opens Settings › Default apps on WordCraft's
|
||||||
|
//! page (`ms-settings:defaultapps?registeredAppMachine=WordCraft`; Windows 10 ignores the query
|
||||||
|
//! and shows the Default apps list), where the user picks WordCraft per type.
|
||||||
|
//! - **Linux and BSD**: `xdg-mime default ai.storyteller.wordcraft.desktop <types>` for
|
||||||
|
//! [`WORD_MIME_TYPES`], which writes the user's `mimeapps.list`. Only when the desktop entry is
|
||||||
|
//! installed (deb, rpm, Flatpak; a bare AppImage has none), and not from inside the Flatpak
|
||||||
|
//! sandbox, which can't change the host's defaults.
|
||||||
|
//! - **macOS** has no API for it here: the Options page explains Finder's Get Info › Change All.
|
||||||
|
//!
|
||||||
|
//! [`WORD_MIME_TYPES`]: self::WORD_MIME_TYPES
|
||||||
|
|
||||||
|
use wordcraft_ui_egui::DefaultApp;
|
||||||
|
|
||||||
|
/// The `Services::make_default_app` hook.
|
||||||
|
pub type Hook = Box<dyn Fn() -> Result<DefaultApp, String>>;
|
||||||
|
|
||||||
|
/// The hook for this platform; `None` where there is no button (macOS).
|
||||||
|
pub fn hook() -> Option<Hook> {
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
let hook: Option<Hook> = Some(Box::new(windows::open_default_apps));
|
||||||
|
#[cfg(all(unix, not(target_os = "macos")))]
|
||||||
|
let hook: Option<Hook> = Some(Box::new(xdg::make_default));
|
||||||
|
#[cfg(not(any(target_os = "windows", all(unix, not(target_os = "macos")))))]
|
||||||
|
let hook: Option<Hook> = None;
|
||||||
|
hook
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The desktop entry the Linux packages install, and the Flatpak's app id.
|
||||||
|
#[cfg(any(all(unix, not(target_os = "macos")), test))]
|
||||||
|
const DESKTOP_ID: &str = "ai.storyteller.wordcraft.desktop";
|
||||||
|
|
||||||
|
/// The types the button makes WordCraft the default for on Linux and BSD: Word documents and
|
||||||
|
/// templates (also macro-enabled and legacy), RTF and ODT. The same set the Windows installer
|
||||||
|
/// lists under WordCraft's Capabilities; Markdown and plain text are only offered under Open With.
|
||||||
|
/// Every one is in the `.desktop` file's `MimeType=` (a test checks).
|
||||||
|
#[cfg(any(all(unix, not(target_os = "macos")), test))]
|
||||||
|
const WORD_MIME_TYPES: &[&str] = &[
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .docx
|
||||||
|
"application/vnd.ms-word.document.macroEnabled.12", // .docm
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.template", // .dotx
|
||||||
|
"application/vnd.ms-word.template.macroEnabled.12", // .dotm
|
||||||
|
"application/msword", // .doc
|
||||||
|
"application/msword-template", // .dot
|
||||||
|
"application/rtf", // .rtf
|
||||||
|
"text/rtf", // .rtf (older name)
|
||||||
|
"application/vnd.oasis.opendocument.text", // .odt
|
||||||
|
];
|
||||||
|
|
||||||
|
/// The arguments for `xdg-mime` that make `desktop_id` the default for [`WORD_MIME_TYPES`]: one
|
||||||
|
/// call sets them all.
|
||||||
|
#[cfg(any(all(unix, not(target_os = "macos")), test))]
|
||||||
|
fn xdg_mime_args(desktop_id: &str) -> Vec<String> {
|
||||||
|
["default", desktop_id].into_iter().chain(WORD_MIME_TYPES.iter().copied()).map(str::to_string).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The `applications` folders the desktop looks for entries in, from `XDG_DATA_HOME` (default
|
||||||
|
/// `~/.local/share`) and `XDG_DATA_DIRS` (default `/usr/local/share:/usr/share`). Relative paths
|
||||||
|
/// are ignored, as the XDG Base Directory spec says.
|
||||||
|
#[cfg(any(all(unix, not(target_os = "macos")), test))]
|
||||||
|
fn application_dirs(data_home: Option<&str>, data_dirs: Option<&str>, home: Option<&str>) -> Vec<std::path::PathBuf> {
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
let absolute = |s: &&str| Path::new(s).is_absolute();
|
||||||
|
let home_dir = data_home
|
||||||
|
.filter(|s| !s.is_empty())
|
||||||
|
.filter(absolute)
|
||||||
|
.map(PathBuf::from)
|
||||||
|
.or_else(|| home.filter(|s| !s.is_empty()).filter(absolute).map(|h| Path::new(h).join(".local/share")));
|
||||||
|
let system = data_dirs.filter(|s| !s.is_empty()).unwrap_or("/usr/local/share:/usr/share");
|
||||||
|
home_dir
|
||||||
|
.into_iter()
|
||||||
|
.chain(system.split(':').filter(|s| !s.is_empty()).filter(absolute).map(PathBuf::from))
|
||||||
|
.map(|d| d.join("applications"))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
mod windows {
|
||||||
|
use wordcraft_ui_egui::DefaultApp;
|
||||||
|
|
||||||
|
/// Settings › Default apps, on the page of the app registered as `WordCraft` under
|
||||||
|
/// `HKLM\Software\RegisteredApplications` (the MSI writes it).
|
||||||
|
const SETTINGS_URI: &str = "ms-settings:defaultapps?registeredAppMachine=WordCraft";
|
||||||
|
|
||||||
|
pub(super) fn open_default_apps() -> Result<DefaultApp, String> {
|
||||||
|
open::that_detached(SETTINGS_URI).map_err(|e| format!("couldn't open Settings: {e}"))?;
|
||||||
|
Ok(DefaultApp::SettingsOpened)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(all(unix, not(target_os = "macos")))]
|
||||||
|
mod xdg {
|
||||||
|
use std::process::Command;
|
||||||
|
|
||||||
|
use wordcraft_ui_egui::DefaultApp;
|
||||||
|
|
||||||
|
use super::{DESKTOP_ID, application_dirs, xdg_mime_args};
|
||||||
|
|
||||||
|
/// The longest error text from `xdg-mime` shown in the status bar.
|
||||||
|
const MAX_ERROR: usize = 200;
|
||||||
|
|
||||||
|
pub(super) fn make_default() -> Result<DefaultApp, String> {
|
||||||
|
if std::env::var_os("FLATPAK_ID").is_some() || std::path::Path::new("/.flatpak-info").exists() {
|
||||||
|
return Err(
|
||||||
|
"the Flatpak sandbox can't change default apps; choose WordCraft under Open With in your file manager or system settings".into()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
let var = |k: &str| std::env::var(k).ok();
|
||||||
|
let dirs = application_dirs(var("XDG_DATA_HOME").as_deref(), var("XDG_DATA_DIRS").as_deref(), var("HOME").as_deref());
|
||||||
|
if !dirs.iter().any(|d| d.join(DESKTOP_ID).is_file()) {
|
||||||
|
return Err(format!("{DESKTOP_ID} isn't installed (an AppImage needs desktop integration first)"));
|
||||||
|
}
|
||||||
|
let out = Command::new("xdg-mime").args(xdg_mime_args(DESKTOP_ID)).output().map_err(|e| match e.kind() {
|
||||||
|
std::io::ErrorKind::NotFound => "xdg-mime isn't installed (it comes with xdg-utils)".to_string(),
|
||||||
|
_ => format!("couldn't run xdg-mime: {e}"),
|
||||||
|
})?;
|
||||||
|
if out.status.success() {
|
||||||
|
return Ok(DefaultApp::MadeDefault);
|
||||||
|
}
|
||||||
|
let stderr = String::from_utf8_lossy(&out.stderr);
|
||||||
|
let first = stderr.lines().map(str::trim).find(|l| !l.is_empty()).unwrap_or("");
|
||||||
|
let message: String = first.chars().take(MAX_ERROR).collect();
|
||||||
|
Err(if message.is_empty() { format!("xdg-mime failed ({})", out.status) } else { format!("xdg-mime failed: {message}") })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn xdg_mime_sets_every_word_type_in_one_call() {
|
||||||
|
let args = xdg_mime_args(DESKTOP_ID);
|
||||||
|
assert_eq!(args.first().map(String::as_str), Some("default"));
|
||||||
|
assert_eq!(args.get(1).map(String::as_str), Some("ai.storyteller.wordcraft.desktop"));
|
||||||
|
assert_eq!(&args[2..], WORD_MIME_TYPES);
|
||||||
|
for t in [
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||||
|
"application/msword",
|
||||||
|
"application/rtf",
|
||||||
|
"application/vnd.oasis.opendocument.text",
|
||||||
|
] {
|
||||||
|
assert!(args.iter().any(|a| a == t), "{t}");
|
||||||
|
}
|
||||||
|
assert!(!args.iter().any(|a| a == "text/plain" || a == "text/markdown"), "plain text and Markdown are never claimed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Every type the button claims is one the desktop entry declares, or desktops ignore it.
|
||||||
|
#[test]
|
||||||
|
fn the_desktop_entry_declares_every_claimed_type() {
|
||||||
|
let entry = include_str!("../../../packaging/linux/ai.storyteller.wordcraft.desktop");
|
||||||
|
let declared: Vec<&str> =
|
||||||
|
entry.lines().find_map(|l| l.strip_prefix("MimeType=")).map(|v| v.split(';').filter(|s| !s.is_empty()).collect()).unwrap_or_default();
|
||||||
|
for t in WORD_MIME_TYPES {
|
||||||
|
assert!(declared.contains(t), "{t} missing from MimeType=");
|
||||||
|
}
|
||||||
|
assert!(entry.lines().any(|l| l == "Exec=wordcraft %F"), "files are passed on the command line");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn application_dirs_follow_the_xdg_spec() {
|
||||||
|
let p = |s: &str| PathBuf::from(s);
|
||||||
|
assert_eq!(
|
||||||
|
application_dirs(None, None, Some("/home/a")),
|
||||||
|
[p("/home/a/.local/share/applications"), p("/usr/local/share/applications"), p("/usr/share/applications")]
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
application_dirs(Some("/data"), Some("/opt/share::relative:/usr/share"), Some("/home/a")),
|
||||||
|
[p("/data/applications"), p("/opt/share/applications"), p("/usr/share/applications")]
|
||||||
|
);
|
||||||
|
// Empty or relative values fall back to the defaults; no home at all is fine.
|
||||||
|
assert_eq!(application_dirs(Some(""), Some(""), None), [p("/usr/local/share/applications"), p("/usr/share/applications")]);
|
||||||
|
assert_eq!(application_dirs(Some("rel"), None, Some("also-rel")), [p("/usr/local/share/applications"), p("/usr/share/applications")]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ mod animations;
|
|||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
mod apple_events;
|
mod apple_events;
|
||||||
mod control_server;
|
mod control_server;
|
||||||
|
mod default_apps;
|
||||||
mod file_dialogs;
|
mod file_dialogs;
|
||||||
#[cfg(any(target_os = "windows", test))]
|
#[cfg(any(target_os = "windows", test))]
|
||||||
mod graphics;
|
mod graphics;
|
||||||
@@ -176,13 +177,15 @@ fn save_prefs(app: &WordApp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Native file dialogs, shown without blocking the window (`file_dialogs`, #94), File › Print
|
/// Native file dialogs, shown without blocking the window (`file_dialogs`, #94), File › Print
|
||||||
/// through the system's PDF viewer (`print`, #15), pictures on the system clipboard (#45), and
|
/// through the system's PDF viewer (`print`, #15), pictures on the system clipboard (#45), the
|
||||||
/// the system's animation setting (`animations`).
|
/// system's animation setting (`animations`), and making WordCraft the default app for Word
|
||||||
|
/// documents (`default_apps`, #295).
|
||||||
fn services(file_dialog: file_dialogs::Hook, ctx: &egui::Context) -> Services {
|
fn services(file_dialog: file_dialogs::Hook, ctx: &egui::Context) -> Services {
|
||||||
Services {
|
Services {
|
||||||
file_dialog: Some(file_dialog),
|
file_dialog: Some(file_dialog),
|
||||||
print: Some(print::hook()),
|
print: Some(print::hook()),
|
||||||
clipboard_picture: Some(Box::new(clipboard_picture)),
|
clipboard_picture: Some(Box::new(clipboard_picture)),
|
||||||
|
make_default_app: default_apps::hook(),
|
||||||
animations_enabled: Some(animations::hook(ctx)),
|
animations_enabled: Some(animations::hook(ctx)),
|
||||||
clipboard_text: Some(Box::new(|| arboard::Clipboard::new().ok()?.get_text().ok())),
|
clipboard_text: Some(Box::new(|| arboard::Clipboard::new().ok()?.get_text().ok())),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|||||||
@@ -2041,3 +2041,10 @@
|
|||||||
Your system has animation effects turned off. Efekty animace jsou v systému vypnuté.
|
Your system has animation effects turned off. Efekty animace jsou v systému vypnuté.
|
||||||
Your system doesn't report an animation setting, so animation effects stay on. Systém neuvádí žádné nastavení animací, proto efekty animace zůstávají zapnuté.
|
Your system doesn't report an animation setting, so animation effects stay on. Systém neuvádí žádné nastavení animací, proto efekty animace zůstávají zapnuté.
|
||||||
Do Not Check Spelling or Grammar Nekontrolovat pravopis ani gramatiku
|
Do Not Check Spelling or Grammar Nekontrolovat pravopis ani gramatiku
|
||||||
|
Couldn't make WordCraft the default: {error} WordCraft se nepodařilo nastavit jako výchozí: {error}
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. Ve Výchozích aplikacích vyberte WordCraft pro typy dokumentů, které má otevírat.
|
||||||
|
Make WordCraft the default for Word documents… Nastavit WordCraft jako výchozí pro dokumenty Word…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Soubory .docx, .doc, .rtf a .odt a šablony Wordu se od teď otevírají ve WordCraftu.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Otevře Nastavení › Výchozí aplikace, kde zvolíte WordCraft pro .docx a další typy dokumentů.
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Chcete-li dokumenty Word otevírat ve WordCraftu jako výchozí: vyberte jeden ve Finderu, zvolte Soubor › Informace, v části „Otevřít v aplikaci“ vyberte WordCraft a klikněte na „Změnit vše“.
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft je nyní výchozí aplikací pro dokumenty Word.
|
||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 25.
|
@@ -2035,3 +2035,10 @@
|
|||||||
Your system has animation effects turned off. Auf Ihrem System sind Animationseffekte deaktiviert.
|
Your system has animation effects turned off. Auf Ihrem System sind Animationseffekte deaktiviert.
|
||||||
Your system doesn't report an animation setting, so animation effects stay on. Ihr System meldet keine Animationseinstellung, daher bleiben Animationseffekte aktiviert.
|
Your system doesn't report an animation setting, so animation effects stay on. Ihr System meldet keine Animationseinstellung, daher bleiben Animationseffekte aktiviert.
|
||||||
Do Not Check Spelling or Grammar Rechtschreibung und Grammatik nicht prüfen
|
Do Not Check Spelling or Grammar Rechtschreibung und Grammatik nicht prüfen
|
||||||
|
Couldn't make WordCraft the default: {error} WordCraft konnte nicht als Standard festgelegt werden: {error}
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. Wählen Sie unter „Standard-Apps“ WordCraft für die Dokumenttypen, die es öffnen soll.
|
||||||
|
Make WordCraft the default for Word documents… WordCraft als Standard für Word-Dokumente festlegen…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Öffnet .docx-, .doc-, .rtf- und .odt-Dateien sowie Word-Vorlagen ab jetzt mit WordCraft.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Öffnet Einstellungen › Standard-Apps, wo Sie WordCraft für .docx und die anderen Dokumenttypen wählen.
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Um Word-Dokumente standardmäßig mit WordCraft zu öffnen: Wählen Sie eines im Finder aus, wählen Sie Ablage › Informationen, wählen Sie WordCraft unter „Öffnen mit“ und klicken Sie auf „Alle ändern“.
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft ist jetzt die Standard-App für Word-Dokumente.
|
||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 25.
|
@@ -280,6 +280,7 @@
|
|||||||
Copy Copiar
|
Copy Copiar
|
||||||
Copy Formatting Copiar formato
|
Copy Formatting Copiar formato
|
||||||
Corrections Correcciones
|
Corrections Correcciones
|
||||||
|
Couldn't make WordCraft the default: {error} No se pudo hacer de WordCraft la aplicación predeterminada: {error}
|
||||||
Count words in text boxes and notes Contar las palabras de los cuadros de texto y las notas
|
Count words in text boxes and notes Contar las palabras de los cuadros de texto y las notas
|
||||||
Cover Page Portada
|
Cover Page Portada
|
||||||
Create Crear
|
Create Crear
|
||||||
@@ -449,6 +450,7 @@
|
|||||||
Immersive Inmersivo
|
Immersive Inmersivo
|
||||||
Immersive Reader Lector inmersivo
|
Immersive Reader Lector inmersivo
|
||||||
Immersive\nReader Lector\ninmersivo
|
Immersive\nReader Lector\ninmersivo
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. En Aplicaciones predeterminadas, elige WordCraft para los tipos de documento que quieras que abra.
|
||||||
Increase Font Size Aumentar tamaño de fuente
|
Increase Font Size Aumentar tamaño de fuente
|
||||||
Increase Indent Aumentar sangría
|
Increase Indent Aumentar sangría
|
||||||
Indent Sangría
|
Indent Sangría
|
||||||
@@ -531,6 +533,7 @@
|
|||||||
MIT OR Apache-2.0. Copyright (c) 2026 ArtCraft Team and the WordCraft contributors. MIT o Apache-2.0. Copyright (c) 2026 ArtCraft Team y los colaboradores de WordCraft.
|
MIT OR Apache-2.0. Copyright (c) 2026 ArtCraft Team and the WordCraft contributors. MIT o Apache-2.0. Copyright (c) 2026 ArtCraft Team y los colaboradores de WordCraft.
|
||||||
Macros Macros
|
Macros Macros
|
||||||
Mailings Correspondencia
|
Mailings Correspondencia
|
||||||
|
Make WordCraft the default for Word documents… Hacer de WordCraft la aplicación predeterminada para documentos de Word…
|
||||||
Manage Sources Administrar fuentes
|
Manage Sources Administrar fuentes
|
||||||
Many pages Varias páginas
|
Many pages Varias páginas
|
||||||
Margins Márgenes
|
Margins Márgenes
|
||||||
@@ -602,6 +605,8 @@
|
|||||||
One Page Una página
|
One Page Una página
|
||||||
Open Abrir
|
Open Abrir
|
||||||
OpenDocument Text (*.odt) Texto de OpenDocument (*.odt)
|
OpenDocument Text (*.odt) Texto de OpenDocument (*.odt)
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. A partir de ahora, los archivos .docx, .doc, .rtf y .odt y las plantillas de Word se abren con WordCraft.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Abre Configuración › Aplicaciones predeterminadas, donde eliges WordCraft para .docx y los demás tipos de documento.
|
||||||
Optional Hyphen Guion opcional
|
Optional Hyphen Guion opcional
|
||||||
Copyright Sign Signo de copyright
|
Copyright Sign Signo de copyright
|
||||||
Ellipsis Puntos suspensivos
|
Ellipsis Puntos suspensivos
|
||||||
@@ -903,6 +908,7 @@
|
|||||||
Thick Gruesa
|
Thick Gruesa
|
||||||
Three Tres
|
Three Tres
|
||||||
Tight Ajustado
|
Tight Ajustado
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Para abrir los documentos de Word con WordCraft de forma predeterminada: selecciona uno en el Finder, elige Archivo › Obtener información, selecciona WordCraft en «Abrir con» y haz clic en «Cambiar todo».
|
||||||
Top Border Borde superior
|
Top Border Borde superior
|
||||||
Top Margin Margen superior
|
Top Margin Margen superior
|
||||||
Top of Page Parte superior de la página
|
Top of Page Parte superior de la página
|
||||||
@@ -963,6 +969,7 @@
|
|||||||
Word XML Document (*.xml) Documento XML de Word (*.xml)
|
Word XML Document (*.xml) Documento XML de Word (*.xml)
|
||||||
WordArt WordArt
|
WordArt WordArt
|
||||||
WordCraft WordCraft
|
WordCraft WordCraft
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft es ahora la aplicación predeterminada para los documentos de Word.
|
||||||
Words Palabras
|
Words Palabras
|
||||||
Words only Solo palabras
|
Words only Solo palabras
|
||||||
Wrap Text Ajustar texto
|
Wrap Text Ajustar texto
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 25.
|
@@ -1579,6 +1579,13 @@
|
|||||||
Right (vertical) Paremal (vertikaalne)
|
Right (vertical) Paremal (vertikaalne)
|
||||||
Ruby text: Ruby-tekst:
|
Ruby text: Ruby-tekst:
|
||||||
Size (pt): Suurus (pt):
|
Size (pt): Suurus (pt):
|
||||||
|
Couldn't make WordCraft the default: {error} WordCrafti ei õnnestunud vaikerakenduseks määrata: {error}
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. Vali jaotises „Vaikerakendused“ WordCraft nende dokumenditüüpide jaoks, mida see peaks avama.
|
||||||
|
Make WordCraft the default for Word documents… Määra WordCraft Wordi dokumentide vaikerakenduseks…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Edaspidi avatakse .docx-, .doc-, .rtf- ja .odt-failid ning Wordi mallid WordCraftiga.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Avab Sätted › Vaikerakendused, kus saad valida WordCrafti .docx-i ja teiste dokumenditüüpide jaoks.
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Wordi dokumentide vaikimisi avamiseks WordCraftiga vali Finderis üks dokument, vali Fail › Hangi teave, vali jaotises „Ava rakendusega“ WordCraft ja klõpsa „Muuda kõiki“.
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft on nüüd Wordi dokumentide vaikerakendus.
|
||||||
Templates Mallid
|
Templates Mallid
|
||||||
Templates and Add-ins Mallid ja lisandmoodulid
|
Templates and Add-ins Mallid ja lisandmoodulid
|
||||||
Attach Template Manusta mall
|
Attach Template Manusta mall
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 445 and column 13.
|
@@ -2420,3 +2420,10 @@
|
|||||||
✓ None ✓ Nessuno
|
✓ None ✓ Nessuno
|
||||||
preview Title Esempio
|
preview Title Esempio
|
||||||
Do Not Check Spelling or Grammar Non controllare ortografia e grammatica
|
Do Not Check Spelling or Grammar Non controllare ortografia e grammatica
|
||||||
|
Couldn't make WordCraft the default: {error} Impossibile rendere WordCraft l'app predefinita: {error}
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. In App predefinite, scegli WordCraft per i tipi di documento che deve aprire.
|
||||||
|
Make WordCraft the default for Word documents… Rendi WordCraft l'app predefinita per i documenti Word…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. D'ora in poi i file .docx, .doc, .rtf e .odt e i modelli di Word si aprono con WordCraft.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Apre Impostazioni › App predefinite, dove scegli WordCraft per .docx e gli altri tipi di documento.
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Per aprire i documenti Word con WordCraft per impostazione predefinita: selezionane uno nel Finder, scegli Archivio › Ottieni informazioni, scegli WordCraft in «Apri con», quindi fai clic su «Modifica tutto».
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft è ora l'app predefinita per i documenti Word.
|
||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 25.
|
@@ -77,6 +77,7 @@
|
|||||||
Click to switch back to inserting クリックすると挿入モードに戻ります
|
Click to switch back to inserting クリックすると挿入モードに戻ります
|
||||||
Color only 色のみ
|
Color only 色のみ
|
||||||
Compress punctuation at the start of a line 行頭の約物を詰める
|
Compress punctuation at the start of a line 行頭の約物を詰める
|
||||||
|
Couldn't make WordCraft the default: {error} WordCraft を既定のアプリにできませんでした: {error}
|
||||||
Custom dictionary ユーザー辞書
|
Custom dictionary ユーザー辞書
|
||||||
Dark page (white text on black) ダーク ページ (黒地に白い文字)
|
Dark page (white text on black) ダーク ページ (黒地に白い文字)
|
||||||
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. 四角形をドラッグして表を描くか、セルを横切る線を引いて分割します。Esc で終了します。
|
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. 四角形をドラッグして表を描くか、セルを横切る線を引いて分割します。Esc で終了します。
|
||||||
@@ -105,6 +106,7 @@
|
|||||||
Inside: 内側:
|
Inside: 内側:
|
||||||
Latin text font: ラテン文字のフォント:
|
Latin text font: ラテン文字のフォント:
|
||||||
Left border 左罫線
|
Left border 左罫線
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. 既定のアプリで、WordCraft で開きたい文書の種類ごとに WordCraft を選んでください。
|
||||||
Left Margin 左余白
|
Left Margin 左余白
|
||||||
Indents and Spacing インデントと間隔
|
Indents and Spacing インデントと間隔
|
||||||
Legal style numbering 正規形式で番号付け
|
Legal style numbering 正規形式で番号付け
|
||||||
@@ -125,6 +127,9 @@
|
|||||||
Number format 番号書式
|
Number format 番号書式
|
||||||
Number style for this level: このレベルの番号の種類:
|
Number style for this level: このレベルの番号の種類:
|
||||||
Outside border 外側の罫線
|
Outside border 外側の罫線
|
||||||
|
Make WordCraft the default for Word documents… WordCraft を Word 文書の既定のアプリにする…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. 今後、.docx、.doc、.rtf、.odt ファイルと Word テンプレートを WordCraft で開きます。
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. 設定 › 既定のアプリ を開きます。そこで .docx などの文書の種類ごとに WordCraft を選びます。
|
||||||
Overtype 上書き
|
Overtype 上書き
|
||||||
Overtype (typing replaces the characters after the caret) 上書き (入力した文字がカーソルの後ろの文字を置き換えます)
|
Overtype (typing replaces the characters after the caret) 上書き (入力した文字がカーソルの後ろの文字を置き換えます)
|
||||||
Page display ページの表示
|
Page display ページの表示
|
||||||
@@ -319,6 +324,8 @@
|
|||||||
Delete Style スタイルの削除
|
Delete Style スタイルの削除
|
||||||
Delete Table 表の削除
|
Delete Table 表の削除
|
||||||
Design デザイン
|
Design デザイン
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Word 文書を既定で WordCraft で開くには: Finder で文書を選び、ファイル › 情報を見る を選んで、「このアプリケーションで開く」で WordCraft を選び、「すべてを変更」をクリックします。
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft が Word 文書の既定のアプリになりました。
|
||||||
development build 開発ビルド
|
development build 開発ビルド
|
||||||
Diagonal 対角線
|
Diagonal 対角線
|
||||||
Diamond ひし形
|
Diamond ひし形
|
||||||
|
|||||||
|
@@ -2053,3 +2053,10 @@
|
|||||||
{name} already exists. Choose Save again to replace it. Plik {name} już istnieje. Wybierz ponownie Zapisz, aby go zastąpić.
|
{name} already exists. Choose Save again to replace it. Plik {name} już istnieje. Wybierz ponownie Zapisz, aby go zastąpić.
|
||||||
{name} wasn't found. Nie znaleziono: {name}.
|
{name} wasn't found. Nie znaleziono: {name}.
|
||||||
“{text}” ({row}, {series}) isn't a number. „{text}” ({row}, {series}) nie jest liczbą.
|
“{text}” ({row}, {series}) isn't a number. „{text}” ({row}, {series}) nie jest liczbą.
|
||||||
|
Couldn't make WordCraft the default: {error} Nie udało się ustawić WordCraft jako domyślnego: {error}
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. W Aplikacjach domyślnych wybierz WordCraft dla typów dokumentów, które ma otwierać.
|
||||||
|
Make WordCraft the default for Word documents… Ustaw WordCraft jako domyślny dla dokumentów Word…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Od teraz pliki .docx, .doc, .rtf i .odt oraz szablony Word otwierają się w WordCraft.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Otwiera Ustawienia › Aplikacje domyślne, gdzie wybierasz WordCraft dla .docx i innych typów dokumentów.
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Aby otwierać dokumenty Word domyślnie w WordCraft: zaznacz jeden w Finderze, wybierz Plik › Pokaż info, wybierz WordCraft w „Otwórz za pomocą”, a następnie kliknij „Zmień wszystkie”.
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft jest teraz domyślną aplikacją dla dokumentów Word.
|
||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 25.
|
@@ -271,6 +271,7 @@
|
|||||||
Copy Copiar
|
Copy Copiar
|
||||||
Copy Formatting Copiar formatação
|
Copy Formatting Copiar formatação
|
||||||
Corrections Correções
|
Corrections Correções
|
||||||
|
Couldn't make WordCraft the default: {error} Não foi possível tornar o WordCraft o aplicativo padrão: {error}
|
||||||
Count words in text boxes and notes Contar palavras em caixas de texto e notas
|
Count words in text boxes and notes Contar palavras em caixas de texto e notas
|
||||||
Cover Page Capa
|
Cover Page Capa
|
||||||
Create Criar
|
Create Criar
|
||||||
@@ -308,11 +309,15 @@
|
|||||||
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Arraste um retângulo para desenhar uma tabela, ou uma linha sobre as células para dividi-las. Esc encerra.
|
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Arraste um retângulo para desenhar uma tabela, ou uma linha sobre as células para dividi-las. Esc encerra.
|
||||||
Draw Table Desenhar tabela
|
Draw Table Desenhar tabela
|
||||||
Edit Comment Editar comentário
|
Edit Comment Editar comentário
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. Em Aplicativos padrão, escolha o WordCraft para os tipos de documento que você quer que ele abra.
|
||||||
Left Margin Margem esquerda
|
Left Margin Margem esquerda
|
||||||
Indents and Spacing Recuos e espaçamento
|
Indents and Spacing Recuos e espaçamento
|
||||||
Line breaking Quebra de linhas
|
Line breaking Quebra de linhas
|
||||||
|
Make WordCraft the default for Word documents… Tornar o WordCraft o aplicativo padrão para documentos do Word…
|
||||||
More templates → Mais modelos →
|
More templates → Mais modelos →
|
||||||
No templates match your search. Nenhum modelo corresponde à pesquisa.
|
No templates match your search. Nenhum modelo corresponde à pesquisa.
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. A partir de agora, arquivos .docx, .doc, .rtf e .odt e modelos do Word abrem no WordCraft.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Abre Configurações › Aplicativos padrão, onde você escolhe o WordCraft para .docx e os outros tipos de documento.
|
||||||
Reopen Reabrir
|
Reopen Reabrir
|
||||||
Right Margin Margem direita
|
Right Margin Margem direita
|
||||||
Distribute letters Distribuir letras
|
Distribute letters Distribuir letras
|
||||||
@@ -322,6 +327,8 @@
|
|||||||
Right (vertical) Direita (vertical)
|
Right (vertical) Direita (vertical)
|
||||||
Ruby text: Texto ruby:
|
Ruby text: Texto ruby:
|
||||||
Search for templates Pesquisar modelos
|
Search for templates Pesquisar modelos
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Para abrir documentos do Word com o WordCraft por padrão: selecione um no Finder, escolha Arquivo › Obter Informações, selecione o WordCraft em “Abrir com” e clique em “Alterar Tudo”.
|
||||||
|
WordCraft is now the default app for Word documents. O WordCraft agora é o aplicativo padrão para documentos do Word.
|
||||||
development build versão de desenvolvimento
|
development build versão de desenvolvimento
|
||||||
Diagonal Diagonal
|
Diagonal Diagonal
|
||||||
Diamond Losango
|
Diamond Losango
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 25.
|
@@ -1998,6 +1998,13 @@ preview Title Пример
|
|||||||
Search icons Поиск значков
|
Search icons Поиск значков
|
||||||
No icons match your search. Нет значков, соответствующих поиску.
|
No icons match your search. Нет значков, соответствующих поиску.
|
||||||
Recolor a one-color picture, such as an icon Перекрасить одноцветный рисунок, например значок
|
Recolor a one-color picture, such as an icon Перекрасить одноцветный рисунок, например значок
|
||||||
|
Couldn't make WordCraft the default: {error} Не удалось сделать WordCraft приложением по умолчанию: {error}
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. В разделе «Приложения по умолчанию» выберите WordCraft для нужных типов документов.
|
||||||
|
Make WordCraft the default for Word documents… Сделать WordCraft приложением по умолчанию для документов Word…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Отныне файлы .docx, .doc, .rtf и .odt и шаблоны Word будут открываться в WordCraft.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Открывает «Параметры» › «Приложения по умолчанию», где можно выбрать WordCraft для .docx и других типов документов.
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Чтобы открывать документы Word в WordCraft по умолчанию: выберите документ в Finder, выберите «Файл» › «Свойства», укажите WordCraft в разделе «Открывать в программе» и нажмите «Изменить все».
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft теперь приложение по умолчанию для документов Word.
|
||||||
Templates Шаблоны
|
Templates Шаблоны
|
||||||
Templates and Add-ins Шаблоны и надстройки
|
Templates and Add-ins Шаблоны и надстройки
|
||||||
Attach Template Присоединить шаблон
|
Attach Template Присоединить шаблон
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 7 and column 25.
|
@@ -104,6 +104,7 @@
|
|||||||
Color: {color} Boja: {color}
|
Color: {color} Boja: {color}
|
||||||
Compress punctuation at the start of a line Sažmi interpunkciju na početku reda
|
Compress punctuation at the start of a line Sažmi interpunkciju na početku reda
|
||||||
Confirm password: Potvrdite lozinku:
|
Confirm password: Potvrdite lozinku:
|
||||||
|
Couldn't make WordCraft the default: {error} WordCraft nije mogao da postane podrazumevana aplikacija: {error}
|
||||||
Custom dictionary Prilagođeni rečnik
|
Custom dictionary Prilagođeni rečnik
|
||||||
Dark page (white text on black) Tamna stranica (beo tekst na crnom)
|
Dark page (white text on black) Tamna stranica (beo tekst na crnom)
|
||||||
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Prevucite pravougaonik da nacrtate tabelu ili liniju preko ćelija da ih podelite. Esc završava.
|
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Prevucite pravougaonik da nacrtate tabelu ili liniju preko ćelija da ih podelite. Esc završava.
|
||||||
@@ -148,6 +149,10 @@
|
|||||||
Number format Format broja
|
Number format Format broja
|
||||||
Number style for this level: Stil broja za ovaj nivo:
|
Number style for this level: Stil broja za ovaj nivo:
|
||||||
Outside border Spoljna ivica
|
Outside border Spoljna ivica
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. U podrazumevanim aplikacijama izaberite WordCraft za vrste dokumenata koje želite da otvara.
|
||||||
|
Make WordCraft the default for Word documents… Postavi WordCraft kao podrazumevanu aplikaciju za Word dokumente…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Od sada će se .docx, .doc, .rtf i .odt datoteke i Word šabloni otvarati u WordCraft-u.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Otvara Podešavanja › Podrazumevane aplikacije, gde birate WordCraft za .docx i druge vrste dokumenata.
|
||||||
Overtype Prepisivanje
|
Overtype Prepisivanje
|
||||||
Overtype (typing replaces the characters after the caret) Prepisivanje (otkucano zamenjuje znakove posle kursora)
|
Overtype (typing replaces the characters after the caret) Prepisivanje (otkucano zamenjuje znakove posle kursora)
|
||||||
Page display Prikaz strane
|
Page display Prikaz strane
|
||||||
@@ -367,6 +372,8 @@
|
|||||||
Delete Style Obriši stil
|
Delete Style Obriši stil
|
||||||
Delete Table Obriši tabelu
|
Delete Table Obriši tabelu
|
||||||
Design Dizajn
|
Design Dizajn
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Da bi se Word dokumenti podrazumevano otvarali u WordCraft-u: izaberite jedan u Finder-u, izaberite Datoteka › Prikaži informacije, pod „Otvori pomoću” izaberite WordCraft, pa kliknite „Promeni sve”.
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft je sada podrazumevana aplikacija za Word dokumente.
|
||||||
development build razvojna verzija
|
development build razvojna verzija
|
||||||
Diagonal Dijagonalno
|
Diagonal Dijagonalno
|
||||||
Diamond Dijamant
|
Diamond Dijamant
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 25.
|
@@ -108,6 +108,7 @@
|
|||||||
Color: {color} Боја: {color}
|
Color: {color} Боја: {color}
|
||||||
Compress punctuation at the start of a line Сажми интерпункцију на почетку реда
|
Compress punctuation at the start of a line Сажми интерпункцију на почетку реда
|
||||||
Confirm password: Потврдите лозинку:
|
Confirm password: Потврдите лозинку:
|
||||||
|
Couldn't make WordCraft the default: {error} WordCraft није могао да постане подразумевана апликација: {error}
|
||||||
Custom dictionary Прилагођени речник
|
Custom dictionary Прилагођени речник
|
||||||
Dark page (white text on black) Тамна страница (бео текст на црном)
|
Dark page (white text on black) Тамна страница (бео текст на црном)
|
||||||
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Превуците правоугаоник да нацртате табелу или линију преко ћелија да их поделите. Esc завршава.
|
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Превуците правоугаоник да нацртате табелу или линију преко ћелија да их поделите. Esc завршава.
|
||||||
@@ -152,6 +153,10 @@
|
|||||||
Number format Формат броја
|
Number format Формат броја
|
||||||
Number style for this level: Стил броја за овај ниво:
|
Number style for this level: Стил броја за овај ниво:
|
||||||
Outside border Спољна ивица
|
Outside border Спољна ивица
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. У подразумеваним апликацијама изаберите WordCraft за врсте докумената које желите да отвара.
|
||||||
|
Make WordCraft the default for Word documents… Постави WordCraft као подразумевану апликацију за Word документе…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Од сада ће се .docx, .doc, .rtf и .odt датотеке и Word шаблони отварати у WordCraft-у.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Отвара Подешавања › Подразумеване апликације, где бирате WordCraft за .docx и друге врсте докумената.
|
||||||
Overtype Преписивање
|
Overtype Преписивање
|
||||||
Overtype (typing replaces the characters after the caret) Преписивање (откуцано замењује знакове после курсора)
|
Overtype (typing replaces the characters after the caret) Преписивање (откуцано замењује знакове после курсора)
|
||||||
Page display Приказ стране
|
Page display Приказ стране
|
||||||
@@ -371,6 +376,8 @@
|
|||||||
Delete Style Обриши стил
|
Delete Style Обриши стил
|
||||||
Delete Table Обриши табелу
|
Delete Table Обриши табелу
|
||||||
Design Дизајн
|
Design Дизајн
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Да би се Word документи подразумевано отварали у WordCraft-у: изаберите један у Finder-у, изаберите Датотека › Прикажи информације, под „Отвори помоћу” изаберите WordCraft, па кликните „Промени све”.
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft је сада подразумевана апликација за Word документе.
|
||||||
development build развојна верзија
|
development build развојна верзија
|
||||||
Diagonal Дијагонално
|
Diagonal Дијагонално
|
||||||
Diamond Дијамант
|
Diamond Дијамант
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 11 and column 25.
|
@@ -1623,6 +1623,13 @@
|
|||||||
Search icons Simgelerde ara
|
Search icons Simgelerde ara
|
||||||
No icons match your search. Aramanızla eşleşen simge yok.
|
No icons match your search. Aramanızla eşleşen simge yok.
|
||||||
Recolor a one-color picture, such as an icon Simge gibi tek renkli bir resmi yeniden renklendir
|
Recolor a one-color picture, such as an icon Simge gibi tek renkli bir resmi yeniden renklendir
|
||||||
|
Couldn't make WordCraft the default: {error} WordCraft varsayılan yapılamadı: {error}
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. Varsayılan uygulamalar bölümünde, WordCraft'ın açmasını istediğiniz belge türlerini seçin.
|
||||||
|
Make WordCraft the default for Word documents… WordCraft'ı Word belgeleri için varsayılan yap…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Bundan sonra .docx, .doc, .rtf ve .odt dosyalarını ve Word şablonlarını WordCraft ile açar.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Ayarlar › Varsayılan uygulamalar bölümünü açar; burada .docx ve diğer belge türleri için WordCraft'ı seçersiniz.
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Word belgelerini varsayılan olarak WordCraft ile açmak için: Finder'da bir belge seçin, Dosya › Bilgi Al'ı seçin, Birlikte aç altında WordCraft'ı seçin ve Tümünü Değiştir'e tıklayın.
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft artık Word belgeleri için varsayılan uygulama.
|
||||||
Templates Şablonlar
|
Templates Şablonlar
|
||||||
Templates and Add-ins Şablonlar ve Eklentiler
|
Templates and Add-ins Şablonlar ve Eklentiler
|
||||||
Attach Template Şablonu Ekle
|
Attach Template Şablonu Ekle
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 431 and column 13.
|
@@ -278,6 +278,7 @@
|
|||||||
Copy Копіювати
|
Copy Копіювати
|
||||||
Copy Formatting Копіювати форматування
|
Copy Formatting Копіювати форматування
|
||||||
Corrections Виправлення
|
Corrections Виправлення
|
||||||
|
Couldn't make WordCraft the default: {error} Не вдалося зробити WordCraft типовою програмою: {error}
|
||||||
Count words in text boxes and notes Рахувати слова в текстових полях і виносках
|
Count words in text boxes and notes Рахувати слова в текстових полях і виносках
|
||||||
Cover Page Титульна сторінка
|
Cover Page Титульна сторінка
|
||||||
Create Створити
|
Create Створити
|
||||||
@@ -315,11 +316,15 @@
|
|||||||
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Перетягніть прямокутник, щоб намалювати таблицю, або лінію через клітинки, щоб їх розділити. Esc завершує.
|
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. Перетягніть прямокутник, щоб намалювати таблицю, або лінію через клітинки, щоб їх розділити. Esc завершує.
|
||||||
Draw Table Намалювати таблицю
|
Draw Table Намалювати таблицю
|
||||||
Edit Comment Редагувати коментар
|
Edit Comment Редагувати коментар
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. У програмах за замовчуванням виберіть WordCraft для типів документів, які він має відкривати.
|
||||||
Left Margin Ліве поле
|
Left Margin Ліве поле
|
||||||
Indents and Spacing Відступи й інтервали
|
Indents and Spacing Відступи й інтервали
|
||||||
Line breaking Розрив рядків
|
Line breaking Розрив рядків
|
||||||
|
Make WordCraft the default for Word documents… Зробити WordCraft типовою програмою для документів Word…
|
||||||
More templates → Більше шаблонів →
|
More templates → Більше шаблонів →
|
||||||
No templates match your search. Немає шаблонів, що відповідають пошуку.
|
No templates match your search. Немає шаблонів, що відповідають пошуку.
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. Відтепер файли .docx, .doc, .rtf, .odt і шаблони Word відкриватимуться у WordCraft.
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. Відкриває Параметри › Програми за замовчуванням, де ви вибираєте WordCraft для .docx та інших типів документів.
|
||||||
Reopen Відкрити знову
|
Reopen Відкрити знову
|
||||||
Right Margin Праве поле
|
Right Margin Праве поле
|
||||||
Distribute letters Розподілити літери
|
Distribute letters Розподілити літери
|
||||||
@@ -329,6 +334,8 @@
|
|||||||
Right (vertical) Праворуч (вертикально)
|
Right (vertical) Праворуч (вертикально)
|
||||||
Ruby text: Текст рубі:
|
Ruby text: Текст рубі:
|
||||||
Search for templates Пошук шаблонів
|
Search for templates Пошук шаблонів
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. Щоб документи Word типово відкривалися у WordCraft: виберіть документ у Finder, оберіть Файл › Отримати інфо, виберіть WordCraft у розділі «Відкривати за допомогою» і натисніть «Змінити все».
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft тепер типова програма для документів Word.
|
||||||
development build Збірка для розробки
|
development build Збірка для розробки
|
||||||
Diagonal Діагональ
|
Diagonal Діагональ
|
||||||
Diamond Ромб
|
Diamond Ромб
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 6 and column 31.
|
@@ -89,6 +89,7 @@
|
|||||||
Click to switch back to inserting 单击以切换回插入模式
|
Click to switch back to inserting 单击以切换回插入模式
|
||||||
Color only 仅颜色
|
Color only 仅颜色
|
||||||
Compress punctuation at the start of a line 压缩行首标点
|
Compress punctuation at the start of a line 压缩行首标点
|
||||||
|
Couldn't make WordCraft the default: {error} 无法将 WordCraft 设为默认应用:{error}
|
||||||
Custom dictionary 自定义词典
|
Custom dictionary 自定义词典
|
||||||
Dark page (white text on black) 深色页面(黑底白字)
|
Dark page (white text on black) 深色页面(黑底白字)
|
||||||
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. 拖出矩形以绘制表格,或拖出穿过单元格的线条以拆分单元格。按 Esc 结束。
|
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. 拖出矩形以绘制表格,或拖出穿过单元格的线条以拆分单元格。按 Esc 结束。
|
||||||
@@ -117,6 +118,7 @@
|
|||||||
Inside: 内侧:
|
Inside: 内侧:
|
||||||
Latin text font: 拉丁文字字体:
|
Latin text font: 拉丁文字字体:
|
||||||
Left border 左框线
|
Left border 左框线
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. 请在“默认应用”中,为希望由 WordCraft 打开的文档类型选择 WordCraft。
|
||||||
Left Margin 左边距
|
Left Margin 左边距
|
||||||
Indents and Spacing 缩进和间距
|
Indents and Spacing 缩进和间距
|
||||||
Legal style numbering 正规形式编号
|
Legal style numbering 正规形式编号
|
||||||
@@ -137,6 +139,9 @@
|
|||||||
Number format 编号格式
|
Number format 编号格式
|
||||||
Number style for this level: 此级别的编号样式:
|
Number style for this level: 此级别的编号样式:
|
||||||
Outside border 外侧框线
|
Outside border 外侧框线
|
||||||
|
Make WordCraft the default for Word documents… 将 WordCraft 设为 Word 文档的默认应用…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. 今后用 WordCraft 打开 .docx、.doc、.rtf、.odt 文件和 Word 模板。
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. 打开“设置 › 默认应用”,在其中为 .docx 及其他文档类型选择 WordCraft。
|
||||||
Overtype 改写
|
Overtype 改写
|
||||||
Overtype (typing replaces the characters after the caret) 改写(键入的内容替换插入点后的字符)
|
Overtype (typing replaces the characters after the caret) 改写(键入的内容替换插入点后的字符)
|
||||||
Page display 页面显示
|
Page display 页面显示
|
||||||
@@ -331,6 +336,8 @@
|
|||||||
Delete Style 删除样式
|
Delete Style 删除样式
|
||||||
Delete Table 删除表格
|
Delete Table 删除表格
|
||||||
Design 设计
|
Design 设计
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. 要默认用 WordCraft 打开 Word 文档:在访达中选中一个文档,选择“文件 › 显示简介”,在“打开方式”中选择 WordCraft,然后点按“全部更改”。
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft 现在是 Word 文档的默认应用。
|
||||||
development build 开发版本
|
development build 开发版本
|
||||||
Diagonal 斜式
|
Diagonal 斜式
|
||||||
Diamond 菱形
|
Diamond 菱形
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 7 and column 25.
|
@@ -78,6 +78,7 @@
|
|||||||
Click to switch back to inserting 按一下以切換回插入模式
|
Click to switch back to inserting 按一下以切換回插入模式
|
||||||
Color only 僅色彩
|
Color only 僅色彩
|
||||||
Compress punctuation at the start of a line 壓縮行首標點
|
Compress punctuation at the start of a line 壓縮行首標點
|
||||||
|
Couldn't make WordCraft the default: {error} 無法將 WordCraft 設為預設應用程式:{error}
|
||||||
Custom dictionary 自訂字典
|
Custom dictionary 自訂字典
|
||||||
Dark page (white text on black) 深色頁面(黑底白字)
|
Dark page (white text on black) 深色頁面(黑底白字)
|
||||||
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. 拖出矩形以繪製表格,或拖出穿過儲存格的線條以分割儲存格。按 Esc 結束。
|
Drag a rectangle to draw a table, or a line across cells to split them. Esc stops. 拖出矩形以繪製表格,或拖出穿過儲存格的線條以分割儲存格。按 Esc 結束。
|
||||||
@@ -106,6 +107,7 @@
|
|||||||
Inside: 內側:
|
Inside: 內側:
|
||||||
Latin text font: 拉丁文字字型:
|
Latin text font: 拉丁文字字型:
|
||||||
Left border 左框線
|
Left border 左框線
|
||||||
|
In Default apps, choose WordCraft for the document types you want it to open. 請在「預設應用程式」中,為要以 WordCraft 開啟的文件類型選擇 WordCraft。
|
||||||
Left Margin 左邊界
|
Left Margin 左邊界
|
||||||
Indents and Spacing 縮排和間距
|
Indents and Spacing 縮排和間距
|
||||||
Legal style numbering 正規形式編號
|
Legal style numbering 正規形式編號
|
||||||
@@ -126,6 +128,9 @@
|
|||||||
Number format 編號格式
|
Number format 編號格式
|
||||||
Number style for this level: 此層級的編號樣式:
|
Number style for this level: 此層級的編號樣式:
|
||||||
Outside border 外側框線
|
Outside border 外側框線
|
||||||
|
Make WordCraft the default for Word documents… 將 WordCraft 設為 Word 文件的預設應用程式…
|
||||||
|
Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on. 今後以 WordCraft 開啟 .docx、.doc、.rtf、.odt 檔案和 Word 範本。
|
||||||
|
Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types. 開啟「設定 › 預設應用程式」,在其中為 .docx 及其他文件類型選擇 WordCraft。
|
||||||
Overtype 取代
|
Overtype 取代
|
||||||
Overtype (typing replaces the characters after the caret) 取代(輸入的內容會取代插入點後的字元)
|
Overtype (typing replaces the characters after the caret) 取代(輸入的內容會取代插入點後的字元)
|
||||||
Page display 頁面顯示
|
Page display 頁面顯示
|
||||||
@@ -320,6 +325,8 @@
|
|||||||
Delete Style 刪除樣式
|
Delete Style 刪除樣式
|
||||||
Delete Table 刪除表格
|
Delete Table 刪除表格
|
||||||
Design 設計
|
Design 設計
|
||||||
|
To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All. 若要預設以 WordCraft 開啟 Word 文件:在 Finder 中選取一份文件,選擇「檔案 › 取得資訊」,在「打開檔案的應用程式」中選擇 WordCraft,然後按一下「全部更改」。
|
||||||
|
WordCraft is now the default app for Word documents. WordCraft 現在是 Word 文件的預設應用程式。
|
||||||
development build 開發版本
|
development build 開發版本
|
||||||
Diagonal 斜向
|
Diagonal 斜向
|
||||||
Diamond 菱形
|
Diamond 菱形
|
||||||
|
|||||||
|
@@ -125,6 +125,21 @@ pub struct Services {
|
|||||||
pub store_font: Option<Box<dyn Fn(&str, &[u8])>>,
|
pub store_font: Option<Box<dyn Fn(&str, &[u8])>>,
|
||||||
/// Web: forget a stored font (its stored file name) once the user removes it.
|
/// Web: forget a stored font (its stored file name) once the user removes it.
|
||||||
pub forget_font: Option<Box<dyn Fn(&str)>>,
|
pub forget_font: Option<Box<dyn Fn(&str)>>,
|
||||||
|
/// Desktop: File › Options › General › Make WordCraft the default for Word documents (#295),
|
||||||
|
/// only from that button (never a programmatic command). Windows opens the Settings app's
|
||||||
|
/// Default apps page (apps can't set defaults themselves); Linux and BSD set it with
|
||||||
|
/// `xdg-mime`. `None` (web, macOS) hides the button; macOS shows how to do it in Finder
|
||||||
|
/// instead. An error means nothing changed.
|
||||||
|
pub make_default_app: Option<Box<dyn Fn() -> Result<DefaultApp, String>>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// What [`Services::make_default_app`] did.
|
||||||
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
|
pub enum DefaultApp {
|
||||||
|
/// The system's default-apps settings opened; the user picks WordCraft there (Windows).
|
||||||
|
SettingsOpened,
|
||||||
|
/// WordCraft is now the default app for Word documents (Linux, BSD).
|
||||||
|
MadeDefault,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Files delivered asynchronously.
|
/// Files delivered asynchronously.
|
||||||
@@ -991,6 +1006,16 @@ impl WordApp {
|
|||||||
// page; this is the button on it, and the one programmatic call that opens system UI
|
// page; this is the button on it, and the one programmatic call that opens system UI
|
||||||
// here, like `ui.openFileDialog` — only when the host can print.
|
// here, like `ui.openFileDialog` — only when the host can print.
|
||||||
"ui.print" => return Some(self.print_to_system(p)),
|
"ui.print" => return Some(self.print_to_system(p)),
|
||||||
|
// File › Options › General › Make WordCraft the default… changes the user's system
|
||||||
|
// default apps (Linux) or opens system settings (Windows), so only a click on that
|
||||||
|
// button does it ([`WordApp::make_default_app`]); scripts, the control channel and
|
||||||
|
// MCP get an error.
|
||||||
|
"ui.makeDefaultApp" => {
|
||||||
|
return Some(Err(
|
||||||
|
"making WordCraft the default app needs a click in File › Options › General; scripts and agents can't change system defaults"
|
||||||
|
.into(),
|
||||||
|
));
|
||||||
|
}
|
||||||
"ui.discord" => {
|
"ui.discord" => {
|
||||||
self.canvas.open_url = Some("https://discord.gg/artcraft".into());
|
self.canvas.open_url = Some("https://discord.gg/artcraft".into());
|
||||||
json!({})
|
json!({})
|
||||||
@@ -1052,6 +1077,32 @@ impl WordApp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// File › Options › General › Make WordCraft the default…: hand over to the host's
|
||||||
|
/// [`Services::make_default_app`] and say in the status bar what happened. An error when the
|
||||||
|
/// host has no hook (web, macOS). Only the button calls this: it is deliberately not a
|
||||||
|
/// command, so nothing programmatic (control channel, MCP, macros) can change system defaults.
|
||||||
|
pub(crate) fn make_default_app(&mut self) -> Result<Value, String> {
|
||||||
|
let Some(hook) = self.services.make_default_app.as_ref() else {
|
||||||
|
return Err("WordCraft can't change the default apps here; use your system's settings".into());
|
||||||
|
};
|
||||||
|
match hook() {
|
||||||
|
Ok(DefaultApp::SettingsOpened) => {
|
||||||
|
self.status(tl!("In Default apps, choose WordCraft for the document types you want it to open."));
|
||||||
|
Ok(json!({"settingsOpened": true}))
|
||||||
|
}
|
||||||
|
Ok(DefaultApp::MadeDefault) => {
|
||||||
|
self.status(tl!("WordCraft is now the default app for Word documents."));
|
||||||
|
Ok(json!({"default": true}))
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
log::warn!("make default app: {e}");
|
||||||
|
let msg = i18n::fmt(tl!("Couldn't make WordCraft the default: {error}"), &[("error", &e)]);
|
||||||
|
self.status(msg.clone());
|
||||||
|
Err(msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn status(&mut self, s: impl Into<String>) {
|
pub fn status(&mut self, s: impl Into<String>) {
|
||||||
self.status_msg = Some((s.into(), now_ms()));
|
self.status_msg = Some((s.into(), now_ms()));
|
||||||
}
|
}
|
||||||
@@ -2391,6 +2442,50 @@ mod tests {
|
|||||||
assert!(a.status_msg.as_ref().is_some_and(|(m, _)| m.contains("blocked by the browser")), "the status bar says why");
|
assert!(a.status_msg.as_ref().is_some_and(|(m, _)| m.contains("blocked by the browser")), "the status bar says why");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Make WordCraft the default… (#295) goes through the host's hook and reports the outcome in
|
||||||
|
/// the status bar; without a hook (web, macOS) it's an error and nothing runs.
|
||||||
|
#[test]
|
||||||
|
fn make_default_app_needs_the_hosts_hook_and_reports_the_outcome() {
|
||||||
|
let mut a = app();
|
||||||
|
assert!(a.make_default_app().is_err(), "no hook: an error");
|
||||||
|
|
||||||
|
let calls = std::rc::Rc::new(std::cell::Cell::new(0));
|
||||||
|
let seen = calls.clone();
|
||||||
|
a.services.make_default_app = Some(Box::new(move || {
|
||||||
|
seen.set(seen.get() + 1);
|
||||||
|
Ok(DefaultApp::MadeDefault)
|
||||||
|
}));
|
||||||
|
assert_eq!(a.make_default_app().unwrap()["default"], true);
|
||||||
|
assert_eq!(calls.get(), 1);
|
||||||
|
assert!(a.status_msg.as_ref().is_some_and(|(m, _)| m.contains("now the default")), "{:?}", a.status_msg);
|
||||||
|
|
||||||
|
a.services.make_default_app = Some(Box::new(|| Ok(DefaultApp::SettingsOpened)));
|
||||||
|
assert_eq!(a.make_default_app().unwrap()["settingsOpened"], true);
|
||||||
|
assert!(a.status_msg.as_ref().is_some_and(|(m, _)| m.contains("Default apps")), "{:?}", a.status_msg);
|
||||||
|
|
||||||
|
a.services.make_default_app = Some(Box::new(|| Err("xdg-mime isn't installed".into())));
|
||||||
|
let e = a.make_default_app().unwrap_err();
|
||||||
|
assert!(e.contains("xdg-mime isn't installed"), "{e}");
|
||||||
|
assert!(a.status_msg.as_ref().is_some_and(|(m, _)| m.contains("xdg-mime isn't installed")), "the status bar says why");
|
||||||
|
assert!(!a.session.dirty, "the document is untouched");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Changing the system's default apps needs the user's click: `ui.makeDefaultApp` through
|
||||||
|
/// `run` (what the control channel, MCP and macros use) is refused and never reaches the hook.
|
||||||
|
#[test]
|
||||||
|
fn programmatic_calls_cannot_change_the_default_apps() {
|
||||||
|
let mut a = app();
|
||||||
|
let calls = std::rc::Rc::new(std::cell::Cell::new(0));
|
||||||
|
let seen = calls.clone();
|
||||||
|
a.services.make_default_app = Some(Box::new(move || {
|
||||||
|
seen.set(seen.get() + 1);
|
||||||
|
Ok(DefaultApp::MadeDefault)
|
||||||
|
}));
|
||||||
|
let e = a.run("ui.makeDefaultApp", json!({})).unwrap_err();
|
||||||
|
assert!(e.contains("click"), "{e}");
|
||||||
|
assert_eq!(calls.get(), 0, "the hook never ran");
|
||||||
|
}
|
||||||
|
|
||||||
/// The print settings reach the hook: bad ones print nothing, `copies` repeats the pages.
|
/// The print settings reach the hook: bad ones print nothing, `copies` repeats the pages.
|
||||||
#[test]
|
#[test]
|
||||||
fn ui_print_honours_the_print_settings() {
|
fn ui_print_honours_the_print_settings() {
|
||||||
@@ -2448,6 +2543,42 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// File › Options shows Make WordCraft the default… only when the host can do it (#295), and
|
||||||
|
/// the button runs the host's hook.
|
||||||
|
#[test]
|
||||||
|
fn the_default_app_button_shows_only_with_the_hosts_hook() {
|
||||||
|
use egui_kittest::kittest::Queryable;
|
||||||
|
const LABEL: &str = "Make WordCraft the default for Word documents…";
|
||||||
|
for hook in [false, true] {
|
||||||
|
let calls = std::rc::Rc::new(std::cell::Cell::new(0));
|
||||||
|
let mut a = app();
|
||||||
|
if hook {
|
||||||
|
let seen = calls.clone();
|
||||||
|
a.services.make_default_app = Some(Box::new(move || {
|
||||||
|
seen.set(seen.get() + 1);
|
||||||
|
Ok(DefaultApp::MadeDefault)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
a.run("ui.backstage", json!({"value": true, "page": "options"})).unwrap();
|
||||||
|
let mut h = egui_kittest::Harness::builder().with_size(egui::vec2(1440.0, 900.0)).build_ui_state(
|
||||||
|
|ui, app: &mut WordApp| {
|
||||||
|
let ctx = ui.ctx().clone();
|
||||||
|
app.logic(&ctx);
|
||||||
|
app.ui(ui);
|
||||||
|
},
|
||||||
|
a,
|
||||||
|
);
|
||||||
|
h.run_steps(4);
|
||||||
|
assert!(h.query_by_label("Show the community button in the title bar").is_some(), "hook {hook}: the Options page rendered");
|
||||||
|
assert_eq!(h.query_by_label(LABEL).is_some(), hook, "hook {hook}: the button");
|
||||||
|
if hook {
|
||||||
|
h.get_by_label(LABEL).click();
|
||||||
|
h.run_steps(2);
|
||||||
|
assert_eq!(calls.get(), 1, "the button ran the hook");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A prompt about document A outlived an agent replacing A with B, and Don't Save then ran
|
/// A prompt about document A outlived an agent replacing A with B, and Don't Save then ran
|
||||||
/// the pending New against B, throwing away B's edits under a question naming A.
|
/// the pending New against B, throwing away B's edits under a question naming A.
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -140,6 +140,7 @@ fn general(app: &mut WordApp, ui: &mut Ui) {
|
|||||||
let _ = app.run("view.darkMode", json!({"value": dark_page}));
|
let _ = app.run("view.darkMode", json!({"value": dark_page}));
|
||||||
}
|
}
|
||||||
ui.checkbox(&mut app.ui.show_discord, tl!("Show the community button in the title bar"));
|
ui.checkbox(&mut app.ui.show_discord, tl!("Show the community button in the title bar"));
|
||||||
|
default_app_button(app, ui);
|
||||||
ui.add_space(8.0);
|
ui.add_space(8.0);
|
||||||
section(ui, "Personalize");
|
section(ui, "Personalize");
|
||||||
egui::Grid::new("options_user").num_columns(2).spacing(vec2(8.0, 6.0)).show(ui, |ui| {
|
egui::Grid::new("options_user").num_columns(2).spacing(vec2(8.0, 6.0)).show(ui, |ui| {
|
||||||
@@ -480,6 +481,29 @@ fn overlay<T: DeserializeOwned>(root: &mut Value, path: &mut Vec<String>, input:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// File ▸ Options ▸ General: make WordCraft the default app for Word documents (#295). Only where
|
||||||
|
/// the host can (`Services::make_default_app`: Windows opens Default apps, Linux and BSD use
|
||||||
|
/// `xdg-mime`); macOS shows how to do it in Finder, the web shows nothing.
|
||||||
|
fn default_app_button(app: &mut WordApp, ui: &mut Ui) {
|
||||||
|
if app.services.make_default_app.is_some() {
|
||||||
|
let hint = if cfg!(target_os = "windows") {
|
||||||
|
tl!("Opens Settings › Default apps, where you choose WordCraft for .docx and the other document types.")
|
||||||
|
} else {
|
||||||
|
tl!("Opens .docx, .doc, .rtf and .odt files and Word templates with WordCraft from now on.")
|
||||||
|
};
|
||||||
|
if ui.button(tl!("Make WordCraft the default for Word documents…")).on_hover_text(hint).clicked() {
|
||||||
|
// Straight to the hook, not through `run`: only a click may change system defaults.
|
||||||
|
let _ = app.make_default_app();
|
||||||
|
}
|
||||||
|
} else if cfg!(target_os = "macos") {
|
||||||
|
ui.label(
|
||||||
|
egui::RichText::new(tl!("To open Word documents with WordCraft by default: select one in Finder, choose File › Get Info, pick WordCraft under Open with, then click Change All."))
|
||||||
|
.small()
|
||||||
|
.weak(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use egui_kittest::kittest::Queryable;
|
use egui_kittest::kittest::Queryable;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# File-format parity with Microsoft Word
|
# File-format parity with Microsoft Word
|
||||||
|
|
||||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** trivial (.doc pictures, shapes and text boxes read, #551; previously trivial: import/export fixes for TXT, RTF, ODT, HTML and LaTeX, #433–#440; previously major: first version; every format Word reads or writes, measured from the readers and writers on origin/main) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4, plus Word for Windows' extra formats
|
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** minor (file associations and the default-app button, #295; previously trivial: import/export fixes for TXT, RTF, ODT, HTML and LaTeX, #433–#440; previously major: first version; every format Word reads or writes, measured from the readers and writers on origin/main) · **Target:** Microsoft Word (Microsoft 365) for Mac 16.113.4, plus Word for Windows' extra formats
|
||||||
|
|
||||||
Every format Word opens or saves, what WordCraft does with it, and how it's tested. Fidelity is the
|
Every format Word opens or saves, what WordCraft does with it, and how it's tested. Fidelity is the
|
||||||
share of a typical real-world file's content and formatting that survives (read: shows correctly;
|
share of a typical real-world file's content and formatting that survives (read: shows correctly;
|
||||||
@@ -79,8 +79,19 @@ Measured by grepping `crates/docx/src/read` and `src/write` for the OOXML elemen
|
|||||||
| Hostile input | ✅ | — | `malformed.rs`, capped allocations, never-crash standard |
|
| Hostile input | ✅ | — | `malformed.rs`, capped allocations, never-crash standard |
|
||||||
| Document paragraph defaults (`w:pPrDefault`) | ✅ | ✅ | Omission and explicit empty defaults remain distinct across repeated saves; nonempty defaults and later default-spacing edits are written |
|
| Document paragraph defaults (`w:pPrDefault`) | ✅ | ✅ | Omission and explicit empty defaults remain distinct across repeated saves; nonempty defaults and later default-spacing edits are written |
|
||||||
|
|
||||||
## Paragraph-default preservation
|
## Opening files from the system
|
||||||
|
|
||||||
|
Double-clicking a document, Open With, and making WordCraft the default app (#295). The installers
|
||||||
|
register WordCraft for these types but never take over a default; File › Options › General has
|
||||||
|
**Make WordCraft the default for Word documents…** where the system allows it.
|
||||||
|
|
||||||
|
| Platform | Registered types | Default app | Notes |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Windows (MSI) | `.docx` `.docm` `.dotx` `.dotm` `.doc` `.dot` `.rtf` `.odt`; `.md` `.txt` under Open With only | Options button opens Settings › Default apps on WordCraft's page | One ProgId per type, `OpenWithProgids`, Capabilities + `RegisteredApplications` (`packaging/windows/wordcraft.wxs`). Not yet tried on a real install |
|
||||||
|
| Linux, BSD (deb, rpm, Flatpak, AppImage) | Word, ODT, RTF, Markdown, LaTeX, HTML, text (`MimeType=` in the desktop entry, AppStream `mediatype`) | Options button runs `xdg-mime default` for the Word, RTF and ODT types | Not from inside Flatpak (the sandbox can't change host defaults); a bare AppImage needs desktop integration first |
|
||||||
|
| macOS | `CFBundleDocumentTypes` as Alternate handler (Word, ODT, RTF, Markdown, HTML, text) | Finder › Get Info › Open with › Change All (the Options page says so) | Apple events open the files (#27) |
|
||||||
|
|
||||||
|
## Paragraph-default preservation
|
||||||
The styles reader records whether `w:pPrDefault` exists. The writer keeps an omitted
|
The styles reader records whether `w:pPrDefault` exists. The writer keeps an omitted
|
||||||
container omitted when its modeled properties are still empty. An explicitly empty
|
container omitted when its modeled properties are still empty. An explicitly empty
|
||||||
container stays present, and editing document-default spacing writes the new values.
|
container stays present, and editing document-default spacing writes the new values.
|
||||||
@@ -94,30 +105,24 @@ identical text, glyph/image geometry, page sizes and embedded font-program hashe
|
|||||||
two WordCraft save/reopen cycles. All fifteen variants open without repair warnings.
|
two WordCraft save/reopen cycles. All fifteen variants open without repair warnings.
|
||||||
Word PDFs and measurements remain local under ignored `plan/word/`; they are not fixtures.
|
Word PDFs and measurements remain local under ignored `plan/word/`; they are not fixtures.
|
||||||
These checks cover preservation on Word reopen, not WordCraft pagination parity.
|
These checks cover preservation on Word reopen, not WordCraft pagination parity.
|
||||||
|
|
||||||
The [public OOXML reference](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.paragraphpropertiesdefault?view=openxml-3.0.1)
|
The [public OOXML reference](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.paragraphpropertiesdefault?view=openxml-3.0.1)
|
||||||
describes omission as leaving paragraph defaults application-defined. Real-world corpus
|
describes omission as leaving paragraph defaults application-defined. Real-world corpus
|
||||||
coverage and WordCraft layout matching remain separate gaps.
|
coverage and WordCraft layout matching remain separate gaps.
|
||||||
|
|
||||||
## Custom XML store preservation
|
## Custom XML store preservation
|
||||||
|
|
||||||
A reduced original bound-control DOCX loses its backing data, item properties and relationship
|
A reduced original bound-control DOCX loses its backing data, item properties and relationship
|
||||||
on main, both without editing and after unrelated edits. Main's content-control support (#381)
|
on main, both without editing and after unrelated edits. Main's content-control support (#381)
|
||||||
preserves control metadata, including binding attributes, while this custom XML path keeps the
|
preserves control metadata, including binding attributes, while this custom XML path keeps the
|
||||||
backing store through the bounded opaque part graph: payload bytes, content types and
|
backing store through the bounded opaque part graph: payload bytes, content types and
|
||||||
related-part IDs survive two edited save/reopen cycles.
|
related-part IDs survive two edited save/reopen cycles.
|
||||||
|
|
||||||
The public [dataBinding contract](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.databinding?view=openxml-3.0.1)
|
The public [dataBinding contract](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.databinding?view=openxml-3.0.1)
|
||||||
maps a control to a custom XML data part; its [item properties](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.customxmldataproperties.datastoreitem?view=openxml-3.0.1)
|
maps a control to a custom XML data part; its [item properties](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.customxmldataproperties.datastoreitem?view=openxml-3.0.1)
|
||||||
identify the store. Keeping displayed text alone does not preserve that mapping. This change
|
identify the store. Keeping displayed text alone does not preserve that mapping. This change
|
||||||
preserves stores without evaluating XPath or synchronizing control edits into XML.
|
preserves stores without evaluating XPath or synchronizing control edits into XML.
|
||||||
|
|
||||||
Focused original tests cover package/main roots, multiple/shared stores, cycles, external schema
|
Focused original tests cover package/main roots, multiple/shared stores, cycles, external schema
|
||||||
references, missing parts, UTF-16 payloads, strict relationship types and reserved filenames.
|
references, missing parts, UTF-16 payloads, strict relationship types and reserved filenames.
|
||||||
The bibliography names used by #532 are reserved; bibliography already loaded into the source
|
The bibliography names used by #532 are reserved; bibliography already loaded into the source
|
||||||
model belongs to its writer. Word-derived files are not fixtures. No readiness estimate rises
|
model belongs to its writer. Word-derived files are not fixtures. No readiness estimate rises
|
||||||
from these synthetic package checks, and native Word rendering/binding behavior remains untested.
|
from these synthetic package checks, and native Word rendering/binding behavior remains untested.
|
||||||
|
|
||||||
## Native save-path guarantees
|
## Native save-path guarantees
|
||||||
Native `io::save_path_with` serializes (and, for password-protected DOCX, encrypts) before creating an exclusively owned sibling temporary file. It writes and synchronizes that file, closes it, then replaces the destination. Failed preparation or replacement keeps the original bytes; cleanup removes only the save's temporary file, on a best-effort basis. Existing `<name>.tmp` files, directories and links are untouched. A new document gets the default mode (`0666` less the umask). When replacing an existing regular file, the Unix temporary file starts with mode `0600` and then takes the existing file's basic permissions. Serialization and format support are unchanged.
|
Native `io::save_path_with` serializes (and, for password-protected DOCX, encrypts) before creating an exclusively owned sibling temporary file. It writes and synchronizes that file, closes it, then replaces the destination. Failed preparation or replacement keeps the original bytes; cleanup removes only the save's temporary file, on a best-effort basis. Existing `<name>.tmp` files, directories and links are untouched. A new document gets the default mode (`0666` less the umask). When replacing an existing regular file, the Unix temporary file starts with mode `0600` and then takes the existing file's basic permissions. Serialization and format support are unchanged.
|
||||||
Synthetic CLI cases and `engine/tests/safe_save.rs` cover occupied names, links, blocked replacement, missing directories, Save As session state, password-protected saves and original-file protection on macOS. Unit tests inject preparation errors and interleave two prepared saves. Independent saves use separate files; the last successful replacement wins. This is not document locking or conflict detection.
|
Synthetic CLI cases and `engine/tests/safe_save.rs` cover occupied names, links, blocked replacement, missing directories, Save As session state, password-protected saves and original-file protection on macOS. Unit tests inject preparation errors and interleave two prepared saves. Independent saves use separate files; the last successful replacement wins. This is not document locking or conflict detection.
|
||||||
@@ -156,6 +161,7 @@ raise readiness estimates. No Word-derived files are fixtures.
|
|||||||
|
|
||||||
| Date | Change | Summary |
|
| Date | Change | Summary |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|
| 2026-10-11 | minor | Opening files from the system: file associations and the default-app button (#295) |
|
||||||
| 2026-10-11 | trivial | `.doc`: inline and floating pictures (BLIP store, PNG/JPEG/DIB/TIFF/EMF/WMF), basic shapes, groups and text boxes read from OfficeArt drawings (#551); fidelity ~55% → ~60% |
|
| 2026-10-11 | trivial | `.doc`: inline and floating pictures (BLIP store, PNG/JPEG/DIB/TIFF/EMF/WMF), basic shapes, groups and text boxes read from OfficeArt drawings (#551); fidelity ~55% → ~60% |
|
||||||
| 2026-10-11 | trivial | Word XML Document (Flat OPC) read and written, Word 2003 XML read (#548) |
|
| 2026-10-11 | trivial | Word XML Document (Flat OPC) read and written, Word 2003 XML read (#548) |
|
||||||
| 2026-10-11 | trivial | #534: DOCX indents in characters read and written; `.doc` first-line indents (`sprmPDxaLeft1`, its two-byte operand, and `sprmPDxaLeft1_80`), indents in characters (`sprmPDxc*`) and exact/at-least line spacing (LSPD) read correctly |
|
| 2026-10-11 | trivial | #534: DOCX indents in characters read and written; `.doc` first-line indents (`sprmPDxaLeft1`, its two-byte operand, and `sprmPDxaLeft1_80`), indents in characters (`sprmPDxc*`) and exact/at-least line spacing (LSPD) read correctly |
|
||||||
|
|||||||
@@ -11,4 +11,4 @@ StartupNotify=true
|
|||||||
StartupWMClass=ai.storyteller.wordcraft
|
StartupWMClass=ai.storyteller.wordcraft
|
||||||
Categories=Office;WordProcessor;
|
Categories=Office;WordProcessor;
|
||||||
Keywords=word;processor;document;docx;writer;text;letter;report;
|
Keywords=word;processor;document;docx;writer;text;letter;report;
|
||||||
MimeType=application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.oasis.opendocument.text;application/rtf;text/markdown;text/x-tex;text/html;text/plain;
|
MimeType=application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroEnabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroEnabled.12;application/msword;application/msword-template;application/vnd.oasis.opendocument.text;application/rtf;text/rtf;text/markdown;text/x-tex;text/html;text/plain;
|
||||||
@@ -50,8 +50,17 @@
|
|||||||
<control>pointing</control>
|
<control>pointing</control>
|
||||||
<control>tablet</control>
|
<control>tablet</control>
|
||||||
</supports>
|
</supports>
|
||||||
|
<!-- Document types WordCraft opens (#295), as in the desktop entry's MimeType=. -->
|
||||||
<provides>
|
<provides>
|
||||||
<binary>wordcraft</binary>
|
<binary>wordcraft</binary>
|
||||||
|
<mediatype>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mediatype>
|
||||||
|
<mediatype>application/vnd.ms-word.document.macroEnabled.12</mediatype>
|
||||||
|
<mediatype>application/vnd.openxmlformats-officedocument.wordprocessingml.template</mediatype>
|
||||||
|
<mediatype>application/vnd.ms-word.template.macroEnabled.12</mediatype>
|
||||||
|
<mediatype>application/msword</mediatype>
|
||||||
|
<mediatype>application/msword-template</mediatype>
|
||||||
|
<mediatype>application/vnd.oasis.opendocument.text</mediatype>
|
||||||
|
<mediatype>application/rtf</mediatype>
|
||||||
</provides>
|
</provides>
|
||||||
<content_rating type="oars-1.1"/>
|
<content_rating type="oars-1.1"/>
|
||||||
<releases>
|
<releases>
|
||||||
|
|||||||
@@ -59,6 +59,7 @@
|
|||||||
<array>
|
<array>
|
||||||
<string>org.openxmlformats.wordprocessingml.document</string>
|
<string>org.openxmlformats.wordprocessingml.document</string>
|
||||||
<string>org.openxmlformats.wordprocessingml.template</string>
|
<string>org.openxmlformats.wordprocessingml.template</string>
|
||||||
|
<string>com.microsoft.word.doc</string>
|
||||||
<string>org.oasis-open.opendocument.text</string>
|
<string>org.oasis-open.opendocument.text</string>
|
||||||
<string>public.rtf</string>
|
<string>public.rtf</string>
|
||||||
<string>net.daringfireball.markdown</string>
|
<string>net.daringfireball.markdown</string>
|
||||||
|
|||||||
@@ -76,6 +76,80 @@
|
|||||||
<RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\wordcraft.exe" Value="[#WordcraftExe]" Type="string" />
|
<RegistryValue Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\wordcraft.exe" Value="[#WordcraftExe]" Type="string" />
|
||||||
</Component>
|
</Component>
|
||||||
|
|
||||||
|
<!-- File associations (#295). Each document type gets a WordCraft ProgId (name, icon, open
|
||||||
|
command) and is listed under the extension's OpenWithProgids, so WordCraft shows in
|
||||||
|
Explorer's "Open with". The Word, RTF and ODT types are also WordCraft's Capabilities
|
||||||
|
(RegisteredApplications), so it appears in Settings › Default apps, where the user
|
||||||
|
makes it the default (File › Options › General opens that page). Nothing here sets an
|
||||||
|
extension's default: the installer never takes over .docx from another app. Markdown and
|
||||||
|
plain text are only "Open with" candidates. Removed again on uninstall. -->
|
||||||
|
<Component Id="WordcraftFileTypes" Guid="EFF89E6A-F9B8-49F9-B3AE-E243347484B4">
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\RegisteredApplications" Name="WordCraft" Value="Software\WordCraft\Capabilities" Type="string" KeyPath="yes" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities" Name="ApplicationName" Value="WordCraft" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities" Name="ApplicationDescription" Value="Write and design documents; open and save Word files." Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities" Name="ApplicationIcon" Value=""[#WordcraftExe]",0" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe" Name="FriendlyAppName" Value="WordCraft" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.Document" Description="Word Document" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.Document\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.docx\OpenWithProgids" Name="WordCraft.Document" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".docx" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".docx" Value="WordCraft.Document" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.DocumentMacroEnabled" Description="Word Macro-Enabled Document" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.DocumentMacroEnabled\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.docm\OpenWithProgids" Name="WordCraft.DocumentMacroEnabled" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".docm" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".docm" Value="WordCraft.DocumentMacroEnabled" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.Template" Description="Word Template" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.Template\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.dotx\OpenWithProgids" Name="WordCraft.Template" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".dotx" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".dotx" Value="WordCraft.Template" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.TemplateMacroEnabled" Description="Word Macro-Enabled Template" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.TemplateMacroEnabled\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.dotm\OpenWithProgids" Name="WordCraft.TemplateMacroEnabled" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".dotm" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".dotm" Value="WordCraft.TemplateMacroEnabled" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.LegacyDocument" Description="Legacy Word Document" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.LegacyDocument\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.doc\OpenWithProgids" Name="WordCraft.LegacyDocument" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".doc" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".doc" Value="WordCraft.LegacyDocument" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.LegacyTemplate" Description="Legacy Word Template" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.LegacyTemplate\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.dot\OpenWithProgids" Name="WordCraft.LegacyTemplate" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".dot" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".dot" Value="WordCraft.LegacyTemplate" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.RichText" Description="Rich Text Document" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.RichText\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.rtf\OpenWithProgids" Name="WordCraft.RichText" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".rtf" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".rtf" Value="WordCraft.RichText" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.OpenDocumentText" Description="OpenDocument Text" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.OpenDocumentText\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.odt\OpenWithProgids" Name="WordCraft.OpenDocumentText" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".odt" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\WordCraft\Capabilities\FileAssociations" Name=".odt" Value="WordCraft.OpenDocumentText" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.Markdown" Description="Markdown Document" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.Markdown\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.md\OpenWithProgids" Name="WordCraft.Markdown" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".md" Value="" Type="string" />
|
||||||
|
|
||||||
|
<ProgId Id="WordCraft.PlainText" Description="Text Document" Icon="WordcraftExe" IconIndex="0" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\WordCraft.PlainText\shell\open\command" Value=""[#WordcraftExe]" "%1"" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\.txt\OpenWithProgids" Name="WordCraft.PlainText" Value="" Type="string" />
|
||||||
|
<RegistryValue Root="HKLM" Key="Software\Classes\Applications\wordcraft.exe\SupportedTypes" Name=".txt" Value="" Type="string" />
|
||||||
|
</Component>
|
||||||
|
|
||||||
<Component Id="WordcraftCli">
|
<Component Id="WordcraftCli">
|
||||||
<File Id="WordcraftCliExe" Source="$(var.BinDir)\wordcraft-cli.exe" KeyPath="yes" />
|
<File Id="WordcraftCliExe" Source="$(var.BinDir)\wordcraft-cli.exe" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
|
|||||||
Reference in new issue
Block a user