spinss

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

MDeX · يُنطق "em-dex" (/ˌemˈdɛks/) — الحرف M يتبعه "dex"، مقطعان لفظيان.

قارئ ومحرر Markdown متعدد اللغات يركّز على الخصوصية والمساعدة عبر AI. تتم معالجة كل ملف محلياً — افتراضياً لا شبكة، لا رفع للملفات، لا مزامنة سحابية، بدون إعلانات، بدون قياس عن بعد؛ الحفظ الذري (المقاوم للأعطال) يمنع فقدان البيانات عند الانهيار أو انقطاع التيار. اعتباراً من v2.0، يقدّم MDeX أيضاً ميزة اختيارية لتحرير بمساعدة الذكاء الاصطناعي — ويمكنه البقاء دون اتصال بالكامل: النموذج المحلي (مثل Ollama) لا يحتاج إلى إنترنت؛ فقط خدمة AI عبر الإنترنت (OpenAI / DeepSeek / Anthropic / GLM / Gemini / Kimi إلخ) تُجري الطلب، وذلك فقط عند تهيئتها وتشغيلها.


🌐 Languages

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


✨ الميزات


⌨️ اختصارات لوحة المفاتيح

استخدم على macOS، وCtrl على Windows / Linux.

الاختصار الإجراء
⌘/Ctrl + N جديد
⌘/Ctrl + O فتح ملف
⌘/Ctrl + S حفظ
⌘/Ctrl + Shift + S حفظ باسم
⌘/Ctrl + W إغلاق العلامة
⌘/Ctrl + Shift + W إغلاق النافذة
⌘/Ctrl + F بحث
⌘/Ctrl + H استبدال
⌘/Ctrl + B / I / R عريض / مائل / شيفرة سطرية
⌘/Ctrl + K إدراج رابط
Tab إزاحة بمسافتين
Alt/Option + سحب تحديد مستطيلي (عمودي)
Alt/Option + Shift + ←↑↓→ توسيع التحديد العمودي
Esc إلغاء التحديد العمودي
⌘/Ctrl + =/−/0 تكبير آخر جزء تم النقر عليه (المحرر أو المعاينة): تكبير / تصغير / إعادة ضبط
⌘/Ctrl + J تحرير بمساعدة الذكاء الاصطناعي

عند فتح عدة نوافذ، تؤثر الاختصارات على النافذة المُركَّزة فقط. عندما تكون نافذة عارض الصور مفتوحة، يقوم ⌘/Ctrl + =/−/0 بتكبير الصورة بدلاً من ذلك.


📝 ورقة مرجعية

Markdown: العناوين # / ## / ###، عريض **text**، مائل *text*، يتوسطه خط ~~text~~، شيفرة سطرية `code`، كتل شيفرة (ثلاث علامات خلفية، مع لغة اختيارية)، اقتباس > text، قوائم - / 1.، قائمة مهام - [ ] / - [x]، رابط [text](url)، صورة ![alt](url)، فاصل ---، جداول | A | B |.

الرياضيات: سطري $E = mc^2$؛ كتلي $$\int_0^1 x\,dx$$ (قد يمتد على عدة أسطر). يستخدم صياغة LaTeX، ويُعرض عبر KaTeX؛ الرمز $ داخل كتل الشيفرة لا يُعامل كفاصل رياضي. يدعم بيئات شائعة مثل align / aligned والمصفوفات وcases وغيرها.

الاستشهادات: اكتب [@key] أو [@a; @b] في النص (متوافق مع \cite{key} في LaTeX)، واضمِّن المكتبة عبر كتلة ```bibtex أو حمِّل ملف .bib عبر زر "Refs". تُولَّد قائمة المراجع في النهاية؛ ويمكن النقر على [n] في النص.


📤 التصدي (حفظ باسم)

انقر "حفظ باسم" واختر الصيغة:


🔒 العمل دون اتصال والأمان


📦 التثبيت

التنزيلات الجاهزة

نزِّل المُثبِّت لمنصتك من أحد المصدرين:

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

فتح التطبيق غير الموقَّع على macOS (تجاوز Gatekeeper)

هذا التطبيق غير موقَّع من المطوِّر وغير موثَّق (بيئات العمل دون اتصال لا تستطيع عادةً التوثيق عبر الشبكة). على macOS 12+، وخاصة macOS 26 (Tahoe)، يفشل تشغيله مباشرةً من الـ .dmg — أو من نسخة بناء حديثة — مع الرسالة "MDeX.app is damaged and can't be opened." هذا تصرُّف Gatekeeper وليس تلفًا حقيقيًا. أصلِحه في Terminal:

  1. اسحب أولًا MDeX.app من الـ .dmg إلى /Applications — لا تشغِّله أبدًا مباشرةً من الـ dmg (ذلك يُفعِّل App Translocation وسمة com.apple.provenance، وهو السبب الحقيقي لرسالة "damaged" على macOS 26).
  2. امسح السمات وأعِد التوقيع:
    xattr -cr /Applications/MDeX.app
    codesign --force --deep --sign - /Applications/MDeX.app

    com.apple.provenance محمي بواسطة SIP ولا يمكن إزالته حتى مع sudo؛ إعادة التوقيع تُعيد ضبط التوقيع فيسمح Gatekeeper بتشغيله. spctl يبقى يُبلغ عن rejected للتوقيع المُرتجل (ad-hoc) — هذا متوقَّع، ولا يُعيق open.

  3. شغِّل عبر open /Applications/MDeX.app (أو عبر النقر المزدوج). قد يستمر الإطلاق الأول في طلب تأكيد مرة واحدة — أكِّد عبر إعدادات النظام ← الخصوصية والأمان ← فتح على أي حال، أو انقر بالزر الأيمن على التطبيق ← فتح.

🛠️ البناء من المصدر

الكود المصدري: https://github.com/fwzheng/mdex. اتبع تعليمات البناء في المستودع (الإعداد والتبعيات والأوامر موثقة هناك).


📁 بنية المشروع

markdown/
├── app-shell.html          # frontend shell (HTML+CSS); app logic lives in src/app.js
├── src/
│   ├── app.js              # application logic (// @ts-check; inlined into dist by 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        # vendor / Window type declarations for type-checking
├── tsconfig.json           # type-check config (tsc --noEmit; no bundler)
├── tools/
│   ├── fetch-vendor.mjs    # one-time: download deps into vendor/ + integrity lock (online only here)
│   ├── build-html.mjs      # inline vendor + src/app.js + i18n.js + help.js into dist/index.html (KaTeX fonts → base64)
│   └── test-pure.mjs       # frontend pure-function tests (npm test)
├── dist/index.html         # build output: self-contained single file (Tauri frontendDist)
├── vendor/                 # download cache + 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     # 1200×750 window, strict CSP, icons, .md association, menu hooks
    ├── capabilities/default.json
    ├── icons/              # full icon set from `cargo tauri icon`
    └── src/{main.rs, lib.rs}   # menus + file IO + multi-window routing + atomic write / file ownership

🎨 التخصيص

لتغيير أين
اسم التطبيق / مُعرِّف الحزمة src-tauri/tauri.conf.jsonproductName / identifier
حجم النافذة tauri.conf.jsonapp.windows[0] (الافتراضي 1200×750)
الأيقونات استبدل الصورة المصدرية، ثم npm run icon
ألوان السمة / الخطوط متغيرات CSS في :root أعلى app-shell.html
عناصر القائمة build_menu() في src-tauri/src/lib.rs
نصوص الواجهة / وثيقة المساعدة I18N / HELP_STRINGS في src/app.js
إصدارات الاعتمادات VERSIONS أعلى tools/fetch-vendor.mjs (ثم npm run fetch -- --force)

📄 الترخيص

شيفرة المشروع نفسها مفتوحة المصدر تحت Apache License 2.0.

مكوِّنات الطرف الثالث: يستخدم المشروع بعض مكوِّنات الطرف الثالث (بما في ذلك على سبيل المثال لا الحصر marked وKaTeX وhighlight.js وDOMPurify وjsPDF وhtml2canvas-pro وturndown وmermaid و@retorquere/bibtex-parser وTauri وغيرها)؛ تُفصَّل إشعارات حقوق النشر والترخيص في ملفات المصدر الخاصة بكلٍّ منها. تُوزَّع هذه المكوِّنات تحت تراخيص MIT وBSD-3-Clause وApache-2.0 وMPL-2.0 وتراخيص مفتوحة المصدر أخرى.

متطلبات التوزيع: وفقًا لترخيص Apache-2.0، تتطلب إعادة توزيع هذا المشروع الاحتفاظ بملفي LICENSE وNOTICE؛ وإذا عدَّلت أي ملف مصدر فيجب الإشارة إلى التغييرات بوضوح في الملف المقابل.


📬 التواصل

للمشاكل أو الاقتراحات: 郑法伟 (Fawei Zheng) fwzheng@bit.edu.cn