বিন্দুতে ফাইলটির পূর্বরূপ দেখতে "কুইক-ভিউ" কীটি উত্সাহিত


19

আমি এমন একটি ফাংশন তৈরি করতে চাই যা কোনও ফাইলটির "কুইক ভিউ" করে যা পয়েন্টের নীচে থাকে d

যেভাবে আমি এটির জন্য কাজ করতে চাই তা হ'ল আমি একটি ফাংশন কী ধরে রেখেছি যা ফাইলটি একটি বাফারে দৃশ্যমান করে তোলে, তবে আমি কীটি ছেড়ে দিলে বাফারটি বন্ধ হয়ে যায় এবং ডায়ার্ড বাফার ফিরে আসে। আমি অস্থায়ী বাফারটি দিয়ে বন্ধ করতে চাই না C-x k

ইমাসগুলিতে এই কার্যকারিতাটি তৈরি করার কোনও উপায় আছে কি? আমি কীগুলি চাপতে / হতাশায় ফাংশনগুলি আবদ্ধ করতে পারলে এটি সম্ভব বলে মনে হচ্ছে।


1
আপনি হতাশাগুলি ইভেন্টগুলি চাপতে বাঁধতে পারবেন না, তবে এই কার্যকারিতাটি অবশ্যই একটি কাস্টম মানচিত্র এবং একটি টাইমার ব্যবহারের সাথে হ্যাক করা যেতে পারে।
জর্ডন বিওনডো

আপনি কি একটি প্রাকদর্শন দিয়ে পপ আপ একটি নতুন উইন্ডো সম্পর্কে কথা বলছেন? বা কীটি হতাশাগ্রস্থ হওয়ার সাথে সাথে বাফারের বিষয়বস্তুগুলি ডায়ার্ড উইন্ডোতে প্রদর্শিত হবে?
নিসপিও

1
আমাদের কি ইভেন্টগুলিতে আবদ্ধ করার অনুমতি দেওয়ার চেষ্টা রয়েছে? আমি এই বৈশিষ্ট্যটি চাই
wdkrnls

উত্তর:


9

টাইমারদের সুবিধা নিয়ে কী ডাউন / আপ ইভেন্ট বন্ডিং সিমুলেট করার জন্য আমার সুপার হ্যাকি উপায়।

সামগ্রিকভাবে আমি সিগমার উত্তরটি অনুসরণ করার পরামর্শ দেব, তবে আপনি যেতে দিয়ে পূর্বরূপটি বন্ধ করার উপায় চেয়েছিলেন যাতে আমি চেষ্টা করতে বাধ্য।

মূলত আপনি যা করতে পারেন তা হ'ল কিছু ফাংশন যা আপনার "কীডাউন" ফাংশনটি কোনও কী-বাইন্ডিংয়ের সাথে আবদ্ধ করা হয় এবং সেই ক্রিয়াকলাপের ভিতরে, একটি নিষ্ক্রিয় টাইমার শুরু করুন যা আপনার "কীপ" ফাংশনটিকে কার্যকর করে, আপনি যতক্ষণ না ধরে রাখেন ততক্ষণ প্রদত্ত কীগুলি, "কীডাউন" ফাংশনটি বার বার চালিত হবে এবং এটি নিষ্ক্রিয় টাইমারকে চলমান থেকে বাধা দেবে। অবশ্যই আপনাকে এই সত্যটি ক্ষতিপূরণ দিতে হবে যে কমান্ডটি বার বার প্রবাহিত হবে, সম্ভবত আপনার "কীডাউন" ফাংশনে কোনও ধরণের নুপ ফাংশনটির চাবিটি রিবন্ডিং করে, তারপরে "কীআপ" ফাংশনটিতে "কীডাউন" ফাংশনটি পুনরায় সঞ্চারিত করে।

সুতরাং আপনার ব্যবহারের ক্ষেত্রে আপনার "কীডাউন" ফাংশনটি ফাইলের বিষয়বস্তুগুলির সাথে একটি পূর্বরূপ বাফারটি খুলবে এবং সেই প্রাকদর্শন বাফারে একই কী কম্বোকে কিছু নুপের মতো কমান্ড বেঁধে রাখবে। আপনার "কীডাউন" ফাংশনটিও একটি নিষ্ক্রিয় টাইমার শুরু করবে যা আপনার পূর্বরূপ বাফারটি মুছে ফেলবে এবং আপনি যেখানে ছিলেন সেখানে ফিরিয়ে আনবে।

দীর্ঘ গল্প সংক্ষিপ্ত এখানে কোড:

এই ফাংশনটি একটি মূল কম্বোতে আবদ্ধ করুন (আমি ব্যবহার করেছি C-M-v), আপনি যখন কোনও ফাইলের নামের উপরে এটি টিপুন তখন এটি ফাইলের বিষয়বস্তুগুলি প্রদর্শন করার সময় একটি নতুন বাফারটি খুলবে, যখন আপনি যেতে দেবেন তখন আপনাকে মূলটিতে ফিরে যেতে হবে বাফার।

(setq lexical-binding t)

(defun quick-view-file-at-point ()
  "Preview the file at point then jump back after some idle time.

In order for this to work you need to bind this function to a key combo, 
you cannot call it from the minibuffer and let it work.

The reason it works is that by holding the key combo down, you inhibit
idle timers from running so as long as you hold the key combo, the 
buffer preview will still display."
  (interactive)
  (let* ((buffer (current-buffer))
         (file (thing-at-point 'filename t))
         (file-buffer-name (format "*preview of %s*" file)))
    (if (and file (file-exists-p file))
        (let ((contents))
          (if (get-buffer file)
              (setq contents (save-excursion
                               (with-current-buffer (get-buffer file)
                                 (font-lock-fontify-buffer)
                                 (buffer-substring (point-min) (point-max)))))
            (let ((new-buffer (find-file-noselect file)))
              (with-current-buffer new-buffer
                (font-lock-mode t)
                (font-lock-fontify-buffer)
                (setq contents (buffer-substring (point-min) (point-max))))
              (kill-buffer new-buffer)))
          (switch-to-buffer (get-buffer-create file-buffer-name))
          (setq-local header-line-format "%60b")
          (delete-region (point-min) (point-max))
          (save-excursion (insert contents))
          (local-set-key (kbd "C-M-v") (lambda () (interactive) (sit-for .2)))
          (run-with-idle-timer
           .7 
           nil
           (lambda ()
             (switch-to-buffer buffer)
             (kill-buffer file-buffer-name))))
      (message "no file to preview at point!"))))

এছাড়াও এখানে কর্মের একটি জিআইএফ, আমি যা করি তা হ'ল:

  • আমার কার্সারটি ফাইলের উপরে রাখুন
  • আমার কী বাইন্ডিং টিপুন এবং ধরে রাখুন
  • পূর্বরূপ প্রদর্শিত হয়
  • আমি যখন যেতে দিই, পূর্বরূপটি মারা যায় এবং আপনি যেখানে ছিলেন সেখানে ফিরে এসেছেন।

এখানে চিত্র বর্ণনা লিখুন

একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয় হ'ল নিষ্ক্রিয় টাইমার সেকেন্ড, আমার কোডটিতে আমি ব্যবহার করেছি .7তবে এটি এক ধরণের যাদু নম্বর, আপনি এটিকে সত্যিই ছোট রাখতে চান, তবে আপনি যদি পূর্বরূপে দু'বার ঝলকানি দেখতে পান তবে প্রতিবার 1/10 তম বার এটি উত্থাপন করার চেষ্টা করুন যতক্ষণ না আপনি আপনার মেশিনের জন্য সঠিক স্থানটি খুঁজে পান।

* এছাড়াও নোট করুন যে ফাংশনে আমি প্রাকদর্শন বাফারের কিছু ফন্টিফিকেশন করার চেষ্টা করেছি তবে আমি এটি কাজ করতে পারিনি, এটি এটিকে আরও কার্যকর করার পরবর্তী পদক্ষেপ হবে * **


নিস! এটি আমাদের এখানে দেখার মতো বিষয়।
মালবারবা

আমি Error running timer: (void-variable buffer)এটি দিয়ে একটি পেয়েছি , দেখে মনে হচ্ছে bufferভেরটির ভিতরে পাওয়া যায় না run-with-idle-timer?
লি এইচ

লেক্সিকাল-বাঁধাই নিশ্চিত হওয়া নিশ্চিত করুন
জর্ডন বিওনডো

আপনি এই উত্তরটি সেখানে পুনরাবৃত্তি করতে চাইতে পারেন ।
মালাবারবা

8

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

পরিবর্তে একটি কী পুনরাবৃত্তি সম্পর্কে কি ? নিম্নলিখিত মত কিছু কার্যকরী সমতুল্যের প্রাথমিক কঙ্কাল হতে পারে:

(defun my-dired-view-file ()
  (interactive)
  (dired-view-file)
  (local-set-key (kbd "<f5>") 'View-quit))

(define-key dired-mode-map (kbd "<f5>") 'my-dired-view-file)

যাইহোক, আমি আপনার ব্যবহারের ক্ষেত্রে এই মুহুর্তে আপনার প্রশ্নের উত্তর দেওয়ার চেয়ে বেশি চ্যালেঞ্জ করছি, কারণ এতে কীপ্রেস / ডিপ্রেশন বাইন্ডিংয়ের কোনও সম্পর্ক নেই :)


আমি ক্লাবিত ফাইলগুলির একটি দীর্ঘ তালিকা কল্পনা করছি। আমি প্রতিটি ফাইলের বিষয়বস্তু কী তা নিশ্চিত নই। যদি আমি এফ 5 দেখতে পারি, এফ 5 দেখতে দেওয়া বন্ধ করে দিয়ে ক্লান্ত হয়ে ফিরে যাই, তবে পরবর্তী প্রার্থীকে চালিয়ে যেতে পারি etc. ইত্যাদি আমার মনে হয় না আপনি আমার ব্যবহারের ক্ষেত্রে অস্বীকার করেছেন, তবে আপনি সম্ভবত একটি ভাল বিকল্পের পরামর্শ দিয়েছেন দেখা বন্ধ করতে আবার এফ 5 চাপুন on
এরিক ব্রাউন

আপনি যা পরামর্শ দেন মিডনাইট কমান্ডার (এফ 3) এর কার্যকারিতার সাথে তুলনীয়
এরিক ব্রাউন

1
@ সিগমা জমা দেওয়া উত্তরটি আকর্ষণীয়। ডায়ার্ড ব্যবহার করে ডিরেক্টরি ব্রাউজ করার সময়, আপনি ফাইলটি দেখতে ইতিমধ্যে v টিপতে পারেন, এবং সেই ফাইলটি দেখার সময়, ছাড়ুন এবং ডিরেক্টরিতে ফিরে আসতে q টিপুন। আমার ধারণা, দেখার জন্য এবং ছেড়ে দেওয়ার জন্য একই কী টিপানো আরও সহজ।
Nsukami _

আমাকে মনে করিয়ে দেওয়ার জন্য @LeMeteore ধন্যবাদ dired-view-file! আমি আমার কোডটি এটির জন্য সম্পাদনা করেছি। হ্যাঁ, আমি অনুমান করি যে এই জাতীয় দৃশ্যে, কোনও আলাদা কীতে না যাওয়া গুরুত্বপূর্ণ।
সিগমা

4

একটি কী চাপার সময় ফাইলটি প্রদর্শন করার পরিবর্তে, যা প্রয়োগ করা খুব কঠিন হবে, আমি পরের কীটি চাপ না দেওয়া পর্যন্ত ফাইলটি প্রদর্শন করার পরামর্শ দিই।

(defun dired-find-file-until-key ()
  (interactive)
  (let ((filename (dired-file-name-at-point))
    (buffer-count (length (buffer-list))))
    (dired-find-file)
    (message "Showing %s temporarily..." filename)
    (isearch-unread-key-sequence (list (read-event)))
    (if (= (length (buffer-list)) buffer-count)
    (bury-buffer)
      (kill-buffer))))

এখানে একটি বৈকল্পিক যা অন্য উইন্ডোতে ফাইলটি দেখায়, যা আমি মনে করি এটি আরও সুবিধাজনক ইউজার ইন্টারফেস।

(defun dired-find-file-other-window-until-key ()
  (interactive)
  (let ((buffer-count (length (buffer-list))))
    (dired-find-file-other-window)
    (isearch-unread-key-sequence (list (read-event)))
    (if (= (length (buffer-list)) buffer-count)
    (delete-window)
      (kill-buffer-and-window))))

আপনি বাফারে স্ক্রোলের মতো এত কিছু করতে পারবেন না। এটি "কুইক ভিউ" মোড বাস্তবায়নের জন্য আরও বোধগম্য হতে পারে যেখানে স্ক্রোলিং কমান্ড গ্রহণ করা হয়, তবে অন্যান্য ইনপুট ইভেন্টগুলির কারণে দ্রুত দর্শন মোডটি প্রস্থান হতে পারে এবং পূর্ববর্তী মোড অনুসারে ব্যাখ্যা করা হয়, যেমন আইশার্ক।

সঙ্গে v( dired-view-file), আপনি কিছু অন্তর্বর্তী পাবেন: বাফারে সম্পাদিত হয় মোডে , যেখানে আপনার চারপাশের ইত্যাদি স্ক্রল করতে পারেন অনুসন্ধান করি, কিন্তু বাফার বন্ধ সহজ কীস্ট্রোক হয় q


2

আরেকটি সম্ভাবনা, আপনি যদি মাউস ব্যবহার করেন তবে হ'ল আপনার পছন্দসই পূর্বরূপটি একটি সরঞ্জামদণ্ডে রেখে দেওয়া । তারপরে, আপনি যখন কোনও ফাইলের নামের (সম্পত্তি সহ help-echo) উপরে মাউসটি সরান তখন প্রাকদর্শনটি পপ আপ হয়ে যায়।

আমি এই কৌশলটি ডায়ার্ড + এ ব্যবহার করি , উদাহরণস্বরূপ, যখন আপনি ফাইলের নামগুলি মাউসওভার করেন তখন ইমেজ ফাইলগুলির সাথে সম্পর্কিত চিত্রগুলির প্রাকদর্শন (বিকল্পভাবে) দেখাতে।

লোড করার পরে এটি করার মাধ্যমে আপনি এর প্রভাব দেখতে পারেন dired+.el:

  • নিশ্চিত করুন যে tooltip-modeচালু হয়: (tooltip-mode 1)

  • নিশ্চিত করুন যে বিকল্পটির diredp-image-preview-in-tooltipঅ- nilমান রয়েছে (হয় থাম্বনেল আকার বা fullএকটি পূর্ণ-আকারের চিত্রের জন্য)।

  • ডায়ার্ডে একটি চিত্র-ফাইলের নামের উপরে মাউস পয়েন্টারটি রাখুন।

আপনি diredp-mouseover-helpযা চান তা করার জন্য অনুপ্রেরণা হিসাবে আপনি কার্যের কোডটি ব্যবহার করতে পারেন (মাউসওভারটিতে আপনার "দ্রুত দেখুন" প্রদর্শন করুন)। কীভাবে এটি ব্যবহার করবেন সে সম্পর্কিত কলগুলি দেখুন। এখানে এমন একটি কল রয়েছে:

 (add-text-properties (line-beginning-position) (line-end-position)
                      '(mouse-face highlight help-echo diredp-mouseover-help))

"আপনি যদি মাউস ব্যবহার করেন তবে" আপনি আমাকে হারিয়েছেন। ;-) এটি আমার জন্য কাজ করছে না. image-diredmouse-1: visit this file/dir in another window
ঠিকঠাক

আপনি dired+.elঅন্য নির্দেশগুলি লোড না করে এবং অনুসরণ না করে আমি কী বলেছিলাম তা আপনি দেখতে পাবেন না । এটি কোনও ভ্যানিলা ইমাক্স বৈশিষ্ট্য নয়। আমি কীভাবে আপনি নিজের কোডটি ঘুরতে পারেন তা আপনি যা করতে চান তা বর্ণনা করার চেষ্টা করছিলাম। dired+.elকোড খুব ঘনিষ্ঠ, আমি মনে করি, আপনি কি বলতে যদি আপনি চান হয়। তবে হ্যাঁ, মাউসওভার টুলটিপগুলির জন্য আপনাকে মাউস ব্যবহার করতে হবে। আপনি যদি তা না করেন তবে একটি টুলটিপ ব্যবহার করার পরামর্শটি খুব বেশি উপকার করবে না। ;-)
ড্রিউ

আমি বুঝতে পারি কীভাবে প্যাকেজগুলি লোড করতে হয় এবং নির্দেশাবলী অনুসরণ করতে হয় তবে এটি আমার পক্ষে কার্যকর হয় না। আড্ডায় কীভাবে এই কথোপকথনটি আবার শুরু করবেন আমি নিশ্চিত নই তবে সম্ভবত আমাদের তা করা উচিত that
নিসপিও


1

ডায়ার্ড বাফার থেকে, vকেবলমাত্র ভিউ-মোডে কোনও ফাইল দেখার জন্য, এবং qভিউ মোডটি ছেড়ে দিবে এবং আপনাকে আবার ডায়ার্ড বাফারে নিয়ে যাবে। এটি কোনও ফাইলের প্রাকদর্শন করার দ্রুত উপায় এবং এটি স্ক্রোলিং এবং এমনকি বাফার অনুসন্ধানের সম্ভাবনা দেয়।

আমি মনে করি না যে ইমাক্স অপারেটিং সিস্টেম থেকে প্রাপ্ত কোনও নিম্ন-স্তরের কীপ্রেস বার্তাগুলি পাশ করার ক্ষমতা রাখে। এটি আংশিক historicalতিহাসিক কারণে হতে পারে। হ্যাকারদের জন্য উপলব্ধ টার্মিনালগুলি ("প্রোগ্রামারগুলি পড়ুন") যে সময়ে ইমা্যাকগুলি ১৯ developed০-এর দশকে ফিরে আসছিল সেই সময়টিতে রিয়েল-টাইম কী আপ / ডাউন ইভেন্টগুলির সাথে কাজ করে না, বরং অক্ষরগুলির একটি সহজ ইনপুট এবং অব্যাহতি ক্রমের সাথে কাজ করে। আজ অবধি ইম্যাক্স কেবল সাধারণ টার্মিনাল বা এসএসএইচ সেশনের সীমানায় কেবল সাধারণ এএসসিআইআই অক্ষর এবং অব্যাহতি সিকোয়েন্সগুলি ব্যবহার করে কার্যকরভাবে কার্যকর করতে পারে।

এটি মেনু, একাধিক ফ্রেম পরিচালনা এবং মাউস ইন্টারঅ্যাকশন হিসাবে বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করার জন্য কয়েক বছর ধরে কার্যকারিতা উল্লেখযোগ্যভাবে বৃদ্ধি পায়নি বলে নয়। কোনও কারণ নেই (যে আমি সচেতন) যে এক্সটেনশনে নিম্ন স্তরের কী বার্তাগুলি উপলভ্য করতে ইমাসকে পরিবর্তন করা যায় না (এর মূল দিকে) তবে আমি আপনার নিঃশ্বাস ত্যাগ করব না।

( অস্বীকৃতি: এই পোস্টটিকে কঠোর বাস্তবতার চেয়ে মতামত এবং জল্পনা হিসাবে নেওয়া উচিত।)


1

আমি এই সমাধান প্রশ্নটি /programming/26409768/how-to-show-buffer-content-in-real-time-in-other-window-when-foc-is-in- এ আমার সমাধানটি দিয়েছি বাফার

এবং আমার উত্তর গৌণ কী আচরণ পরিবর্তন হয় nএবং pঅন্য একটি উইন্ডোতে সময়ে ফাইল দেখানোর জন্য। ফোকাসটি ডায়ার্ড বাফারে থাকে এবং ব্রাউজিংয়ের সময় আমরা পরিদর্শন করা বাফারটিকে হত্যা করি।

এই বৈশিষ্ট্যটি সহজেই সক্ষম / অক্ষম করতে আমি একটি ছোটখাটো মোড তৈরি করেছি। নোট করুন যে আমাদের কাছে এখনও «সাধারণ» নেভিগেশনের জন্য তীরচিহ্নগুলি রয়েছে। কল করুন M-x dired-show-mode(বা ranger-modeযেহেতু এটি একটি বৈশিষ্ট্য যা আমি রেঞ্জার ফাইল ম্যানেজারে আবিষ্কার করেছি )।

কোড: (কোনও পর্যালোচনা এবং বাগ রিপোর্ট প্রশংসা!) Https://gitlab.com/emacs-stuff/my-elisp/blob/master/dired-show.el

(defgroup dired-show nil
  "See the file at point when browsing in a Dired buffer."
  :group 'dired
  )

(setq show-next-current-buffer nil)

(defun show-next ()
     (interactive)
     (next-line 1)
     (dired-find-file-other-window)
     (if show-next-current-buffer (kill-buffer show-next-current-buffer))
     (setq show-next-current-buffer (current-buffer))
     (other-window 1)
     )

(defun show-previous ()
     (interactive)
     (previous-line 1)
     (dired-find-file-other-window)
     (if show-next-current-buffer (kill-buffer show-next-current-buffer))
     (setq show-next-current-buffer (current-buffer))
     (other-window 1)
     )


(define-minor-mode dired-show-mode
  "Toggle preview of files when browsing in a Dired buffer."
  :global t
  :group 'dired-show
  (if dired-show-mode
      (progn
        (define-key dired-mode-map "n" 'show-next)
        (define-key dired-mode-map "p" 'show-previous)
        )
  (define-key dired-mode-map "n" 'diredp-next-line)
  (define-key dired-mode-map "p" 'diredp-previous-line)
  ))

(defalias 'ranger-mode 'dired-show-mode)

(provide 'dired-show)
;;; dired-show ends here

0

কোনও আলাদা ইভেন্ট বা কোনওটি না পড়া পর্যন্ত আপনার ইভেন্টের সারিটি পোল করতে হবে। সিপিইউ লোড লক্ষণীয়, যদিও যুক্তিসঙ্গতভাবে কম।

(defun dired-preview-command ()
  (interactive)
  (let* ((file (or (dired-get-filename nil t)
                   (error "No file here")))
         (visited-p (get-file-buffer file))
         (buffer (or visited-p (find-file-noselect file)))
         (window
          (display-buffer buffer '(nil . ((inhibit-same-window . t)))))
         (event (read-event)))
    (while (and event (eq last-command-event event))
      (setq event (read-event nil nil 0.1)))
    (when event
      (setq unread-command-events
            (list event)))
    (quit-window (not visited-p) window)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.