سؤال

انا افعل completing-read مع قائمة مسارات نظام الملفات، على سبيل المثال. ("~/parent/child" "/parent/child").

أود إخفاء إخراج completing-read/ido-completing-read بحيث تظهر فقط child, ، لكنه سيظل يعيد المسار الكامل.

هل هذا ممكن على الإطلاق؟

مع أطيب التحيات، الفئران

هل كانت مفيدة؟

المحلول

إجابة:لا، هذا غير ممكن، لأن إكمال القراءة لا يأخذ في الاعتبار أي دلالات للسلاسل.

هذا ممكن، ولكن مع استدعاءات متعددة للقائمة الكاملة.

الفكرة هي أن هذه الوظيفة يتم تمرير قائمة من السلاسل إليها، وتساعدك على اختيار سلسلة من تلك القائمة.

لا تملك قائمة الإكمال أي سيطرة على ما تحتويه السلاسل.لا يهتم بدلالات السلاسل كمسارات.يرى فقط قائمة السلاسل.

لذلك، لكي تصنع ما تريد، يمكنك استدعائه مرة واحدة باستخدام قائمة الملفات من الدليل الحالي، وإذا قمت بتحديد دليل، تقوم أولاً بالتغيير إلى هذا الدليل، ثم تقوم باستدعائه مرة أخرى مع قائمة الملفات من هذا الدليل الخ

إذا كنت تريد الاحتفاظ بـ pwd كما هو الأولي، فعند إرجاعه، يمكنك التغيير مرة أخرى إلى الدليل الأصلي.

(cd (concat default-directory
            (completing-read "> " (directory-files default-directory ))))

نصائح أخرى

حزمة uniquify يفعل شيئا مماثلا لما تريد.عندما يكون لديك مخزنين مؤقتين يزوران الملفات بنفس اسم الملف، فسيتم إضافة سلسلة في النهاية للتمييز بين الاثنين.

على سبيل المثال إذا كان لديك ملفات /etc/foo/bar/a و /mnt/a سوف يطلق على المخازن المؤقتة شيء من هذا القبيل a <bar> و a <mnt>.ثم عندما تستخدم ido لتبديل المخازن المؤقتة، لا يتعين عليك الاختيار من اسم الملف الكامل ولكن ينتهي بك الأمر في المخزن المؤقت الصحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top