এই স্ক্রিনকাস্টের মতো ওভারলে কীভাবে প্রদর্শন করবেন?


10

নিম্নলিখিতগুলির মতো ইমাকগুলিতে কীভাবে ওভারলে তৈরি করবেন (সম্ভবত এটি ওভারলে নয়, আমি জানি না, এটি সংস্থা-কোক ইনলাইন-ডকস থেকে এসেছে):

এই স্ক্রিনকাস্টের মতো ওভারলে

উত্তর:


8

প্রকৃতপক্ষে এটি ওভারলে ব্যবহার করে সেই আচরণটি সম্পাদন করে। বিশেষত- এটি 'after-stringডকুমেন্টেশন দেখানোর জন্য সম্পত্তিটি ব্যবহার করে (দেখুন: ওভারলে বৈশিষ্ট্যগুলি )।

আপনি যদি ফাংশনটি পরীক্ষা করেন company-coq--show-definition-overlay-at-point(উদা: এর মাধ্যমে M-x find-function) আপনি ঠিক কীভাবে এটি তৈরি করেছেন তা দেখতে পাবেন:

(setq company-coq-definition-overlay (make-overlay ins-pos ins-pos))
(overlay-put company-coq-definition-overlay 'after-string ins-str)

company-coq-definition-overlayওভারলেটিকে পরে উল্লেখ করা সহজতর করার জন্য ওভারলেতে একটি রেফারেন্স রাখা হয় :

(delete-overlay company-coq-definition-overlay)
(setq company-coq-definition-overlay nil)

এর সাথে (overlay-put OVERLAY 'after-string STR)স্ক্রিনকাস্টের মতো স্বতঃস্ফূর্ততা নেই।
— stardiviner

@ স্টারডিভাইনার আপনি কি নির্দিষ্ট চরিত্র / রঙ / স্টাইল সম্পর্কে ভাবছেন? আপনি স্ট্রিং পরীক্ষা করার edebug ব্যবহার করতে পারে ins-strমধ্যে company-coq--show-definition-overlay-at-point। নির্দিষ্ট মুখ এবং স্টাইলিং স্ট্রিংয়ের পাঠ্য বৈশিষ্ট্য হিসাবে উপস্থিত থাকবে। পাঠ্য বৈশিষ্ট্য: বিশেষ বৈশিষ্ট্যগুলি সেই বৈশিষ্ট্যগুলি ডিকোড করার জন্য একটি সহায়ক তথ্যসূত্র।
— ebpa

1
(defvar inline-docs-overlay nil)

(defgroup inline-docs nil
  "Show inline contextual docs in Emacs."
  :group 'docs)

(defcustom inline-docs-border-symbol ?―
  "Specify symbol for inline-docs border."
  :group 'inline-docs)

(defcustom inline-docs-prefix-symbol ?\s
  "Specify symbol for inline-docs prefix."
  :group 'inline-docs)

(defcustom inline-docs-indicator-symbol "➜"
  "Specify symbol for inline-docs indicator."
  :group 'inline-docs)

(defface inline-docs-face
  '((t (:inherit italic)))
  "Face for `inline-docs-mode'."
  :group 'inline-docs)

(defface inline-docs-border-face
  '((t (:inherit font-lock-doc-face)))
  "Face for inline docs border lines."
  :group 'inline-docs)

(defface inline-docs-prefix-face
  '((t (:inherit default)))
  "Face for inline docs prefix."
  :group 'inline-docs)

(defface inline-docs-indicator-face
  '((t (:inherit font-lock-doc-face)))
  "Face for inline docs indicator."
  :group 'inline-docs)

(defun inline-docs--clear-overlay ()
  "Clear inline-docs overlays."
  (when (overlayp inline-docs-overlay)
    (delete-overlay inline-docs-overlay))
  (remove-hook 'post-command-hook 'inline-docs--clear-overlay))

(defun inline-docs--string-display-next-line (string apply-face)
  "Show STRING contents below point line until next command with APPLY-FACE."
  (let* ((border-line (make-string (window-body-width) inline-docs-border-symbol))
         (prefix (make-string
                  (if (= (current-indentation) 0) ; fix (wrong-type-argument wholenump -1) when current indentation is 0 minus 1 will caused wholenump exception.
                      (current-indentation)
                    (- (current-indentation) 1))
                  inline-docs-prefix-symbol))
         (str (concat (propertize border-line
                                  'face 'inline-docs-border-face)
                      "\n"
                      prefix
                      (propertize (concat inline-docs-indicator-symbol " ")
                                  'face 'inline-docs-indicator-face)
                      (copy-sequence string) ; original eldoc string with format.
                      "\n"
                      (propertize border-line
                                  'face 'inline-docs-border-face)
                      "\n"
                      ))
         start-pos end-pos)
    (unwind-protect
        (save-excursion
          (inline-docs--clear-overlay)
          (forward-line)
          (setq start-pos (point))
          (end-of-line)
          (setq end-pos (point))
          (setq inline-docs-overlay (make-overlay start-pos end-pos (current-buffer)))
          ;; change the face
          (if apply-face
              (overlay-put inline-docs-overlay 'face 'inline-docs-face))
          ;; hide full line
          ;; (overlay-put inline-docs-overlay 'display "")
          ;; (overlay-put inline-docs-overlay 'display :height 20)
          ;; pre-pend indentation spaces
          ;; (overlay-put inline-docs-overlay 'line-prefix prefix)
          ;; auto delete overlay
          (overlay-put inline-docs-overlay 'evaporate t)
          ;; display message
          (overlay-put inline-docs-overlay 'before-string str))
      (add-hook 'post-command-hook 'inline-docs--clear-overlay))))

(defun inline-docs-display-docs-momentary (format-string &rest args)
  "Display inline docs FORMAT-STRING under point with extra ARGS."
  (when format-string
    (inline-docs--string-display-next-line
     (apply 'format format-string args)
     t)))

;;;###autoload
(defalias 'inline-docs 'inline-docs-display-docs-momentary)

আমি এর জন্য একটি রেপো তৈরি করেছি, https://github.com/stardiviner/inline-docs.el এবং একটি মডিউল যা inline-docs.elবড়দের জন্য ব্যবহার করে । https://github.com/stardiviner/eldoc-overlay-mode ।


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

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