Subject: bug#77998: closed (Re: bug#77998: 30.0.50; thai-pattachote input method is missing characters?)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 26 Apr 2025 13:49:03 +0000

Your bug report

#77998: 30.0.50; thai-pattachote input method is missing characters?

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
77998: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=77998
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#77998: 30.0.50; thai-pattachote input method is missing characters?
From: Eli Zaretskii <[email-masked]>
To: Robert Nikander <[email-masked]>
Cc: [email-masked]
Date: Sat, 26 Apr 2025 16:48:26 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> From: Robert Nikander <[email-masked]>
> Date: Wed, 23 Apr 2025 18:30:55 -0600
> Cc: Eli Zaretskii <[email-masked]>
> 
> 
> > On Apr 23, 2025, at 6:11 AM, Eli Zaretskii <[email-masked]> wrote:
> > 
> > Thanks.  Can you try identifying additional missing characters, if
> > there are any?  An input method might omit some characters, but not if
> > they are used frequently enough.  So I think we would like to add any
> > missing characters, if that is possible.
> 
> 
> Okay, I've taken a closer look at this, and I think I see a way to fix it, or at least improve it significantly. There are two input methods for Thai:
> 
> 1. thai-pattachote
> 2. thai-kesmanee
> 
> The second one works better, and includes most of the characters, except a couple more exotic ones as explained in the Help displayed by `describe-input-method`. This `thai-kesmanee` method may be misspelled [1], but I don't care much about that.
> 
> It appears that the `thai-pattachote` method has both missing chars and duplicate chars. I compared the keyboard displayed by `describe-input-method` with the keyboard shown here: [2]. There are three duplicates that shouldn't be there, and those line up exactly with the three missing chars.
> 
> These characters are difficult to see, especially with a small font, so I can see why someone apparently made these mistakes.
> 
> Here are the missing characters:
> 
> 1. ฉ
> 2. ฌ
> 3. ฏ
> 
> These are duplicated characters:
> 
> 1. ฒ - It can be typed 3 ways: ], .+shift, p+shift
> 2. ั - It can be typed 2 ways: g, b+shift
> 3. ฎ - It can be typed 2 ways: z+shift, x+shift
> 
> Now the #2 duplicate appears to be consistent with the Pattachote keyboard. But #1 and #3 provide us with the 3 new spaces to use for the missing letters.
> 
> = Changes =
> 
> 1. The shifted '.' key ('>') should map to 'ฉ', not 'ฒ' as it does now. So '>' -> 'ฉ' fixes missing char #1. 
> 
> 2. The ']' key should be inserting 'ฌ', not 'ฒ' as it does now. So ']' -> 'ฌ' fixes missing char #2.
> 
> 3. The shifted 'x' key should be inserting 'ฏ', not 'ฎ' as it is now. That fixes missing char #3.
> 
> A bit of a disclaimer… I don’t know Thai. Ideally someone who does would check this. But I’m pretty confident this is correct because the way the duped keys lined up exactly with the missing ones, when looking at the keyboard at [2].

Thanks, I've made your proposed changes, and I'm therefore closing
this bug.

Subject: 30.0.50; thai-pattachote input method is missing characters?
From: Robert Nikander <[email-masked]>
To: [email-masked]
Date: Tue, 22 Apr 2025 16:51:09 -0600
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi, 

I've been learning how to read Thai. I tried the input method `thai-pattachote`. I'm a beginner so not 100% sure about this, but it seems to be missing the character ฉ (THAI CHARACTER CHO CHING). Is that a bug? An input method should have all the characters in the alphabet, no?

When you do `describe-input-method` it shows you a keyboard, like this:

+----------------------------------------------------------------+
 | = + | ๒ " | ๓ / | ๔ , | ๕ ? | ู ุ | ๗ _ | ๘ . | ๙ ( | ๐ ) | ๑ - | ๖ % | ฃ ฅ |
+----------------------------------------------------------------+
   | ็ ๊ | ต ฤ | ย ๆ | อ ญ | ร ษ | ่ ึ | ด ฝ | ม ซ | ว ถ | แ ฒ | ใ ฯ | ฒ ฦ |
  +------------------------------------------------------------+
    | ้ ๋ | ท ธ | ง ำ | ก ณ | ั ์ | ี ื | า ผ | น ช | เ โ | ไ ฆ | ข ฑ | ฺ ํ |
   +-----------------------------------------------------------+
      | บ ฎ | ป ฎ | ล ฐ | ห ภ | ิ ั | ค ศ | ส ฮ | ะ ฟ | จ ฒ | พ ฬ |
     +-------------------------------------------------+

The character is not there. There may be more missing characters. This is just the first one I hit as I’m working through the alphabet. 

Rob

In GNU Emacs 30.0.50 (build 1, x86_64-apple-darwin18.7.0, NS
 appkit-1671.60 Version 10.14.6 (Build 18G9323)) of 2023-06-26 built on
 builder10-14.lan
Windowing system distributor 'Apple', version 10.3.2575
System Description:  macOS 15.4.1

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules --with-x-toolkit=no'

Configured features:
ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER
PNG RSVG THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Org

Minor modes in effect:
  shell-dirtrack-mode: t
  org-bullets-mode: t
  org-indent-mode: t
  org-roam-db-autosync-mode: t
  ivy-mode: t
  desktop-save-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  visual-line-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/Users/rob/.emacs.d/elpa/emacsql-sqlite-module-20240415.1535/emacsql-sqlite-module hides /Users/rob/.emacs.d/elpa/emacsql-20240415.1535/emacsql-sqlite-module
/Users/rob/.emacs.d/elpa/transient-20230315.1520/transient hides /Applications/Emacs.app/Contents/Resources/lisp/transient

Features:
(shadow sort emacsbug hangul hanja-util descr-text crm face-remap
help-fns radix-tree thai-util thai-word cus-start quail misearch
multi-isearch mail-extr ffap tramp tramp-loaddefs trampver
tramp-integration files-x tramp-compat shell macrostep-c cmacexp
macrostep octave sh-script smie executable js c-ts-common imenu
slime-autodoc slime-parse cmake-mode rst python treesit nroff-mode
rust-utils rust-mode rust-rustfmt rust-playpen rust-compile rust-cargo
sql view conf-mode swift-mode swift-mode-imenu swift-mode-repl
swift-mode-beginning-of-defun swift-mode-font-lock
swift-mode-standard-types swift-mode-indent swift-mode-lexer
markdown-mode yasnippet cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs rng-xsd xsd-regexp
rng-cmpct rng-nxml rng-valid nxml-mode nxml-outln nxml-rap sgml-mode
facemenu logview datetime vc-git diff-mode vc-dispatcher dired-aux
org-bullets org-indent oc-basic ol-eww eww url-queue mm-url ol-rmail
ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view
mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg
dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap
nnmail mail-source utf7 nnoo parse-time gnus-spec gnus-int gnus-range
message sendmail yank-media rfc822 mml mml-sec epa derived epg rfc6068
epg-config mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader
gnus-win gnus nnheader gnus-util mail-utils range ol-docview doc-view
filenotify jka-compr image-mode exif dired dired-loaddefs ol-bibtex
bibtex iso8601 ol-bbdb ol-w3m ol-doi org-link-doi org-roam-migrate
org-roam-log org-roam-mode org-roam-capture org-roam-id org-roam-node
org-roam-db emacsql-sqlite-builtin sqlite org-roam-utils org-roam-compat
org-roam org-capture emacsql-sqlite emacsql-sqlite-common emacsql
emacsql-compiler magit-section compat dash org-download org-attach
url-http url-auth mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums
mail-prsvr url-gw nsm puny async org-extra-emphasis pcase htmlfontify
cus-edit cus-load wid-edit ox-odt rng-loc rng-uri rng-parse rng-match
rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util
ox-latex ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox
org-element org-persist xdg org-id org-refile avl-tree org ob ob-tangle
ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete
pcomplete org-list org-footnote org-faces org-entities time-date
ob-emacs-lisp ob-core ob-eval org-cycle org-table ol rx org-fold
org-fold-core org-keys oc org-loaddefs find-func cal-menu calendar
cal-loaddefs org-version org-compat org-macs format-spec slime
easy-mmode apropos compile text-property-search etags fileloop generator
xref project arc-mode archive-mode noutline outline icons pp comint
ansi-osc ansi-color hyperspec thingatpt extmap bindat cap-words
superword subword ivy delsel ring ivy-faces ivy-overlay colir color
cl-extra help-mode use-package-ensure use-package-core desktop frameset
dap-mode-autoloads bui-autoloads emacsql-sqlite-module-autoloads
idris-mode-autoloads leaf-autoloads logview-autoloads datetime-autoloads
extmap-autoloads lsp-docker-autoloads lsp-ivy-autoloads
lsp-treemacs-autoloads lsp-ui-autoloads lsp-mode-autoloads f-autoloads
magit-autoloads git-commit-autoloads markdown-mode-autoloads
ob-async-autoloads org-drill-autoloads org-roam-autoloads
magit-section-autoloads emacsql-autoloads persist-autoloads
prop-menu-autoloads racket-mode-autoloads realgud-recursive-autoloads
rust-mode-autoloads slime-autoloads macrostep-autoloads
sqlite3-autoloads transient-autoloads treemacs-autoloads cfrs-autoloads
posframe-autoloads ht-autoloads hydra-autoloads lv-autoloads
pfuture-autoloads ace-window-autoloads avy-autoloads s-autoloads
dash-autoloads with-editor-autoloads info compat-autoloads
yaml-autoloads yaml-mode-autoloads package browse-url url url-proxy
url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads kqueue cocoa ns multi-tty
make-network-process emacs)

Memory information:
((conses 16 1463213 243662) (symbols 48 75269 19)
 (strings 32 268863 26350) (string-bytes 1 8738716)
 (vectors 16 107845) (vector-slots 8 2757941 118017)
 (floats 8 576 1947) (intervals 56 95729 650) (buffers 984 828))