منذ عام 2012 ، أستخدم برامج التحرير التي أنشأها Alexei Torgashin لعرض وتعديل جميع الملفات النصية والسجلات ورموز البرامج تقريبًا بلغات VFP / JS / Python / XML / HTML : أولاً كان SynWrite ، والآن هو سليل CudaText . اختار عمدا محرره من قائمة الاختبارات التي شملت ، بما في ذلك AkelPad و Notepad ++ و Sublime Text . تبين أن استجابة الدعم الفني حاسمة - فقد قبل أليكسي عددًا كبيرًا من الرغبات / الشكاوى من المستخدمين وقام بتنفيذها بسرعة. سأشرح. كان عدد الرغبات / الشكاوى متماثلًا تقريبًا على مر السنين ، وبعد التحول إلى GitHub قبل ثلاث سنوات ، أصبح قابلًا للقياس ويقدرني بـ 400 رغبة / عام و 100 خطأ / عام. من المثير للدهشة أن التوسع في الوظائف بناء على طلب العمال لم يؤثر على موثوقية المحرر ككل. وعندما تم استنفاد موارد التنمية المستدامة لـ SynWrite ، نشأت CudaText .
أمرر الكلمة إلى أليكسي.لدي محادثات مع أليكسي حول مواضيع مختلفة. وقد أدرج مؤخرًا "ما تفتقر إليه Sublime". بدت مثيرة للاهتمام بالنسبة لي ، واتفقنا على تقديم هذه الأفكار حول حبري. علاوة على ذلك ، سيكون هناك عرض لأطروحات من اليكسي في تحريري.
بعد قضاء عدة سنوات في إنشاء برنامجك ، تنظر بشكل مختلف إلى نتائج منافسيك. لا تلاحظ فيها سمات جيدة فقط (إما أنها طبقتها بالفعل أو تريد تطبيقها) ، ولكن أيضًا عيوبها. سأعرض ما يمكن تحسينه في نص Sublime (المشار إليه فيما بعد بـ Sublime ) ، إذا قارناه بنص CudaText (المشار إليه فيما بعد بـ Cuda ). في الوقت نفسه ، أؤكد أن محرري نشأ عندما كان Sublime منتشرًا بالفعل ، وكانت العديد من أفكاره أساسية لكودا :
- ملفات تكوين النص
- إعدادات التراكب
- عربات متعددة
- ملحقات بايثون
- لوحة جميع الفرق
سامية تفرض بشكل صارم أسلوب عمل فريق النص.
على سبيل المثال.
- لا توجد مربعات حوار لتكوينها - لا يوجد سوى ملفات json (هناك الكثير منها).
- لا توجد عناصر تحكم إضافية في مربع الحوار "البحث حسب الملف" - بدلاً من ذلك ، هناك "لغة" لملء حقول النص.
هذا النمط فعال ومرن وقابل للتوسيع ، ولكنه يتطلب التعلم المستمر من المستخدم. بالنسبة للمبتدئين ، يؤدي هذا إلى إنشاء حد دخول ملحوظ.
تحاول كودا أن تكون أداة ميسورة التكلفة. هذا ممكن لأنه تم إنشاؤه في بيئة Lazarus ، والتي توفر ترسانة غنية من GUI وقابلية النقل بين Win / Linux / Mac . ونتيجة لذلك ، يتم دمج مرونة إعدادات json في Cuda مع المكونات الإضافية للحوار ، على سبيل المثال ، Search By Files (هناك نظرة عامة على habr ) ، ومحرر الإعدادات وغيرها.
سأحاول التعبير عن بعض الأفكار حول كيفية تحسين Sublime . بالطبع ، هذا مجرد رأيي الخاص.
أشرطة الأدوات
لا توجد أشرطة أدوات في Sublime . لذلك يتجلى أسلوبه في فريق النص. على ما يبدو ، من المفترض أن المكان المفيد لكود قابل للتحرير أكثر أهمية. يمكنك استدعاء جميع الأوامر إما من القائمة ، أو من لوحة الألوان بالاسم ، أو من خلال مفاتيح الاختصار. هناك عيب واضح لهذا النهج - تحتاج إلى أن تعرف مقدمًا إما اسم الفريق أو مفتاح الاختصار الخاص به. لكن وجود الفريق المناسب واسمه أبعد ما يكون عن الوضوح دائمًا.
يعد شريط الأدوات القابل للتخصيص ، بما في ذلك غير القابل للفصل ، أحد التفاصيل التي تخفض حد الاستخدام.
يحتوي Cuda على شريط أدوات مخصص أفقي لاستدعاء الأوامر وشريط جانبي عمودي للتبديل بين الألواح: Tree ، Project ، Console. واجهة برمجة التطبيقات مسؤولة عن إعداد شريط الأدوات ، أي أنه يتم تنفيذه من خلال المكون الإضافي. قد تظهر أزرار جديدة في الشريط الجانبي إذا كانت الإضافات تضيف لوحات جديدة.

إن إضافة شريط أدوات إلى Sublime لن ينتهك أيًا من تقنياته السابقة.
شريط الحالة
في Sublime ، شريط الحالة ضعيف.

(1) وحدة التحكم / البحث / الاستبدال / بواسطة تبديل ملف اللوحة
(2) نشر
(3) التشفير
(4) اكتب EOL
(5) إعداد علامة التبويب
(6) النحو
من بين هذه الحقول الستة ، يمكن إخفاء اثنين فقط (Encoding و EOL) من خلال التكوين ، وفي مجال الرسائل ، يمكن للمكونات الإضافية إضافة / إزالة المفتاح = أزواج القيمة. لا يمكنك إخفاء أو إعادة ترتيب أو تكوين الحقول المتبقية. من الغريب بشكل خاص أن المعلومات المهمة حول النقل (النقل) / التحديد (التحديدات) تدخل داخل حقل الرسالة ، حيث يتم خلطها مع النصوص من الفرق.
في Cuda ، يمكن للمستخدم في user.json
لحقول شريط الحالة الإشارة إلى تسلسلها وعرضها ومحاذاة:
"ui_statusbar_panels": "caret,L,250|msg,L,0|lexer,L,70|tabsize,L,70"
وملء مجال caret
(معلومات حول العربات / التحديدات) يمكن تكوينها بشكل منفصل باستخدام استبدال الماكرو. على سبيل المثال
"ui_statusbar_no_sel": "r={y}/{count} c={xx}", "ui_statusbar_carets": "carets={carets} top/bot={y}/{y2}", "ui_statusbar_col_sel":"r={y}/{count} c={xx} s=[{sel} x {cols}]",
نتيجة لهذه الإعدادات ، سيتم عرض Cuda في شريط الحالة
- إذا كانت عربة واحدة:

- إذا كان هناك أربع عربات:

- إذا كان التحديد العمودي:

يتيح لك Cuda أيضًا تكوين الوقت المستغرق لعرض النص في حقل الرسائل.
شجرة الكود
إن رغبة Sublime في تقديم كل شيء في شكل نصي أمر مفهوم. ومع ذلك ، فإن رفض لوحة الشجرة ، التي توجد في جميع IDEs ومحرري النصوص المتقدمين ، أمر مؤلم للغاية. يمكنك استخدام "Text Tree" الموضوعة في علامة تبويب عادية (على سبيل المثال ، مع المكوّن الإضافي Outline
) ، ولكنها غير متكاملة بشكل جيد مع واجهة Sublime ، وليست بديلاً كاملًا.
يحتوي Cuda على لوحة Code tree
لعرض عناصر بناء الجملة للملف النشط: الوظائف / الفئات / الحقول للغات البرنامج والعلامات / المفاتيح للغات الترميز.

التكامل:
- العرض متزامن ، أي أن الشجرة تعرض حالة الشفرة مباشرة بعد تغييرها (مع تأخير مخصص).
- تتم مزامنة عقدة الشجرة المحددة مع موضع الحامل في الكود.
- يتم استخدام عقد الشجرة لتحديد الكتل ونقل النقل وعمليات أخرى.
بالإضافة إلى ذلك ، تتيح لك واجهة برمجة التطبيقات Cuda API إنشاء لوحة جديدة بشجرة وملئها. يفعل البرنامج المساعد Project Manager
ذلك بالضبط.
مجلدات بالإعدادات والمكونات الإضافية
بالنسبة إلى المستخدم غير المنغمس بشدة في أدلة Sublime ، فإن الوضع مع وضع الإعدادات / الحزم / المكونات الإضافية في المجلدات يبدو مربكًا. الخطوة الأولى داخل المحرر المثبت حديثًا مذهلة: من خلال Preferences -- Settings
أمر القائمة Preferences -- Settings
تفتح ملفان ، أحدهما (الإعدادات الافتراضية) في عنوان المحرر يكون مرئيًا (في Win)
Sublime Text 3/Packages/Default/Preferences.sublime-settings
ولكن لا يوجد مثل هذا الملف أو المجلد على القرص. بشكل عام ، يتم تخمين المنطق في مثل هذه الخدعة. يجب أن تكون الإعدادات الافتراضية موصولة في كود المحرر ، وسوف يتم تكرارها في بعض الملفات أم لا - وهذا حسب تقدير المطور. يتظاهر سامية بأن يكون في ملف.
في Cuda ، تكون الإعدادات الافتراضية محمية أيضًا ، ولكن هناك ملف حقيقي في التجميع
settings_default\default.json
حيث يتم تكرارها والتعليق عليها. إن وجود مثل هذا الملف يخلق راحة ليس فقط للمستخدمين ، ولكن أيضًا للمكونات الإضافية. على سبيل المثال ، يستخرج محرر الإعدادات من هذا الملف قائمة الخيارات نفسها ، بالإضافة إلى التعليقات عليها ، وترميز توزيع الخيارات عبر الشجرة.
تحدث مشاكل مشابهة مع الحزم في Sublime - تبحث عنها في Packages
ولا تجدها.
على الرغم من أن Cuda ليس لديه قاعدة قوية من الحزم الإضافية مثل Sublime ، فإن منطق وضع Cuda شفاف. على سبيل المثال ، بالنسبة للمكوِّنات الإضافية ، يوجد مجلد py
واحد يظهر فيه كل شيء - قياسي ومثبت مسبقًا. يوجد مجلد data/themes
، data/snippets
، data/lexlib
لـ data/lexlib
.
مراقبة الحزمة
موقف غريب مع المكوّن الإضافي Package Control
. من ناحية ، خارج الصندوق ، يأتي Sublime بدون هذا البرنامج المساعد. من ناحية أخرى ، لا يمكن فعل أي شيء خطير بدونه - بدون إضافات ، المحرر هزيل للغاية. حتى وضع المكوّن الإضافي في قائمة Preferences
، وليس في Tools--Packages
يشير إلى حالته الخاصة. على ما يبدو ، تمنعنا بعض "حقوق الطبع والنشر" من تضمين هذا المكون الإضافي في تجميع Sublime .
يحتوي Cuda على العديد من المكونات الإضافية (الآن 10) ، بما في ذلك Addons Manager
، المدرجة في التوزيع.
الألواح العائمة
يحتوي Sublime على تخطيط نافذة متجانسة ، أي أن مجموعات وحدة التحكم وعلامات التبويب موجودة معًا. يمكنك تشغيل مثيلات متعددة ، ولكن سيكون لكل منها دائمًا علامات تبويب ، وربما وحدة تحكم.
يحتوي Cuda على إعدادات وأوامر لعرض وحدة التحكم في نافذة منفصلة. هذا يسمح لك بتمديده بسهولة دون التأثير على ارتفاع النص الرئيسي ، على سبيل المثال ، وضعه على شاشة ثانية. بالإضافة إلى ذلك ، يمكنك فصل اللوحة بالشجرة حتى لا تحد من عرض النص الرئيسي.

بالمناسبة ، يرغب مستخدمو Atom (أو VS Code ) في الحصول على لوحات عائمة ، لكن المطورين رفضوا ، مستشهدين بالقيود في Electron . لذلك يمكن أن تكون هذه ميزة Sublime على المنافسين المباشرين.
المكون الإضافي للتكوين
يحتوي Sublime على أكثر من مائة إعداد kernel (107 في الإصدار 3.1.1) وستة مستويات متداخلة إضافية لاستيعاب القيم المتغيرة:
(1) Packages/Default/Preferences (<platform>).sublime-settings
(2) Packages/User/Preferences.sublime-settings
(3) <Project Settings>
(4) Packages/<syntax>/<syntax>.sublime-settings
(5) Packages/User/<syntax>.sublime-settings
(6) <Buffer Specific Settings>
من السهل تخيل موقف يصبح فيه التتبع اليدوي البحت حتى لجزء صغير من 700 قيم (100 مفتاح في 7 مستويات) مشكلة.
في Cuda ، هناك ما يقرب من 300 إعدادات kernel ، وهناك ثلاثة مستويات إضافية لتداخلها:
(1) settings/user.json
(2) settings/lexer <syntax>.json
(3) <File Settings>
المشكلة هي نفسها - يجب أن تؤخذ في الاعتبار قيم كثيرة جدًا (تصل إلى 300 * 4). لمساعدة المستخدمين ، هناك مكون إضافي يعرض جميع الإعدادات على جميع المستويات في الجدول ، مما يبسط البحث والتحرير.

انتبه إلى عمود Section
- يتم تعيين الإعدادات إلى عقد الشجرة. هذا يعطي الفرز والمرشحات إضافية. يتم تضمين علامة إنشاء هذه الشجرة في تعليقات الإعدادات في ملف settings_default\default.json
. على سبيل المثال ، تعليق
// [UI/Listbox]`
سيتم تعيين الخيارات التالية على عقدة UI/Listbox
. يمكن رؤية الشجرة بأكملها أيضًا

بالنسبة إلى Sublime ، يمكن إجراء حوار مماثل:
- الاسم وسبعة مستويات من التداخل هي ثمانية أعمدة فقط في الجدول.
- يمكن أخذ النموذج وعناصر التحكم من Tk أو مكتبة Python GUI الأكثر تقدمًا.
- يمكن أن تؤدي خيارات التغيير إلى تغييرات في الملفات وإعادة تحميلها عند حفظها.
أشياء صغيرة
هناك العديد من الشكاوى الصغيرة ، والتي ، بالطبع ، ليست في المكان الصحيح هنا ، ولكن في منتدى الدعم الفني Sublime . فليكنوا من أجل الاكتمال.
- لا تعمل
PgDn
/ PgUp
في مربعات حوار القائمة ، على سبيل المثال ، في لوحة الأوامر. - غالبًا ما تحتاج إلى إدراج بعض الأحرف الصعبة ، على سبيل المثال ، سهم أو كسر. لا توجد أداة كافية لعرض / تحديد جميع أحرف Unicode. في Cuda ، تكون هذه الأداة في شكل مربع حوار
Char map
.

- لا توجد طريقة لتعيين ملصقات التلوين الفردية. عندما تكون العديد من الملفات مفتوحة ، غالبًا ما تكون هناك رغبة في تلوين تسميات بعضها. في Cuda ، يكون الأمر
Set tab color...
في القائمة المحلية أعلى الاختصار. يتم حفظ الألوان التي تم تكوينها بهذه الطريقة في الجلسة.
الخلاصة
كم هو سهل إعطاء النصائح!
لكن الاعتبارات المذكورة أعلاه ، في رأيي ، ليست بدون فائدة. إذا كان هناك شيء مفيد في الإصدار التالي من Sublime Text ، فلا بأس. بالمناسبة ، ربما يقوم شخص ما بترجمة الأفكار ونقلها إلى Skinner (Jon Skinner).