BIBLIOGRAPHY
Related Notes
- #노트테이킹, #유니코드: § † ‡ № ¶ ↔ → ∉ ⊢ 기호 파일명
- #한글 #조직모드: #휴고 #내보내기 #공백문자 제거 방법
- #조직모드: 한국어 조사 공백문자 삽입 - 코드 통합
History
- 테스트 케이스 추가. 그리고 휴고 내보내기 와 연동해야 한다.
- 매우 중요하다. 공백문자 사랑한다.
abc 입니다. =한글= 입니다. *dd* 입니다 =한글= 입니다 _한글_ 이에요 +ㅇㅇ+ 한글 통령 이 대통령 이 입니다ㅁ. 대통령 가 입니다. 대통령 은 입니다. 대통령 을 입니다. 대통렬 를 입니다. abc 입니다. =한글= 입니다. *dd* 입니다 =한글= 입니다 _한글_ 이에요 +ㅇㅇ+ 한글 대통령 이 입니다 abc 한글 =테스트= 입니다 *중요* 내용 학교 에서 공부합니다 강으로 흐르다 친구 와 이야기
|2025-04-15 Tue 17:40|
@user 조직모드 버퍼 에서 영어 알파벳 또는 ’*’, ’=’, ’_’, ’+’ 뒤에 한글 유니코드(가-힣)이 있을 경우, 사이에 ’ ‘을 넣어주 는 이맥스 리스프 코드 를 만들어줘.
심볼정보 character: (displayed as ) (codepoint 160, #o240, #xa0) charset: unicode (Unicode (ISO10646)) code point in charset: 0xA0
@assistant 다음 은 조직모드 버퍼 에서 영어 알파벳 또는 ’*’, ’=’, ’_’, ’+’ 뒤에 한글 유니코드(가-힣)가 있을 경우, 사이에 ’ ‘을 넣어주 는 이맥스 리스프 코드입니다:
(defun insert-nbsp-between-latin-and-hangul ()
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "$[A-Za-z*+=_]+$$$$[가-힣]$$$" nil t)
(goto-char (match-beginning 2))
(insert (progn (string-to-char " "))) ; Non-breaking space
(goto-char (match-end 2)))))
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'after-change-functions #'insert-nbsp-between-latin-and-hangul nil t)))이 코드 는 조직모드 버퍼 에서 변경 이 있을 때마다 실행되며, 영어 알파벳 또는 ’*’, ’=’, ’_’, ’+’ 뒤에 한글 이 있을 경우 사이에 ’ ‘을 삽입합니다.
@user [A-Za-z*+=_]이 조건 바로 앞에 공백이면 안되 는 조건 을 추가해줘. 영어, 한글, 기호 뭐든 들어 가 있어야 해.
@assistant 다음 은 조건 을 수정한 이맥스 리스프 코드입니다:
(defun insert-nbsp-between-latin-and-hangul ()
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "$[A-Za-z*+=_]+$$$$[가-힣]$$$" nil t)
(when (not (string-match-p "\\s-" (match-string 1)))
(goto-char (match-beginning 2))
(insert (progn (string-to-char " "))) ; Non-breaking space
(goto-char (match-end 2))))))
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'after-change-functions #'insert-nbsp-between-latin-and-hangul nil t)))이 코드 는 영어 알파벳 또는 ’*’, ’=’, ’_’, ’+’ 뒤에 한글 이 있을 때, 그 앞에 공백 이 없고 다른 문자 가 있을 경우에만 ’ ‘을 삽입합니다.
@user 이 경우에 는 공백문자 가 들어가지 않거든
한글 입니다. 한글 입니다 한글 이에요
다시 조건 을 말하자면, [A-Za-z*+=_ 가-힣][가-힣] 일 경우에 [가-힣] 앞에 공백문자 를 넣어줘
@assistant 아, 이해했습니다. 더 간단하게 조건 을 정리해서 다시 작성해드리겠습니다. 요구사항 은 다음과 같습니다:
- 영어 알파벳(A-Za-z) 또는 특수문자(*+=_) 바로 뒤에 한글(가-힣)이 오는 경우
- 단, 앞에 공백 이 없어야 함
- 그리고 해당 문자들 사이에 공백 문자( )를 삽입
다음 은 간결하게 수정한 코드입니다:
(defun insert-nbsp-between-latin-and-hangul ()
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "$[A-Za-z*+=_]$$[가-힣]$" nil t)
(unless (save-excursion
(goto-char (match-beginning 1))
(looking-back "\\s-" 1))
(goto-char (match-beginning 2))
(insert " ")
(goto-char (match-end 2)))))
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'after-change-functions #'insert-nbsp-between-latin-and-hangul nil t)))이 코드는:
[A-Za-z*+=_]바로 뒤에[가-힣]이 오는 패턴 을 찾습니다looking-back으로 앞에 공백 이 없는지 확인합니다- 조건 이 맞으면 한글 앞에 공백 문자( )를 삽입합니다
더 간단하면서도 =, _ 등 모든 특수문자에 대해 동일하게 작동합니다.
@user 좋아. 잘 동작한다. org-mode-hook 으로 after-change-functions 넣으면 오버헤드 가 크지 않나? 매번 저장할 때 마다 버퍼 를 다 찾으니까?
@assistant 네, 맞습니다. after-change-functions 를 사용하면 모든 변경 사항마다 전체 버퍼 를 검색하므로 성능 저하 가 발생할 수 있습니다. 특히 대용량 버퍼 에서 는 더욱 그렇죠.
더 효율적인 방법 으로 다음과 같은 접근 방식 을 고려해볼 수 있습니다:
before-save-hook사용: 파일 저장 직전에 한 번만 처리- 변경된 영역만 처리:
after-change-functions를 사용하되, 변경된 영역 주변만 검사 - 비활성화 가능하게 만들기: 필요할 때만 수동 으로 실행할 수 있도록
가장 추천하 는 방법 은 before-save-hook 을 사용하 는 것입니다:
(defun insert-nbsp-between-latin-and-hangul ()
(interactive)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward "$[A-Za-z*+=_]$$[가-힣]$" nil t)
(unless (save-excursion
(goto-char (match-beginning 1))
(looking-back "\\s-" 1))
(goto-char (match-beginning 2))
(insert " ")
(goto-char (match-end 2)))))))
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'before-save-hook #'insert-nbsp-between-latin-and-hangul nil t)))성능 을 더 최적화하려면 변경된 영역만 처리하 는 버전도 고려할 수 있습니다:
(defun insert-nbsp-between-latin-and-hangul (&optional beg end _)
(interactive)
(save-excursion
(save-restriction
(when (and beg end)
(narrow-to-region (max (point-min) (- beg 10)) ; 앞쪽 여유 공간
(min (point-max) (+ end 10)))) ; 뒤쪽 여유 공간
(goto-char (point-min))
(while (re-search-forward "$[A-Za-z*+=_]$$[가-힣]$" nil t)
(unless (save-excursion
(goto-char (match-beginning 1))
(looking-back "\\s-" 1))
(goto-char (match-beginning 2))
(insert " ")
(goto-char (match-end 2)))))))
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'after-change-functions #'insert-nbsp-between-latin-and-hangul nil t)))어떤 방식 이 더 적합한지 는 사용 패턴에 따라 다르겠지만, 일반적 으로 before-save-hook 을 사용하 는 것이 가장 무난한 선택입니다.
@user
Comments