spinss

MDeX v2.2.1 (macOS · Windows · Linux · Tauri v2)

MDeX · se prononce « em-dex » (/ˌemˈdɛks/) — la lettre M suivie de « dex », deux syllabes.

Un lecteur et éditeur Markdown multilingue centré sur la confidentialité et l'assistance AI. Chaque fichier est traité localement — par défaut pas de réseau, pas d'envoi, pas de synchronisation cloud, pas de publicité, pas de télémétrie ; les enregistrements atomiques (résistants aux plantages) évitent toute perte de données en cas de plantage ou de coupure de courant. Depuis la v2.0, MDeX propose également une édition assistée par IA en option — et elle peut rester entièrement hors ligne : un modèle local (par ex. Ollama) n'a besoin d'aucune connexion ; seul un service d'AI en ligne (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi, etc.) émet une requête, et uniquement lorsque vous le configurez et le déclenchez.


🌐 Langues

L'interface est disponible en 17 langues : English, 简体中文, Français, Deutsch, Español, Português, Italiano, Русский, 日本語, 한국어, العربية, हिन्दी, ਪੰਜਾਬੀ, Tiếng Việt, Bahasa Indonesia, اردو, Монгол (Кирилл).


✨ Fonctionnalités


⌨️ Raccourcis

Utilisez sur macOS, Ctrl sur Windows / Linux.

Raccourci Action
⌘/Ctrl + N Nouveau
⌘/Ctrl + O Ouvrir un fichier
⌘/Ctrl + S Enregistrer
⌘/Ctrl + Shift + S Enregistrer sous
⌘/Ctrl + W Fermer l'onglet
⌘/Ctrl + Shift + W Fermer la fenêtre
⌘/Ctrl + F Rechercher
⌘/Ctrl + H Remplacer
⌘/Ctrl + B / I / E Gras / Italique / Code en ligne
⌘/Ctrl + K Insérer un lien
Tab Indenter de 2 espaces
Alt/Option + glisser Sélection rectangulaire (en colonne)
Alt/Option + Shift + ←↑↓→ Étendre la sélection en colonne
Esc Annuler la sélection en colonne
⌘/Ctrl + =/−/0 Zoomer le dernier volet cliqué (éditeur ou aperçu) : agrandir / réduire / réinitialiser
⌘/Ctrl + J Édition assistée par IA

Avec plusieurs fenêtres ouvertes, les raccourcis n'affectent que la fenêtre ayant le focus. Lorsque la fenêtre de visualisation d'images est ouverte, ⌘/Ctrl + =/−/0 zoome l'image à la place.


📝 Aide-mémoire

Markdown : titres # / ## / ###, gras **texte**, italique *texte*, barré ~~texte~~, code en ligne `code`, blocs de code (triple accent grave, avec langue facultative), citation > texte, listes - / 1., liste de tâches - [ ] / - [x], lien [texte](url), image ![alt](url), séparateur ---, tableaux | A | B |.

Mathématiques : en ligne $E = mc^2$ ; en bloc $$\int_0^1 x\,dx$$ (peut s'étendre sur plusieurs lignes). Utilise la syntaxe LaTeX, rendue par KaTeX ; le $ à l'intérieur des blocs de code n'est pas traité comme un délimiteur mathématique. Prend en charge align / aligned, les matrices, cases et d'autres environnements courants.

Citations : écrivez [@key] ou [@a; @b] dans le texte (compatible LaTeX via \cite{key}), intégrez la bibliographie via un bloc ```bibtex ou chargez un .bib avec le bouton « Réfs ». Une liste des références est générée à la fin ; le [n] dans le texte est cliquable.


📤 Exportation (Enregistrer sous)

Cliquez sur « Enregistrer sous » et choisissez un format :


🔒 Hors ligne & sécurité


📦 Installation

Téléchargements précompilés

Téléchargez l'installateur pour votre plateforme depuis l'une ou l'autre source:

macOS (.dmg, universal arm64 + x86_64), Windows (.exe, NSIS installer), Linux (.deb / .rpm / .AppImage).

Ouverture de l'application non signée sur macOS (contourner Gatekeeper)

Cette application n'est pas signée par le développeur / notarisée (les scénarios hors ligne ne peuvent généralement pas notariser en ligne). Sur macOS 12+, surtout macOS 26 (Tahoe), le lancement direct depuis le .dmg — ou une compilation fraîchement copiée — échoue avec "MDeX.app is damaged and can't be opened." C'est Gatekeeper, pas un dommage réel. Corrigez dans Terminal :

  1. Glissez d'abord MDeX.app hors du .dmg vers /Applications — ne l'exécutez jamais directement depuis le dmg (cela déclenche App Translocation et l'attribut com.apple.provenance, la vraie cause du « endommagé » sur macOS 26).
  2. Effacez les attributs et re-signe :
    xattr -cr /Applications/MDeX.app
    codesign --force --deep --sign - /Applications/MDeX.app

    com.apple.provenance est protégé par SIP et ne peut pas être retiré même avec sudo ; la re-signature réinitialise la signature pour que Gatekeeper autorise l'exécution. spctl signale toujours rejected pour la signature ad hoc — c'est attendu, et cela ne bloque pas open.

  3. Lancez avec open /Applications/MDeX.app (ou double-cliquez). Le premier lancement peut encore afficher une invite — confirmez via Réglages Système → Confidentialité et Sécurité → Ouvrir quand même, ou faites un clic droit sur l'app → Ouvrir.

🛠️ Compiler depuis les sources

Code source: https://github.com/fwzheng/mdex. Veuillez suivre les instructions de compilation dans le dépôt (configuration, dépendances et commandes y sont documentées).


📁 Structure du projet

markdown/
├── app-shell.html          # coquille frontend (HTML+CSS) ; la logique de l'application est dans src/app.js
├── src/
│   ├── app.js              # logique de l'application (// @ts-check ; intégrée dans dist par build-html.mjs)
│   ├── i18n.js            # 17-language UI strings (pure data; window.I18N, split from app.js)
│   ├── help.js            # help-document data (HELP_STRINGS + SK/sc/CITE_HELP_*, window.HELP_DATA)
│   └── globals.d.ts        # déclarations de types vendor / Window pour la vérification de types
├── tsconfig.json           # config de vérification de types (tsc --noEmit ; pas de bundler)
├── tools/
│   ├── fetch-vendor.mjs    # une fois : télécharge les dépendances dans vendor/ + verrou d'intégrité (en ligne ici uniquement)
│   ├── build-html.mjs      # intègre vendor + src/app.js + i18n.js + help.js dans dist/index.html (polices KaTeX → base64)
│   └── test-pure.mjs       # tests des fonctions pures du frontend (npm test)
├── dist/index.html         # sortie de build : fichier unique autonome (Tauri frontendDist)
├── vendor/                 # cache de téléchargement + integrity.json (.gitignore)
├── package.json            # @tauri-apps/cli + typescript(dev) + scripts
└── src-tauri/
    ├── Cargo.toml          # tauri 2 + dialog / single-instance + encoding_rs
    ├── build.rs            # tauri_build::build()
    ├── tauri.conf.json     # fenêtre 1200×750, CSP stricte, icônes, association .md, hooks de menu
    ├── capabilities/default.json
    ├── icons/              # jeu d'icônes complet issu de `cargo tauri icon`
    └── src/{main.rs, lib.rs}   # menus + E/S fichiers + routage multi-fenêtres + écriture atomique / propriété des fichiers

🎨 Personnalisation

À modifier Emplacement
Nom de l'application / Bundle ID src-tauri/tauri.conf.jsonproductName / identifier
Taille de la fenêtre tauri.conf.jsonapp.windows[0] (par défaut 1200×750)
Icônes remplacer l'image source, puis npm run icon
Couleurs du thème / polices variables CSS :root en haut de app-shell.html
Éléments de menu build_menu() dans src-tauri/src/lib.rs
Chaînes d'interface / doc d'aide I18N / HELP_STRINGS dans src/app.js
Versions des dépendances VERSIONS en haut de tools/fetch-vendor.mjs (puis npm run fetch -- --force)

📄 Licence

Le code propre de ce projet est open source sous Apache License 2.0.

Composants tiers : le projet utilise certains composants tiers (notamment marked, KaTeX, highlight.js, DOMPurify, jsPDF, html2canvas-pro, turndown, mermaid, @retorquere/bibtex-parser et Tauri, etc.) ; leurs avis de droit d'auteur et de licence sont détaillés dans les fichiers sources respectifs. Ces composants sont respectivement sous licence MIT, BSD-3-Clause, Apache-2.0, MPL-2.0 et autres licences open source.

Exigences de distribution : sous la licence Apache-2.0, toute redistribution de ce projet exige de conserver les fichiers LICENSE et NOTICE ; si vous modifiez un fichier source, vous devez indiquer clairement les changements dans le fichier correspondant.


📬 Contact

Pour tout problème ou suggestion : 郑法伟 (Fawei Zheng) fwzheng@bit.edu.cn