INCOMPLETE कीबोर्ड मैक्रो रिकॉर्डिंग फिर से कैसे शुरू करें?


10

क्लासिक उपयोग-मामला:

  1. आप एक मैक्रो रिकॉर्ड करना शुरू करते हैं: C-x (
  2. आप कुछ सामान कीजिए, आइए बताते हैं hello
  3. आप एक कमांड चलाते हैं जो एक त्रुटि फेंकता है, मान लें कि C-g(जैसे आपने गलती से चला दिया है C-sऔर आपको इसे रद्द करना होगा C-g, अब आपका काम खो गया है)।

अब आपकी रिकॉर्डिंग अब तक खो गई है।

मैं फिर से शुरू करना चाहूंगा जहां मैंने एक कमांड चलाने से पहले छोड़ दिया था जिसने मेरी रिकॉर्डिंग को बाधित किया था। मैंने देखा C-h f start-kbd-macro, लेकिन यह सी में लिखा है, इसलिए मैं इसे ट्विक नहीं कर सकता। मैं भी एक चर की तरह चारों ओर शिकार किया current-kbd-macro, लेकिन अब तक कोई नहीं मिला।

क्या इसे पुनर्प्राप्त किया जा सकता है?

अपडेट करें:

मैं यह पता नहीं लगा सका कि C-u C-x (मेरे लिए काम क्यों नहीं किया गया, लेकिन मुझे पता चला है क्योंकि मैं परीक्षण कर रहा था C-g

यह पता चला है कि C-gविशेष है - यदि आप एक अलग तरह की त्रुटि जैसे ट्रिगर करते हैं

C-x ( M-: (signal 'quit nil) 

फिर यह रिकॉर्डिंग को रोक देगा, लेकिन last-kbd-macroइसमें शामिल होगा "M-: M-( signal 'quit nil", लेकिन साथ

C-x ( C-g

यह रिकॉर्डिंग को रोक देता है और रिकॉर्ड की गई किसी भी चीज़ को रोक देता है। Cg-happy उपयोगकर्ता के रूप में (जैसा कि मेरे कम से कम दो दोस्त हैं), यह एक दुर्भाग्यपूर्ण अंतर है। मैंने संपादन की कोशिश की keyboard-quit, लेकिन वहां कुछ भी नहीं है जो मैं कर सकता हूं।

यह ठीक होने का एकमात्र तरीका है जो कि इसके माध्यम से होता है recent-keysऔर स्वचालित रूप से यह पता लगाता है कि स्टार्ट-केबीडी-मैक्रो (या समान) को कहां कहा जाता है kmacro-edit-lossage

जवाबों:


8

मैंने यहां एक कार्यान्वयन शुरू किया है जो आपको अपने C-x (से विद्रोह करने देता है resmacro-start-macro

अब, मान लीजिए कि आप एक मैक्रो के माध्यम से आधा रास्ता प्राप्त करते हैं और एक गलती करते हैं और हिट करते हैं C-g, जैसे कि आप C-sगलती से चलते हैं और इसलिए आप C-gइसे रद्द करने के लिए हिट करते हैं, या w / e।

C-x ( hello C-s C-g 

अब चलाएं C-u C-x (जो मिनीबफ़र में संकेत देगा:

स्थूल को फिर से शुरू करें (RET: जारी रखें, DEL: अंतिम निकालें): h e l l o C-s

तो आप आगे बढ़ने के DELलिए C-sऔर फिर RETआगे बढ़ने के लिए बैकस्पेस ( ) मारा । अब यह कहता है:

केबीडी मैक्रो के लिए आवेदन ...

और आप जारी रख सकते हैं।

कुल मिलाकर:

C-x (      -- start macro
hello
C-s        -- mistake
C-g        -- cancel mistake (and macro)
C-u C-x (  -- recover lost macro
DEL        -- remove mistake
RET        -- continue recording
world!

सुविधाजनक, कोई संदर्भ स्विच, कार्य को प्राप्त करने के लिए न्यूनतम कीबाइंडिंग, स्वचालित रूप से यह पता लगाता है कि आपके मैक्रो ने कहां C-x (से (पर ) शुरू किया था (recent-keys)


1
अरे, यह बहुत अच्छा लगता है। Emacs को एक पैच के रूप में प्रस्तुत करने के लिए देखभाल?
स्टीफन

आप ऐसा करने के लिए स्वागत करते हैं / जैसा आप चाहते हैं! मैं इसे कहीं भी घोषित करने से पहले स्थानीय रूप से थोड़ी देर के लिए इसका परीक्षण करने जा रहा हूं, ताकि मुझे पता चल सके कि यह विश्वसनीय है। हालांकि Emacs के रखवाले सोच सकते हैं कि यह बहुत हैकी है। ;-)
क्रिस्टोफर ने

Emacs में इसे शामिल करने के लिए हमें लेखक को कॉपीराइट कागजी कार्रवाई पर हस्ताक्षर करने की आवश्यकता है (वही कागजी कार्रवाई निश्चित रूप से भगवान-विधा को भी कवर करेगी)।
स्टीफन

लिंक अब टूट गया है :(
गंदगी iCE

2

पिछले मैक्रो को जोड़ने के लिए kmacro-start-macro-or-insert-counterउपसर्ग ( C-u) के साथ निष्पादित करें ।


2
डॉक्स्ट्रिंग ऐसा नहीं कहता है, लेकिन एक डबल उपसर्ग arg ( C-u C-u) दोनों को सेट करता है APPENDऔर NO-EXECतर्क start-kbd-macroदेता है, जो आपको मैक्रो-अब तक के प्रारंभिक पुनरावृत्ति के बिना अपील करने देता है । यह व्यवहार है मैनुअल में प्रलेखित है, हालांकि:(emacs) Basic Keyboard Macro
फिल्स

मेरे सवाल में उदाहरण के साथ यह कोशिश करो, काम नहीं करता है।
क्रिस्टोफर ने

2

Stsquad और Artagnon से अच्छे उत्तरों को संयोजित करना (मेरे दिमाग को) समस्या का कुल समाधान देता है जो पूरी तरह से उचित है:

  • C-xC-keC-hl नुकसान से उत्पन्न मैक्रो को संपादित करने के लिए
  • मैक्रो को संपादित करें, इसे मूल रिकॉर्डिंग में कम करने के लिए
  • C-cC-c संपादित मैक्रो को संग्रहीत करने के लिए
  • या तो C-u<f3>पहले उस मैक्रो को फिर से खेलना, और फिर बाद में कीस्ट्रोक्स रिकॉर्ड करना जारी रखें जो कि मैक्रो परिभाषा में जोड़ा जाएगा
  • ... या मैक्रो की प्रारंभिक पुनरावृत्ति के बिनाC-uC-u<f3> रिकॉर्डिंग जारी रखना -इस प्रकार अब तक।

हो सकता है नुकसान-एड-मैक्रो को संपादित करने की आवश्यकता आदर्श नहीं है , लेकिन (ए) आप मैक्रो को संपादित करने की आवश्यकता के लिए बाध्य थे, यदि आपने रिकॉर्डिंग को रद्द कर दिया है, और (बी) ऐसा बहुत बार नहीं होना चाहिए; अगर आपको बस याद है कि मैक्रो को सामान्य रूप से कैसे रोका जाए (जैसे कि <f4>इसके बजाय C-g)।

जिसमें से कोई भी यह कहने के लिए नहीं है कि यदि उपयोगी मैक्रो कहीं संग्रहीत किया गया था तो यह उपयोगी नहीं होगा; यह सिर्फ इतना है कि मुझे नहीं लगता कि यह वास्तव में होता है। यह M-x report-emacs-bugसुविधा देना संभव है।


यह समस्या का समाधान नहीं है। आपके समाधान के आधे समय के साथ बस फिर से मैक्रो शुरू करना आसान होगा। मैंने एक उत्तर कहीं और पोस्ट किया है जो समस्या को अच्छी तरह से हल करता है।
क्रिस्टोफर डन

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

0

विहित समाधान C-x C-k C-e( kmacro-edit-macro) है जो आपको प्रत्येक कुंजी-प्रेस के माध्यम से कदम रखने और जो कुछ भी आप चाहते हैं उसे सम्मिलित / हटाने की अनुमति देगा। एडिटर के लिए कमांड सिंटैक्स थोड़ा ट्रिक है लेकिन ?एक गाइड लाएगा। C-x C-k e( edit-kbd-macro) के लिए एक अधिक प्राकृतिक संपादक है जो टिप्पणी के साथ एक सादा पाठ मैक्रो संपादक देता है।

एक और विकल्प है M-x insert-kbd-macroजो आपको मैक्रो को लिस्प के रूप में संपादित करने की अनुमति देगा लेकिन यह दुनिया में सबसे पठनीय चीज नहीं है।

जहाँ तक चरों का संबंध है आप देख रहे हैं last-kbd-macroऔर kmacro-ring

जैसा कि आप उल्लेख करते हैं कि आपने अपना मैक्रो पूरा नहीं किया है, आप इसे केवल अपने नुकसान से बना सकते हैं। C-x C-k e C-h lऔर 300 पूर्ववर्ती वर्ण तक हटाएं।


अगर मैं कर सकता तो यह एक बुरा जवाब है। आपने या तो प्रश्न नहीं पढ़ा या इसे अनदेखा कर रहे हैं। इससे पहले कि न तो कुंजी को दबाया जाए last-kbd-macroऔर न ही कोई त्रुटि हुई हो। मैंने विशेष रूप से अपने शीर्षक में INCOMPLETE को इस तरह के बुरे उत्तरों की आशंका में अपने शीर्षक में डाल दिया। यद्यपि मदद करने की कोशिश करने के लिए धन्यवाद। kmacro-ringC-g
क्रिस्टोफर डन

1
@ChristopherDone: सुनिश्चित करें कि आप कर सकते हैं - मैंने नुकसान का उल्लेख करने के लिए नीचे एक नोट जोड़ा है। आप अपने पहले से टाइप किए गए वर्णों के 300 तक का मैक्रो बना सकते हैं।
stsquad

हाँ, किसी ने #emacs पर नुकसान का उल्लेख किया है। मैं बस फिर से शुरू करना चाहता हूं जहां मैंने छोड़ा था। मैं संपादक को खोलना नहीं चाहता और जब मैं कुछ करने के बीच में हूं, तब से चीजों को हटाना शुरू नहीं करता।
क्रिस्टोफर डन

2
इस और आर्टागोन के उत्तरों का संयोजन एक अच्छा समाधान देता है:, C-x C-k e C-h lसंपादित करें, C-c C-cफिर C-u f3रिकॉर्डिंग पर ले जाने के लिए (यह देखते हुए कि f3सबसे पहले मैक्रो-इस प्रकार आगे के इनपुट की प्रतीक्षा करने से पहले खेलेंगे )। हो सकता है नुकसान-एड-मैक्रो को संपादित करने की आवश्यकता आदर्श नहीं है , लेकिन (ए) आप मैक्रो को संपादित करने की आवश्यकता के लिए बाध्य थे, यदि आपने रिकॉर्डिंग को रद्द कर दिया है, और (बी) ऐसा बहुत बार नहीं होना चाहिए; अगर आपको याद है कि मैक्रो को सामान्य रूप से कैसे रोका जाए।
फिल्स

1
@ एफिल्स +1 शायद आपको इसे अलग उत्तर में बदलना चाहिए।
itjeyd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.