이모지 자동완성은 글자 뒤에 콜론(:)을 입력할 때 작동하지 않지만, 구두점(예: _ - : ; . , ) 뒤에 같은 기호를 입력하면 이모지를 제안합니다. 하지만 자동완성을 사용하면 이모지가 입력한 위치가 아니라 첫 번째 글자를 대체하며 문장 맨 앞에 삽입됩니다.
처음에는 채팅에서 이 문제를 발견했지만, 주제 작성기에서도 동일한 방식으로 동작합니다.
이모지 자동완성은 글자 뒤에 콜론(:)을 입력할 때 작동하지 않지만, 구두점(예: _ - : ; . , ) 뒤에 같은 기호를 입력하면 이모지를 제안합니다. 하지만 자동완성을 사용하면 이모지가 입력한 위치가 아니라 첫 번째 글자를 대체하며 문장 맨 앞에 삽입됩니다.
처음에는 채팅에서 이 문제를 발견했지만, 주제 작성기에서도 동일한 방식으로 동작합니다.
이제 재현할 수 없습니다. @kelv 님이 수정한 것으로 보입니다.
아직도 재현할 수 있습니다.
다음과 같이 입력했습니다:
텍스트를 작성하고 이모지를 추가해 보겠습니다
그런 다음 쉼표 뒤에 이모지를 추가하려고 했습니다.
이건 iOS에서만 발생하는 문제인가요? 다른 브라우저도 영향을 받나요?
iOS에서 그런 일이 일어나는 건지 모르겠어요. iOS로만 제한되는 건 절대 아니에요. 제가 iOS 기기를 갖고 있거든요.
최근 재현은 Firefox를 사용하는 제 Android 태블릿에서 일어났어요. (방금 확인해보니 Chrome에서도 동일하더라고요)
파일명, 리포트 시각, 그리고 OP에 온스크린 키보드가 없다는 점을 고려하면, 아마 Windows 10에서 Edge를 사용했던 것 같아요.
이 문제를 보고하려고 여기에 왔습니다 @Moin ![]()
도움이 된다면, 여기는 iPadOS 18.7.1과 Safari를 사용 중입니다 @sam
iPad에서 텍스트를 강조하여 인용할 때 또 다른 문제도 발견했습니다. Discourse의 “인용” 팝업이 iOS의 “복사/붙여넣기” 메뉴 뒤에 가려져서 절대 클릭할 수 없게 되었습니다. 재현 단계를 찾아서 이번 주 후반에 별도로 보고해 보겠습니다 (누군가 먼저 보고하지 않는 한). 두 문제 모두 이번 주에 갑자기 나타났기 때문에 관련이 있을 수도 있어 여기에 언급합니다.
그러면 내 문제와 같은 문제인지 확신할 수 없습니다. 구두점 뒤에 이모지가 잘못 배치되는 현상은 이미 1년 6개월째 계속되고 있습니다.
아 맞다, 이렇게 하면 고쳐진다:
diff --git a/frontend/discourse/app/modifiers/d-autocomplete.js b/frontend/discourse/app/modifiers/d-autocomplete.js
index e49fc0ec53..33fb51a1f4 100644
--- a/frontend/discourse/app/modifiers/d-autocomplete.js
+++ b/frontend/discourse/app/modifiers/d-autocomplete.js
@@ -599,10 +599,19 @@ export default class DAutocompleteModifier extends Modifier {
prev = this.getValue()[caretPos - 1];
const shouldTrigger = await this.shouldTrigger({ backSpace });
- if (
- shouldTrigger &&
- (prev === undefined || this.ALLOWED_LETTERS_REGEXP.test(prev))
- ) {
+ // 이모지 자동완성(key === ':')의 경우, 이모지 앞에 나타날 수 있는
+ // 쉼표, 마침표 등 일반적인 구두점을 포함하는 더 관대한 검사를 사용
+ let isAllowed;
+ if (this.options.key === ":") {
+ // 이모지 자동완성의 onKeyUp 정규식에서 허용되는 동일한 문자와 일치
+ isAllowed =
+ prev === undefined || /[\s.?,@/#!%&*;:\[\]{}=\-_()+]/.test(prev);
+ } else {
+ isAllowed =
+ prev === undefined || this.ALLOWED_LETTERS_REGEXP.test(prev);
+ }
+
+ if (shouldTrigger && isAllowed) {
start = caretPos;
term = this.getValue().substring(caretPos + 1, initialCaretPos);
end = caretPos + term.length;
@kelv 이 코드가 어떻게 발전해 왔는지에 대해 아주 익숙하지는 않은데, 최근에 하신 포트 작업 중 일부가 이 내용과 관련이 있어서 떠오르는 부분이 있을까요?
포트링과는 관련이 없어요. 새 floatkit 기반 자동완성을 끄고, 이전 인스턴스(3.5.0.beta8-dev)에서 재현해 보았거든요. 꽤 오래전부터 존재해 온 커서 위치 버그인 것 같습니다. 적절한 수정 방법을 계속 살펴볼 예정이지만, 기존 자동완성 라이브러리의 완전한 제거를 막는 장애 요인은 아닐 거예요.
이모지를 추가한 후 채팅 메시지가 통째로 사라졌습니다.
메시지를 입력한 뒤, 제안 항목을 받으려고 콜론(:)과 알파벳 두 글자를 입력하고, '더 보기’를 클릭한 다음 이모지를 선택했는데, 그러자 메시지가 완전히 사라졌습니다. 이것은 다른 버그인가요, 아니면 관련이 있나요? 지금까지는 작성기(composer)에서는 재현하지 못했고, 채팅에서만 발생했습니다. 또한 노트북에서만 발생하고 태블릿에서는 발생하지 않습니다.
네, 이모지 경계 감지 버그입니다. 이모지가 어디에서 시작되고 끝나는지에 대해 혼란을 겪고 있어요.
여기서 까다로운 점은 전체 로직이 틀렸을 수도 있다는 거예요. 커서 위치와 이모지 자동완성에 전달한 글자 수를 정확히 알고 있는데, 왜 이런 판단을 해야 하는지 궁금하네요. 그냥 N자만 뒤로 거슬러 올라가서 해당 부분을 교체하는 방식으로 하면 되지 않을까요… 확신은 없어요.
아, 이건 또 다른 버그입니다. 바로 전에 구두점 바로 뒤에 이모지가 삽입되는 이전 유형의 문제를 패치했거든요 (FIX: emojis should insert right after punctuation correctly - Pull Request #35830 - discourse/discourse - GitHub). 다만 이 패치는 아직 메타(Meta)에 배포되지 않았습니다.
비슷하게, 이 문제도 꽤 오래전부터 존재해 왔으며, 채팅에서만 발생하는 것을 확인했습니다. 이 부분도 시간을 내서 처리할 예정입니다.
감사합니다. 완벽하게 작동합니다.
FIX: emoji picker autocomplete in chat replaces entire draft - Pull Request #36017 - discourse/discourse - GitHub 를 통해 이제 수정되었습니다. 보고해 주셔서 감사합니다 ![]()
이 주제는 3일 후 자동으로 닫혔습니다. 새 답글 작성은 더 이상 허용되지 않습니다.