"टाइपिंग पूर्ववत" कैसे करना चाहिए?


12

मैं एक जावा ऐप लागू कर रहा हूं जिसमें एक पूर्ववत करें / फिर से करें स्टैक शामिल है। मैंने देखा है कि कुछ एप्लिकेशन (जैसे कि मैक ओएस एक्स पर टेक्स्टएडिट) आपको कुछ टेक्स्ट टाइप करने के बाद एडिट मेनू से "पूर्ववत् टाइपिंग" चुनने देते हैं। मैं उस तरह की चीज़ को अपने ऐप में भी लागू करना चाहता हूं, लेकिन मुझे वास्तव में कठिन समय है कि दिशा-निर्देश मिलें कि यह कैसे व्यवहार करना चाहिए।

कुछ परीक्षण और त्रुटि के साथ, TextEdit के पूर्ववत् टाइपिंग के व्यवहार के बारे में मेरा सबसे अच्छा अनुमान है:

  • जब उपयोगकर्ता एक नया वर्ण टाइप करता है (या डिलीट की को टाइप करता है), तो इसे पूर्ववर्ती टाइपिंग आइटम में मर्ज करें यदि कोई अंडरो स्टैक के शीर्ष पर है, जब तक कि निम्न में से कोई एक स्थिति उत्पन्न न हो।
  • उपयोगकर्ता द्वारा कम से कम 15 सेकंड की निष्क्रियता के बाद भी टाइप करने के बाद हमेशा एक नया पूर्ववत टंकण आइटम बनाएं
  • उपयोगकर्ता की एक विस्तारित अवधि के लिए टाइप करने के बाद हमेशा एक नया पूर्ववत टंकण आइटम बनाएं और कुछ शर्त पूरी की जाती है (यह पता नहीं लगा सकता था कि यह समय आधारित था या वर्ण गणना आधारित)।
  • किसी भी पाठ का चयन करने और उसके बाद हटाए जाने या अधिलेखित होने पर (पाठ का चयन करते हुए, परिवर्तन नहीं करने पर, फिर मूल सम्मिलन बिंदु पर वापस लौटकर और इसे जारी रखने के लिए इसे ट्रिगर नहीं करता है) हमेशा एक नया टंकित आइटम बनाएं

व्यवहार में, Apple की रणनीति काम करने लगती है (कम से कम यह मेरे लिए काम करता है जब मैं टाइप करता हूं), लेकिन जैसा कि अंतिम बिंदु द्वारा उल्लेख किया गया है, मैं वास्तव में नियमों का पता लगाने में सक्षम नहीं हूं। इसके अलावा, ऐसा लगता है कि अन्य प्रोग्राम अलग-अलग नियमों का पालन करते हैं, जैसे कि माइक्रोसॉफ्ट वर्ड। Google ने पूर्ववत टंकण के किसी भी कार्यान्वयन के लिए नियमों की एक परिभाषित सूची नहीं दी है और मुझे यह व्यवहार करने के लिए किसी भी सर्वोत्तम व्यवहार में नहीं आया है। तो यह कैसे व्यवहार करना चाहिए? या यह सिर्फ प्रोग्रामर की सनक तक है?

संपादित करें: स्पष्ट करने के लिए, मैं अभी कार्यान्वयन विवरणों में दिलचस्पी नहीं रखता हूं। मैं विशेष रूप से इस बात के लिए उत्सुक हूं कि क्या एक आधिकारिक संदर्भ (जैसे सर्वोत्तम अभ्यास या उपयोगकर्ता इंटरफ़ेस दस्तावेज़) यह या यह वर्णन करता है कि यह कई उत्पादों में कैसे लागू किया गया है।


मेरा सुझाव: संशोधनों को उस बिंदु पर संपीड़ित करें जहां अभी भी पूर्ववत जानकारी से दबाए गए कुंजी के सटीक अनुक्रम को फिर से बनाना संभव है, और नहीं। उदाहरण के लिए, इसका मतलब है कि यदि उपयोगकर्ता कुछ टाइप करता है और उसे हटाने के लिए तुरंत बैकस्पेस का उपयोग करता है, तो बीच में एक पूर्व बिंदु होना चाहिए।
अंबोज़ बिज्जक

हो सकता है कि आप हर बार एक नई "पूर्ववत् टाइपिंग आइटम" जोड़ सकें, जब उपयोगकर्ता हर बार एक नई लाइन बनाता है और शायद हर बार वर्ण इनपुट के तुरंत बाद स्पेस बार का उपयोग किया जाता है। IMO 15 सेकंड के नए "पूर्ववत करें आइटम" से पहले प्रतीक्षा समय थोड़ा लंबा हो सकता है, लेकिन यह सिर्फ मेरे लिए है। (मैं लगभग 5 सेकंड के लिए
जाऊंगा

या शायद "दबाए गए कुंजी का सटीक क्रम" को "प्रत्येक संशोधन के बाद पाठ की स्थिति" के लिए आराम दिया जाना चाहिए। विचार किसी भी पाठ को संपीड़न के कारण खो जाने से रोकने के लिए है।
अम्ब्रोज़ बिज्जक

यह मुझे ऐसा लगता है जैसे TextEdit रिक्त स्थान को विलीन कर देता है और अंतिम पूर्ववर्ती टंकण आइटम के साथ हटा देता है, बशर्ते कि अन्य शर्तें पूरी न हों। तो 124<delete>3, इसे पूर्ववत करना और फिर से करना इसके परिणामस्वरूप होता है 123। मुझे लगता है कि इसका फायदा यह है कि यह उपयोगकर्ता के पाठ की अंतिम स्थिति में परिणाम करता है, कुछ हद तक उपरोक्त सुझाव जैसा है।
थंडरफॉर्ज

क्या आपने अभी तक पेटेंट खोजने की कोशिश की है? (नियम आमतौर पर लाइब्रेरी लेयर में एनकोडेड होते हैं, यूजर कोड के संपर्क में नहीं आते।)
डोनल फेलो

जवाबों:


5

यदि आप एक आधिकारिक स्रोत की तलाश कर रहे हैं, तो मुझे लगता है कि Apple से पूर्ववत आर्किटेक्चर दस्तावेज़ में मैक से संबंधित सबसे अच्छी सामग्री मिलेगी ।

मुझे नहीं लगता कि आप नियमों की एक सूची खोजने जा रहे हैं कि आपको पूर्ववत घटनाओं को कब और क्यों नहीं करना चाहिए। एक आवेदन के लिए जो सही लगता है, जरूरी नहीं कि वह दूसरे के लिए समझ में आए। उदाहरण के लिए, कीस्ट्रोक्स को समेटना एक टेक्स्ट एडिटर में समझ में आता है क्योंकि उपयोगकर्ता शायद एक पैरा को एक एक्शन के रूप में टाइप कर रहा होगा न कि 539 अलग-अलग क्रियाओं के लिए, और यह भी क्योंकि आप नहीं चाहते कि उपयोगकर्ता को सिर्फ पाने के लिए 539 बार पूर्ववत करना पड़े उस पैराग्राफ को टाइप करने से पहले वे जिस बिंदु पर थे। लेकिन ड्राइंग प्रोग्राम में एक आकृति पर कदम संचालन के बारे में क्या? या एक रंग भरने के लिए अनुक्रमिक समायोजन? आप अपने प्रोग्राम की प्रकृति के आधार पर, इनका किसी के साथ मेल खाना या न होना एक अच्छा मामला बना सकते हैं।

उपयोगकर्ता की एक विस्तारित अवधि के लिए टाइप करने के बाद हमेशा एक नया पूर्ववत टंकण आइटम बनाएं और कुछ शर्त पूरी की जाती है (यह पता नहीं लगा सकता था कि यह समय आधारित था या वर्ण गणना आधारित)।

यह ऑटोसैव पर आधारित है। आपके लिए भाग्यशाली, TextEdit स्रोत कोड उपलब्ध है और अच्छी तरह से टिप्पणी की गई है। मुझे लगता है कि यदि आप इस पर एक नज़र डालते हैं, तो आपको बेहतर विचार मिलेगा कि क्या हो रहा है और क्यों। उदाहरण के लिए:

- (void)saveToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation completionHandler:(void (^)(NSError *error))handler {
    // Note that we do the breakUndoCoalescing call even during autosave, which 
    // means the user's undo of long typing will take them back to the last spot an 
    // autosave occured. This might seem confusing, and a more elaborate solution may 
    // be possible (cause an autosave without having to breakUndoCoalescing), but since 
    // this change is coming late in Leopard, we decided to go with the lower risk fix.
    [[self windowControllers] makeObjectsPerformSelector:@selector(breakUndoCoalescing)];
 ...

मुझे पता है कि आपने कहा था कि आप अभी तक कार्यान्वयन विवरणों में रुचि नहीं ले रहे हैं, लेकिन जिस तरह से Apple ने TextEdit को लागू किया है उसे देखते हुए आप अपने स्वयं के आवेदन के लिए निर्णय ले सकते हैं।


1
मुझे लगता है कि मैं इसे सर्वश्रेष्ठ उत्तर घोषित करूंगा। मैं आपको Apple के कार्यान्वयन के लिए लिंक देने के साथ-साथ विशिष्ट उदाहरण के लिए कुछ कोड की सराहना करता हूं जो मैंने प्रदान किया था। मुझे लगता है कि आप सही हैं, यह आम तौर पर आवेदन की जरूरतों पर आधारित है और किसी ने वास्तव में यह मानकीकृत करने का प्रयास नहीं किया है कि वे क्या हैं और उन्हें कैसे संबोधित किया जाए।
थंडरफॉर्ज

1

कीडाउन पर -> आपके आइडल को दर्शाने वाला टाइमर

कीडाउन / टाइमर-रनिंग पर -> रीसेट टाइमर

की-डाउन / नो-टाइमर-रनिंग -> स्थिति में परिवर्तन के रूप में एक नए संरक्षित राज्य के लिए तैयार करने के लिए readjust सेल ब्लॉक

निष्क्रिय-टाइमर नीचे चलता है -> एक नई पूर्ववत स्थिति स्थापित करें

मैं कीपर पहचान को ट्रैक नहीं करूंगा। मैं पाठ के कोशिकीय खंडों (वर्ण गणना द्वारा) में विभाजित हो जाता हूँ जो आपको निकटतम सेल के आरंभिक पदों से ऑफ़सेट द्वारा स्थिति को ट्रैक करने की अनुमति देता है ताकि आपको हर बार एक टॉलस्टाय उपन्यास के पूरे राज्य को बचाने की ज़रूरत न हो, क्योंकि एक निष्क्रिय टाइमर नीचे चलता है । जब अन्य कोशिकाओं को संपादित करने से पहले कोशिकाओं को स्थानांतरित किया जाता है तो उन ऑफसेटों को पढ़ना मुश्किल हिस्सा होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.