Ρύθμιση του πλήκτρου «κόμμα» στο αριθμητικό πληκτρολόγιο

Ένα από τα σπαστικά είναι πως σήμερα τα πληκτρολόγια δεν έχουν ξεχωριστό αριθμητικό πληκτρολόγιο. Ακόμα ποιο σπαστικό είναι να δώσει το σωστό «κόμμα» όταν πατηθεί το πλήκτρο ..

Το ποιο θα πρέπει να είναι το σωστό κόμμα είναι μεγάλη ιστορία και εξαρτάται τόσο από το πρόγραμμα, όσο και από τις ρυθμίσεις εντοποιότητας του συστήματος. Θεωρητικό ζήτημα, το θέμα είναι πως στο λογισμικό φύλλο δεν παίρνει το σωστό «κόμμα», μπορώ να κάνω κάτι; Ναι, εδώ είμαστε

Δείτε μια καλύτερη λύση εδώ Ρύθμιση του πλήκτρου «κόμμα» στο αριθμητικό πληκτρολόγιο - #5 από Asfodelus και δοκιμάστε αυτό πρώτα.

Η λύση (πρωταρχικά)

Κάτω από τα καπάκια, κάτω από τα χαλιά υπάρχει πολύ βρωμιά. Και κάτω από το καπάκι του Linux/X11/Wayland θα βρούμε πολύ σκόνη στο κομμάτι της διαχείρισης του πληκτρολογίου. Τόση πολύ που απλά προσθέτουμε πράγματα και δεν αφαιρούμε και δεν καθαρίζουμε. Βλέπουμε το χάλι, αλλά ελπίζουμε να βρεθεί κάποιος άλλος να κάνει την βρομοδουλειά. Αρκετά με την γκρίνια. Αν ανοίξουμε το αρχείο των ελληνικών θα βρούμε μέσα μια γραμμή include "kpdl(comma)". Μια τσαπατσούλικη λύση είναι να το αλλάξουμε. Αλλά υπάρχει ήδη ένας γνωστός μηχανισμός. Μπορούμε να το αλλάξουμε στις ρυθμίσεις που είναι σε μια μοντέρνα διανομή στο αρχείο /etc/default/keyboard. Θα το αλλάξουμε και θα το κάνουμε να γράφει

ules:      evdev
model:   ...
layout:    us,gr
variant:    ,,
options:   terminate:ctrl_alt_bksp,  ...  ,kpdl:dot

Αλλά αν θέλεις κάτι προσωρινά; Τότε, ε πάλι τα γνωστά

setxkbmap -option *kpdl:dot

H λύση

Το πρόβλημα με την πρώτη λύση είναι πως δεν είναι ευέλικτη, το πρόβλημα με την δεύτερη λύση είναι πως δουλεύει μόνο την πρώτη φορά. Η εντολή setxkbmap δεν καθαρίζει τους παλιούς ορισμούς. Οπότε η μόνη λύση; Λίγη Python :python:. Βάλτε τον κώδικα που θα βρείτε παρακάτω σε ένα αρχείο /usr/local/bin/kbd-options και κάντε το εκτελέσιμο.

Αν θέλεις το . να γράφει , δώσε

kbd-options kpdl:comma

Αν θέλεις το . να γράφει . δώσε

kbd-options kpdl:dot

Και δεν υπάρχει πλέον κανένα πρόβλημα :innocent:

Ο κώδικας

#!/usr/bin/python3

# Usefull 
#    keypad:pointerkeys   Shift + Num Lock enables PointerKeys
#    kpdl:dot             Legacy key with dot
#    kpdl:comma           Legacy key with comma 

setxkbmap='/usr/bin/setxkbmap'

import subprocess
import sys

if len(sys.argv) == 1 :
    subprocess.run([setxkbmap, '-query'])
    sys.exit()

lines = subprocess.run([setxkbmap, '-query'], stdout=subprocess.PIPE).stdout.decode('utf-8')

xkb_options={}
for line in list(filter(None, lines.split("\n"))):
    t = line.split();
    xkb_options[t[0].split(":")[0]]= t[1]

option_parse=sys.argv[1].split(":")

option_list = xkb_options['options'].split(",")
new_options = list(filter(lambda x: not x.startswith(option_parse[0]),option_list))
new_options.append(sys.argv[1])

subprocess.run([setxkbmap, '-option'])
subprocess.run([setxkbmap, '-option', ','.join(new_options)])
subprocess.run([setxkbmap, '-query'])
1 «Μου αρέσει»

Δουλεύω πάνω σε μια καλύτερη λύση, να μπορείς να έχεις και τα δυο με Shift αλλά θέλει να με πεθάνει :innocent: Θα πρέπει μάλλον να το πάω την ανάπτυξη σε κάποιο VM με κάποιο xfce αρχικά. Το gnome θέλει να με ξεκάνει.

Χωρίς να σκαλίσεις κανένα αρχείο συστήματος κατάφερα να πάρω αυτό

Υπάρχουν 2 μικρά προβλήματα: Το πρώτο είναι πως οι επιλογές θα έπρεπε να είναι αμοιβαία αποκλειόμενες, και το δεύτερο και λιγότερο σημαντικό είναι πως δεν δουλεύει :cold_sweat:

Αν κάποιος άλλος θέλει να δοκιμάσει την τύχη του ξεκινάει από εδώ.

1 «Μου αρέσει»

Για όποιον άλλον έχει ξεχάσει πως είναι το αριθμητικό πληκτρολόγιο και μπερδεύτηκε, έχει ένα πλήκτρο κόμμα ή τελεία (ανάλογα της γλώσσας) δίπλα στο μηδέν. Και στις δυο περιπτώσεις στέλνει το ίδιο σήμα και το τι τελικά θα εισαχθεί εξαρτάται από το χρησιμοποιούμενο layout.

Για το setxkbmap δεν κατάλαβα πιο είναι το πρόβλημα. Τα kpdl:comma και kpdl:dot δεν αντικαθιστούν το ένα το άλλο; (Και μια μικρή παρατήηρηση: γράφεις /usr/local/bin/xkb-options αλλά από κάτω χρησιμοποιείς kbd-options.)

Το setxkbmap δεν το γνωρίζει αυτό και απλά προσθέτει επιλογές. Οπότε θα δουλέψει μόνο την πρώτη φορά (τουλάχιστον στην περίπτωση μου). Δοκίμασε να προσθέσεις μια επιλογή και μετά να την αλλάξεις. Δες τι θα δώσει η εντολή setxkbmap -query.

Ο μόνος τρόπος να πειράξεις κατι με το setxkbmap είναι να καθαρίσεις τι επιλογές με setxkbmap -option και μετά να τις προσθέσεις όλες όσες είχες απο την αρχή. Αυτό κάνει το script

Στην περίπτωση μου για παράδειγμα έχω

options:    grp:alt_shift_toggle,compose:menu,terminate:ctrl_alt_bksp,grp_led:scroll

ΥΓ: Ευχαριστώ για την διόρθωση

Τελικά ήταν ευκολότερο, όσο σκαλίζεις μαθαίνεις :innocent:. Παίρνω «τελεία» με το . και «κομμα» με το Shift..

Πρέπει να ενεργοποιήσεις και το 4ο επίπεδο για το αριθμητικό πληκτρολόγιο όπως δείχνει η εικόνα. Αυτό ήταν το λάθος.

Πως το εφάρμοσα στο σύστημα μου

Διόρθωσα το αρχείο /etc/default/keyboard και πλέον έχει τo παρακάτω μακρινάρι:

XKBOPTIONS="grp:alt_shift_toggle,compose:menu,terminate:ctrl_alt_bksp,grp_led:scroll,numpad:shift3,kpdl:dotoss,misc:typo"

στην συνέχεια έδωσα την εντολή:

gsettings reset org.gnome.desktop.input-sources xkb-options

και επανεκκίνηση. Με την εντολή αυτή αφαιρούμε τις ρυθμίσεις του gnome. 'Όταν ξεκινήσει θα τις ξαναφτιάξει και θα είναι συντονισμένα.

Όλα μοιάζει να δουλεύουν σωστά, με μια εξαίρεση, δεν δουλεύει το παρακάτω

setxkbmap -print | xkbcomp - - | xkbprint -color  -level2  -dflts- - | ps2pdf - > keyboard.pdf && xdg-open keyboard.pdf

που μου φτιάχνει ένα pdf με την διάταξη του πληκτρολογίου. Μικρό το κακό. Το gnome καταφέρνει και το δείχνει μια χαρά :stuck_out_tongue: