Bu ekran görüntüsü gibi yer paylaşımı nasıl görüntülenir?


Yanıtlar:


8

Gerçekten, bu davranışı bindirmeleri kullanarak başarır. Özellikle 'after-string, belgeleri göstermek için özelliği kullanır (bkz: Kaplama Özellikleri ).

İşlevi incelerseniz company-coq--show-definition-overlay-at-point(ör: via M-x find-function) tam olarak nasıl oluşturulduğunu görebilirsiniz:

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

company-coq-definition-overlayKaplamanın daha sonra çıkarılmasını kolaylaştırmak için kaplamanın referansı tutulur :

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

İle (overlay-put OVERLAY 'after-string STR)screencast gibi fontify yok.
17'de stardiviner

@stardiviner belirli karakterleri / renkleri / stili merak ediyor musunuz? Sen dize incelemek için edebug kullanabilirsiniz ins-striçinde company-coq--show-definition-overlay-at-point. Belirli yüzler ve stil, bu dizede metin özellikleri olarak bulunur. Metin Özellikleri: Özel Özellikler , bu özelliklerin kodunun çözülmesi için yararlı bir referanstır.
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)

Bunun için bir repo oluşturdum, https://github.com/stardiviner/inline-docs.el Ve inline-docs.eleldoc için kullanılan bir modül . https://github.com/stardiviner/eldoc-overlay-mode .


Bunu genel amaçlı bir modül olarak kullanmak güzel olurdu, öyle ki sadece eldoc için değil, diğer "modeline quickinfo" için de kullanılabilir.
theldoria

Bunun için genel bir mod oluşturacağım, sonra eldoc için ayrı bir mod oluşturacağım.
stardiviner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.