क्या सक्रिय विंडो की फ्रिंज का रंग बदलने का एक तरीका है?


16

ध्यान केंद्रित खिड़की और बाकी के बीच बेहतर अंतर करने के लिए मैं इस खिड़की के फ्रिंज रंग को बदलना पसंद नहीं करूंगा। फ्रिंज कीवर्ड के साथ अनुकूलित की खोज मैंने पाया कि सक्रिय और सक्रिय लोगों के लिए अलग-अलग रंग सेट करने की क्षमता के बिना अपने बीजी रंग को कैसे बदलना है। क्या यह सभी के लिए संभव है? धन्यवाद।


मैं फ्रिंज के बारे में निश्चित नहीं हूं, लेकिन आप निष्क्रिय खिड़कियों के लिए मोड-लाइन को बदल सकते हैं। कोशिश करो M-x customize-face mode-line-inactive
टायलर

3
यह फ़्रेम-लोकल प्रतीत होता है, इसलिए ऐसा लगता है कि उत्तर नहीं है। मैंने कोशिश की (face-remap-add-relative 'fringe '((:background "yellow")))कि अन्य चेहरे बफर-स्थानीय उपयोग के लिए पर्याप्त हैं, लेकिन यह फ्रेम में सभी खिड़कियों को प्रभावित करता है जहां तक fringeइसका संबंध है। @ टायलर के सुझाव के अलावा, आप कर्सर को कस्टमाइज़ भी कर सकते हैं ताकि यह केवल सक्रिय विंडो में दिखाई दे - चर देखेंcursor-in-non-selected-windows
लॉटल जूल

मुझे लगता है कि यह वही है जो आपको चाहिए: http://stackoverflow.com/questions/9446673/asking-emacs-to-highlight-more-clearly-which-window-pane-has-theocus-cursor
Pedro Luz

मैं मॉडलइन, thx के बारे में जानता हूं। मैं बस इसे मेरे लिए और अधिक स्पष्ट करना चाहता था।
सैंड्रिक

सक्रिय विंडो को अधिक दृश्य ध्यान आकर्षित करने में मदद करने के लिए अतिरिक्त विचारों के एक जोड़े हैं: (1) निष्क्रिय खिड़कियों की मोड-लाइन पृष्ठभूमि बफर रंग से मेल खाती है ताकि निष्क्रिय मोड-लाइन कम ध्यान देने योग्य हो जाए: stackoverflow.com/ एक / 20936397/2112489 और (2) mode-line-formatसक्रिय और निष्क्रिय खिड़कियों के भीतर कुछ पाठ्य घटकों के रंग को बदलते हुए : emacs.stackexchange.com/a/22682/2287
lawlist

जवाबों:


7

चूँकि आप चाहते हैं कि "फ़ोकस किए गए विंडो के बीच बेहतर अंतर हो", आप ऐसा करने के लिए अन्य तरीकों का उपयोग कर सकते हैं, बजाय इसके कि सक्रिय विंडो के फ्रिंज रंग को बदल दिया जाए।

मैं सक्रिय और निष्क्रिय खिड़कियों के बीच बेहतर अंतर करने के लिए तीन तरीके जोड़ती हूं।

  1. सक्रिय और निष्क्रिय खिड़कियों के लिए मोड लाइन के विभिन्न रंगों का उपयोग करें।
  2. वर्तमान पंक्ति को हाइलाइट करें जहां बिंदु सक्रिय विंडो में है।
  3. सक्रिय और निष्क्रिय खिड़कियों के लिए विभिन्न पृष्ठभूमि रंगों का उपयोग करें।

ध्यान दें कि ऊपर बताए गए सभी चुने हुए रंग आपके Emacs थीम के साथ अच्छी तरह से काम कर रहे होंगे।

यहाँ सभी तीन तरीके हैं:

  1. सक्रिय और निष्क्रिय खिड़कियों के लिए मोड लाइन के विभिन्न रंगों का उपयोग करें:

    (custom-set-faces
     '(mode-line ((t (:background "dim gray" :foreground "white"))))
     '(mode-line-inactive ((t (:background nil)))))
    
  2. वर्तमान पंक्ति को हाइलाइट करें जहां बिंदु सक्रिय विंडो में है:

    (global-hl-line-mode 1)
    ;; underline the current line
    (set-face-attribute hl-line-face nil :underline t)
    
  3. सक्रिय और निष्क्रिय खिड़कियों के लिए विभिन्न पृष्ठभूमि रंगों का उपयोग करें:

    (defun highlight-selected-window ()
      "Highlight selected window with a different background color."
      (walk-windows (lambda (w)
                      (unless (eq w (selected-window))
                        (with-current-buffer (window-buffer w)
                          (buffer-face-set '(:background "#111"))))))
      (buffer-face-set 'default))
    (add-hook 'buffer-list-update-hook 'highlight-selected-window)
    

आप अपने Emacs विषय के साथ अच्छी तरह से काम करने के लिए कोड स्निपेट्स में रंग बदल सकते हैं।

यह अंतिम स्क्रीनशॉट है:

एक साथ तीन तरीकों का स्क्रीनशॉट

और एक अन्य फ़ंक्शन है जिसे आप सक्रिय विंडो को फ्लैश करने के लिए मैन्युअल रूप से उपयोग कर सकते हैं:

(global-set-key (kbd "<f12>") 'flash-active-buffer)
(make-face 'flash-active-buffer-face)
(set-face-attribute 'flash-active-buffer-face nil
                    :background "blue" :foreground nil)
(defun flash-active-buffer ()
  (interactive)
  (run-at-time "100 millisec" nil
               (lambda (remap-cookie)
                 (face-remap-remove-relative remap-cookie))
               (face-remap-add-relative 'default 'flash-active-buffer-face)))

आप कोड स्निपेट में कीबाइंडिंग को बदल सकते हैं, जब आप सक्रिय विंडो दिखाना चाहते हैं, तो कुंजी को हिट करें, सक्रिय विंडो नीला हो जाएगा, जब आप बिंदु को स्थानांतरित करते हैं, तो रंग चला जाएगा।


0

मुझे भी यही समस्या थी। मैंने स्मार्ट लाइन मोड का उपयोग किया और इसे अनुकूलित किया ताकि मुझे ऐसे रंग मिलें जो सक्रिय विंडो में बहुत विशिष्ट हैं। यहाँ एक नमूना फ्रेम है। सक्रिय विंडो सोने के अक्षरों के साथ काली मोड लाइन के साथ एक है।

यहाँ छवि विवरण दर्ज करें

सुनिश्चित करें कि आपको इस कोड का उपयोग करने से पहले स्मार्ट-मोड-लाइन की आवश्यकता है। मैं आपको उन रंगों को अनुकूलित करने की सलाह देता हूं जिनकी आपको आवश्यकता है:

(deftheme smart-mode-line-dmg "dmg theme for smart-mode-line.")
(custom-theme-set-faces
 'smart-mode-line-dmg
                                        ; '(mode-line-inactive ((t :inverse-video nil)))
                                        ; '(mode-line     ((t :inverse-video nil)))
 '(mode-line     ((t :foreground "grey70" :background "black" :inverse-video nil)))
 '(mode-line-inactive  ((t :foreground "black" :background "white" :inverse-video nil)))
 '(sml/global    ((t :inherit font-lock-preprocessor-face)))
 '(sml/filename  ((t :inherit sml/global :foreground "gold" :weight bold)))
 '(sml/prefix    ((t :inherit (font-lock-variable-name-face sml/global))))
 '(sml/read-only ((t :inherit (font-lock-type-face sml/not-modified))))
 '(sml/modes     ((t :foreground nil :inherit sml/filename :weight normal))))

(sml/setup)

0

आप वर्तमान में चयनित विंडो को हाइलाइट करने के लिए निम्न की तरह कुछ करने की कोशिश कर सकते हैं। खबरदार कि यह काम नहीं करता है अगर कई खिड़कियों में बफ़र्स समान हैं। यह चयनित एक को छोड़कर अन्य सभी विंडो को समाप्त करता है।

(defvar dim-window-face
  '((t  (:background "grey40")))
  "Face for a dimmed window in the current frame.")

(defvar current-window-face
  '((t  (:background "black")))
  "Face for a dimmed window in the current frame.")

(defvar window->overlay (make-hash-table)
  "A hash table of window to dimmed overlay.")

(defun dim-windows ()
  "Dim all windows except the `selected-window' in current frame."
  (interactive)
  (walk-windows (lambda (w)
                  ;; Delete existing overlay on window W
                  (when-let ((ol (gethash w window->overlay)))
                    (delete-overlay ol))
                  (let ((ol (make-overlay (window-start w)
                                          (window-end w)
                                          (window-buffer w))))
                    (overlay-put ol 'face (if (eql (selected-window) w)
                                              current-window-face
                                            dim-window-face))
                    (puthash w ol window->overlay)))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.