دليل أسطرلاب English GitHub

تطبيق سطح المكتب

أسطرلاب تطبيقًا أصليًّا: شريط القوائم، والخزائن، والنوافذ، والنافذة المرجعية، والبحث في الصفحة، والتحديثات، والروابط العميقة.


تحمل صفحة الإصدارات ملف AppImage، وحزمة .deb، وحزمة .pacman، وملف .exe لويندوز غير موقَّع (فيحذّرك ويندوز عند أول تشغيل). وكل واحد منها هو المنتج نفسه الذي تستضيفه بنفسك خادمًا، لكنه ملفوف تطبيقًا لسطح المكتب (بتقنية Electron). وخلف الكواليس يشغّل التطبيق خادمًا خاصًّا به لكل خزانة تفتحها، على منفذ يتذكّره لكل خزانة. ولا يتغيّر شيء في الخزانة: فالمجلد على القرص هو المجلد على القرص، وما زال متصفح على الشبكة يستطيع الوصول إلى الخزانة نفسها عبر نسخة مستضافة في الوقت نفسه. فإن شغّلت الاثنين فوق مجلد واحد فانظر خادمان وخزانة واحدة.

الخزائن والنوافذ

ملف ← فتح خزانة… (Ctrl/Cmd O) يختار مجلدًا. والخزائن الأخيرة تسرد ما فتحته من قبل، ومسح القائمة ينساها. ونافذة جديدة (Ctrl/Cmd Shift N) تفتح نافذة أخرى على الخزانة الحالية، وهكذا تبدأ نافذة ثانية فوق خزانة واحدة، وإغلاق النافذة هو Ctrl/Cmd W. وإظهار الخزانة في مدير الملفات يفتح المجلد نفسه. ويحتفظ التطبيق بأيقونة في صينية النظام فيها إظهار أسطرلاب وإنهاء. ولمشغّل أو سكربت، يفتح ASTROLABE_VAULT=/path في البيئة ذلك المجلد عند التشغيل من غير أن يسأل.

وتبويباتك تنجو من تغيّر المنفذ. تُحفظ تبويبات النافذة وتخطيطها في تخزين المتصفح الذي يخصّ منفذ الخزانة. فإذا وجد التشغيل ذلك المنفذ مشغولًا انتقل التطبيق إلى المنفذ التالي، وهو في نظر تخزين المتصفح مكان جديد تمامًا لا شيء فيه. لذلك يحتفظ سطح المكتب أيضًا بآخر مساحة عمل بجانب بيانات الخزانة ويستعيدها حين تُفتح نافذة على لا شيء. وينتظر التطبيق المنفذ المعتاد بضع ثوانٍ قبل أن ينتقل عنه؛ والنافذة التي لا تجد شيئًا تستعيده تفتح الملاحظة التي كنت فيها آخر مرة، لا أول اسم في الشجرة.

اللوحتان، والنافذة التي هما فيها. كل لوحة جانبية — شريط الملاحظات ولوحة المخطط التفصيلي — يُغيَّر عرضها من الخيط الشعري الفاصل بينها وبين الملاحظة: شريطٌ عرضه 12 نقطة والفاصل نفسه في منتصفه تمامًا، فالخط الذي تصوّب إليه هو الخط الذي يتحرك، وتتبع اللوحة يدك من حيث أمسكت بالشريط أيًّا كان. اسحب لوحة خارج حافتها فتُطوى، وتترك بابًا ضيقًا تفتحه بنقرة أو بسحبة. وانقر الفاصل نقرتين فتعود اللوحة إلى عرضها الأول. والشريط موجود مهما كان ما يُشار به إلى النافذة — فأرة، أو لوحة لمس، أو إصبع على حاسوب قابل للطيّ — لأن إمكان سحب اللوحة سؤالٌ عن اللوحة لا عن المؤشّر، والحاسوب المطويّ مسطّحًا لا يزال له لوحتان.

والعروض التي تضبطها محفوظة لكل نافذة؛ أما ما تستطيع النافذة منحه فيُحسب من جديد كلما تغيّر حجمها. اسحب النافذة ضيقةً فتتنازل اللوحتان حتى يبقى للملاحظة عمودٌ تكون فيه؛ ووسّعها ثانية فتعودان إلى العرضين اللذين اخترتهما. وتحت نحو 700 نقطة عرضًا تصير النافذة تخطيط الهاتف — شريطًا من خمسة أبواب وشاشات وأوراقًا منزلقة — والملاحظة نفسها مفتوحة، وتوسيعها يعيد اللوحتين. وفوق ذلك، على ويندوز عند تحجيم 125% أو 150% وفي نافذة ملتصقة بنصف الشاشة، تبقى اللوحتان مرسّاتين وتبقى قابلة للسحب.

والتكبير ملك التطبيق. تُحجّم Ctrl/Cmd = و- و0 الواجهة كلها، وما دام التكبير غير 100% يعرض شريط الحالة النسبة المئوية في الزاوية؛ والنقر عليها هو الحجم الفعلي، مثل Ctrl/Cmd 0 تمامًا؛ وعجلة الفأرة مع Ctrl تغيّره أيضًا، وسطر عرض ← التكبير: ٪120 يقول أين هو. والمعامل محفوظ لكل خزانة ويبقى بعد إغلاق التطبيق: اضبطه على 120% مرة واحدة، فيُفتح التطبيق على 120% في كل تشغيل من أول إطار يُرسم — ولأنه مكتوب حيث تراه، فالنافذة التي عادت أصغر مما تذكر نافذةٌ تصلحها بنقرة واحدة. وفوق كتاب مفتوح تُكبّر المفاتيح الثلاثة نفسها الصفحة لا التطبيق: من يمدّ يده إلى مفاتيح التكبير فوق كتاب يقصد الكتاب.

وتتذكر النوافذ مواضعها، لكل خزانة، وتُلاءَم مع الشاشة التي تُفتح عليها. فالنافذة المحفوظة على شاشة كبيرة والمفتوحة على حاسوب محمول تُجرّ إلى المكتب بدل أن يُترك شريط عنوانها خارج الحافة، والنافذة الأولى على شاشة أصغر من الحجم الافتراضي تُفتح مكبّرة.

وكل أمر في التطبيق موجود في شريط القوائم مع اختصاره على لوحة المفاتيح، وباللغتين: ملاحظة جديدة، وملاحظة اليوم، والحفظ، والطباعة، وعرض القراءة، والمخطط، والصفاء، واللوحتان الجانبيتان، ولوحة الأوامر، والبحث، والنشر، وورقة الاختصارات. ويستأثر تطبيق سطح المكتب أيضًا ببضعة اختصارات لا يستطيعها المتصفح:

المفاتيحيفعل
Ctrl/Cmd Shift Nنافذة جديدة على هذه الخزانة
Ctrl/Cmd Oفتح خزانة…
Ctrl/Cmd Wإغلاق النافذة
Ctrl/Cmd Shift Fالبحث في الصفحة (أدناه)
Ctrl/Cmd Alt Rفتح الملاحظة نافذة مرجعية
Ctrl/Cmd = / - / 0، ولوحة الأرقامتكبير / تصغير / الحجم الفعلي
Ctrl/Cmd Yإعادة، بجانب Ctrl/Cmd Shift Z

اسمك وأيقونتك

«أسطرلاب» اسمٌ أطلقه عليه شخص واحد. ويتيح لك الإعدادات ← هذا الجهاز أن تسمّي التطبيق ما شئت على هذا الحاسوب وأن تعطيه أيقونتك. فتتبعك صينية النظام، وتلميحها، وأيقونة النافذة، ومربع «حول»، ومدخل المشغّل. أما اسم الموقع وشعاره فشيء منفصل في هوية الموقع (الإعدادات ← هوية الموقع)، وهما اللذان يعنونان النافذة والشريط الجانبي. والتحديث لا يمسّ أيًّا منهما: يُستبدل ملف AppImage في مساره هو، فالملف الذي أعدت تسميته يحتفظ باسمه؛ ومثبّت ويندوز يستبدل مجلد البرنامج لا غير؛ واسمك وأيقونتك يعيشان بجانب إعدادات التطبيق، ولا يكتب التحديث فوقهما.

وأضف إلى قائمة التطبيقات (لينكس) يكتب مدخل سطح مكتب باسمك وأيقونتك، يشير إلى ملف AppImage حيثما احتفظت به. وأضف إلى قائمة ابدأ (ويندوز) ينشئ اختصارًا بالطريقة نفسها؛ ويجب أن تكون أيقونة الاختصار ملفَ ‎.ico، فاختر واحدة منها هناك. وأعد تشغيل الأمر بعد تغيير الاسم أو الأيقونة.

أما إعادة التسمية الكاملة، أي اسم الملف التنفيذي نفسه والأيقونة المطبوعة فيه، فتحتاج إلى بناء جديد:

node scripts/rebrand.mjs --name "Marginalia" --icon ~/marginalia.png
npm --prefix desktop run dist

فيحمل كل ملف في desktop/release اسمك وأيقونتك. ويبقى فحص التحديثات ينظر إلى صفحة الإصدارات التي بُني منها (RELEASES_PAGE في electron/update.ts)؛ فوجّهه إلى صفحتك إن كنت تنشر إصداراتك بنفسك.

النافذة المرجعية

نافذة ← فتح كنافذة مرجعية (Ctrl/Cmd Alt R) يفتح الملاحظة الحالية في نافذة ثانية أصغر تبقى دائمًا في المقدمة: المصدر الذي تقتبس منه، أو المخطط الذي تتبعه، أو قائمة المهام، فوق النافذة التي تكتب فيها. ودائمًا في المقدمة مفتاح على أي نافذة. وهذا أوضح ما يستطيعه تطبيق سطح المكتب ولا يستطيعه تبويب المتصفح.

البحث في الصفحة

Ctrl/Cmd F يبحث ويستبدل في نص الملاحظة. أما Ctrl/Cmd Shift F في تطبيق سطح المكتب فيفتح البحث في الصفحة، وهو بحث محرّك المتصفح نفسه في كل ما على الشاشة: عرض القراءة، والمخطط، والروابط الراجعة، وملاحظة مضمّنة، وشريط التبويبات، ولوحة الإعدادات؛ أي النصف الذي لا يستطيع بحث المحرر أن يبلغه أصلًا. والشريط مرسوم بأسلوب أسطرلاب نفسه، مع التالي والسابق في قائمة تحرير. (وفي المتصفح يفتح هذا الاختصار البحث والاستبدال في الخزانة كلها بدلًا من ذلك.)

التدقيق الإملائي

الخطوط الحمراء تحت الكلمات تأتي من مدقّق نظام التشغيل الإملائي. انقر بالزر الأيمن على كلمة خاطئة (من غير تحديد) تظهر الاقتراحات وإضافة إلى القاموس، مرسومةً في قائمة التطبيق نفسه لا في نافذة أصلية، فتأخذ السمة واتجاه النص. والتدقيق الإملائي أثناء الكتابة في قائمة تحرير.

التحديثات

لا ينزّل التطبيق تحديثًا ولا يثبّته من تلقاء نفسه أبدًا. كل ما يفعله أنه يفحص، بهدوء، عند التشغيل ثم كل ست ساعات، هل صدر إصدار أحدث. فإذا وجده قال شريط الحالة ذلك: 3.x متاح، في موضع رقم الإصدار الذي يُطبع عادةً في آخر الشريط. ولا يحدث شيء آخر حتى تتصرّف أنت. ويُعلَن الإصدار مرة واحدة لكل إصدار في كل تشغيل: تبقى الشارة حتى تتصرّف، لكن التنبيه لا يعود حين يجد فحص الساعات الست الإصدار نفسه مرة أخرى. أما الفحص الذي تطلبه بيدك فيجيب دائمًا.

  1. انقر 3.x متاح لتنزيل الإصدار. وبينما يُنزَّل تتحوّل الشارة إلى شريط يعرض النسبة المئوية.
  2. وحين يكون التنزيل على القرص وقد جرى التحقق منه تقرأ الشارة أعد التشغيل للتحديث. انقرها فيعيد التطبيق تشغيله على الإصدار الجديد.

ومساعدة ← التحقق من التحديثات… يعمل دائمًا بيدك، ويخبرك حين تكون على أحدث إصدار أصلًا. وإن آثرت ألا يُقال لك شيء البتة فللإعداد الإعدادات ← هذا الجهاز ← تحديثات البرنامج وضعان: أخبرني (وهو الافتراضي) وإيقاف، وهو يوقف الفحص التلقائي تمامًا. ويظل بند القائمة يعمل والفحص موقوف.

وما تفعله «إعادة التشغيل» يتبع طريقة التثبيت. فملف AppImage يُستبدل في مساره ويُعاد تشغيله: يُغلق التطبيق، وبعد لحظة يبدأ الملف الجديد من تلقاء نفسه. (وكل بناء AppImage يُختبر في إعادة تشغيله قبل نشره.) وتثبيت ويندوز يشغّل المثبّت الجديد في صمت، ويعيد المثبّتُ تشغيلَ التطبيق. وكلا التنزيلين يُقارن ببصمة التحقق المنشورة مع الإصدار قبل أن يعمل أي شيء، فلا يعمل ملف وصل ناقصًا أو مُعدَّلًا. أما حزمتا deb وpacman فهما ملك مدير الحزم، فهناك تفتح الشارة صفحة الإصدارات بدلًا من ذلك. أما تطبيق أندرويد فيراقب صفحة الإصدارات نفسها على طريقته، وصفحته تشرح ذلك.

وفي المتصفح تفتح شارة الإصدار صفحة الإصدارات ببساطة، لأن النسخة المستضافة تتحدّث حين يتحدّث خادمها.

الروابط العميقة وربط الملفات

astrolabe://note?path=Folder/Note.md يفتح ملاحظة من خارج التطبيق، ويسجّل التطبيق نفسه لملفات .md، فالملاحظة التي تنقرها مرتين في مدير الملفات تُفتح هنا. والمسار يُفحص ولا يُنظَّف: فـ..، أو / في أوله، أو حرف محرك أقراص، أو محرف تحكّم، كلها تُرفض.

الجلسات

الخزانة التي فتحها التطبيق بنفسه يسجّل التطبيق دخولها بنفسه: تُولَّد كلمة مرور عشوائية عند التشغيل ولا يراها إنسان قطّ، فلا شيء تخرج منه، ولا يعرض شريط الحالة تسجيل الخروج. والجلسة التي تنقضي رغم ذلك (نوم طويل، أو خادم أُعيد تشغيله من تحتها) تُستعاد عند الطلب التالي من غير أن تُسأل شيئًا. والاستثناء الوحيد هو الخزانة المرتبطة ببيئة نشر، أي خزانة يجلس بجانبها ملف .env فيعمل التطبيق بإعدادات ذلك النشر: فهناك تُفتح النافذة قارئًا، ويأخذ تسجيل الدخول كلمة المرور نفسها التي يأخذها الموقع.

أين تعيش الأشياء

إعدادات التطبيق نفسه في ~/.config/astrolabe (ومجلد vellum القديم من قبل إعادة التسمية يُنقل إليه عند أول تشغيل ثم يُزال). وفيه ملف desktop.json يسرد الخزائن ومنافذها، ولكل منها مجلد البيانات الذي تستخدمه. وبيانات كل خزانة في ASTROLABE_DATA الذي يسمّيه ذلك المدخل. وبناء لينكس محزوم بـasar: false عمدًا، لأن الخادم الذي يشغّله التطبيق يقرأ ملفات حقيقية من الحزمة. وما هو لك لا للجهاز، من إعدادات الموقع والتخطيطات المسمّاة ورفّ الكتب وملاحظاتك لنفسك، يُنسخ أيضًا إلى مجلد .astrolabe/ داخل الخزانة، فيجده جهاز آخر فوق الخزانة نفسها (الإعدادات تسافر مع الخزانة).

وأصوات القراءة بصوت عالٍ تُثبَّت في مجلد البيانات نفسه (tts/venv/ وmodels/tts/)، من زر التثبيت في الإعدادات، كما على الخادم تمامًا: يصنع الخادم المضمَّن بيئة Python بـuv أو بـPython الجهاز من 3.10 إلى 3.13 — وعلى الحاسوب المعتاد الذي ليس فيه أيٌّ منهما يجلب Python مستقلًا إلى tts/python/ أولًا (من 21 إلى 34 م.ب، يُتحقَّق منه قبل استعماله) — ويشغّل المحرّك على المعالج عمليةً فرعية. ولا يتغيّر شيء من أذونات التطبيق لأجلها — فالصفحة لا تفعل إلا تشغيل الصوت.

على لينكس يقرأ التطبيق بعد تثبيت الأصوات. ليس لـElectron على لينكس محرّك نطق خاص به، فلا «أصوات جهاز» يُرجع إليها: قبل التثبيت يقول المشغّل لا يوجد على هذا الجهاز صوت يتكلم … ويعرض زر التثبيت؛ وبعده يقرأ التطبيق بكل لغة تتكلمها أصواته. وعلى ويندوز، إلى أن تُثبَّت أصوات التطبيق، يقرأ بأصوات ويندوز نفسها — بالصوت الذي اخترته في إعدادات ويندوز ← الوقت واللغة ← الكلام — ويسمّيه، مع ▾ لاختيار غيره (أصوات هذا الجهاز).

والملاحظات الصوتية تُسمَع على المعالج. يفرّغ الخادم المضمَّن الملاحظات الصوتية كما يفرّغها أي خادم مع المعالج وحده: whisper نموذجًا بصيغة ONNX على الأنوية الفعلية للجهاز، حتى ثمانٍ. ولا تحمل الحزمة بناءً لبطاقة الرسوميات من whisper أصلًا — فلا شيء في التطبيق يعتمد على بطاقة رسوميات — ولهذا صار التنزيل أصغر بنحو 50 ميغابايت. ويُنزَّل النموذج إلى مجلد بيانات الخزانة مع أول ملاحظة، كما على الخادم.

وتطبيق سطح المكتب مشغّلُ نفسه. يشغّل خادمه مع SPEAK_EXTERNAL=on، فيمكن ضبط المتحدّث الخارجي تحت الإعدادات ← القراءة بصوت عالٍ والملاحظات الصوتية ← أصواتك الخاصة هنا دون تحرير ملف .env؛ أما على خادم يشغّله غيرك فيبقى ذلك قرار مشغّله (الإعداد).

حرّر هذه الصفحة على GitHub

أسطرلاب برنامج حر. هذه الصفحات مبنية من ملفات Markdown في مجلد docs بالمستودع.