org- মোডে, কীভাবে একটি লিঙ্ক সরান?


11

আমি কীভাবে কোনও বিদ্যমান হাইপারলিংক সরিয়ে ফেলব না এবং নিজেই বন্ধনীগুলির একগুচ্ছ মুছে ফেলতে পারি? আমি যখন org-insert-linkবিদ্যমান লিঙ্কটি সরিয়ে দেওয়ার চেষ্টা করি এবং পাই তখনই পাই Lisp error: (error "Empty link")

আমি লিঙ্কটি সরাতে এবং পাঠ্যটি (যেমন বিবরণ) সংরক্ষণ করতে চাই।

উত্তর:


7

নীচের এলিজপ ফাংশনটি বর্তমান পয়েন্টের চারপাশে একটি লিঙ্ক গ্রহণ করবে যেমনটি স্বীকৃত org-bracket-link-regexp, তাই হয় [[Link][Description]]বা হয় [[Link]], এবং Descriptionএটি প্রথম ক্ষেত্রে বা Linkদ্বিতীয় ক্ষেত্রে এটিকে প্রতিস্থাপন করে ।

(defun afs/org-replace-link-by-link-description ()
    "Replace an org link by its description or if empty its address"
  (interactive)
  (if (org-in-regexp org-bracket-link-regexp 1)
      (let ((remove (list (match-beginning 0) (match-end 0)))
        (description (if (match-end 3) 
                 (org-match-string-no-properties 3)
                 (org-match-string-no-properties 1))))
    (apply 'delete-region remove)
    (insert description))))

এটি একটি খুব ঝরঝরে কমপ্যাক্ট সমাধান! [[LINK]]Org লিঙ্কগুলিকে সমর্থন করার জন্য আমি আমার উত্তর আপডেট করেছি । আমি আপনার উত্তর সম্পর্কে match-beginningএবং শিখেছি match-end
দক্ষ মোদী 14

5

আমি @ অ্যান্ড্রু থেকে উত্তরে এটি যুক্ত করার চেষ্টা করেছি, তবে কোনও মন্তব্যের জন্য এটি খুব দীর্ঘ ছিল ...

আমি তার সমাধানটি সত্যিই পছন্দ করেছি, এটি বাদ দিয়ে এটি কার্সারটি সরিয়ে নিয়েছিল। (প্রযুক্তিগতভাবে আমি অনুমান করি যে এটি পয়েন্টটি সরিয়ে নিয়েছে। যাইহোক ...) ভাগ্যক্রমে, save-excursionএড়াতে এটি যুক্ত করা সহজ ছিল :

(defun afs/org-replace-link-by-link-description ()
  "Replace an org link by its description or if empty its address"
  (interactive)
  (if (org-in-regexp org-bracket-link-regexp 1)
      (save-excursion
        (let ((remove (list (match-beginning 0) (match-end 0)))
              (description (if (match-end 3) 
                               (org-match-string-no-properties 3)
                             (org-match-string-no-properties 1))))
          (apply 'delete-region remove)
          (insert description)))))

4

[[Org- লিঙ্কের প্রথম বন্ধনীগুলির পরে (বা হাইপার-লিঙ্কযুক্ত org-লিঙ্কের পরে / কোথাও) পয়েন্টটি কোথাও থাকলে এই কমান্ডটি কল করুন ।

যদি এটা বিন্যাস হল একটি সংস্থা লিংক মুছে ফেলা হবে [[LINK][DESCRIPTION]]বা [[LINK]]একটি ইন org-modeবাফার; অন্যথায় কিছুই হবে না।

সুরক্ষার জন্য, আরগ-লিঙ্ক থেকে বাতিল kill-ringহওয়া লিঙ্কটি অন্য কোনও জায়গায় সেই লিঙ্কটি ব্যবহার করার প্রয়োজন দেখা দিলে সেভ করা হয়।

(defun my/org-delete-link ()
  "Replace an org link of the format [[LINK][DESCRIPTION]] with DESCRIPTION.
If the link is of the format [[LINK]], delete the whole org link.

In both the cases, save the LINK to the kill-ring.

Execute this command while the point is on or after the hyper-linked org link."
  (interactive)
  (when (derived-mode-p 'org-mode)
    (let ((search-invisible t) start end)
      (save-excursion
        (when (re-search-backward "\\[\\[" nil :noerror)
          (when (re-search-forward "\\[\\[\\(.*?\\)\\(\\]\\[.*?\\)*\\]\\]" nil :noerror)
            (setq start (match-beginning 0))
            (setq end   (match-end 0))
            (kill-new (match-string-no-properties 1)) ; Save the link to kill-ring
            (replace-regexp "\\[\\[.*?\\(\\]\\[\\(.*?\\)\\)*\\]\\]" "\\2" nil start end)))))))

2

একটি সমাধান রয়েছে যা রেজিজেসগুলির সাথে কাস্টম পার্সিং ব্যবহার এড়ানো এবং বিল্ট-ইন org-elementএপিআই সরাসরি ব্যবহার করে :

(defun org-link-delete-link ()
  "Remove the link part of an org-mode link at point and keep
only the description"
  (interactive)
  (let ((elem (org-element-context)))
    (if (eq (car elem) 'link)
        (let* ((content-begin (org-element-property :contents-begin elem))
               (content-end  (org-element-property :contents-end elem))
               (link-begin (org-element-property :begin elem))
               (link-end (org-element-property :end elem)))
          (if (and content-begin content-end)
              (let ((content (buffer-substring-no-properties content-begin content-end)))
                (delete-region link-begin link-end)
                (insert content)))))))

কীভাবে আপনার কমান্ডটি একটি কীতে বাঁধতে পারেন তাই এটি নবাগতদের পক্ষে যথেষ্ট?
DoMiNeLa10

লিঙ্কটির পরে এটি সাদা স্থান মুছে ফেলবে বলে মনে হচ্ছে। এগুলি কীভাবে রাখা যায় কোন ধারণা?
টিম

1

লিঙ্কের আগে কার্সারটি রাখা দ্রুততম হতে পারে, তারপরে C-M-space( mark-sexp) টাইপ করুন যা পুরো লিঙ্কটি চিহ্নিত করবে। তারপরে এটি একটি ব্যাকস্পেস টাইপ করে মুছে ফেলুন (যদি আপনি ব্যবহার করেন delete-selection-mode) বা C-w


1
এটি পুরো লিঙ্কটি মুছে ফেলবে বলে মনে হচ্ছে, তবে আমি লিঙ্কটি সরাতে এবং পাঠ্যটি (যেমন বিবরণ) সংরক্ষণ করতে চাই।
ভাস্বর

1
দুঃখিত, আমার ধারণা আমি আপনার প্রশ্নটি ভুল বুঝেছি।
হ্যারাল্ড হানচে-ওলসেন

1
সেখানকার নিম্নবিত্তদের কাছে: আমি যখন উত্তর দিয়েছিলাম তখন প্রশ্নটি দ্ব্যর্থক ছিল। অস্পষ্টতা অপসারণ করে এটি তখন থেকেই সম্পাদনা করা হয়েছে। যদিও আমি উত্তরটি ছেড়ে দিই না, যেহেতু এটি এখনও পুরো লিঙ্ক, বিবরণ এবং সমস্তটি মোছার সহজতম উপায় বলে মনে হচ্ছে।
হ্যারাল্ড হানচে-ওলসেন

0

এই খুব দ্রুত এবং খুব নোংরা ম্যাক্রো হ'ল এক উপায়, সর্বোত্তম উপায় নয়:

(fset 'my/org-remove-link
   [?\M-a delete delete ?\M-x ?z ?a ?p ?- ?t ?o ?- ?c ?h ?a ?r return ?\[ ?\C-e backspace backspace ?\C-x])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.