2011-07-17 12 views
9

मुझे रीडलाइन लाइब्रेरी के बारे में एक प्रश्न है।रीडलाइन() को पूरा करने के लिए

मैं जानना चाहता हूं कि रीडलाइन सी प्रोग्राम में निर्देशिकाओं से फ़ाइल नाम स्वतः पूर्ण कर सकता है या नहीं?

मैंने खोज की है और केवल कमांड नाम पूरा किया है।

अग्रिम धन्यवाद।

संपादित करें: मैंने एक फ़ाइल में फ़ाइल नाम कॉपी किया है। ये मेरे द्वारा उपयोग किए जाने वाले कार्यों के रूप में: फ़ाइल rline.c में, char * command_generator, char ** tab_completion (const char * text, int start, int end), शून्य प्रारंभिक_readline()। मुझे लगता है कि मुझे char * filename_completion_function (char * text, int state) का उपयोग करना है? जब मैं "टैब" कुंजी टाइप करता हूं, तो यह कुछ भी नहीं कहता है, बाध्य() का उपयोग नहीं किया जा रहा था। क्या आप जानते हैं कि मैं सही कार्यों का उपयोग करता हूं? धन्यवाद !!

+3

शायद यह [कड़ी] (http://cc.byexamples.com/2008/06/16/gnu-readline-implement-custom-auto-complete/) –

उत्तर

12

फ़ाइल नाम समापन रीडलाइन की एक अंतर्निहित विशेषता है, आपको फ़ाइल नाम सूचियों आदि को पॉप्युलेट करने की आवश्यकता नहीं है। यहां रीडलाइन 6.1 के साथ निम्नलिखित प्रोग्राम फ़ाइल नाम को डिफ़ॉल्ट रूप से पूरा करने की अनुमति देता है।

#include <stdio.h> 
#include <stdlib.h> 

#include <readline/readline.h> 
#include <readline/history.h> 

int main() 
{ 
    printf("%s\n", readline("test> ")); 
    return 0; 
} 

इस तंत्र को अनुकूलित करने के तरीके हैं, उदा। आप अपने कार्यों के लिए उचित फ़ाइल नाम उद्धरण प्रदान करने में सहायता के लिए rl_filename_quoting_function और rl_filename_dequoting_function जैसे कुछ फ़ंक्शंस निर्दिष्ट कर सकते हैं।

मुझे लगता है कि यदि आपके लिए यह काम नहीं करता है तो आपको रीडलाइन के अपने संस्करण को निर्दिष्ट करने की आवश्यकता है। /etc/inputrc सामग्री की भी जांच की जानी चाहिए। क्या आपके पास bash है, जो रीडलाइन का उपयोग करता है? क्या फ़ाइल नाम पूरा होने की अपेक्षा करता है? वैसे भी, info readline एक बहुत अच्छा प्रलेखन है बशर्ते आप info स्वयं का उपयोग कर सकें :) यदि नहीं, तो Programming with GNU Readline देखें।

+0

यह पूरी तरह से काम करता है! धन्यवाद – lilawood

+1

शायद यह कहना चाहें कि आपके द्वारा उपयोग किए गए कंपाइलर के आधार पर आपको ध्वज-रेखाचित्र की आवश्यकता हो सकती है। –

1

मैं उस रीडलाइन के बारे में उलझन में था जिसका आप उल्लेख कर रहे थे लेकिन यह मुझे बताया गया कि आपका मतलब जीएनयू पुस्तकालयों में से एक था।

इस के उदाहरण के लिए कृपया फ्रेड्रिक का लिंक जीएनयू रीडलाइन लाइब्रेरी को देखें जो कि ऐसा करता है।

string cmd[] की बजाय अपनी आवश्यकताओं के लिए इसे लागू करने के लिए जो आपको लगता है कि आपको वर्तमान निर्देशिका में सभी फ़ाइल नामों की एक सरणी का उपयोग करने की आवश्यकता है और बाकी कोड उसी के बारे में होना चाहिए।

+0

साथ संकलित किया जा सकता डाउनवोट नहीं होगा, लेकिन वह http://www.gnu.org/software/readline/ – cnicutar

+0

@cnicutar के बारे में बात कर रहा है, यह इंगित करने के लिए धन्यवाद, मैंने फ्रेड्रिक की टिप्पणी के संदर्भ में संपादित किया जिसे मैंने अभी देखा था। –

+0

धन्यवाद! सरणी को भरने के लिए, अगर मैं सिस्टम ("एलएस") का उपयोग करता हूं तो यह काम करता है? या मैं एक अन्य सी समारोह का उपयोग करें? – lilawood

5

रीडलाइन लाइब्रेरी निर्दिष्ट करने के लिए अपने कंपाइलर को -लाइनलाइन निर्दिष्ट करें। निम्नलिखित कोड का टुकड़ा

cc -lreadline some.c -o some 


#include <stdio.h> 

#include <readline/readline.h> 
#include <readline/history.h> 

int main() 
{ 
     char *inpt; 

     int i = 0; 

     while (i < 10) 
     { 
       inpt = readline("Enter text: "); 
       add_history(inpt); 
       printf("%s", inpt); 
       printf("\n"); 
       ++i; 
     } 

     return 0; 

} 
+0

क्या आपको printf के बाद खाली करने की आवश्यकता नहीं है? – netskink

संबंधित मुद्दे