Linux-เดจเตเดณเตเดณ Punto Switcher-เดจเตเดฑเต† เดชเตเดคเดฟเดฏ เด…เดจเดฒเต‹เด—เต: xswitcher

xneur เดชเดฟเดจเตเดคเตเดฃเดฏเตเดŸเต† เด…เดตเดธเดพเดจเด‚ เด•เดดเดฟเดžเตเดž เด†เดฑเต เดฎเดพเดธเดฎเดพเดฏเดฟ เดŽเดจเดฟเด•เตเด•เต เด•เตเดฑเดšเตเดšเต เด•เดทเตเดŸเดชเตเดชเดพเดŸเตเด•เตพ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟ. (เดŽเดจเตเดฑเต† เดกเต†เดธเตโ€Œเด•เตโ€ŒเดŸเต‹เดชเตเดชเตเด•เดณเดฟเตฝ OpenSUSE 15.1-เดจเตเดฑเต† เดตเดฐเดตเต‹เดŸเต†: xneur เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดฟเดฏเดพเตฝ, เดตเดฟเตปเดกเต‹เด•เตพ เดซเต‹เด•เตเด•เดธเต เดจเดทเตโ€ŒเดŸเดชเตเดชเต†เดŸเตเด•เดฏเตเด‚ เด•เต€เดฌเต‹เตผเดกเต เด‡เตปเดชเตเดŸเตเดŸเดฟเดจเตŠเดชเตเดชเด‚ เดธเดฎเดฏเด‚ เดฐเดธเด•เดฐเดฎเดพเดตเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต).

โ€œเด“, เดจเดพเดถเด‚, เดžเดพเตป เดตเต€เดฃเตเดŸเตเด‚ เดคเต†เดฑเตเดฑเดพเดฏ เดฒเต‡เด”เดŸเตเดŸเดฟเตฝ เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เดฟโ€ - เดŽเดจเตเดฑเต† เดœเต‹เดฒเดฟเดฏเดฟเตฝ เด‡เดคเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด…เดธเดญเตเดฏเดฎเดพเดฏเดฟ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดคเต เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เด’เดจเตเดจเตเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.

Linux-เดจเตเดณเตเดณ Punto Switcher-เดจเตเดฑเต† เดชเตเดคเดฟเดฏ เด…เดจเดฒเต‹เด—เต: xswitcher
เด…เดคเต‡ เดธเดฎเดฏเด‚, เดŽเดจเดฟเด•เตเด•เต (เด’เดฐเต เดกเดฟเดธเตˆเตป เดŽเดžเตเดšเดฟเดจเต€เดฏเตผ เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ) เดŽเดจเดฟเด•เตเด•เต เดตเต‡เดฃเตเดŸเดคเต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดฐเต‚เดชเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚. เดชเด•เตเดทเต† เดŽเดจเดฟเด•เตเด•เต เดตเต‡เดฃเตเดŸเดคเต (เด†เดฆเตเดฏเด‚ Punto Switcher-เตฝ เดจเดฟเดจเตเดจเต, เดคเตเดŸเตผเดจเตเดจเต, Windows Vista-เดฏเตเด•เตเด•เต เดจเดจเตเดฆเดฟ, เด’เดŸเตเดตเดฟเตฝ xneur-เตฝ เดจเดฟเดจเตเดจเต Linux-เดฒเต‡เด•เตเด•เต เดฎเดพเดฑเดฟ) เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เด’เดฐเต เด•เดพเดฐเตเดฏเด‚. เดธเตโ€Œเด•เตเดฐเต€เดจเดฟเดฒเต† เดšเดชเตเดชเตเดšเดตเดฑเตเด•เตพ เดคเต†เดฑเตเดฑเดพเดฏ เดฒเต‡เด”เดŸเตเดŸเดฟเดฒเดพเดฃเต†เดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดฟเดฏ เดถเต‡เดทเด‚ (เด’เดฐเต เดชเตเดคเดฟเดฏ เดตเดพเด•เตเด•เต เดŸเตˆเดชเตเดชเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเดคเตเดคเดฟเดฒเดพเดฃเต เด‡เดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต), โ€œเดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเตเด•/เดฌเตเดฐเต‡เด•เตเด•เตโ€ เดšเต†เดฏเตเดฏเตเด•. เดจเดฟเด™เตเด™เตพ เด…เดšเตเดšเดŸเดฟเดšเตเดšเดคเต เดจเต‡เดŸเตเด•.

เด‡เดชเตเดชเต‹เตพ, เด‰เตฝเดชเตเดชเดจเตเดจเดคเตเดคเดฟเดจเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตฝ (เดŽเดจเตเดฑเต† เด•เดพเดดเตเดšเดชเตเดชเดพเดŸเดฟเตฝ) เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค/เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เด…เดจเตเดชเดพเดคเดฎเตเดฃเตเดŸเต. เดชเด™เตเด•เดฟเดŸเดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต.

เดŸเดฟ.เดŽเตฝ.เดกเดฟ.เด†เตผ

เดŽเดฒเตเดฒเดพเดคเตเดคเดฐเด‚ เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เดณเตเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เด‰เดฃเตเดŸเดพเด•เตเด‚, เด…เดคเดฟเดจเดพเตฝ เด†เดฆเตเดฏเด‚ - "เดธเตเดชเตผเดถเดฟเด•เตเด•เดพเตป" เดฒเดฟเด™เตเด•เต เด…เด•เตเดทเดฎเตผเด•เตเด•เต.

เดจเดฟเดฒเดตเดฟเตฝ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเตเดตเดญเดพเดตเด‚ เดนเดพเตผเดกเตโ€Œเด•เต‹เดกเต เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

  • "เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเตเด•/เดฌเตเดฐเต‡เด•เตเด•เต": เด…เดตเดธเดพเดจ เดตเดพเด•เตเด•เต เดฌเดพเด•เตเด•เตโ€Œเดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดธเดœเต€เดต เดตเดฟเตปเดกเต‹เดฏเดฟเตฝ เดฒเต‡เด”เดŸเตเดŸเต เดธเตเดตเดฟเดšเตเดšเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต (0 เดจเตเด‚ 1 เดจเตเด‚ เด‡เดŸเดฏเดฟเตฝ) เดตเต€เดฃเตเดŸเตเด‚ เดกเดฏเตฝ เดšเต†เดฏเตเดฏเตเด•.
  • "เด’เดจเตเดจเตเด‚ เด‡เดฒเตเดฒเดพเดคเต† Ctrl เด‡เดŸเดคเต": เดธเดœเต€เดต เดตเดฟเตปเดกเต‹เดฏเดฟเตฝ เดฒเต‡เด”เดŸเตเดŸเต เดฎเดพเดฑเตเดฑเตเดจเตเดจเต (0 เดจเตเด‚ 1 เดจเตเด‚ เด‡เดŸเดฏเดฟเตฝ).
  • "เด’เดจเตเดจเตเด‚ เด‡เดฒเตเดฒเดพเดคเต† เด‡เดŸเดคเต เดทเดฟเดซเตเดฑเตเดฑเต": เดธเดœเต€เดต เดตเดฟเตปเดกเต‹เดฏเดฟเตฝ เดฒเต‡เด”เดŸเตเดŸเต เดจเดฎเตเดชเตผ 0 เด“เดฃเดพเด•เตเด•เตเดจเตเดจเต.
  • "เด’เดจเตเดจเตเด‚ เด‡เดฒเตเดฒเดพเดคเต† เดตเดฒเดคเต เดทเดฟเดซเตเดฑเตเดฑเต": เดธเดœเต€เดต เดตเดฟเตปเดกเต‹เดฏเดฟเตฝ เดฒเต‡เด”เดŸเตเดŸเต เดจเดฎเตเดชเตผ 1 เด“เดฃเดพเด•เตเด•เตเดจเตเดจเต.

เด‡เดชเตเดชเต‹เตพ เดฎเตเดคเตฝ เดชเต†เดฐเตเดฎเดพเดฑเตเดฑเด‚ เด‡เดทเตเดŸเดพเดจเตเดธเตƒเดคเดฎเดพเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เดซเต€เดกเตเดฌเดพเด•เตเด•เต เด‡เดฒเตเดฒเดพเดคเต†, เด‡เดคเต เดฐเดธเด•เดฐเดฎเดฒเตเดฒ (เดŽเดจเดฟเด•เตเด•เต เดŽเดจเตเดคเดพเดฏเดพเดฒเตเด‚ เดธเตเด–เดฎเดพเดฃเต). เดนเดพเดฌเตเดฐเต†เดฏเดฟเตฝ เดธเดฎเดพเดจเดฎเดพเดฏ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตเดณเตเดณ เดชเตเดฐเต‡เด•เตเดทเด•เดฐเดฟเตฝ เดฎเดคเดฟเดฏเดพเดฏ เดถเดคเดฎเดพเดจเด‚ เด‰เดฃเตเดŸเดพเด•เตเดฎเต†เดจเตเดจเต เดžเดพเตป เดตเดฟเดถเตเดตเดธเดฟเด•เตเด•เตเดจเตเดจเต.

NB เด•เดพเดฐเดฃเด‚ เดจเดฟเดฒเดตเดฟเดฒเต† เดชเดคเดฟเดชเตเดชเดฟเตฝ, "/dev/input/" เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เด•เต€เดฒเต‹เด—เตผ เด˜เดŸเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฑเต‚เดŸเตเดŸเต เด…เดตเด•เดพเดถเด™เตเด™เดณเต‹เดŸเต† xswitcher เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเดฃเด‚:

chown root:root xswitcher
chmod +xs xswitcher

เดฆเดฏเดตเดพเดฏเดฟ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•: suid เด‰เดณเตเดณ เดซเดฏเดฒเดฟเดจเตเดฑเต† เด‰เดŸเดฎ เดฑเต‚เดŸเตเดŸเต เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด•เดพเดฐเดฃเด‚ เด‰เดŸเดฎ เด†เดฐเดพเดฏเดพเดฒเตเด‚, เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเดชเตเดชเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เดฏเดพเตพ เด†เดคเตเดฎเดนเดคเตเดฏ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚.

เดชเดฐเดจเต‹เดฏเดฟเดกเตเด•เตพเด•เตเด•เต (เดžเดพเดจเตเด‚ เด’เดฐเต เด…เดชเดตเดพเดฆเดฎเดฒเตเดฒ) เดจเดฟเดจเตเดจเต เด•เตเดฒเต‹เตบ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚ GIT เดธเตˆเดฑเตเดฑเดฟเตฝ เด…เดธเด‚เดฌเดฟเตพ เดšเต†เดฏเตเดฏเตเด•. เด…เดคเต เดชเต‡เดพเดฒเต†:

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 เด•เต‹เดกเต golang-เตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, C เดฏเตเดŸเต† เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด•เตพ. เดˆ เดธเดฎเต€เดชเดจเด‚ เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดชเดฐเดฟเดถเตเดฐเดฎเดคเตเดคเดฟเดจเต เด•เดพเดฐเดฃเดฎเดพเด•เตเดฎเต†เดจเตเดจเต เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต (เด‡เดคเตเดตเดฐเต† เด…เดคเต เด‰เดฃเตเดŸเต). Cgo เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดทเตโ€ŒเดŸเดฎเดพเดฏเดคเต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเดฎเตเดชเต‹เตพ.

เด…เดคเต เดŽเดตเดฟเดŸเต† เดจเดฟเดจเตเดจเดพเดฃเต เด•เดŸเดฎเต†เดŸเตเดคเตเดคเดคเต, เดŽเดจเตเดคเดฟเดจเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ เดตเดพเดšเด•เดคเตเดคเดฟเตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด•เดพเดฐเดฃเด‚ xneur เด•เต‹เดกเต "เดŽเดจเตเดจเต† เดชเตเดฐเดšเต‹เดฆเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฒเตเดฒ", เดžเดพเตป เด…เดคเต เด’เดฐเต เด†เดฐเด‚เดญ เดชเต‹เดฏเดฟเดจเตเดฑเดพเดฏเดฟ เดŽเดŸเตเดคเตเดคเต เดฒเต‹เดธเตเดตเดฟเดšเตเดšเตผ.

"/dev/input/" เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด…เดคเดฟเดจเตเดฑเต† เด—เตเดฃเด™เตเด™เดณเตเด‚ (เดŽเดฒเตเดฒเดพเด‚ เดฆเตƒเดถเตเดฏเดฎเดพเดฃเต, เด…เดฎเตผเดคเตเดคเดฟเดฏ เดฏเดพเดจเตเดคเตเดฐเดฟเด•-เด†เดตเตผเดคเตเดคเดจ เด•เต€ เด‰เตพเดชเตเดชเต†เดŸเต†) เดฆเต‹เดทเด™เตเด™เดณเตเด‚ เด‰เดฃเตเดŸเต. เดฆเต‹เดทเด™เตเด™เตพ เด‡เดตเดฏเดพเดฃเต:

  • เดฏเดพเดจเตเดคเตเดฐเดฟเด•-เด†เดตเตผเดคเตเดคเดจเด‚ ("2" เด•เต‹เดกเต เด‰เดณเตเดณ เด‡เดตเดจเตเดฑเตเด•เตพ) x เดฎเดพเดฏเดฟ เด†เดตเตผเดคเตเดคเดจเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฎเดฟเดฒเตเดฒ.
  • X11 เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เดณเดฟเดฒเต‚เดŸเต†เดฏเตเดณเตเดณ เด‡เตปเดชเตเดŸเตเดŸเต เดฆเตƒเดถเตเดฏเดฎเดฒเตเดฒ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต VNC เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เด™เตเด™เดจเต†เดฏเดพเดฃเต).
  • เดฑเต‚เดŸเตเดŸเต เดตเต‡เดฃเด‚.

เดฎเดฑเตเดตเดถเดคเตเดคเต, "XSelectExtensionEvent()" เดตเดดเดฟ X เด‡เดตเดจเตเดฑเตเด•เตพ เดธเดฌเตโ€Œเดธเตโ€Œเด•เตเดฐเตˆเดฌเต เดšเต†เดฏเตเดฏเดพเตป เดธเดพเดงเดฟเด•เตเด•เตเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดคเตเดคเดฟเดจเต‹เด•เตเด•เดพเด‚ xinput เด•เต‹เดกเต. เดชเต‹เด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดคเตเดชเต‹เดฒเตŠเดจเตเดจเต เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ, เดชเดฐเตเด•เตเด•เตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เด‰เดŸเตป เดคเดจเตเดจเต† เดธเดฟ เด•เต‹เดกเดฟเดจเตเดฑเต† เดจเต‚เดฑเต เดตเดฐเดฟเด•เตพ เดŽเดŸเตเดคเตเดคเต. เดคเตฝเด•เตเด•เดพเดฒเด‚ เด…เดคเต เดฎเดพเดฑเตเดฑเดฟเดตเต†เด•เตเด•เตเด•.

"เดฑเดฟเดตเต‡เดดเตเดธเต" เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดจเดฟเดฒเดตเดฟเตฝ เดตเต†เตผเดšเตเดตเตฝ เด•เต€เดฌเต‹เตผเดกเต เดธเตเด•เตเดฐเต‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†เดฏเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต. keybd_event-เดจเตเดฑเต† เดฐเดšเดฏเดฟเดคเดพเดตเดฟเดจเต เดจเดจเตเดฆเดฟ, เดชเด•เตเดทเต‡ เด…เดตเดฟเดŸเต†เดฏเตเดณเตเดณ เด…เดฎเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเด‚ เดตเดณเดฐเต† เด‰เดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเดฒเตเดณเตเดณเดคเดพเดฃเต, เด…เดคเต เดตเต€เดฃเตเดŸเตเด‚ เดตเต€เดฃเตเดŸเตเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดฟเดตเดฐเตเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เดตเดฐเดฟ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเตป เดžเดพเตป เดถเดฐเดฟเดฏเดพเดฏ เดตเดฟเตป เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดŸเดคเต เดตเดฟเตป เดฎเดพเดคเตเดฐเดฎเต‡ เดคเดฟเดฐเดฟเด•เต† เด•เตˆเดฎเดพเดฑเตเด•เดฏเตเดณเตเดณเต‚.

เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดฌเด—เตเด•เตพ

  • "เดธเด‚เดฏเต‹เดœเดฟเดค" เด‡เตปเดชเตเดŸเตเดŸเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเด™เตเด™เตพเด•เตเด•เต เด’เดจเตเดจเตเด‚ เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ (เด‰เดฆเดพเดนเดฐเดฃเด‚: ยฝ). เด‡เดชเตเดชเต‹เตพ เด…เดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.
  • เดžเด™เตเด™เตพ เดถเดฐเดฟเดฏเดพเดฏ เดตเดฟเตป เดคเต†เดฑเตเดฑเดพเดฏเดฟ เด•เดณเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต. เดŽเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด…เดคเต เดŠเดจเตเดจเตฝ เดคเด•เตผเด•เตเด•เตเดจเตเดจเต.
  • เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด‡เตปเดชเตเดŸเตเดŸเต เดชเดพเดดเตโ€Œเดธเดฟเด‚เด—เต เด‡เดฒเตเดฒ. เดชเด•เดฐเด‚, เดจเดฟเดฐเดตเดงเดฟ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เดณเตเดฃเตเดŸเต: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). ะกะฟะฐัะธะฑะพ nsmcan เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเดฐเดฟเดšเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ: เด•เต‹เดกเดฟเดฒเตเด‚ เด‡เดตเดฟเดŸเต†เดฏเตเด‚ เด…เดคเต เดถเดฐเดฟเดฏเดพเด•เตเด•เดฟ. เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดชเตเดฐเต‹เดฌเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฌเด—เตเด•เตพ เดชเดฟเดŸเดฟเด•เตเด•เดพเด‚.
    เดˆ เดธเดฎเดฏเดคเตเดคเต เดŽเดจเดฟเด•เตเด•เต "เดŽเด™เตเด™เดจเต†" เดŽเดจเตเดจเต เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ, เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดธเตเดตเดพเด—เดคเด‚ เดšเต†เดฏเตเดฏเตเด‚.
  • (เดฆเตˆเดตเดฎเต‡) เดšเดพเดจเดฒเตเด•เดณเตเดŸเต† เดฎเดคเตเดธเดฐเดพเดงเดฟเดทเตเด เดฟเดค เด‰เดชเดฏเต‹เด—เด‚ (เด•เต€เดฌเต‹เตผเดกเต เด‡เดตเดจเตเดฑเตเด•เตพ, เดฎเตˆเดธเต เด‡เดตเดจเตเดฑเตเด•เตพ).

เดคเต€เดฐเตเดฎเดพเดจเด‚

เด•เต‹เดกเต เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเดฎเดพเดฃเต. เดชเดฟเดจเตเดจเต† เดŽเดจเตเดจเต†เดชเตเดชเต‹เดฒเต† เดฎเดฃเตเดŸเดจเตเด‚. เด…เดคเดฟเดจเดพเตฝ, เดเดคเตŠเดฐเต เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเดฟเดฆเด—เตเดงเดจเตเด‚ เดคเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจ เดชเตเดฐเดคเต€เด•เตเดทเดฏเต‹เดŸเต† เดžเดพเตป เดธเตเดตเดฏเด‚ เด†เดนเตเดฒเดพเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเดฟเดจเต เดจเดจเตเดฆเดฟ, เดˆ เด‰เตฝเดชเตเดชเดจเตเดจเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเดฟเดฒเตเดฒเดพเดคเต† เดจเดถเดฟเด•เตเด•เดฟเดฒเตเดฒ, เดตเดฟเดจเต‹เดฆเดคเตเดคเดฟเดจเดพเดฏเดฟ เดฎเดพเดคเตเดฐเด‚.

เด—เตเดกเต เดฒเด•เตเด•เต!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•