linux కోసం Punto Switcher యొక్క కొత్త అనలాగ్: xswitcher

xneur మద్దతు ముగింపు గత ఆరు నెలలుగా నాకు కొంత బాధ కలిగించింది. (నా డెస్క్‌టాప్‌లపై OpenSUSE 15.1 రావడంతో: xneur ప్రారంభించబడితే, విండోస్ ఫోకస్ కోల్పోతాయి మరియు కీబోర్డ్ ఇన్‌పుట్‌తో సమయానికి ఫన్నీగా ఆడతాయి).

“ఓహ్, తిట్టు, నేను మళ్ళీ తప్పు లేఅవుట్‌లో టైప్ చేయడం ప్రారంభించాను” - నా పనిలో ఇది తరచుగా అసభ్యకరంగా జరుగుతుంది. మరియు ఇది ఏదైనా సానుకూలతను జోడించదు.

linux కోసం Punto Switcher యొక్క కొత్త అనలాగ్: xswitcher
అదే సమయంలో, నేను (డిజైన్ ఇంజనీర్‌గా) నాకు ఏమి కావాలో చాలా స్పష్టంగా రూపొందించగలను. కానీ నేను కోరుకున్నది (మొదట పుంటో స్విచ్చర్ నుండి, ఆపై, Windows Vistaకి ధన్యవాదాలు, చివరకు xneur నుండి Linuxకి మారడం) సరిగ్గా ఒక విషయం. స్క్రీన్‌పై ఉన్న చెత్త తప్పు లేఅవుట్‌లో ఉందని గ్రహించిన తర్వాత (ఇది సాధారణంగా కొత్త పదాన్ని టైప్ చేసే ముగింపులో జరుగుతుంది), “పాజ్/బ్రేక్”పై స్టాంప్ చేయండి. మరియు మీరు ముద్రించిన వాటిని పొందండి.

ప్రస్తుతానికి, ఉత్పత్తి సరైన (నా దృష్టికోణం నుండి) కార్యాచరణ/సంక్లిష్టత నిష్పత్తిని కలిగి ఉంది. ఇది భాగస్వామ్యం చేయడానికి సమయం.

TL.DR

తర్వాత అన్ని రకాల సాంకేతిక వివరాలు ఉంటాయి, కాబట్టి ముందుగా - లింక్ "తాకడానికి" అసహనం కోసం.

ప్రస్తుతం కింది ప్రవర్తన హార్డ్‌కోడ్ చేయబడింది:

  • “పాజ్/బ్రేక్”: చివరి పదాన్ని బ్యాక్‌స్పేస్ చేసి, సక్రియ విండోలో (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 కోడ్ గోలాంగ్‌లో వ్రాయబడింది, C యొక్క కనిష్ట చేరికలతో. ఈ విధానం తక్కువ మొత్తంలో కృషికి దారితీస్తుందని భావించబడుతుంది (ఇప్పటి వరకు ఇది ఉంది). cgoని ఉపయోగించి తప్పిపోయిన వాటిని కనెక్ట్ చేసే సామర్థ్యాన్ని కొనసాగిస్తూనే.

వచనం ఎక్కడ నుండి మరియు ఎందుకు అరువు తెచ్చుకుంది అనే దానిపై వ్యాఖ్యలను కలిగి ఉంది. ఎందుకంటే xneur కోడ్ "నాకు స్ఫూర్తిని కలిగించలేదు", నేను దానిని ప్రారంభ బిందువుగా తీసుకున్నాను లోస్విచర్.

"/dev/input/"ని ఉపయోగించడం వలన దాని ప్రయోజనాలు (ఒత్తిడి చేసిన ఆటో-రిపీట్ కీతో సహా అన్నీ కనిపిస్తాయి) మరియు అప్రయోజనాలు రెండూ ఉన్నాయి. ప్రతికూలతలు:

  • ఆటో-రిపీట్ (కోడ్ "2"తో ఈవెంట్‌లు) xతో పునరావృతంతో పరస్పర సంబంధం లేదు.
  • X11 ఇంటర్‌ఫేస్‌ల ద్వారా ఇన్‌పుట్ కనిపించదు (ఉదాహరణకు, VNC ఈ విధంగా పనిచేస్తుంది).
  • రూట్ కావాలి.

మరోవైపు, "XSelectExtensionEvent()" ద్వారా X ఈవెంట్‌లకు సభ్యత్వం పొందడం సాధ్యమవుతుంది. మీరు పరిశీలించవచ్చు xinput కోడ్. నేను వెళ్ళడానికి ఇలాంటిదేమీ కనుగొనలేదు మరియు కఠినమైన అమలు వెంటనే C కోడ్ యొక్క వంద లైన్లను తీసుకుంది. ప్రస్తుతానికి పక్కన పెట్టండి.

"రివర్స్" అవుట్‌పుట్ ప్రస్తుతం వర్చువల్ కీబోర్డ్‌ను స్క్రూ చేయడం ద్వారా తయారు చేయబడింది. keybd_event రచయితకు ధన్యవాదాలు, కానీ అక్కడ సంగ్రహణ చాలా ఎక్కువ స్థాయికి చేరుకుంది మరియు మళ్లీ మళ్లీ చేయవలసి ఉంటుంది. ఉదాహరణకు, నేను 3వ అడ్డు వరుసను ఎంచుకోవడానికి సరైన విన్ కీని ఉపయోగిస్తాను. మరియు ఎడమ విన్ మాత్రమే తిరిగి ప్రసారం చేయబడుతుంది.

తెలిసిన బగ్స్

  • "మిశ్రమ" ఇన్‌పుట్ గురించి మాకు ఏమీ తెలియదు (ఉదాహరణ: ½). ప్రస్తుతం అది అవసరం లేదు.
  • మేము సరైన విజయాన్ని తప్పుగా ప్లే చేస్తున్నాము. నా విషయంలో, ఇది ఉద్ఘాటనను విచ్ఛిన్నం చేస్తుంది.
  • స్పష్టమైన ఇన్‌పుట్ పార్సింగ్ లేదు. బదులుగా, అనేక విధులు ఉన్నాయి: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Спасибо nsmcan మీ సంరక్షణ కోసం: కోడ్‌లో మరియు ఇక్కడ సరిదిద్దబడింది. నిర్దిష్ట సంభావ్యతతో, భర్తీ చేసేటప్పుడు మీరు దోషాలను పట్టుకోవచ్చు.
    ఈ సమయంలో నాకు "ఎలా చేయాలో" తెలియదు మరియు ఏవైనా సలహాలను స్వాగతిస్తాను.
  • (ఓ దేవుడా) ఛానెల్‌ల పోటీ ఉపయోగం (కీబోర్డ్ ఈవెంట్‌లు, మైస్ ఈవెంట్‌లు).

తీర్మానం

కోడ్ సరళమైన ప్రక్రియ. మరియు నాలాంటి మూర్ఖుడు. కాబట్టి, దాదాపు ఏ టెక్నీషియన్ అయినా అతను కోరుకున్నది పూర్తి చేయగలడనే ఆశతో నన్ను నేను మెచ్చుకుంటున్నాను. మరియు దీనికి ధన్యవాదాలు, ఈ ఉత్పత్తి మద్దతు లేకుండా నశించదు, కేవలం వినోదం కోసం.

గుడ్ లక్!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి