পৃষ্ঠা রিফ্রেশ ছাড়াই আমি কীভাবে ইইউতে চিত্রগুলি প্রদর্শন করতে টগল করতে পারি?


18

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

বর্তমানে আমি যে আমার শুরু করা এবং eww মধ্যে কিন্তু শুধুমাত্র পরে একটি পেজ রিফ্রেশ ইমেজ দেখানো বন্ধ করতে পারবেন একটি সিস্টেম সেটআপ আছে, কি আমি চাই এবং বন্ধ চিত্র টগল করার জন্য একটি উপায় পৃষ্ঠাটি রিফ্রেশ ছাড়া

এখানে আমার বর্তমান পদ্ধতিটি shr-put-imageযা eww ব্যবহার করে তার অভ্যন্তরের সুবিধা গ্রহণ করে ।

(defvar display-graphic-override nil
  "Used to override `display-graphic-p' behavior.
Should either be nil, or a list where the car is the override.")

(defadvice display-graphic-p (around sometimes-lie activate)
  "Use the override if it is non nil."
  (if display-graphic-override
      (car display-graphic-override)
    ad-do-it))

(defadvice eww-render (around no-images activate)
  "Temporarily lie about supporting graphics"
  (let ((display-graphic-override '(nil)))
    ad-do-it))

আমি 'অদৃশ্য পাঠ্য সম্পত্তি টগল করার চেষ্টা করেছি যেখানে চিত্রগুলি রয়েছে তবে এটি কাজ করে না বলে মনে হচ্ছে।

উত্তর:


13

পটভূমি

অন্যান্য অন্যান্য প্যাকেজ হিসাবে ইওও displayচিত্র প্রদর্শন করতে পাঠ্য সম্পত্তি ব্যবহার করে । এজন্য invisibleপাঠ্য সম্পত্তি টগল করা কোনও উপকারে আসেনি। আপনি পাঠ্যটি নিজেই অদৃশ্য হয়ে যাচ্ছেন তবে display সম্পত্তিটি এখনও প্রদর্শিত হচ্ছে।

প্রকৃতপক্ষে, এটি এতই সাধারণ যে নীচের কোডটিতে এমন কোনও বাফার উপর কাজ করা উচিত যা চিত্রগুলি প্রদর্শন করে (কেবলমাত্র eww নয়)।

সমাধান

সবচেয়ে সহজ সমাধানটি হ'ল displayপুরো বাফার থেকে সম্পত্তি সরিয়ে নেওয়া । তবে এটি একটি অপরিবর্তনীয় ক্রিয়া, আপনি পৃষ্ঠাটি রিফ্রেশ না করে চিত্রগুলি আবার চালু করতে সক্ষম হবেন না।

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

(defvar-local endless/display-images t)

(defun endless/toggle-image-display ()
  "Toggle images display on current buffer."
  (interactive)
  (setq endless/display-images
        (null endless/display-images))
  (endless/backup-display-property endless/display-images))

এই লোকটি যিনি ব্যাকআপ করেন এবং যেকোন জায়গায় পুনরুদ্ধার করেন। পাঠ্য সম্পত্তি কোডটি পড়া খুব ভয়ঙ্কর নয়, তবে আমি মনে করি এই বিবরণটি স্ব-বর্ণনামূলক হিসাবে যথেষ্ট।

(defun endless/backup-display-property (invert &optional object)
  "Move the 'display property at POS to 'display-backup.
Only applies if display property is an image.
If INVERT is non-nil, move from 'display-backup to 'display
instead.
Optional OBJECT specifies the string or buffer. Nil means current
buffer."
  (let* ((inhibit-read-only t)
         (from (if invert 'display-backup 'display))
         (to (if invert 'display 'display-backup))
         (pos (point-min))
         left prop)
    (while (and pos (/= pos (point-max)))
      (if (get-text-property pos from object)
          (setq left pos)
        (setq left (next-single-property-change pos from object)))
      (if (or (null left) (= left (point-max)))
          (setq pos nil)
        (setq prop (get-text-property left from object))
        (setq pos (or (next-single-property-change left from object)
                      (point-max)))
        (when (eq (car prop) 'image)
          (add-text-properties left pos (list from nil to prop) object))))))

এটি কাজ করে যদি আমাকে জানান দয়া করে! আমি কেবল এটি খুব সাধারণ ওয়েবপৃষ্ঠাগুলিতে পরীক্ষা করেছি।


1
সুন্দর, এটি আমার পক্ষে খুব ভাল কাজ করে।
বোকপাটার-আইটি

আমি এটি প্রচুর ব্যবহার করেছি এবং ভাবছি কীভাবে আমি ইনলাইন চিত্রটি আড়াল করতে এবং ডিফল্টরূপে পাঠ্যটি প্রদর্শন করতে পারি?
yi.tang.uni

7

ইমাস 25.1 হিসাবে, আপনি eww-reloadনেটওয়ার্কের চেয়ে ক্যাশে থেকে লোড করার জন্য একটি আর্গুমেন্ট পাস করতে পারেন । আমি নিম্নলিখিত ব্যবহার করছি:

(defun my/eww-toggle-images ()
  "Toggle whether images are loaded and reload the current page fro cache."
  (interactive)
  (setq-local shr-inhibit-images (not shr-inhibit-images))
  (eww-reload t)
  (message "Images are now %s"
           (if shr-inhibit-images "off" "on")))

(define-key eww-mode-map (kbd "I") #'my/eww-toggle-images)
(define-key eww-link-keymap (kbd "I") #'my/eww-toggle-images)

;; minimal rendering by default
(setq-default shr-inhibit-images t)   ; toggle with `I`
(setq-default shr-use-fonts nil)      ; toggle with `F`

এটি চিত্র এবং আনুষাঙ্গিক ফন্টগুলি ডিফল্টরূপে অক্ষম করে। হরফ টগলিং Fডিফল্টরূপে আবদ্ধ হয় , তাই আমি Iটগলিং চিত্রগুলির জন্য ব্যবহার করছি । (এটির জন্য একটি ডিফল্ট বাইন্ডিং প্রতিস্থাপন করে shr-insert-imageতবে আমি এটি কখনই ব্যবহার করি না))


defvar shr-inhibit-imagesএবং ব্যবহারের মধ্যে কোন পার্থক্য defcustom shr-blocked-images?
বাসিল

আমি তাই মনে করি না. inhibitএকটি বুলিয়ান এবং blockedএকটি রেইজেক্স, তাই আপনি কিছুটা ইউআরএল অবরুদ্ধ করার সময় এবং অন্যান্য কিছুতে টগল করে রাখতে এবং চালিয়ে যাওয়া ব্যবহার করতে পারেন।
গ্লুকাস

@glucas এর জন্য ধন্যবাদ! আমি কি জানতে চাই eww-link-keymap; পড়া *Help*কোন উপকারে আসেনি;) আপনি দয়া করে এটি কী তা ব্যাখ্যা করতে পারেন এবং কেন এটিতে কী কী বাধ্যবাধকতা যুক্ত করে?
কিংবদন্তি 2 কে

1
@ লেজেন্ডস 2 কে পয়েন্ট যখন কোনও ইভিউ বাফারের লিঙ্কে থাকে তখন সেই কীম্যাপটি প্রয়োগ হয়। সেই অতিরিক্ত বাইন্ডিং সম্ভবত সম্ভবত প্রয়োজন নেই কারণ ইমাকগুলি যেভাবেই সেখানে মোড মানচিত্রে ফিরে আসবে।
13:09

1
@ লেজেন্ডস 2 কে দুঃখিত, আমি এখনই ভুল ছিলাম। অতিরিক্ত বাঁধাই করা দরকার কারণ ইভিউতে "আমি" ডিফল্টরূপে ই-লিংক-কীম্যাপে শর্ট-ইনসার্ট-ইমেজের সাথে আবদ্ধ থাকে, তাই আমি সেই বাইন্ডিংটি প্রতিস্থাপন করছি। আপনি যদি কোনও আলাদা কী ব্যবহার করেন যা কোনও ই-ডিফল্টের সাথে দ্বন্দ্ব না করে তবে আপনার কেবল এটি মোড মানচিত্রে যুক্ত করা দরকার।
গ্লুকাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.