টাইমারদের সুবিধা নিয়ে কী ডাউন / আপ ইভেন্ট বন্ডিং সিমুলেট করার জন্য আমার সুপার হ্যাকি উপায়।
সামগ্রিকভাবে আমি সিগমার উত্তরটি অনুসরণ করার পরামর্শ দেব, তবে আপনি যেতে দিয়ে পূর্বরূপটি বন্ধ করার উপায় চেয়েছিলেন যাতে আমি চেষ্টা করতে বাধ্য।
মূলত আপনি যা করতে পারেন তা হ'ল কিছু ফাংশন যা আপনার "কীডাউন" ফাংশনটি কোনও কী-বাইন্ডিংয়ের সাথে আবদ্ধ করা হয় এবং সেই ক্রিয়াকলাপের ভিতরে, একটি নিষ্ক্রিয় টাইমার শুরু করুন যা আপনার "কীপ" ফাংশনটিকে কার্যকর করে, আপনি যতক্ষণ না ধরে রাখেন ততক্ষণ প্রদত্ত কীগুলি, "কীডাউন" ফাংশনটি বার বার চালিত হবে এবং এটি নিষ্ক্রিয় টাইমারকে চলমান থেকে বাধা দেবে। অবশ্যই আপনাকে এই সত্যটি ক্ষতিপূরণ দিতে হবে যে কমান্ডটি বার বার প্রবাহিত হবে, সম্ভবত আপনার "কীডাউন" ফাংশনে কোনও ধরণের নুপ ফাংশনটির চাবিটি রিবন্ডিং করে, তারপরে "কীআপ" ফাংশনটিতে "কীডাউন" ফাংশনটি পুনরায় সঞ্চারিত করে।
সুতরাং আপনার ব্যবহারের ক্ষেত্রে আপনার "কীডাউন" ফাংশনটি ফাইলের বিষয়বস্তুগুলির সাথে একটি পূর্বরূপ বাফারটি খুলবে এবং সেই প্রাকদর্শন বাফারে একই কী কম্বোকে কিছু নুপের মতো কমান্ড বেঁধে রাখবে। আপনার "কীডাউন" ফাংশনটিও একটি নিষ্ক্রিয় টাইমার শুরু করবে যা আপনার পূর্বরূপ বাফারটি মুছে ফেলবে এবং আপনি যেখানে ছিলেন সেখানে ফিরিয়ে আনবে।
দীর্ঘ গল্প সংক্ষিপ্ত এখানে কোড:
এই ফাংশনটি একটি মূল কম্বোতে আবদ্ধ করুন (আমি ব্যবহার করেছি 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 তম বার এটি উত্থাপন করার চেষ্টা করুন যতক্ষণ না আপনি আপনার মেশিনের জন্য সঠিক স্থানটি খুঁজে পান।
* এছাড়াও নোট করুন যে ফাংশনে আমি প্রাকদর্শন বাফারের কিছু ফন্টিফিকেশন করার চেষ্টা করেছি তবে আমি এটি কাজ করতে পারিনি, এটি এটিকে আরও কার্যকর করার পরবর্তী পদক্ষেপ হবে * **