เชฒเชฟเชจเช•เซเชธ เชฎเชพเชŸเซ‡ เชชเซเชจเซเชŸเซ‹ เชธเซเชตเชฟเชšเชฐเชจเซเช‚ เชจเชตเซเช‚ เชเชจเชพเชฒเซ‹เช—: xswitcher

xneur เชธเชชเซ‹เชฐเซเชŸเชจเชพ เช…เช‚เชคเชฅเซ€ เชฎเชจเซ‡ เช›เซ‡เชฒเซเชฒเชพ เช› เชฎเชนเชฟเชจเชพเชฎเชพเช‚ เชฅเซ‹เชกเซ€ เชคเช•เชฒเซ€เชซ เชชเชกเซ€ เช›เซ‡. (เชฎเชพเชฐเชพ เชกเซ‡เชธเซเช•เชŸเซ‹เชชเซเชธ เชชเชฐ OpenSUSE 15.1 เชจเชพ เช†เช—เชฎเชจ เชธเชพเชฅเซ‡: xneur เชธเช•เซเชทเชฎ เชธเชพเชฅเซ‡, เชตเชฟเชจเซเชกเซ‹เช เชซเซ‹เช•เชธ เช—เซเชฎเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ€เชฌเซ‹เชฐเซเชก เช‡เชจเชชเซเชŸ เชธเชพเชฅเซ‡ เชธเชฎเชฏเชธเชฐ เชซเชจเซ€ เชซเซเชฒเชฟเช•เชฐ).

"เช“เชน, เชคเซ‡ เช–เชฐเซ‡เช–เชฐ, เชฎเซ‡เช‚ เชซเชฐเซ€เชฅเซ€ เช–เซ‹เชŸเชพ เชฒเซ‡เช†เช‰เชŸเชฎเชพเช‚ เชŸเชพเช‡เชช เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚" - เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เช† เช…เชถเชฟเชทเซเชŸ เชฐเซ€เชคเซ‡ เชตเชพเชฐเช‚เชตเชพเชฐ เชฅเชพเชฏ เช›เซ‡. เช…เชจเซ‡ เชคเซ‡ เช•เช‚เชˆเชชเชฃ เชธเช•เชพเชฐเชพเชคเซเชฎเช• เช‰เชฎเซ‡เชฐเชคเซเช‚ เชจเชฅเซ€.

เชฒเชฟเชจเช•เซเชธ เชฎเชพเชŸเซ‡ เชชเซเชจเซเชŸเซ‹ เชธเซเชตเชฟเชšเชฐเชจเซเช‚ เชจเชตเซเช‚ เชเชจเชพเชฒเซ‹เช—: xswitcher
เชคเซ‡ เชœ เชธเชฎเชฏเซ‡, เชนเซเช‚ (เชกเชฟเชเชพเช‡เชจ เชเชจเซเชœเชฟเชจเชฟเชฏเชฐ เชคเชฐเซ€เช•เซ‡) เชฎเชจเซ‡ เชœเซ‡ เชœเซ‹เชˆเช เช›เซ‡ เชคเซ‡ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เช˜เชกเซ€ เชถเช•เซเช‚ เช›เซเช‚. เชชเชฐเช‚เชคเซ เชนเซเช‚ เช‡เชšเซเช›เชคเซ‹ เชนเชคเซ‹ (เชชเชนเซ‡เชฒเชพ เชชเซเชจเซเชŸเซ‹ เชธเซเชตเชฟเชšเชฐเชฅเซ€, เช…เชจเซ‡ เชชเช›เซ€, เชตเชฟเชจเซเชกเซ‹เช เชตเชฟเชธเซเชŸเชพเชจเซ‹ เช†เชญเชพเชฐ, เช›เซ‡เชฒเซเชฒเซ‡ xneurเชฎเชพเช‚เชฅเซ€ Linux เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ€เชจเซ‡) เชฌเชฐเชพเชฌเชฐ เชเช• เชตเชธเซเชคเซ. เชธเซเช•เซเชฐเซ€เชจ เชชเชฐเชจเซ‹ เช•เชšเชฐเซ‹ เช–เซ‹เชŸเชพ เชฒเซ‡เช†เช‰เชŸเชฎเชพเช‚ เช›เซ‡ เชคเซ‡ เชธเชฎเชœเซเชฏเชพ เชชเช›เซ€ (เช† เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชจเชตเซ‹ เชถเชฌเซเชฆ เชฒเช–เชตเชพเชจเชพ เช…เช‚เชคเซ‡ เชฅเชพเชฏ เช›เซ‡), โ€œเชฅเซ‹เชญเซ‹/เชฌเซเชฐเซ‡เช•โ€ เชชเชฐ เชธเซเชŸเซ‹เชฎเซเชช เช•เชฐเซ‹. เช…เชจเซ‡ เชคเชฎเซ‡ เชœเซ‡ เช›เชพเชชเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เชฎเซ‡เชณเชตเซ‹.

เช† เช•เซเชทเชฃเซ‡, เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชถเซเชฐเซ‡เชทเซเช  (เชฎเชพเชฐเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€) เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ/เชœเชŸเชฟเชฒเชคเชพ เช—เซเชฃเซ‹เชคเซเชคเชฐ เช›เซ‡. เชถเซ‡เชฐ เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชฏ เช›เซ‡.

TL.DR

เชชเช›เซ€เชฅเซ€ เชคเชฎเชพเชฎ เชชเซเชฐเช•เชพเชฐเชจเซ€ เชคเช•เชจเซ€เช•เซ€ เชตเชฟเช—เชคเซ‹ เชนเชถเซ‡, เชคเซ‡เชฅเซ€ เชชเซเชฐเชฅเชฎ - เชฒเชฟเช‚เช• "เชธเซเชชเชฐเซเชถ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡" เช…เชงเซ€เชฐเชพ เชฎเชพเชŸเซ‡.

เชนเชพเชฒเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชตเชฐเซเชคเชฃเซ‚เช• เชนเชพเชฐเซเชกเช•เซ‹เชกเซ‡เชก เช›เซ‡:

  • โ€œเชฅเซ‹เชญเซ‹/เชฌเซเชฐเซ‡เช•โ€: เช›เซ‡เชฒเซเชฒเชพ เชถเชฌเซเชฆเชจเซ‡ เชฌเซ‡เช•เชธเซเชชเซ‡เชธ เช•เชฐเซ‡ เช›เซ‡, เชธเช•เซเชฐเชฟเชฏ เชตเชฟเชจเซเชกเซ‹เชฎเชพเช‚ เชฒเซ‡เช†เช‰เชŸเชจเซ‡ เชธเซเชตเชฟเชš เช•เชฐเซ‡ เช›เซ‡ (0 เช…เชจเซ‡ 1 เชตเชšเซเชšเซ‡) เช…เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชกเชพเชฏเชฒ เช•เชฐเซ‡ เช›เซ‡.
  • "เช•เช‚เชˆเชชเชฃ เชตเช—เชฐ เชกเชพเชฌเซเช‚ Ctrl": เชธเช•เซเชฐเชฟเชฏ เชตเชฟเช‚เชกเซ‹เชฎเชพเช‚ เชฒเซ‡เช†เช‰เชŸเชจเซ‡ เชธเซเชตเชฟเชš เช•เชฐเซ‡ เช›เซ‡ (0 เช…เชจเซ‡ 1 เชตเชšเซเชšเซ‡).
  • โ€œเช•เช‚เชˆเชชเชฃ เชตเชฟเชจเชพ เชกเชพเชฌเซ€ เชถเชฟเชซเซเชŸโ€: เชธเช•เซเชฐเชฟเชฏ เชตเชฟเช‚เชกเซ‹เชฎเชพเช‚ เชฒเซ‡เช†เช‰เชŸ เชจเช‚เชฌเชฐ 0 เชšเชพเชฒเซ เช•เชฐเซ‡ เช›เซ‡.
  • โ€œเช•เช‚เชˆเชชเชฃ เชตเชฟเชจเชพ เชœเชฎเชฃเซ€ เชฌเชพเชœเซเชจเซ€ เชถเชฟเชซเซเชŸโ€: เชธเช•เซเชฐเชฟเชฏ เชตเชฟเช‚เชกเซ‹เชฎเชพเช‚ เชฒเซ‡เช†เช‰เชŸ เชจเช‚เชฌเชฐ 1 เชšเชพเชฒเซ เช•เชฐเซ‡ เช›เซ‡.

เชนเชตเซ‡เชฅเซ€ เชนเซเช‚ เชตเชฐเซเชคเชจเชจเซ‡ เช•เชธเซเชŸเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ€ เชฏเซ‹เชœเชจเชพ เช˜เชกเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚. เชชเซเชฐเชคเชฟเชธเชพเชฆ เชตเชฟเชจเชพ, เชคเซ‡ เชฐเชธเชชเซเชฐเชฆ เชจเชฅเซ€ (เชนเซเช‚ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช เซ€เช• เช›เซเช‚). เชนเซเช‚ เชฎเชพเชจเซเช‚ เช›เซเช‚ เช•เซ‡ เชนเซ‡เชฌเซเชฐเซ‡ เชชเชฐ เชธเชฎเชพเชจ เชธเชฎเชธเซเชฏเชพเช“เชตเชพเชณเชพ เชชเซเชฐเซ‡เช•เซเชทเช•เซ‹เชจเซ€ เชชเซ‚เชฐเชคเซ€ เชŸเช•เชพเชตเชพเชฐเซ€ เชนเชถเซ‡.

เชจเซ‹ เช•เชพเชฐเชฃ เช•เซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚, เช•เซ€เชฒเซ‹เช—เชฐ "/dev/input/" เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡, xswitcher เชฐเซเชŸ เช…เชงเชฟเช•เชพเชฐเซ‹ เชธเชพเชฅเซ‡ เชถเชฐเซ‚ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡:

chown root:root xswitcher
chmod +xs xswitcher

เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชง เช•เชฐเซ‹: suid เชธเชพเชฅเซ‡ เชซเชพเช‡เชฒเชจเซ‹ เชฎเชพเชฒเชฟเช• เชฐเซ‚เชŸ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช, เช•เชพเชฐเชฃ เช•เซ‡ เชœเซ‡ เชชเชฃ เชฎเชพเชฒเชฟเช• เชนเชถเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชชเชฐ เชธเซเชฏเซเชกเชฎเชพเช‚ เชซเซ‡เชฐเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชชเซ‡เชฐเชพเชจเซ‹เช‡เชกเซเชธ (เชนเซเช‚ เช•เซ‹เชˆ เช…เชชเชตเชพเชฆ เชจเชฅเซ€) เชฎเชพเช‚เชฅเซ€ เช•เซเชฒเซ‹เชจ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เชœเซ€เช†เช‡เชŸเซ€ เช…เชจเซ‡ เชธเชพเช‡เชŸ เชชเชฐ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ‹. เชคเซ‡ เชœเซ‡เชตเซ€:

go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"

### X11 headers for OpenSUSE/deb-based
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev

cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go

เชธเซเชตเชพเชฆ เชฎเชพเชŸเซ‡ เช‘เชŸเซ‹เชธเซเชŸเชพเชฐเซเชŸ เช‰เชฎเซ‡เชฐเซ‹ (DE เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡).

เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, "เชชเซ‹เชฐเซ€เชœ เชฎเชพเชŸเซ‡ เชชเซ‚เช›เชคเซเช‚ เชจเชฅเซ€" (โ‰ˆ30 เชธเซ‡เช•เชจเซเชก CPU เชชเซเชฐเชคเชฟ เชฆเชฟเชตเชธ, RSS เชฎเชพเช‚ โ‰ˆ12 MB).

เชตเชฟเช—เชคเซ‹ เชœเซเช“

เชนเชตเซ‡ - เชตเชฟเช—เชคเซ‹.

เช†เช–เซเช‚ เชญเช‚เชกเชพเชฐ เชฎเซ‚เชณเชฐเซ‚เชชเซ‡ เชฎเชพเชฐเชพ เชชเชพเชฒเชคเซ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เชนเชคเซเช‚, เช…เชจเซ‡ เชนเซเช‚ เชฌเซ€เชœเซ‹ เชเช• เชถเชฐเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช–เซ‚เชฌ เช†เชณเชธเซ เช›เซเช‚. เชคเซ‡เชฅเซ€, เชฆเชฐเซ‡เช• เชตเชธเซเชคเซเชจเซ‹ เชขเช—เชฒเซ‹ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชซเช•เซเชค เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚) เช…เชจเซ‡ AGPL ("เชฐเชฟเชตเชฐเซเชธ เชชเซ‡เชŸเชจเซเชŸ") เชฆเซเชตเชพเชฐเชพ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

xswitcher เช•เซ‹เชก เช—เซ‹เชฒเชพเช‚เช—เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒเซ‹ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ C เชจเชพ เชจเซเชฏเซ‚เชจเชคเชฎ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชเชตเซเช‚ เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เช† เช…เชญเชฟเช—เชฎ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชชเซเชฐเชฏเชคเซเชจเซ‹เชฎเชพเช‚ เชชเชฐเชฟเชฃเชฎเชถเซ‡ (เช…เชคเซเชฏเชพเชฐ เชธเซเชงเซ€ เชคเซ‡ เช›เซ‡). cgo เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชœเซ‡ เช–เซ‚เชŸเซ‡ เช›เซ‡ เชคเซ‡เชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชœเชพเชณเชตเซ€ เชฐเชพเช–เชคเซ€ เชตเช–เชคเซ‡.

เชŸเซ‡เช•เซเชธเซเชŸเชฎเชพเช‚ เชคเซ‡ เช•เซเชฏเชพเช‚เชฅเซ€ เช…เชจเซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ เชคเซ‡เชจเชพ เชชเชฐ เชŸเชฟเชชเซเชชเชฃเซ€เช“ เช›เซ‡. เช•เชพเชฐเชฃ เช•เซ‡ xneur เช•เซ‹เชก "เชฎเชจเซ‡ เชชเซเชฐเซ‡เชฐเชฃเชพ เช†เชชเชคเซ‹ เชจเชฅเซ€", เชฎเซ‡เช‚ เชคเซ‡เชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฌเชฟเช‚เชฆเซ เชคเชฐเซ€เช•เซ‡ เชฒเซ€เชงเซ‹ เชฒเซ‹เชฒเซ‹เชธเซเชตเชฟเชšเชฐ.

"/dev/input/" เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฅเซ€ เชคเซ‡เชจเชพ เชฌเช‚เชจเซ‡ เชซเชพเชฏเชฆเชพ เช›เซ‡ (เชฌเชงเซเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡, เชฆเชฌเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชธเซเชตเชคเชƒ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เซ€ เชธเชนเชฟเชค) เช…เชจเซ‡ เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ. เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ เช›เซ‡:

  • เชธเซเชตเชคเชƒ-เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ (เช•เซ‹เชก โ€œ2โ€ เชธเชพเชฅเซ‡เชจเซ€ เช˜เชŸเชจเชพเช“) x เชธเชพเชฅเซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชจเชฅเซ€.
  • X11 เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชฎเชพเชฐเชซเชคเซ‡ เช‡เชจเชชเซเชŸ เชฆเซƒเชถเซเชฏเชฎเชพเชจ เชจเชฅเซ€ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, VNC เช† เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡).
  • เชฐเซเชŸเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชฌเซ€เชœเซ€ เชฌเชพเชœเซ, "XSelectExtensionEvent()" เชฆเซเชตเชพเชฐเชพ X เช‡เชตเซ‡เชจเซเชŸเซเชธเชฎเชพเช‚ เชธเชฌเซเชธเซเช•เซเชฐเชพเช‡เชฌ เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡. เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ xinput เช•เซ‹เชก. เชœเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชจเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆ เชฎเชณเซเชฏเซเช‚ เชจเชฅเซ€, เช…เชจเซ‡ เชฐเชซ เช…เชฎเชฒเซ€เช•เชฐเชฃเชฎเชพเช‚ เชคเชฐเชค เชœ C เช•เซ‹เชกเชจเซ€ เชธเซ‹ เชฒเชพเช‡เชจ เชฒเชพเช—เซ€. เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชฌเชพเชœเซ เชชเชฐ เชฐเชพเช–เซ‹.

"เชฐเชฟเชตเชฐเซเชธ" เช†เช‰เชŸเชชเซเชŸ เชนเชพเชฒเชฎเชพเช‚ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เช•เซ€เชฌเซ‹เชฐเซเชกเชจเซ‡ เชธเซเช•เซเชฐเซ‚ เช•เชฐเซ€เชจเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. keybd_event เชจเชพ เชฒเซ‡เช–เช•เชจเซ‹ เช†เชญเชพเชฐ, เชชเชฐเช‚เชคเซ เชเชฌเซเชธเซเชŸเซเชฐเซ‡เช•เซเชถเชจ เช–เซ‚เชฌ เชœ เช‰เชšเซเชš เชธเซเชคเชฐเชจเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช†เช—เชณ เชซเชฐเซ€เชฅเซ€ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชนเซเช‚ 3เชœเซ€ เชชเช‚เช•เซเชคเชฟ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฎเชฃเซ€ เชตเชฟเชจ เช•เซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚. เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชกเชพเชฌเซ€ เชตเชฟเชจ เชชเชพเช›เซ€ เชชเซเชฐเชธเชพเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡.

เชœเชพเชฃเซ€เชคเชพ เชฌเช—เซเชธ

  • เช…เชฎเซ‡ "เชธเช‚เชฏเซเช•เซเชค" เช‡เชจเชชเซเชŸ เชตเชฟเชถเซ‡ เช•เช‚เชˆเชชเชฃ เชœเชพเชฃเชคเชพ เชจเชฅเซ€ (เช‰เชฆเชพเชนเชฐเชฃ: ยฝ). เช…เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.
  • เช…เชฎเซ‡ เชธเชพเชšเซ€ เชœเซ€เชค เช–เซ‹เชŸเซ€ เชฐเซ€เชคเซ‡ เชฐเชฎเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช. เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเซ‡ เชญเชพเชฐเชจเซ‡ เชคเซ‹เชกเซ‡ เช›เซ‡.
  • เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชธเซเชชเชทเซเชŸ เช‡เชจเชชเซเชŸ เชชเชฆเชšเซเช›เซ‡เชฆเชจ เชจเชฅเซ€. เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เชคเซเชฏเชพเช‚ เช˜เชฃเชพ เช•เชพเชฐเซเชฏเซ‹ เช›เซ‡: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). ะกะฟะฐัะธะฑะพ nsmcan เชคเชฎเชพเชฐเซ€ เชธเช‚เชญเชพเชณ เชฎเชพเชŸเซ‡: เชคเซ‡เชจเซ‡ เช•เซ‹เชกเชฎเชพเช‚ เช…เชจเซ‡ เช…เชนเซ€เช‚ เชธเซเชงเชพเชฐเซ‡เชฒ เช›เซ‡. เชšเซ‹เช•เซเช•เชธ เชธเช‚เชญเชพเชตเชจเชพ เชธเชพเชฅเซ‡, เชฌเชฆเชฒเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชคเชฎเซ‡ เชญเซ‚เชฒเซ‹ เชชเช•เชกเซ€ เชถเช•เซ‹ เช›เซ‹.
    เช† เชฌเชฟเช‚เชฆเซเช เชนเซเช‚ "เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡" เชœเชพเชฃเชคเซ‹ เชจเชฅเซ€ เช…เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเซ‚เชšเชจเซ‹เชจเซเช‚ เชธเซเชตเชพเช—เชค เช•เชฐเซ€เชถ.
  • (เช“เชน เชญเช—เชตเชพเชจ) เชšเซ‡เชจเชฒเซ‹เชจเซ‹ เชธเซเชชเชฐเซเชงเชพเชคเซเชฎเช• เช‰เชชเชฏเซ‹เช— (เช•เซ€เชฌเซ‹เชฐเซเชก เชˆเชตเซ‡เชจเซเชŸเซเชธ, เชฎเชพเชˆเชธ เชˆเชตเซ‡เชจเซเชŸเซเชธ).

เชจเชฟเชทเซเช•เชฐเซเชท

เช•เซ‹เชก เชธเซŒเชฅเซ€ เชธเชฐเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช—เชค เช›เซ‡. เช…เชจเซ‡ เชฎเชพเชฐเชพ เชœเซ‡เชตเชพ เชฎเซ‚เชฐเซเช–. เชคเซ‡เชฅเซ€, เชนเซเช‚ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชเชตเซ€ เช†เชถเชพ เชธเชพเชฅเซ‡ เช–เซเชถ เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชฒเช—เชญเช— เช•เซ‹เชˆเชชเชฃ เชŸเซ‡เช•เชจเชฟเชถเชฟเชฏเชจ เชคเซ‡เชจเซ‡ เชœเซ‡ เชœเซ‹เชˆเช เช›เซ‡ เชคเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชนเชถเซ‡. เช…เชจเซ‡ เช†เชจเซ‹ เช†เชญเชพเชฐ, เช† เช‰เชคเซเชชเชพเชฆเชจ เชธเชชเซ‹เชฐเซเชŸ เชตเชฟเชจเชพ เชจเชพเชถ เชชเชพเชฎเชถเซ‡ เชจเชนเซ€เช‚, เชœเซ‡เชฎ เช•เซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เชฎเชœเชพ เชฎเชพเชŸเซ‡.

เชธเชพเชฐเชพ เชจเชธเซ€เชฌ!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹