전체 줄 번호 막대를 사용자 정의 배경색으로 채우려면 어떻게해야합니까?


9

아래 스크린 샷에서 linum얼굴 의 배경 을 약간의 색상으로 설정했지만 버퍼 끝에 빈 영역이 있으며 줄 바꿈 ( global-visual-line-mode)이 활성화 된 경우 선 사이에 간격이 있습니다 .

줄 바꿈으로 깨진 된 리눔 배경입니다.

이상적으로는 전체 왼쪽이 균일 한 색상이어야합니다. 이것이 가능한가? 나는 Elisp를 알고 있으므로 가능하다면 몇 가지 지침으로 직접 수정 프로그램을 작성할 수 있습니다.


테마를 전환 할 때이 사실을 알았습니다. 나를위한 해결 방법은 기본 테마로 돌아가서 특정 테마를 다시 활성화하는 것이 었습니다. 일반적으로 배경색이 재설정됩니다. 기본 테마 설정을 살펴보고 기능 수정 방법에 대한 단서가 될 수있는 특정 얼굴에 더 부지런한 지 확인하는 것이 좋습니다.
elarson

"중간"색상을 수정하는 것이 가능할 수도 있습니다 (시도하겠습니다). 버퍼 종료 후 색상을 고치는 것은 유감스럽게도 아닙니다 .- 색칠 할 것이 없습니다.
Malabarba

사실, 나는 이것이 종종 가치있는 기능 요청 일 수 있도록 자주 묻는 것을 보았습니다.
Malabarba

@Malabarba 왜 버퍼 아래 영역으로 확장 할 수 없습니까? 프린지는 결국이 작업을 수행합니다.
Lenar Hoyt

1
@mcb 나는 지금 당신이 의미하는 것을 조금 더 잘 이해합니다. 프린지에는 자체 얼굴 (배경이 화면 하단으로 확장 됨)이 있으며 여백은 없습니다 (기본 얼굴을 빌려옵니다).
Malabarba

답변:


6

문제

여기서 문제는 여백의 모양을 제어 할 얼굴이 없다는 것입니다. 오버레이를 사용하여 여백에 텍스트를 표시 할 수 linum-mode있지만 (이것이 무엇이든 ) Emacs의 텍스트와 마찬가지로 버퍼의 한계로 제한됩니다. 따라서 버퍼의 마지막 줄을 넘어서 여백 표시를 제어 할 수 없습니다.

당신이 할 수있는 일은 그 사이의 잘못된 라인을 수정하는 것입니다.

거기에 무엇을 넣어

이 변수는 두 개의 논리 선 사이에있는 시각적 선에 표시 할 내용을 제어합니다. 중요한 부분은 'face 'linum이 라인이의 모양을 따르도록합니다 linum-mode. 이 "-----"부분은 실증적이므로 공백 또는 원하는대로 변경할 수 있습니다.

(defvar endless/margin-display
  `((margin left-margin) ,(propertize "-----" 'face 'linum))
  "String used on the margin.")

그것을하는 방법

다음 코드는 버퍼를 통과하여 linum-mode"실제"가 아닌 각 행에 오버레이를 사용 합니다 ( 사용 하는 것과 유사 ).

(defvar-local endless/margin-overlays nil
  "List of overlays in current buffer.")

(defun endless/setup-margin-overlays ()
  "Put overlays on each line which is visually wrapped."
  (interactive)
  (let ((ww (- (window-width)
               (if (= 0 (or (cdr fringe-mode) 1)) 1 0)))
        ov)
    (mapc #'delete-overlay endless/margin-overlays)
    (save-excursion
      (goto-char (point-min))
      (while (null (eobp))
        ;; On each logical line
        (forward-line 1)
        (save-excursion
          (forward-char -1)
          ;; Check if it has multiple visual lines.
          (while (>= (current-column) ww)
            (endles/make-overlay-at (point))
            (forward-char (- ww))))))))

(defun endles/make-overlay-at (p)
  "Create a margin overlay at position P."
  (push (make-overlay p (1+ p)) endless/margin-overlays)
  (overlay-put
   (car endless/margin-overlays) 'before-string
   (propertize " "  'display endless/margin-display)))

그리고 우리 linum-mode는 줄 번호를 업데이트 할 때마다 실행되기를 원합니다 .

(add-hook 'linum-before-numbering-hook #'endless/setup-margin-overlays)

방금 테스트 한 결과 org-mode스크롤하는 동안 약간의 지연이 발생하는 것으로 보이며 적응 형 랩을 켠 경우 분명한 이유없이 간격을 놓칩니다. 스크린 샷.
Lenar Hoyt

@mcb 예, 여기서 성능은 문제이지만 개선하는 것은 길고 복잡한 문제입니다. 조직 모드 문제의 경우 조직은 오버레이를 많이 사용하므로 충돌이 발생할 수 있습니다. 나는 그것을 고칠 방법을 알지 못하지만 약간의 생각을 할 것이다.
Malabarba

-1

이것을 구성에 넣을 수 있습니다.

(set-face-background 'fringe "#f4a460")

... 색상 코드를 원하는 색상으로 변경하십시오.


2
이것은 프린지 색상을 변경하며 프린지에 줄 번호가 표시되지 않습니다. (시도해 보시면 차이가 보일 것입니다)
Malabarba

1
문제의 스크린 샷에서도 볼 수 있습니다. "행 번호 열"은 버퍼와 동일한 배경색이며 프린지는 행 번호 열과 버퍼 사이의 작은 영역입니다 (회색).
T. Verron

네 말이 맞아. 번호 매기기 후크에서 함수 실행에 새 오버레이를 도입하고 설정할 수있는 얼굴을 제공해야한다고 생각합니다.
tealeg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.