consult-omni
Consult-omni عبارة عن حزمة للحصول على نتائج البحث من مصدر واحد أو عدة مصادر مخصصة (محركات بحث الويب، ومساعدي الذكاء الاصطناعي، وقاعدة بيانات elfeed، وملاحظات المؤسسة، والملفات المحلية، وتطبيقات سطح المكتب، وخوادم البريد، ...) مباشرةً في المخزن المؤقت Emacs الصغير. إنه خليفة للشبكة الاستشارية، مع ميزات ووظائف موسعة.
توفر Consult-omni أغلفة ووحدات ماكرو حول الاستشارة، لتسهيل حصول المستخدمين على النتائج من مصادر مختلفة والجمع بين المصادر المحلية ومصادر الويب في بحث متعدد الأنماط. بمعنى آخر، يتيح Consult-omni الحصول على نتائج متعددة المصادر أو مكتملة ديناميكيًا بنمط الاستشارة في المخزن المؤقت الصغير لمجموعة واسعة من المصادر بما في ذلك وظائف/حزم Emacs (مثل مخازن Emacs المؤقتة، وملفات org، وelfeed،...)، وبرامج سطر الأوامر ( grep، أو find، أو gh، …)، أو محركات بحث الويب (Google، Brave، Bing، …).
يمكن أن يكون موقع Consult-omni بديلاً مجانيًا مفتوح المصدر لأدوات البحث الشامل الأخرى مثل Alfred أو MacOS Spotlight. إنه يوفر مجموعة من المصادر الافتراضية كأمثلة، ولكن الفكرة الرئيسية هنا هي عدم معرفة المصدر وتوفير مجموعة الأدوات للمستخدمين لتحديد المصادر/سير العمل الخاصة بهم (المعروفة أيضًا باسم المكونات الإضافية).
فيما يلي لقطة الشاشة الإلزامية:
في لقطة الشاشة أعلاه، أستخدم اختصارًا رئيسيًا لفتح إطار Emacs واستدعاء consult-omni
(على غرار استدعاء MacOS Spotlight) والبحث عن مصطلح "emacs"، ثم التحرك وإلقاء نظرة على المعاينات من مصادر مختلفة بما في ذلك التطبيق وgptel ، شجاع، جوجل، يوتيوب، إلفيد، mu4e، ....
فيما يلي لقطة شاشة أخرى توضح استخدام Consult-omni كمشغل للتطبيقات:
لشرح الميزات ومقارنتها ببعض الحزم الأخرى، يمكنك مشاهدة مقاطع الفيديو الخاصة بي على YouTube، سواء لـ Consult-web أو Consult-omni أدناه:
لكل مصدر، قد يكون لديك أوامر ثابتة أو ديناميكية. تستعلم الأوامر الثابتة عن استخدام المدخلات ثم تجلب النتائج. الأوامر الديناميكية، قم بالإكمال الديناميكي أثناء كتابة المستخدم (إظهار النتائج أثناء قيام المستخدم بالكتابة). تبدو الأوامر الديناميكية أكثر سهولة وحداثة في عام 2024، ولكن من ناحية أخرى لها مساوئ إرسال الاستعلام إلى الخوادم عدة مرات خاصة إذا كنت تكتب ببطء! اعتمادًا على مزود الخدمة ونموذج واجهة برمجة التطبيقات، قد ترغب في تجنب الوصول إلى الخادم بشكل متكرر (على سبيل المثال بالنسبة للخدمات التي تدفعها لكل استعلام)، لذلك بالنسبة لبعض الخدمات قد يكون الأمر الثابت خيارًا أفضل من الأمر الديناميكي. باستخدام الماكرو consult-omni-define-source
، يمكنك اختيار إنشاء ثابت أو ديناميكي أو كليهما عن طريق تمرير nil
أو t
أو 'both
إلى الكلمة الأساسية :static
. فيما يلي مثال من الكود المصدري لإنشاء أوامر ثابتة وديناميكية لبحث Brave:
(consult-omni-define-source " Brave "
:narrow-char ?b
:type 'dynamic
:require-match t
:face 'consult-omni-engine-title-face
:request # 'consult-omni--brave-fetch-results
:preview-key consult-omni-preview-key
:search-hist 'consult-omni--search-history
:select-hist 'consult-omni--selection-history
:enabled ( lambda () ( bound-and-true-p consult-omni-brave-api-key))
:group # 'consult-omni--group-function
:sort t
:static 'both )
فيما يلي لقطة شاشة للأمر التفاعلي STATIC لـ Wikipedia:
فيما يلي لقطة شاشة للأمر التفاعلي DYNAMIC لـ Wikipedia:
بشكل افتراضي، يوفر Consult-omni أمرين تفاعليين رئيسيين متعددي المصادر.
consult-omni-multi
: هذا أمر ديناميكي تفاعلي يستخدم مصادر متعددة، كما هو محدد بواسطة consult-omni-multi-sources
، ويعرض النتائج في إكمال المخزن المؤقت الصغير مع الإكمال الديناميكي (يتم جلب النتائج حسب أنواع المستخدمين). هنا لقطة: consult-omni-multi-static
: هذا أمر STATIC تفاعلي يستخدم مصادر متعددة، كما هو محدد بواسطة consult-omni-multi-sources
، ويعرض النتائج عند اكتمال المخزن المؤقت الصغير. لاحظ أن استشارة omni-multi-static لا توفر إكمالًا ديناميكيًا ولكن قد يجد البعض أن استخدام هذا أكثر سهولة لتضييق نطاق النتائج. يقوم المستخدم بتوفير مصطلح بحث واحد، وبمجرد استرداد النتائج، ستؤدي الكتابة في المخزن المؤقت الصغير إلى تضييق نطاق المرشحين.لاحظ أنه على عكس موقع Consult-web السابق، لم يعد موقع Consult-omni يوفر أوامر تفاعلية أخرى متعددة المصادر (مثل البحث العلمي) بعد الآن. الأمر متروك للمستخدم الآن لتحديد مثل هذه الأوامر لسير العمل المخصص له. على سبيل المثال، يمكن لمستخدم واحد تحديد أوامر تفاعلية منفصلة للاستعلام عن مصادر الويب، مقابل المصادر المحلية، بينما قد يرغب مستخدم آخر في تحديد أوامر تفاعلية لمصادر المعرفة (المراجع الأكاديمية، والملاحظات، ...) مقابل الأدوات المساعدة (التطبيقات، والمخازن المؤقتة، والملفات، ...). يتم توفير أمثلة حول كيفية تحديد الأوامر التفاعلية الجديدة أدناه في التكوين المتقدم هنا.
يمكن تمرير الوسائط إلى الأوامر التفاعلية الديناميكية ويمكن إجراء المزيد من تضييق النتائج باستخدام بناء جملة مشابه لأسلوب "تقسيم Perl" في البحث غير المتزامن.
لتضييق نطاق النتائج، تحتاج إلى إضافة #
(أو حرف آخر محدد في consult-async-split-style
) بعد استعلام البحث. على سبيل المثال، قم بكتابة ما يلي في المخزن المؤقت الصغير:
#emacs بحث الويب #github
يبحث أولاً عن "emacs web search"، ثم يستخدم "github" لتضييق نطاق البحث.
علاوة على ذلك، يمكن تمرير الوسائط إلى الأوامر الديناميكية باستخدام بناء جملة مماثل مثل consult-grep
أيضًا. على سبيل المثال، قم بكتابة ما يلي في المخزن المؤقت الصغير:
#كيفية تصفح عنوان URL في إيماكس -- --model gpt-3.5-turbo
يقوم بتمرير gpt-3.5-turbo
كقيمة للوسيطة الأساسية :model
إلى الوظائف الخلفية لجميع المصادر التي تجلب النتائج. إذا قبل أي من هذه المصادر وسيطة الكلمة الرئيسية :model
، فسيتم تمرير القيمة gpt-3.5-turbo
إليهم. لهذا السبب، يوصى دائمًا باستخدام الوظائف التي تقبل أي وسيطات للكلمات الرئيسية (المعروفة أيضًا باسم add &allow-other-keys
) لتجنب الأخطاء عند تمرير كلمات رئيسية غير موجودة إليها.
بدلاً من استخدام --
، يمكنك أيضًا استخدام كلمة أساسية تحتوي على نقطتين :
. سيكون ما يلي مشابهًا للمثال أعلاه:
#كيفية تصفح عنوان URL في إيماكس -- :model gpt-3.5-turbo
عند استخدام الاستشارة، نتعامل مع أنواع مختلفة من المصادر، إما وظائف elisp (مثل buffer-list
أو re-search-forward
) أو برامج سطر الأوامر (مثل grep
و notmuch
gh
و mu
و...). يقومون بإرجاع قائمة المرشحين، والتي بدورها يتم تمريرها إلى completing--read
. بينما توفر Consult طريقة لدمج مصادر متعددة مع consult--multi
، فإن القدرة على الجمع بين مصادر من أنواع مختلفة (برنامج سطر الأوامر مع elisp على سبيل المثال) محدودة. في Consult-omni نقوم بحل هذه المشكلة عن طريق إنشاء بعض الأغلفة والآلات حول وظائف الاستشارة المضمنة ومن خلال جعل كل مصدر يعلن عن نوعه. يخبر هذا النوع الاستشارة الشاملة بكيفية جمع المرشحين من هذا المصدر ودمجهم مع مصادر أخرى. يمكن أن يكون النوع 'sync
'dynamic
" أو 'async
.
'sync
: هذا مصدر متزامن، مما يعني أنه عندما تستدعي Consult-omni وظيفة الطلب لجمع المرشحين من هذا المصدر، فإنها تستدعيها بشكل متزامن (تحظر عملية Emacs) وتنتظر القيمة التي تم إرجاعها (تتوقع قائمة من المرشحين أو لا شيء) ). يعد هذا مناسبًا على سبيل المثال للمصادر التي تقوم ببساطة بتشغيل دالة elisp وإرجاع قائمة بسرعة مثل buffer-list
. لا يوجد أي ربح تقريبًا من استدعاء هذه الوظيفة بشكل غير متزامن لأن الحمل للتحكم غير المتزامن (المؤقتات والمراقبون،...) ربما سيكلف وقتًا أطول من مجرد استدعاء الوظيفة بشكل مباشر ومتزامن.'dynamic
: المصادر الديناميكية هي تلك التي قد تستفيد أو تتطلب استدعاء وظيفة elisp التجميعية بشكل غير متزامن. على سبيل المثال، إذا كان جمع العناصر من مصدر يتطلب إرسال طلب HTTP إلى الخادم وانتظار الاستجابة، فيجب استخدام نوع ديناميكي، حتى لا يتم حظر عملية Emacs أثناء انتظار الاستجابة. في هذه الحالة، يجب أن تأخذ وظيفة الطلب للمصدر (الوظيفة التي تُرجع العناصر) وظيفة رد اتصال سيتم استدعاؤها عند وصول الاستجابة. يعد هذا مناسبًا على سبيل المثال للحصول على استجابة من واجهات برمجة تطبيقات بحث الويب مثل واجهات برمجة تطبيقات Google أو Brave أو OpenAI.'async
: المصادر غير المتزامنة، هي تلك التي تستخدم برنامج سطر أوامر خارجي وبالتالي تتطلب إنشاء عملية والحصول على مخرجات برنامج سطر الأوامر وتحليلها لجمع المرشحين. هذا على سبيل المثال مناسب للحصول على مرشحين من grep
أو notmuch
....تتيح آلية Consult-omni الجمع بين مصادر متعددة من أنواع مختلفة في أمر واحد من خلال الجمع بين المكالمات/العمليات المتزامنة وغير المتزامنة بحيث يمكن للمستخدم الحصول بكفاءة على نتائج البحث من مصادر مختلفة في الوقت الفعلي تقريبًا (لا حاجة للانتظار، حيث يتم عرض المرشح كما هو) يصل).
يمكنك تحميل إجراءات البدء الافتراضية من خلال؛
( require 'consult-omni-embark )
تتيح لك الإجراءات الافتراضية فتح الروابط في المتصفح الافتراضي أو البديل وكذلك نسخ الروابط أو إدراجها و/أو عنوانها و/أو عنوان URL لها. يمكن تحديد إجراءات الشروع الأخرى وفقًا لسير العمل المحدد الخاص بك.
شاهد مقطع فيديو YouTube على موقع Consult-web على سبيل المثال، هنا: https://youtu.be/7pDfyqBZwvo?t=4962.
بدون سلاسل المستندات والمسافات البيضاء، يكون الرمز أقل من 1000 سطر ويعتمد فقط على الاستشارة واسترداد عنوان URL المدمج.
يمكنك فقط تحميل الأجزاء التي تحتاجها. على سبيل المثال، إذا كان كل ما تحتاجه هو أداة مساعدة للاقتراح التلقائي مشابهة لـ helm-google-autosuggest
، فيمكنك استخدام الحد الأدنى من التكوين مثل هذا:
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:config
; ; Load Sources Core code
( require 'consult-omni-sources )
; ; Load Embark Actions
( require 'consult-omni-embark )
; ; Only load brave-auto-suggest source
( require 'consult-omni-brave-autosuggest )
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-brave-autosuggest ))
لاحظ أن كل وحدة (ويعرف أيضًا باسم كل مصدر) تضيف 100-200 سطرًا إضافيًا من التعليمات البرمجية. وهذا يعني أيضًا أنه لإضافة مصدر جديد، ما عليك سوى كتابة جزء قصير من التعليمات البرمجية باتباع هذه الأمثلة!
الكثير من خيارات التخصيص لكل من المصادر وأيضًا لتشغيل الإجراءات على النتائج. يمكن إضافة مصادر جديدة حسب رغبتك بتنسيق مختلف وإجراءات مختلفة...
تسمح المجموعة الديناميكية بسير العمل المعقد بسرعة. قم بتغيير معلمات الاستعلام بشكل سريع عن طريق تمرير الوسائط. حدد مجموعة عشوائية من النتائج المخصصة باستخدام البدء وتشغيل إجراءات البدء عليها. وهذا يسمح بمعالجة الدفعات أيضًا. على سبيل المثال، لإضافة قائمة طويلة من النتائج إلى ملاحظة في الوضع التنظيمي لمراجعتها لاحقًا (كما هو موضح في فيديو YouTube هذا: https://youtu.be/7pDfyqBZwvo?t=4774).
قبل أن تبدأ، تأكد من أنك تفهم ثلاث نقاط:
consult-omni-sources
عرضًا أساسيًا لدمج الخدمات المختلفة (مثل موفري البحث)، ولكن نظرًا لأن كل خدمة تأتي مع الشروط والأحكام الخاصة بها (والتي قد تتغير بمرور الوقت وتختلف من موقع إلى آخر) إلى الموقع)، فمن الصعب تقديم حلول شاملة وصيانتها مع مرور الوقت. لا تدري Consult-omni كيفية الاتصال ودمج الخدمات الأخرى في الإعداد الخاص بك (لأنه لا تقوم Consult-omni أو Emacs بجمع أي معلومات عن المستخدمين أو استخدامهم)، وبالتالي في النهاية أنت وحدك المسؤول عن إعداد كل شيء بشكل صحيح و فهم عواقب الاستخدام (على سبيل المثال، تكاليف استخدام واجهات برمجة التطبيقات المدفوعة) والتأكد من البقاء ضمن حدود القوانين واللوائح ذات الصلة بحالة الاستخدام الخاصة بك (على سبيل المثال، اتباع اتفاقيات مستخدم البرنامج، وما إلى ذلك). لذلك، من المهم بالنسبة لك قراءة وفهم كيفية استخدام كل خدمة، وكذلك فهم ما يحدث تحت الغطاء عند دمج الخدمة مع Consult-omni. أبذل قصارى جهدي لتقديم الوثائق هنا وكذلك على صفحات الويكي، وسأحاول المساعدة عندما يكون ذلك ممكنًا ولكن قبل المتابعة، عليك أن تفهم أنك تفعل كل شيء على مسؤوليتك الخاصة. إذا كنت تريد مثالاً للتكوين، فراجع القائمة المنسدلة *مثال للتكوين*. وهنا بعض الشرح التفصيلي؛
لتتمكن من استخدام Consult-omni، تحتاج إلى Emacs >28.0 (لم أختبر الإصدارات السابقة) وتحتاج إلى استشارة. في حين أن هذه هي المتطلبات الوحيدة، أقترح عليك قراءة بقية هذا الملف التمهيدي. أوصي ببعض الحزم الأخرى والتكوينات المفيدة لإعدادات مختلفة. يمكن لبعض هذه الحزم والإعدادات الإضافية تحسين تجربتك مع Consult-omni، لذلك قد ترغب في التفكير في تثبيتها أيضًا. على سبيل المثال، يمكن أن يؤدي الجمع بين الاستشارة والحزم الأخرى مثل Vertico وOrderless وEvent إلى تحسين الوظيفة بالإضافة إلى تجربة المستخدم.
Consult-omni غير موجود حاليًا في ELPA أو MELPA. لذلك، تحتاج إلى تثبيته باستخدام مدير حزم بديل غير قياسي مثل Straight.el أو elpaca أو ... أو استخدام التثبيت اليدوي.
لتثبيت Consult-omni مع Straight.el يمكنك استخدام الأمر التالي. تأكد من تحميل Consult-omni بعد تحميل الاستشارة (على سبيل المثال، require 'consult
).
( straight-use-package
'(consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " )))
أو إذا كنت تستخدم ماكرو use-package
مع الخط المستقيم، فيمكنك القيام بما يلي:
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " ))
:after consult)
يمكنك أيضًا تفرع هذا المستودع واستخدام الريبو الخاص بك.
انسخ هذا الريبو وتأكد من أن الملفات موجودة على مسار التحميل الخاص بك، كما هو موضح في EmacsWiki.
تأكد من تحميل الاستشارة (على سبيل المثال require 'consult
) قبل تحميل Consult-omni.
يمكنك البحث في جميع المصادر الافتراضية عن طريق تحميل وحدة consult-omni-sources
المتوفرة، ثم استدعاء الوظيفة consult-omni-sources-load-modules
:
( require 'consult-omni-sources )
(consult-omni-sources-load-modules)
يوفر هذا مصادر لبعض الخدمات الشائعة، ويضيف قائمة طويلة من الأوامر التفاعلية (بحث ديناميكي، بحث ثابت أو كليهما حسب المصدر). مع مرور الوقت، آمل أن أضيف المزيد من الخدمات، وآمل أن يكون ذلك من خلال مساهمة المجتمع أيضًا. لاحظ أن هذه أيضًا أمثلة جيدة لتتعلم كيفية إضافة مصادرك الخاصة أو تعديل المصادر الحالية لحالات الاستخدام المحددة الخاصة بك.
يمكنك أيضًا تحميل مصادر متعددة (ولكن ليس كلها) عن طريق تعيين القائمة consult-omni-sources-modules-to-load
ثم تحميل استدعاء consult-omni-sources-load-modules
:
( require 'consult-omni-sources )
( setq consult-omni-sources-modules-to-load '(consult-omni-google consult-omni-wikipedia))
(consult-omni-sources-load-modules)
يؤدي هذا إلى تقييد المصادر التي يتم تحميلها Consult-omni إلى تلك المحددة في consult-omni-sources-modules-to-load
فقط.
وبدلاً من ذلك، يمكنك تحميل مصدر واحد فقط عن طريق طلب الملف المقابل. على سبيل المثال بالنسبة لويكيبيديا، يمكنك القيام بما يلي:
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
سيؤدي هذا إلى إضافة أوامر تفاعلية فقط للبحث في ويكيبيديا (على سبيل المثال consult-omni-wikipedia
و/أو consult-omni-wikipedia-static
).
فيما يلي قائمة بالمصادر الحالية. للحصول على تفاصيل حول كيفية ضبط كل مصدر واستخدامه، راجع صفحات wiki (قيد الإنشاء الآن). يمكنك أيضًا مشاهدة فيديو YouTube التعليمي هنا: https://www.youtube.com/watch?v=wNH2E7iT__c
مصدر | فئة |
---|---|
تطبيقات | تطبيقات سطح المكتب |
بنج | محرك بحث الويب |
اقتراح تلقائي شجاع | إكمال كلمات الويب/الاقتراح التلقائي |
شجاع | محرك بحث الويب |
تاريخ المتصفح | تاريخ متصفح الويب |
استشارة مصادر المخزن المؤقت | مخازن إيماكس المؤقتة، والملفات، والإشارات المرجعية، ... |
احسب | حاسبة إيماكس |
chatGPT | مطالبات الذكاء الاصطناعي البسيطة |
ملاحظات التشاور | ملاحظات محلية |
قاموس | ايماكس المدمج في القاموس |
doiorg | المرجع الأكاديمي |
DuckDuckGo (واجهة برمجة التطبيقات المحدودة) | اقتراحات البحث |
com.elfeed | الخلاصات (RSS، مقاطع الفيديو، ...) |
فد | البحث عن الملفات المحلية باستخدام الأمر fd |
يجد | ابحث عن الملفات المحلية باستخدام أمر البحث |
جيثب | ابحث في GitHub Repos باستخدام أمر gh |
جوجل | محرك بحث الويب |
جوجل الاقتراح التلقائي | إكمال كلمات الويب/الاقتراح التلقائي |
grep | ابحث عن الملفات المحلية باستخدام أمر grep |
git-grep | ابحث في ملفات Git المحلية باستخدام أمر grep |
ripgrep | ابحث في الملفات المحلية باستخدام أمر rg |
ripgrep-all | ابحث عن الملفات المحلية باستخدام أمر rga |
GPtel | مساعد الذكاء الاصطناعي |
حسد | مقاطع الفيديو عبر الإنترنت (يوتيوب) |
مخازن البحث عن النص | البحث عن نص في المخازن المؤقتة إيماكس |
تحديد موقع | البحث في الملفات المحلية باستخدام الأمر المحلي |
رجل | البحث في الصفحات اليدوية باستخدام أمر الرجل |
com.mdfind | ابحث عن الملفات المحلية باستخدام أمر OSX mdfind |
mu4e | بحث في رسائل البريد الإلكتروني |
بحث الملاحظات | البحث في ملفات الملاحظات المحلية |
ليس كثيراً | بحث في رسائل البريد الإلكتروني |
نومي | آلة حاسبة مع Numi-cli/ أمر من Numi) |
جدول أعمال المنظمة | البحث عن عناصر جدول أعمال المؤسسة |
مجلات | المرجع الأكاديمي |
سكوبس | المرجع الأكاديمي |
StackOverflow | منتدى المجتمع |
ويكيبيديا | موسوعة |
يوتيوب | مقاطع الفيديو عبر الإنترنت (يوتيوب) |
تم إنشاء Consult-omni على أساس فكرة أن المستخدم يجب أن يكون قادرًا على تخصيص كل شيء بناءً على حالة الاستخدام الخاصة به، وبالتالي من المتوقع جدًا أن يتعلم المستخدم كيفية تكوين هذه الحزمة. ولذلك، أنصحك بقراءة هذا القسم وفهم كيفية تكوين الحزمة وفقًا لاحتياجاتك وحالة الاستخدام المحددة الخاصة بك. بالإضافة إلى هذه الإعدادات، تحتوي بعض المصادر على متغيرات التخصيص الخاصة بها، وما إلى ذلك والتي تمت مناقشتها في صفحات wiki (قيد الإنشاء الآن) وفي هذا البرنامج التعليمي على YouTube: https://www.youtube.com/watch?v=wNH2E7iT__c.
يتم توفير المتغيرات القابلة للتخصيص التالية:
consult-omni-sources-modules-to-load
قائمة الوحدات المراد تحميلها. من خلال ضبط هذا قبل استدعاء consult-omni-sources-load-modules
، يمكنك تحديد الوحدات (المصادر) التي تم تحميلها ويمكنك تجنب الأخطاء بسبب فقدان المتطلبات لمصادر معينة. على سبيل المثال لتحميل ويكيبيديا فقط:
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
consult-omni-default-browse-function
وظيفة التصفح الافتراضية لفتح عناوين URL. يمكن ضبط هذا على وظيفة المتصفح الخارجي عن طريق:
( setq consult-omni-default-browse-function 'browse-url )
consult-omni-alternate-browse-function
وظيفة التصفح الثانوية لفتح عناوين URL. يمكن على سبيل المثال تعيين هذا على eww أو بعض المتصفحات الأخرى للوصول السريع إلى متصفح بديل مع إجراءات البدء.
( setq consult-omni-alternate-browse-function 'eww-browse-url )
consult-omni-default-preview-function
الوظيفة الافتراضية لاستخدامها في معاينة الروابط. يمكن على سبيل المثال تعيين هذا على eww:
( setq consult-omni-default-preview-function # 'eww-browse-url )
أو xwidegt-webkit:
( setq consult-omni-default-preview-function # 'xwidget-webkit-browse-url )
consult-omni-show-preview
يؤدي هذا إلى تشغيل/إيقاف المعاينات لجميع مصادر الاستشارة الشاملة. يوصى بضبط هذا على t
واستخدام preview-key
للتحكم في المعاينات لكل مصدر.
consult-omni-preview-key
هذا هو مفتاح المعاينة الافتراضي. قد يكون الاختيار الجيد هو "Co".
( setq consult-omni-preview-key " C-o " )
consult-omni-default-format-candidate
يخزن هذا المتغير وظيفة تسمى لتنسيق المرشحين (على أي مصدر لا يحتوي على وظيفة تنسيق صريحة). توفر Consult-omni وظيفتين نموذجيتين:
consult-omni--simple-format-candidate
المربع بدون تعليق توضيحي هامشي في المخزن المؤقت الصغيرconsult-omni--highlight-format-candidate
يعرض المرشح مع تعليق توضيحي هامشي ويسلط الضوء على مصطلح البحث أيضًا. consult-omni-default-count
بشكل افتراضي، تسترد خدمة Consult-omni فقط ما يصل إلى هذا العدد من النتائج لكل مصدر. يوصى بالاحتفاظ بهذا الرقم عند عدد منخفض (على سبيل المثال، من 5 إلى 10) للحفاظ على سرعة الأداء. تم تعيين الإعداد الافتراضي على 5 لأنه في الوقت الحاضر بالنسبة لمعظم حالات الاستخدام اليومية، ربما لن تحتاج إلى أكثر من أفضل 5 نتائج.
( setq consult-omni-default-count " 5 " )
ضع في اعتبارك أنه باستخدام الأوامر الديناميكية لـ Consult-omni، يمكنك دائمًا زيادة العدد عن طريق تمرير الوسائط إلى -n
أو --count
أو :n
أو :count
(على سبيل المثال عن طريق كتابة search term -- -n 30
، يمكنك استرداد ما يصل إلى 30 نتيجة.
consult-omni-default-page
وهذا مشابه للانتقال إلى الصفحة 2، 3،...،N في صفحة نتائج البحث الكلاسيكية. إذا تم تعيين هذا على N، فسيتم تخطي النتائج الأولى (N * عدد/صفحة) وتظهر الصفحة التالية من النتائج. من المستحسن الاحتفاظ بهذا كقيمة افتراضية، 0، لرؤية أفضل النتائج.
ضع في اعتبارك أنه باستخدام الأوامر الديناميكية لـ Consult-omni، يمكنك دائمًا تغيير الصفحة عن طريق تمرير القيم إلى الوسيطات -p
أو --page
أو :p
أو :page
(على سبيل المثال عن طريق كتابة search term -- -p 2
، يمكنك يمكن الحصول على الصفحة 2.
consult-omni-default-timeout
الحد الأقصى للوقت بالثواني قبل أن تتخلى consult-omni
عن جلب النتائج من مصدر واحد في أوامر STATIC .
consult-omni-url-use-queue
قيمة منطقية، سواء كنت تريد استخدام url-queue
أم لا.
consult-omni-url-queue-parallel-processes
عدد عمليات url-queue
التي يتم تشغيلها بالتوازي.
consult-omni-url-queue-timeout
الحد الأقصى للوقت بالثواني الذي يمكن أن تستمر فيه وظيفة url-queue
واحدة قبل الاستسلام.
consult-omni-log-buffer-name
اسم المخزن المؤقت لتسجيل المعلومات، وهو مفيد في الغالب لتصحيح الأخطاء.
consult-omni-log-level
يتحكم هذا المتغير في كيفية قيام Consult-omni بتسجيل المعلومات أو عرض الأخطاء. يمكن أن تكون إما nil
أو 'info
' أو 'debug
' بترتيب التسجيل/إظهار المزيد من التفاصيل.
consult-omni-group-by
هذا هو الحقل المستخدم لتجميع النتائج. بشكل افتراضي، يتم تجميع النتائج حسب اسم المصدر. ولكن يمكن تغيير هذا لتحقيق سلوك تجميعي مختلف. إذا تم تعيين هذا على nil
، فلن يتم تجميع النتائج. ويمكن أيضًا تعيينها على خصائص أخرى للمرشحين (على سبيل المثال :url
، :title
، :domain
، ...)
( setq consult-omni-group-by :source )
consult-omni-multi-sources
هذه قائمة بسلاسل أسماء المصدر (على سبيل المثال '("Google", "Wikipedia", "chatGPT")
) التي سيتم استخدامها في الأمرين consult-omni-multi
و consult-omni-multi-static
(انظر أعلاه لمعرفة وصف).
consult-omni-highlight-matches-in-minibuffer
ما إذا كان Consult-omni يسلط الضوء على مطابقات مصطلح البحث في مرشحات المخزن المؤقت الصغير. وهذا مفيد لتسليط الضوء على أهمية نتائج البحث.
consult-omni-highlight-matches-in-file
ما إذا كان Consult-omni يسلط الضوء على مطابقات مصطلح البحث في الملفات (على سبيل المثال، في المعاينات أو عند فتح الملفات). يعد هذا مفيدًا للعثور على مطابقات لمصطلح البحث بعد فتح الملفات المستهدفة.
consult-omni-default-interactive-command
هذه ميزة ملائمة لربط الأمر التفاعلي المفضل لديك Consult-omni بالأمر المسمى consult-omni
، لذا فمن الأسهل تذكره والعثور عليه عند الاتصال Mx
. يمكنك ربط ذلك بأحد الأوامر التفاعلية (مثل consult-omni-multi
أو consult-omni-multi-static
) أو يمكنك ربطه بأمر أحادي المصدر (على سبيل المثال consult-omni-google
, consult-omni-google-static
، consult-omni-google-wikipedia
، ...) أو بدلاً من ذلك يمكنك تحديد أمرك المخصص (فردي أو متعدد المصدر) واستخدامه بدلاً من ذلك.
consult-omni-http-retrieve-backend
يتحكم هذا المتغير في الواجهة الخلفية التي تستخدمها شركة Consult-omni لطلبات HTTP. يدعم Consult-omni 3 واجهات خلفية مختلفة:
url-retrieve
المدمجrequest
(راجع طلب emacs)plz
(انظر plz.el) على سبيل المثال، لتغيير الواجهة الخلفية إلى plz
، يمكنك القيام بما يلي:
( setq consult-omni-http-retrieve-backend 'plz )
consult-omni-default-autosuggest-command
أمر الاقتراح التلقائي الافتراضي. يوفر Consult-omni مثالين مع consult-omni-dynamic-brave-autosuggest
و consult-omni-dynamic-google-autosuggest
، ولكن يمكنك أيضًا تحديد أوامر اقتراح تلقائي مخصصة أخرى من مصادر أخرى (مثل google، ويكيبيديا، ...)
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
في الأوامر الديناميكية، تبدأ عملية التجميع الديناميكي فقط عندما لا يكون هناك إدخال جديد لثواني consult-omni-dynamic-input-debounce
. إذا كنت تكتب ببطء أو تعتقد أنك بحاجة إلى وقت للتفكير فيما تريد البحث عنه، فقد ترغب في زيادة هذا العدد، حتى لا تقوم بعمليات البحث قبل الأوان، خاصة إذا كنت تريد تجنب تشغيل مصطلحات البحث قبل الأوان على الخدمات المدفوعة. افتراضيًا، يرث هذا من قيمة ارتداد الإدخال المضمنة في الاستشارة، وهي 0.5. أنا شخصياً أجد ذلك سريعًا جدًا بالنسبة إلى Consult-omni لأنني لا أريد أن ترسل Consult-omni استعلامًا إلى OpenAI API المدفوعة بينما لا أزال أكتب استعلامي، لذا أقوم بإبطائه إلى 0.8 - 1 ثانية.
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
في الأوامر الديناميكية، تبدأ عملية التجميع consult-omni-dynamic-input-throttle
فقط كل ثانية. إذا كنت تستخدم خدمات API التي تحتوي على عدد محدود من الاستعلامات في الثانية، فقد ترغب في زيادة هذا العدد لتجنب حدوث أخطاء. لقد قمت بتعيين هذا على 2x قيمة ارتداد الإدخال:
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
في الأوامر الديناميكية، يتم تحديث واجهة مستخدم الإكمال فقط كل ثانية consult-omni-dynamic-refresh-delay
. ربما تريد تشغيل هذا بأسرع ما يمكن مثل consult-omni-dynamic-input-debounce
.
( setq consult-omni-dynamic-input-throttle 0.8 )
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:custom
; ; General settings that apply to all sources
(consult-omni-show-preview t ) ; ;; show previews
(consult-omni-preview-key " C-o " ) ; ;; set the preview key to C-o
:config
; ; Load Sources Core code
( require 'consult-omni-sources )
; ; Load Embark Actions
( require 'consult-omni-embark )
; ; Only load wikipedia source
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
(consult-omni-sources-load-modules)
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-wikipedia ))
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:custom
; ; General settings that apply to all sources
(consult-omni-show-preview t ) ; ;; show previews
(consult-omni-preview-key " C-o " ) ; ;; set the preview key to C-o
:config
; ; Load Sources Core code
( require 'consult-omni-sources )
; ; Load Embark Actions
( require 'consult-omni-embark )
; ; Either load all source modules or a selected list
; ;; Select a list of modules you want to aload, otherwise all sources all laoded
; (setq consult-omni-sources-modules-to-load (list 'consult-omni-wkipedia 'consult-omni-notes))
(consult-omni-sources-load-modules)
; ;; set multiple sources for consult-omni-multi command. Change these lists as needed for different interactive commands. Keep in mind that each source has to be a key in `consult-omni-sources-alist' .
( setq consult-omni-multi-sources '( " calc "
; ; "File"
; ; "Buffer"
; ; "Bookmark"
" Apps "
; ; "gptel"
" Brave "
" Dictionary "
; ; "Google"
" Wikipedia "
" elfeed "
; ; "mu4e"
; ; "buffers text search"
" Notes Search "
" Org Agenda "
" GitHub "
; ; "YouTube"
" Invidious " ))
; ; Per source customization
; ;; Set API KEYs. It is recommended to use a function that returns the string for better security.
( setq consult-omni-google-customsearch-key " YOUR-GOOGLE-API-KEY-OR-FUNCTION " )
( setq consult-omni-google-customsearch-cx " YOUR-GOOGLE-CX-NUMBER-OR-FUNCTION " )
( setq consult-omni-brave-api-key " YOUR-BRAVE-API-KEY-OR-FUNCTION " )
( setq consult-omni-stackexchange-api-key " YOUR-STACKEXCHANGE-API-KEY-OR-FUNCTION " )
( setq consult-omni-pubmed-api-key " YOUR-PUBMED-API-KEY-OR-FUNCTION " )
( setq consult-omni-openai-api-key " YOUR-OPENAI-API-KEY-OR-FUNCTION " )
; ;; Pick you favorite autosuggest command.
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest ) ; ;or any other autosuggest source you define
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-multi ))
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:custom
; ;; General settings that apply to all sources
(consult-omni-show-preview t ) ; ;; show previews
(consult-omni-preview-key " C-o " ) ; ;; set the preview key to C-o
(consult-omni-highlight-matches-in-minibuffer t ) ; ;; highlight matches in minibuffer
(consult-omni-highlight-matches-in-file t ) ; ;; highlight matches in files
(consult-omni-default-count 5 ) ; ;; set default count
(consult-omni-default-page 0 ) ; ;; set the default page (default is 0 for the first page)
; ; optionally change the consult-omni debounce, throttle and delay.
; ; Adjust these (e.g. increase to avoid hiting a source (e.g. an API) too frequently)
(consult-omni-dynamic-input-debounce 0.8 )
(consult-omni-dynamic-input-throttle 1.6 )
(consult-omni-dynamic-refresh-delay 0.8 )
; ; Optionally set backend for http request (either 'url, 'request, or 'plz)
(consult-omni-http-retrieve-backend 'plz )
:config
; ;; Load Sources Core code
( require 'consult-omni-sources )
; ;; Load Embark Actions
( require 'consult-omni-embark )
; ;; Either load all source modules or a selected list
; ; Select a list of modules you want to aload, otherwise all sources all laoded
; (setq consult-omni-sources-modules-to-load (list 'consult-omni-wkipedia 'consult-omni-notes))
(consult-omni-sources-load-modules)
; ; set multiple sources for consult-omni-multi command. Change these lists as needed for different interactive commands. Keep in mind that each source has to be a key in `consult-omni-sources-alist' .
( setq consult-omni-multi-sources '( " calc "
; ; "File"
; ; "Buffer"
; ; "Bookmark"
" Apps "
; ; "gptel"
" Brave "
" Dictionary "
; ; "Google"
" Wikipedia "
" elfeed "
; ; "mu4e"
; ; "buffers text search"
" Notes Search "
" Org Agenda "
" GitHub "
; ; "YouTube"
" Invidious " ))
; ;; Per source customization
; ; Set API KEYs. It is recommended to use a function that returns the string for better security.
( setq consult-omni-google-customsearch-key " YOUR-GOOGLE-API-KEY-OR-FUNCTION " )
( setq consult-omni-google-customsearch-cx " YOUR-GOOGLE-CX-NUMBER-OR-FUNCTION " )
( setq consult-omni-brave-api-key " YOUR-BRAVE-API-KEY-OR-FUNCTION " )
( setq consult-omni-stackexchange-api-key " YOUR-STACKEXCHANGE-API-KEY-OR-FUNCTION " )
( setq consult-omni-pubmed-api-key " YOUR-PUBMED-API-KEY-OR-FUNCTION " )
( setq consult-omni-openai-api-key " YOUR-OPENAI-API-KEY-OR-FUNCTION " )
; ; add more keys as needed here.
; ; gptel settings
( setq consult-omni-gptel-cand-title # 'consult-omni--gptel-make-title-short-answer )
; ; default terminal
( setq consult-omni-embark-default-term # 'vterm )
; ; default video player
( setq consult-omni-embark-video-default-player # 'mpv-play-url )
; ; pretty prompt for launcher
( setq consult-omni-open-with-prompt " " )
; ;; Pick you favorite autosuggest command.
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest ) ; ;or any other autosuggest source you define
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-multi )
; ;; Optionally Set back-end for notes search to ripgrep-all (requires ripgrep-all)
; ; (setq consult-omni-notes-backend-command "rga")
; ;; Optionally add more interactive commands
; ; consult-omni-web
( defvar consult-omni-web-sources ( list " gptel "
" Brave "
" elfeed "
" mu4e "
" Wikipedia "
" GitHub "
" Invidious "
))
( defun consult-omni-web ( &optional initial prompt sources no-callback &rest args )
" Interactive web search”
This is similar to `consult-omni-multi' , but runs the search on
web sources defined in `consult-omni-web-sources' .
See `consult-omni-multi' for more details.
"
( interactive " P " )
( let ((prompt ( or prompt ( concat " [ " ( propertize " consult-omni-web " 'face 'consult-omni-prompt-face ) " ] " " Search: " )))
(sources ( or sources consult-omni-web-sources)))
(consult-omni-multi initial prompt sources no-callback args)))
; ; consult-omni-local
( defvar consult-omni-local-sources ( list " ripgrep "
" mdfind "
" Notes Search "
" Apps "
" Org Agenda " ))
( defun consult-omni-local ( &optional initial prompt sources no-callback &rest args )
" Interactive local search”
This is similar to `consult-omni-multi' , but runs the search on
local sources defined in `consult-omni-local-sources' .
See `consult-omni-multi' for more details.
"
( interactive " P " )
( let ((prompt ( or prompt ( concat " [ " ( propertize " consult-omni-local " 'face 'consult-omni-prompt-face ) " ] " " Search: " )))
(sources ( or sources consult-omni-local-sources)))
(consult-omni-multi initial prompt sources no-callback args)))
; ; consult-omni-scholar
( setq consult-omni-scholar-sources ( list " PubMed " " Scopus " " Notes Search " " gptel " ))
( defun consult-omni-scholar ( &optional initial prompt sources no-callback &rest args )
" Interactive “multi-source acadmic literature” search
This is similar to `consult-omni-multi' , but runs the search on
academic literature sources defined in `consult-omni-scholar-sources' .
See `consult-omni-multi' for more details.
"
( interactive " P " )
( let ((prompt ( or prompt ( concat " [ " ( propertize " consult-omni-multi " 'face 'consult-omni-prompt-face ) " ] " " Search: " )))
(sources ( or sources consult-omni-scholar-sources)))
(consult-omni-multi initial prompt sources no-callback args)))
; ; AutoSuggest at point
( defun consult-omni-autosuggest-at-point ()
( interactive )
( let ((input ( or ( thing-at-point 'url ) ( thing-at-point 'filename ) ( thing-at-point 'symbol ) ( thing-at-point 'sexp ) ( thing-at-point 'word ))))
( when ( and ( minibuffer-window-active-p ( selected-window ))
( equal ( substring input 0 1 ) (consult--async-split-initial nil )))
( setq input ( substring input 1 )))
(consult-omni-brave-autosuggest input))))
على حد علمي، لا توجد حزمة Emacs أخرى توفر وظائف وتعدد استخدامات Consult-omni. على الرغم من وجود العديد من الحزم لعمليات بحث الويب (راجع المناقشة ضمن حزمة استشارة الويب)، إلا أنه لا توجد حزمة بحث متعدد على حد علمي.
خارج Emacs، هناك بالطبع رسوم مثل MacOS Spotlight وAlfred، التي توفر أدوات مساعدة للبحث الشامل، ولكن بالمقارنة مع consult-omni
فإنها تفتقر إلى التنوع والقابلية للتخصيص.
للإبلاغ عن خطأ، تحقق أولاً مما إذا كان قد تم الإبلاغ عنه بالفعل في *متتبع المشكلات* ومعرفة ما إذا كان هناك حل موجود أو قم بإضافة التعليقات والمناقشة ذات الصلة في إطار نفس المشكلة. إذا لم تقم بتقديم مشكلة جديدة، فاتبع الخطوات التالية:
consult
url-retrieve
(أو الأوامر الأخرى ذات الصلة) تعمل كما هو متوقع.emacs -Q
)، قم بتثبيت أحدث إصدار من Consult-omni (وتوابعه) دون أي تكوين أو حزم أخرى ومعرفة ما إذا كانت المشكلة لا تزال قائمة.Mx toggle-debug-on-error
) وقم بتضمين محتوى التتبع الخلفي في تقريرك.consult-omni-url-retrieve-sync
) ، فيمكنك تغيير consult-omni-log-level
debug إلى 'debug
، وفحص المخزن المؤقت للسجل (المخزن المؤقت المخفي يسمى " **consult-omni-log**” أو أي اسم آخر تم تعيينه في consult-omni-log-buffer-name
). إذا اخترت تضمين هذه المعلومات في مشكلتك، فيرجى التأكد من عدم كشف المعلومات الشخصية والأسرار (مثل مفاتيح واجهة برمجة التطبيقات).هذه حزمة مفتوحة المصدر، وأنا أقدر التعليقات والاقتراحات والأفكار وما إلى ذلك. هناك الكثير من الوظائف أو المصادر التي يمكن إضافتها إلى هذه الحزمة لتحسين سير عمل المستخدمين المختلفين، لذلك إذا كانت لديك بعض الأفكار، فلا تتردد في تقديم طلب مشكلة لطلب الميزة.
أرغب في رؤية المساعدة من المساهمين الآخرين لتحسين/المحافظة على المصادر/الميزات الحالية وكذلك للعمل على مصادر أو ميزات جديدة. إذا كنت مهتمًا وترغب في المساهمة في الكود، يرجى ملاحظة أن الفرع الرئيسي مستقر حاليًا (مستقر مثل العمل الجاري مثل هذا) وأن فرع التطوير هو العمل الحالي قيد التقدم. لذلك، ابدأ من فرع التطوير للحصول على آخر تحديثات العمل الجاري وإنشاء فرع جديد بأسماء مثل الميزة/اسم الميزة أو الإصلاح/المشكلة،... قم بإجراء التعديلات ثم قم بإنشاء سحب جديد اطلب الدمج مرة أخرى مع فرع التطوير عند الانتهاء من تعديلاتك.
الأهم من ذلك، ضع في اعتبارك أنني أستخدم منهجًا برمجيًا متعلمًا حيث يذهب كل شيء إلى مصدر واحد للحقيقة Consult-omni.org ثم يتشابك مع الملفات المناسبة (على سبيل المثال، Consult-omni.el). إذا قمت بفتح طلب سحب حيث قمت بتحرير ملفات .el مباشرة، فمن المحتمل ألا أوافق عليه لأنه سيتم استبدال ذلك لاحقًا عندما أتشابك من ملف .org. بمعنى آخر، لا تقم بتحرير ملفات .el! فقط قم بتحرير ملف .org والتشابك مع ملفات .el. ضع في اعتبارك أنه على الرغم من أن البرمجة المتعلمة قد لا يكون لها معنى كبير في سيناريوهات أخرى، إلا أنها في هذه الحالة تساعد حقًا في إضافة مصادر/ميزات جديدة عن طريق النسخ من أمثلة أخرى (نظرًا لأن كل شيء موجود في ملف مؤسسة واحد)، لذلك في هذه الحالة أصر على استخدام البرمجة المتعلمة.
من الواضح أن هذه الحزمة لم تكن ممكنة بدون عروض الاستشارة والانطلاق الرائعة. لقد استلهمت أيضًا من الحزم الأخرى بما في ذلك على سبيل المثال لا الحصر، سابقتها Consult-Web، بالإضافة إلى وضع المحرك، وemacs-google-this، وhelm.
علاوة على ذلك، أود أن أشكر @karthink و@minad على اقتراحاتهم ومناقشاتهم ومساهماتهم الرائعة، وما إلى ذلك. لم تكن هذه الحزمة ممكنة بدون مساعدة @karthink في النماذج الأولية والتفكير (انظر Consult-web-mini) ومساعدة @minad الثمينة التعليقات والاقتراحات.