লিঙ্কের বিবরণটি স্বয়ংক্রিয়ভাবে প্রবেশ করতে org লিঙ্ক পাবেন?


11

প্রশ্ন:org স্বয়ংক্রিয়ভাবে কোনও বিবরণ toোকানোর জন্য আমি কীভাবে একটি কাস্টম লিঙ্ক ফাংশন পেতে পারি ?

আমি orgএকটি diredবাফারে ফাইলগুলিতে লিঙ্কগুলি সঞ্চয় করতে চাই , তবে পছন্দ করতে চাই যে লিঙ্কের বিবরণটি পুরো পাথের প্রতিবেদন করার চেয়ে ফাইলের নাম সান্স পথ হতে পারে, যেমন:

file:~/the/full/path/myfile.ext     ; default, but no thanks
myfile.ext                          ; what I want

এখন: ডিফল্ট প্রদানের জন্য org-store-linkহার্ডকোডের লিঙ্কগুলি dired। পরিবর্তে, আমি একটি কাস্টম ফাংশন লিখেছি (হার্ড-কোডড ফাংশন থেকে cribbing) এবং এটিকে যুক্ত করেছি org-store-link-functions:

(defun dired-store-link ()
  (when (derived-mode-p 'dired-mode)
    (let ((file (dired-get-filename nil t)))
      (setf file (if file
                     (abbreviate-file-name (expand-file-name file))
                   default-directory))
      (org-store-link-props :type        "dired"
                            :link        file
                            :description (file-name-nondirectory file))
      file)))

(add-to-list 'org-store-link-functions #'dired-store-link)

এতদূর ভাল, এবং এটি প্রত্যাশার মতো কাজ করে তবে একটি জিনিসের জন্য:

  • org-insert-linkঅন্তর্নির্মিত, ডিফল্ট আচরণের সাথে কল করার সময়, এটি আমাকে কোনও বিবরণ জিজ্ঞাসা না করে কেবল লিঙ্কটি সন্নিবেশ করায়।
  • org-insert-linkআমার কাস্টম ফাংশনটির সাথে কল করার সময় , এটি আমাকে একটি বিবরণ লিখতে অনুরোধ জানায় (যা এটি :descriptionসম্পত্তিতে সঞ্চিত ফাইলের নাম দিয়ে সঠিকভাবে জনপ্রিয় হয় )।

আমি বরং প্রতিবার বর্ণনার জন্য অনুরোধ করব না এবং কাস্টম ফাংশনটি সেট করে org-insert-linkতার মানটি ব্যবহার করতে চাই :description

এর জন্য আমাকে অনুরোধ না করে কীভাবে আমি স্বয়ংক্রিয়ভাবে org-insert-linkব্যবহার করতে রাজি করব :description?


Alচ্ছিক যুক্তিগুলি link-locationবা default-descriptionফাংশনে org-insert-linkকোনও সহায়তা করে? যদি লিঙ্ক-অবস্থান প্যারামিটারটি শূন্য থাকে তবে এই মানটি ইন্টারেক্টিভভাবে পড়ার পরিবর্তে লিঙ্কের অবস্থান হিসাবে ব্যবহৃত হবে। যদি ডিফল্ট-বিবরণ পরামিতি অ-শূন্য হয়, এই মানটি ডিফল্ট বিবরণ হিসাবে ব্যবহৃত হবে।
আইনজীবি

@ লিওলিস্ট: পরামর্শটির জন্য ধন্যবাদ, যদিও আমি নিশ্চিত নই যে আমি এটি অন্য কোনও কার্যে মোড়ানো না করে কীভাবে এটি ইন্টারেক্টিভ ব্যবহারে সেট করব। যাইহোক, এটি আমাকে আরও ঘনিষ্ঠভাবে ডক্টরসিং পড়তে বাধ্য করেছে, যা আমাকে বিভিন্ন ধরণের উত্তর পেয়েছে।
ড্যান

উত্তর:


4

ডক্টরসিংয়ের নীচে সমাহিত org-insert-linkকরা একটি নোট যা:

যদি org-make-link-description-functionনন-শূন্য থাকে তবে এই ফাংশনটি লিঙ্ক টার্গেটের সাথে ডাকা হবে এবং ফলাফলটি হবে ডিফল্ট লিঙ্কের বিবরণ।

দৃশ্যত orgকোনও লিঙ্ক সংরক্ষণের প্রক্রিয়াটিতে প্রচুর তথ্য ছুঁড়ে ফেলেছে, তাই যা যা বাকী org-stored-linksরয়েছে তা ফর্মের প্রবেশের তালিকা (link description)। পূর্বের ফাংশনটিতে ইনসোফার হিসাবে লিঙ্কটির একটি ফাইলের নাম রয়েছে, এটি নিম্নলিখিত কাজের মতো দেখাচ্ছে:

(defun org-link-describe (link desc)
  (if (file-exists-p link)
      desc
    (read-string "Description: " desc)))

(setf org-make-link-description-function #'org-link-describe)

এটি এক ধরণের হ্যাকি, এবং আমি এটির ব্যাপকভাবে পরীক্ষা করিনি, তবে এখনও পর্যন্ত এটি কাজ করছে বলে মনে হচ্ছে। অবশ্যই আরও মার্জিত সমাধান দেখে শিহরিত হবেন।


2
এখন আপনি এই ফাংশনটি জানেন, আপনি নিজের পছন্দটি dired-store-linkবর্ণনা তৈরি করতে খালি খালি খালি ব্যবহার করতে পারবেন না ? আমি মনে করি এটি অনেক সংক্ষিপ্ত হবে।
মালবারবা

1
@ মালবারবা: আপনি সম্ভবত সঠিক - এই ফাংশনটি একটি ফাইলের জন্য লিঙ্কটি পরিদর্শন করতে এবং সেই অনুসারে এগিয়ে যাওয়ার জন্য আবারও লেখা যেতে পারে। আমি একটি অতিরিক্ত মুহুর্ত পেলে এটি চেষ্টা করে দেখব।
ড্যান

3

আমি org 9.1.6 ব্যবহার করছি এবং আমার হতাশার জন্য মনে হচ্ছে org-store-link-functionsএটি এখন একটি বিল্টিন অর্গ ফাংশন (হুকের পরিবর্তে), সুতরাং আসল সমাধানটি আর কাজ করে না। ব্যবহার করার মতো কাজ থাকতে পারে org-link-parametersতবে এর পরিবর্তে আমি নীচের ছোট্ট হ্যাকটি ব্যবহার করছি, যা মনে হয় কৌশলটি করছে:

(defun my//dired-store-link (orig-fun &rest args)
  (if (derived-mode-p 'dired-mode)
      (let ((file (dired-get-filename nil t)))
        (setf file (if file
                       (abbreviate-file-name (expand-file-name file))
                     default-directory))
        (let ((link (concat "file:" file))
              (desc (file-name-nondirectory file)))
          (push (list link desc) org-stored-links)
          (car org-stored-links)))
    (apply orig-fun args)))
(advice-add 'org-store-link :around #'my//dired-store-link)

বোনাস হিসাবে, এটি কোনও বিবরণের জন্য অনুরোধ করবে না, যেহেতু বিবরণটি org-stored-linksনন-শিল হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.