মেলে না এমন আইসেয়ার স্ট্রিংয়ের অংশ, বা সম্পূর্ণ মিল থাকলে শেষের চরটি মুছুন


11

আমি নিম্নলিখিত আছে

(defun isearch-del-fail-or-char ()
  "Delete failed isearch text, or if there is none, a single character."
  (interactive)
  (if (isearch-fail-pos)
      (delete-region (isearch-fail-pos) (point))
    (isearch-del-char)))

(define-key isearch-mode-map (kbd "DEL") 'isearch-del-fail-or-char)

deleteকোডটির উদ্দেশ্য হ'ল অনুসন্ধানটি সম্পূর্ণ ব্যর্থ স্ট্রিংটি মুছে ফেলা (বা যদি কোনও ব্যর্থ স্ট্রিং কেবলমাত্র একটি অক্ষর না থাকে)।

যাইহোক, delete-regionবাফার থেকে পাঠ্য মুছে ফেলা isearchহচ্ছে অনুসন্ধান করছে, অনুসন্ধান বাফার নিজেই নয়।

এটি করার উপযুক্ত উপায় কী? আমার ইমাস লিস্প স্টাইলের বাকী অংশের সমালোচনাও স্বাগত :)

উত্তর:


12

অই হ্যাঁ. Isearch, কি আপনি টাইপ লেখা তাদের বড় দেখায় isearch-mode-mapএবং তাদেরকে পূজা বর্তমান বাফারে

আইসার্ক উপস্থিতি সত্ত্বেও, মিনিবাসার ব্যবহার করে না । এটি প্রতিধ্বনি অঞ্চল ব্যবহার করে। এটি হ'ল আপনি যা দেখেন তা হ'ল প্রকৃতপক্ষে আউটপুট বার্তাগুলি, আপনার টাইপ করা অক্ষরের প্রতিধ্বনি সহ।

এটি আপনি যা চান তা করা উচিত:

(defun mydelete ()
  "Delete the failed portion of the search string, or the last char if successful."
  (interactive)
  (with-isearch-suspended
      (setq isearch-new-string
            (substring
             isearch-string 0 (or (isearch-fail-pos) (1- (length isearch-string))))
            isearch-new-message
            (mapconcat 'isearch-text-char-description isearch-new-string ""))))

(define-key isearch-mode-map (kbd "DEL") 'mydelete)

(বিটিডাব্লু, আপনার প্রশ্নটি deleteচরিত্রটি বলে , তবে আপনি লিখেছেন DEL, যা ব্যাকস্পেসের অক্ষর)


@ মালবারবা কোনও মন্তব্যে উল্লেখ করেছেন, আপনি যখন নতুন অনুসন্ধান স্ট্রিংটি ""(খালি স্ট্রিং) এ সেট করেন with-isearch-suspended, খালি অনুসন্ধান স্ট্রিংয়ের পরিবর্তে শেষ অনুসন্ধান স্ট্রিংটি অনুসন্ধান করে আবার শুরু হয়।

এটি সাধারণভাবে একটি " বৈশিষ্ট্য " with-isearch-suspended। কিন্তু কারণ আপনার মাঝে মাঝে সত্যিই পুনরারম্ভ জন্য অনুসন্ধান স্ট্রিং খালি সংস্করণ এ, চাইতে পারেন with-isearch-suspendedমধ্যে isearch + + .el আমি জুড়েছেন পরিবর্তনশীল isearchp-if-empty-prefer-resuming-with-lastএই নিয়ন্ত্রণ করতে। যদি আপনি এটির সাথে আবদ্ধ হন nilএবং আপনি সেট isearch-new-stringকরে ""রেখেছেন তবে খালি অনুসন্ধান স্ট্রিং সহ অনুসন্ধান পুনরায় শুরু হবে।

সুতরাং আইসার্ক + এর মাধ্যমে আপনি এই সংজ্ঞাটি দিয়ে যা করতে চান তা করতে পারেন:

(defun mydelete ()
  "Delete the failed portion of the search string, or the last char if successful."
  (interactive)
  (let ((isearchp-if-empty-prefer-resuming-with-last  nil))
    (with-isearch-suspended
        (setq isearch-new-string
              (substring
               isearch-string 0 (or (isearch-fail-pos) (1- (length isearch-string))))
              isearch-new-message
              (mapconcat 'isearch-text-char-description isearch-new-string "")))))

আমি খুব এখন যে এ গিয়ে Emacs 24.4 একটি রিগ্রেশন, যা আমি দায়ের করেছি চালু লক্ষ্য এ গিয়ে Emacs বাগ # 20466 জন্য, যার মানে বাঁধাই DELমধ্যে isearch-mode-mapযথেষ্ট নয়। তারা এর জন্য একটি <backspace>ছাড়াও আলাদা স্বতন্ত্র বাধ্যবাধকতা যুক্ত করেছে DEL। এর অর্থ হ'ল ইশার্কের জন্য <backspace>আর অনুবাদ করা DELহবে না (তবে এটি এখনও সাধারণভাবে ইম্যাকসের জন্য অনুবাদ করা যায় না)।

সুতরাং আপনি যদি ব্যাকস্পেস কীটি ইমাস 24.4 বা তারপরে যা বলেছিলেন তা করতে চাইলে আপনি কেবল তার সাথে আবদ্ধ DELহতে পারবেন না mydelete। আপনি আবদ্ধ <backspace>করা প্রয়োজন mydelete। বোবা, এএএএফসিটি , মাইস অন ​​ইরেট পাস লে প্রগ্রেস ...


আমি একটি অনুরূপ কমান্ড জুড়েছেন Isearch + + এবং এটি আবদ্ধ C-M-l(একই একটি সমাপ্তির মেলেনি মুছে ফেলার জন্য ব্যবহার কী icicles )।

এও সচেতন থাকুন যে C-gআইশার্ক-এও মিল থাকবে না, যখন মিল নেই। (তবে C-gঅনুসন্ধান সফল হলে এর একটি প্রভাবও রয়েছে))


আমার উল্লেখ করা উচিত ছিল যে আইসার্ক + এর বেশিরভাগ সময় একই ধরণের লাইনের সাথে একটি alচ্ছিক আচরণও ছিল। M-kআইশার্ক চলাকালীন 3 টি আচরণের মধ্যে টগল করে, যা বিকল্পের মান দ্বারা নিয়ন্ত্রিত হয় isearchp-drop-mismatch:

  • replace-last- আপনার বর্তমান ইনপুটটি সর্বশেষ মেলানো পাঠ্যের পরিবর্তে। মিল না থাকলেও আপনি সর্বদা আপনার শেষ ইনপুটটি দেখতে পারেন। এবং এটি ব্যবহার করে সম্পাদনা করার জন্য উপলব্ধ M-e

  • nil - আপনার পূর্ববর্তী ইনপুটটির মিল না থাকলেও আপনার বর্তমান ইনপুট সংযুক্ত করা হয়েছে।

  • অন্য যে কোনও কিছুই - আপনার বর্তমান ইনপুটটি যদি কোনও অমিলের কারণ হয় তবে তা উপেক্ষা করা হবে (সরানো)। অনুসন্ধানের স্ট্রিংটিতে সর্বদা সফল মিল রয়েছে।


বিটিডাব্লু, আমি আইসয়ার্কের সাথে একই জাতীয় কমান্ড যুক্ত করার বিষয়ে চিন্তা করেছি + যখন থেকে আমি ব্যর্থ অংশটির হাইলাইটিং যুক্ত করেছি (বছর আগে, আমি এটি জিএনইউ ইম্যাক্সে যুক্ত করার আগে), কিন্তু আমি এটির কাছাকাছি যাই নি। আমি এখন এটি করেছি । (আমি একটি অক্ষর মুছে ফেলার অন্তর্ভুক্ত হয়নি অবশ্য কমান্ড আমি যোগ নো অপ হলে কোন ব্যর্থ অংশ।।)
ড্রিউ

আমি ওএস এক্সে আছি I
asmeurer

অনুসন্ধান + প্রতিস্থাপন-শেষ আচরণটি দেখতে বেশ সুন্দর দেখাচ্ছে। প্রতিবার অনুসন্ধান ব্যর্থ হওয়ার পরেও কী এটির ঘণ্টা বাজানোর কোনও উপায় নেই?
asmeurer

2
আমি একটি নতুন সংস্করণ আপলোড করেছি isearch+.el। এটি (ক) স্বয়ংক্রিয় অমীমাংসিত অপসারণ স্থির করে যাতে মোড়ক ঠিকঠাক কাজ করে। এবং এটি একটি বিকল্প যুক্ত করে, isearchp-ring-bell-functionযা আপনি অনুসন্ধানের সময় বেলটি দমন করতে ব্যবহার করতে পারেন।
ড্রিউ

3
মলাবারবা, আকর্ষণীয়। আমি বাগ একটি শট নেন এবং সঙ্গে শেষ পর্যন্ত এই । বেশিরভাগ ক্ষেত্রে কার্গো-সেল্ট থেকে এসেছে isearch-del-charএবং ড্র এর উত্তর এসেছে তবে এটি মনে হয় কাজ করে। with-isearch-suspendedম্যাক্রো অভিযুক্ত ব্যক্তি ছিলেন।
jbm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.