mirror of https://github.com/fairyglade/ly.git
rebased to master and fixed merge issues
This commit is contained in:
commit
4e8838fdfd
4
makefile
4
makefile
|
|
@ -3,7 +3,7 @@ CC = gcc
|
||||||
FLAGS = -std=c99 -pedantic -g
|
FLAGS = -std=c99 -pedantic -g
|
||||||
FLAGS+= -Wall -Wextra -Werror=vla -Wno-unused-parameter
|
FLAGS+= -Wall -Wextra -Werror=vla -Wno-unused-parameter
|
||||||
#FLAGS+= -DDEBUG
|
#FLAGS+= -DDEBUG
|
||||||
FLAGS+= -DGIT_VERSION_STRING=\"$(shell git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/-/./g')\"
|
FLAGS+= -DLY_VERSION=\"$(shell git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/-/./g')\"
|
||||||
LINK = -lpam -lxcb
|
LINK = -lpam -lxcb
|
||||||
VALGRIND = --show-leak-kinds=all --track-origins=yes --leak-check=full --suppressions=../res/valgrind.supp
|
VALGRIND = --show-leak-kinds=all --track-origins=yes --leak-check=full --suppressions=../res/valgrind.supp
|
||||||
CMD = ./$(NAME)
|
CMD = ./$(NAME)
|
||||||
|
|
@ -101,7 +101,6 @@ installopenrc:
|
||||||
|
|
||||||
installrunit:
|
installrunit:
|
||||||
@echo "installing runit service"
|
@echo "installing runit service"
|
||||||
@install -dZ ${DESTDIR}/etc/sv/ly-runit-service
|
|
||||||
@install -DZ $(RESD)/ly-runit-service/* -t ${DESTDIR}/etc/sv/ly
|
@install -DZ $(RESD)/ly-runit-service/* -t ${DESTDIR}/etc/sv/ly
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
|
|
@ -112,6 +111,7 @@ uninstall:
|
||||||
@rm -f ${DESTDIR}/usr/lib/systemd/system/ly.service
|
@rm -f ${DESTDIR}/usr/lib/systemd/system/ly.service
|
||||||
@rm -f ${DESTDIR}/etc/pam.d/ly
|
@rm -f ${DESTDIR}/etc/pam.d/ly
|
||||||
@rm -f ${DESTDIR}/etc/init.d/${NAME}
|
@rm -f ${DESTDIR}/etc/init.d/${NAME}
|
||||||
|
@rm -rf ${DESTDIR}/etc/sv/ly
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@echo "cleaning"
|
@echo "cleaning"
|
||||||
|
|
|
||||||
11
readme.md
11
readme.md
|
|
@ -32,6 +32,7 @@ The following desktop environments were tested with success
|
||||||
- gnome
|
- gnome
|
||||||
- i3
|
- i3
|
||||||
- kde
|
- kde
|
||||||
|
- labwc
|
||||||
- lxde
|
- lxde
|
||||||
- lxqt
|
- lxqt
|
||||||
- mate
|
- mate
|
||||||
|
|
@ -120,22 +121,24 @@ $ make
|
||||||
# ln -s /etc/sv/ly /var/service/
|
# ln -s /etc/sv/ly /var/service/
|
||||||
```
|
```
|
||||||
|
|
||||||
Disable your existing display manager service if need be e.g.:
|
By default, ly will run on tty2. To change the tty it must be set in `/etc/ly/config.ini`
|
||||||
|
|
||||||
|
You should as well disable your existing display manager service if needed, e.g.:
|
||||||
|
|
||||||
```
|
```
|
||||||
# rm /var/service/lxdm
|
# rm /var/service/lxdm
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are running on `tty2` (check your `/etc/ly/config.ini`) you can disable e.g. `agetty` running there:
|
The agetty service for the tty console where you are running ly should be disabled. For instance, if you are running ly on tty2 (that's the default, check your `/etc/ly/config.ini`) you should disable the agetty-tty2 service like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
# rm /var/service/agetty-tty2
|
# rm /var/service/agetty-tty2
|
||||||
```
|
```
|
||||||
|
|
||||||
## Arch Linux Installation
|
## Arch Linux Installation
|
||||||
You can install ly from the [AUR](https://aur.archlinux.org/packages/ly), using yay for example:
|
You can install ly from the [`[extra]` repos](https://archlinux.org/packages/extra/x86_64/ly/):
|
||||||
```
|
```
|
||||||
$ yay -S ly
|
$ sudo pacman -S ly
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,11 @@
|
||||||
# 1 -> CMatrix
|
# 1 -> CMatrix
|
||||||
#animation = 0
|
#animation = 0
|
||||||
|
|
||||||
|
# format string for clock in top right corner (see strftime specification)
|
||||||
|
#clock = %c
|
||||||
|
|
||||||
|
# enable/disable big clock
|
||||||
|
#bigclock = true
|
||||||
|
|
||||||
# The character used to mask the password
|
# The character used to mask the password
|
||||||
#asterisk = *
|
#asterisk = *
|
||||||
|
|
@ -71,13 +76,19 @@
|
||||||
#save_file = /etc/ly/save
|
#save_file = /etc/ly/save
|
||||||
|
|
||||||
|
|
||||||
# Remove F1/F2 command hints
|
# Remove power management command hints
|
||||||
#hide_f1_commands = false
|
#hide_key_hints = false
|
||||||
|
|
||||||
# Command executed when pressing F1
|
# Specifies the key used for shutdown
|
||||||
|
#shutdown_key = F1
|
||||||
|
|
||||||
|
# Specifies the key used for restart
|
||||||
|
#restart_key = F2
|
||||||
|
|
||||||
|
# Command executed when pressing shutdown_key
|
||||||
#shutdown_cmd = /sbin/shutdown -a now
|
#shutdown_cmd = /sbin/shutdown -a now
|
||||||
|
|
||||||
# Command executed when pressing F2
|
# Command executed when pressing restart_key
|
||||||
#restart_cmd = /sbin/shutdown -r now
|
#restart_cmd = /sbin/shutdown -r now
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = error al inicialitzar usuari
|
||||||
err_user_uid = error al establir el UID de l'usuari
|
err_user_uid = error al establir el UID de l'usuari
|
||||||
err_xsessions_dir = error al cercar la carpeta de sessions
|
err_xsessions_dir = error al cercar la carpeta de sessions
|
||||||
err_xsessions_open = error al obrir la carpeta de sessions
|
err_xsessions_open = error al obrir la carpeta de sessions
|
||||||
f1 = F1 aturar
|
|
||||||
f2 = F2 reiniciar
|
|
||||||
login = iniciar sessió
|
login = iniciar sessió
|
||||||
logout = tancar sessió
|
logout = tancar sessió
|
||||||
numlock = Bloq Num
|
numlock = Bloq Num
|
||||||
password = Clau
|
password = Clau
|
||||||
|
restart = reiniciar
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = aturar
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = inicializace uživatele selhala
|
||||||
err_user_uid = nastavení UID uživateli selhalo
|
err_user_uid = nastavení UID uživateli selhalo
|
||||||
err_xsessions_dir = nepodařilo se najít složku relací
|
err_xsessions_dir = nepodařilo se najít složku relací
|
||||||
err_xsessions_open = nepodařilo se otevřít složku relací
|
err_xsessions_open = nepodařilo se otevřít složku relací
|
||||||
f1 = F1 vypnout
|
|
||||||
f2 = F2 restartovat
|
|
||||||
login = uživatel
|
login = uživatel
|
||||||
logout = odhlášen
|
logout = odhlášen
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = heslo
|
password = heslo
|
||||||
|
restart = restartovat
|
||||||
shell = příkazový řádek
|
shell = příkazový řádek
|
||||||
|
shutdown = vypnout
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = Initialisierung des Nutzers fehlgeschlagen
|
||||||
err_user_uid = Setzen der Benutzer Id fehlgeschlagen
|
err_user_uid = Setzen der Benutzer Id fehlgeschlagen
|
||||||
err_xsessions_dir = Fehler beim finden des Sitzungsordners
|
err_xsessions_dir = Fehler beim finden des Sitzungsordners
|
||||||
err_xsessions_open = Fehler beim öffnen des Sitzungsordners
|
err_xsessions_open = Fehler beim öffnen des Sitzungsordners
|
||||||
f1 = F1 Herunterfahren
|
|
||||||
f2 = F2 Neustarten
|
|
||||||
login = Anmelden
|
login = Anmelden
|
||||||
logout = Abgemeldet
|
logout = Abgemeldet
|
||||||
numlock = Numtaste
|
numlock = Numtaste
|
||||||
password = Passwort
|
password = Passwort
|
||||||
|
restart = Neustarten
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = Herunterfahren
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = failed to initialize user
|
||||||
err_user_uid = failed to set user UID
|
err_user_uid = failed to set user UID
|
||||||
err_xsessions_dir = failed to find sessions folder
|
err_xsessions_dir = failed to find sessions folder
|
||||||
err_xsessions_open = failed to open sessions folder
|
err_xsessions_open = failed to open sessions folder
|
||||||
f1 = F1 shutdown
|
|
||||||
f2 = F2 reboot
|
|
||||||
login = login
|
login = login
|
||||||
logout = logged out
|
logout = logged out
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = password
|
password = password
|
||||||
|
restart = reboot
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = shutdown
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = error al inicializar usuario
|
||||||
err_user_uid = error al establecer el UID del usuario
|
err_user_uid = error al establecer el UID del usuario
|
||||||
err_xsessions_dir = error al buscar la carpeta de sesiones
|
err_xsessions_dir = error al buscar la carpeta de sesiones
|
||||||
err_xsessions_open = error al abrir la carpeta de sesiones
|
err_xsessions_open = error al abrir la carpeta de sesiones
|
||||||
f1 = F1 apagar
|
|
||||||
f2 = F2 reiniciar
|
|
||||||
login = iniciar sesión
|
login = iniciar sesión
|
||||||
logout = cerrar sesión
|
logout = cerrar sesión
|
||||||
numlock = Bloq Num
|
numlock = Bloq Num
|
||||||
password = contraseña
|
password = contraseña
|
||||||
|
restart = reiniciar
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = apagar
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ err_chdir = échec de l'ouverture du répertoire home
|
||||||
err_console_dev = échec d'accès à la console
|
err_console_dev = échec d'accès à la console
|
||||||
err_dgn_oob = message
|
err_dgn_oob = message
|
||||||
err_domain = domaine invalide
|
err_domain = domaine invalide
|
||||||
err_hostname = échec de captation du nom d'hôte
|
err_hostname = échec de lecture du nom d'hôte
|
||||||
err_mlock = échec du verrouillage mémoire
|
err_mlock = échec du verrouillage mémoire
|
||||||
err_null = pointeur null
|
err_null = pointeur null
|
||||||
err_pam = échec de la transaction pam
|
err_pam = échec de la transaction pam
|
||||||
|
|
@ -28,18 +28,18 @@ err_path = échec de la modification du path
|
||||||
err_perm_dir = échec de changement de répertoire
|
err_perm_dir = échec de changement de répertoire
|
||||||
err_perm_group = échec du déclassement des permissions de groupe
|
err_perm_group = échec du déclassement des permissions de groupe
|
||||||
err_perm_user = échec du déclassement des permissions utilisateur
|
err_perm_user = échec du déclassement des permissions utilisateur
|
||||||
err_pwnam = échec de captation des infos utilisateur
|
err_pwnam = échec de lecture des infos utilisateur
|
||||||
err_user_gid = échec de modification du GID
|
err_user_gid = échec de modification du GID
|
||||||
err_user_init = échec d'initialisation de l'utilisateur
|
err_user_init = échec d'initialisation de l'utilisateur
|
||||||
err_user_uid = échec de modification du UID
|
err_user_uid = échec de modification du UID
|
||||||
err_xsessions_dir = échec de la recherche du dossier de sessions
|
err_xsessions_dir = échec de la recherche du dossier de sessions
|
||||||
err_xsessions_open = échec de l'ouverture du dossier de sessions
|
err_xsessions_open = échec de l'ouverture du dossier de sessions
|
||||||
f1 = F1 éteindre
|
|
||||||
f2 = F2 redémarrer
|
|
||||||
login = identifiant
|
login = identifiant
|
||||||
logout = déconnection
|
logout = déconnection
|
||||||
numlock = verr.num
|
numlock = verr.num
|
||||||
password = mot de passe
|
password = mot de passe
|
||||||
|
restart = redémarrer
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = éteindre
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = impossibile inizializzare utente
|
||||||
err_user_uid = impossible impostare UID utente
|
err_user_uid = impossible impostare UID utente
|
||||||
err_xsessions_dir = impossibile localizzare cartella sessioni
|
err_xsessions_dir = impossibile localizzare cartella sessioni
|
||||||
err_xsessions_open = impossibile aprire cartella sessioni
|
err_xsessions_open = impossibile aprire cartella sessioni
|
||||||
f1 = F1 arresto
|
|
||||||
f2 = F2 riavvio
|
|
||||||
login = username
|
login = username
|
||||||
logout = scollegato
|
logout = scollegato
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = password
|
password = password
|
||||||
|
restart = riavvio
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = arresto
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = nie udało się zainicjalizować użytkownika
|
||||||
err_user_uid = nie udało się ustawić UID użytkownika
|
err_user_uid = nie udało się ustawić UID użytkownika
|
||||||
err_xsessions_dir = nie udało się znaleźć folderu sesji
|
err_xsessions_dir = nie udało się znaleźć folderu sesji
|
||||||
err_xsessions_open = nie udało się otworzyć folderu sesji
|
err_xsessions_open = nie udało się otworzyć folderu sesji
|
||||||
f1 = F1 wyłącz
|
|
||||||
f2 = F2 uruchom ponownie
|
|
||||||
login = login
|
login = login
|
||||||
logout = wylogowano
|
logout = wylogowano
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = hasło
|
password = hasło
|
||||||
|
restart = uruchom ponownie
|
||||||
shell = powłoka
|
shell = powłoka
|
||||||
|
shutdown = wyłącz
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = erro ao iniciar o utilizador
|
||||||
err_user_uid = erro ao definir o UID do utilizador
|
err_user_uid = erro ao definir o UID do utilizador
|
||||||
err_xsessions_dir = erro ao localizar a pasta das sessões
|
err_xsessions_dir = erro ao localizar a pasta das sessões
|
||||||
err_xsessions_open = erro ao abrir a pasta das sessões
|
err_xsessions_open = erro ao abrir a pasta das sessões
|
||||||
f1 = F1 encerrar
|
|
||||||
f2 = F2 reiniciar
|
|
||||||
login = iniciar sessão
|
login = iniciar sessão
|
||||||
logout = terminar sessão
|
logout = terminar sessão
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = palavra-passe
|
password = palavra-passe
|
||||||
|
restart = reiniciar
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = encerrar
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = não foi possível iniciar o usuário
|
||||||
err_user_uid = não foi possível definir o UID do usuário
|
err_user_uid = não foi possível definir o UID do usuário
|
||||||
err_xsessions_dir = não foi possível encontrar a pasta das sessões
|
err_xsessions_dir = não foi possível encontrar a pasta das sessões
|
||||||
err_xsessions_open = não foi possível abrir a pasta das sessões
|
err_xsessions_open = não foi possível abrir a pasta das sessões
|
||||||
f1 = F1 desligar
|
|
||||||
f2 = F2 reiniciar
|
|
||||||
login = conectar
|
login = conectar
|
||||||
logout = desconectado
|
logout = desconectado
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = senha
|
password = senha
|
||||||
|
restart = reiniciar
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = desligar
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_perm_user = nu s-a putut face downgrade permisiunilor de utilizator
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
f1 = F1 opreşte sistemul
|
|
||||||
f2 = F2 resetează
|
|
||||||
login = utilizator
|
login = utilizator
|
||||||
logout = opreşte sesiunea
|
logout = opreşte sesiunea
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = parolă
|
password = parolă
|
||||||
|
restart = resetează
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = opreşte sistemul
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ err_pam_authok_reqd = токен истёк
|
||||||
err_pam_buf = ошибка буфера памяти
|
err_pam_buf = ошибка буфера памяти
|
||||||
err_pam_cred_err = не удалось установить полномочия
|
err_pam_cred_err = не удалось установить полномочия
|
||||||
err_pam_cred_expired = полномочия истекли
|
err_pam_cred_expired = полномочия истекли
|
||||||
err_pam_cred_insufficient = недостаточо полномочий
|
err_pam_cred_insufficient = недостаточно полномочий
|
||||||
err_pam_cred_unavail = не удалось получить полномочия
|
err_pam_cred_unavail = не удалось получить полномочия
|
||||||
err_pam_maxtries = лимит попыток исчерпан
|
err_pam_maxtries = лимит попыток исчерпан
|
||||||
err_pam_perm_denied = доступ запрещён
|
err_pam_perm_denied = доступ запрещён
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = не удалось инициализировать польз
|
||||||
err_user_uid = не удалось установить UID пользователя
|
err_user_uid = не удалось установить UID пользователя
|
||||||
err_xsessions_dir = не удалось найти сессионную папку
|
err_xsessions_dir = не удалось найти сессионную папку
|
||||||
err_xsessions_open = не удалось открыть сессионную папку
|
err_xsessions_open = не удалось открыть сессионную папку
|
||||||
f1 = F1 выключить
|
|
||||||
f2 = F2 перезагрузить
|
|
||||||
login = логин
|
login = логин
|
||||||
logout = logged out
|
logout = logged out
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = пароль
|
password = пароль
|
||||||
|
restart = перезагрузить
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = выключить
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = neuspijensa inicijalizacija korisnika
|
||||||
err_user_uid = neuspijesno postavljanje UID-a korisnika
|
err_user_uid = neuspijesno postavljanje UID-a korisnika
|
||||||
err_xsessions_dir = neuspijesno pronalazenje foldera sesija
|
err_xsessions_dir = neuspijesno pronalazenje foldera sesija
|
||||||
err_xsessions_open = neuspijesno otvaranje foldera sesija
|
err_xsessions_open = neuspijesno otvaranje foldera sesija
|
||||||
f1 = F1 ugasi
|
|
||||||
f2 = F2 ponovo pokreni
|
|
||||||
login = korisnik
|
login = korisnik
|
||||||
logout = izlogovan
|
logout = izlogovan
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = lozinka
|
password = lozinka
|
||||||
|
restart = ponovo pokreni
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = ugasi
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
capslock = capslock
|
||||||
|
err_alloc = misslyckad minnesallokering
|
||||||
|
err_bounds = utanför banan index
|
||||||
|
err_chdir = misslyckades att öppna hemkatalog
|
||||||
|
err_console_dev = misslyckades att komma åt konsol
|
||||||
|
err_dgn_oob = loggmeddelande
|
||||||
|
err_domain = okänd domän
|
||||||
|
err_hostname = misslyckades att hämta värdnamn
|
||||||
|
err_mlock = misslyckades att låsa lösenordsminne
|
||||||
|
err_null = nullpekare
|
||||||
|
err_pam = pam-transaktion misslyckades
|
||||||
|
err_pam_abort = pam-transaktion avbröts
|
||||||
|
err_pam_acct_expired = konto upphört
|
||||||
|
err_pam_auth = autentiseringsfel
|
||||||
|
err_pam_authinfo_unavail = misslyckades att hämta användarinfo
|
||||||
|
err_pam_authok_reqd = token utgången
|
||||||
|
err_pam_buf = minnesbuffer fel
|
||||||
|
err_pam_cred_err = misslyckades att ställa in inloggningsuppgifter
|
||||||
|
err_pam_cred_expired = inloggningsuppgifter upphörda
|
||||||
|
err_pam_cred_insufficient = otillräckliga inloggningsuppgifter
|
||||||
|
err_pam_cred_unavail = misslyckades att hämta inloggningsuppgifter
|
||||||
|
err_pam_maxtries = nådde maximal försöksgräns
|
||||||
|
err_pam_perm_denied = åtkomst nekad
|
||||||
|
err_pam_session = sessionsfel
|
||||||
|
err_pam_sys = systemfel
|
||||||
|
err_pam_user_unknown = okänd användare
|
||||||
|
err_path = misslyckades att ställa in sökväg
|
||||||
|
err_perm_dir = misslyckades att ändra aktuell katalog
|
||||||
|
err_perm_group = misslyckades att nergradera gruppbehörigheter
|
||||||
|
err_perm_user = misslyckades att nergradera användarbehörigheter
|
||||||
|
err_pwnam = misslyckades att hämta användarinfo
|
||||||
|
err_user_gid = misslyckades att ställa in användar-GID
|
||||||
|
err_user_init = misslyckades att initialisera användaren
|
||||||
|
err_user_uid = misslyckades att ställa in användar-UID
|
||||||
|
err_xsessions_dir = misslyckades att hitta sessionskatalog
|
||||||
|
err_xsessions_open = misslyckades att öppna sessionskatalog
|
||||||
|
login = inloggning
|
||||||
|
logout = utloggad
|
||||||
|
numlock = numlock
|
||||||
|
password = lösenord
|
||||||
|
restart = starta om
|
||||||
|
shell = skal
|
||||||
|
shutdown = stäng av
|
||||||
|
wayland = wayland
|
||||||
|
xinitrc = xinitrc
|
||||||
|
|
@ -34,12 +34,12 @@ err_user_init = kullanici oturumu baslatilamadi
|
||||||
err_user_uid = kullanici icin UID ayarlanamadi
|
err_user_uid = kullanici icin UID ayarlanamadi
|
||||||
err_xsessions_dir = oturumlar klasoru bulunamadi
|
err_xsessions_dir = oturumlar klasoru bulunamadi
|
||||||
err_xsessions_open = oturumlar klasoru acilamadi
|
err_xsessions_open = oturumlar klasoru acilamadi
|
||||||
f1 = F1 makineyi kapat
|
|
||||||
f2 = F2 yeniden baslat
|
|
||||||
login = kullanici
|
login = kullanici
|
||||||
logout = oturumdan cikis yapildi
|
logout = oturumdan cikis yapildi
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = sifre
|
password = sifre
|
||||||
|
restart = yeniden baslat
|
||||||
shell = shell
|
shell = shell
|
||||||
|
shutdown = makineyi kapat
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
capslock = capslock
|
capslock = capslock
|
||||||
err_alloc = невдалий розділ пам'яті
|
err_alloc = невдале виділення пам'яті
|
||||||
err_bounds = поза межами індексу
|
err_bounds = поза межами індексу
|
||||||
err_chdir = не вдалося відкрити домашній каталог
|
err_chdir = не вдалося відкрити домашній каталог
|
||||||
err_console_dev = невдалий доступ до консолі
|
err_console_dev = невдалий доступ до консолі
|
||||||
|
|
@ -7,7 +7,7 @@ err_dgn_oob = повідомлення журналу (log)
|
||||||
err_domain = недійсний домен
|
err_domain = недійсний домен
|
||||||
err_hostname = не вдалося отримати ім'я хосту
|
err_hostname = не вдалося отримати ім'я хосту
|
||||||
err_mlock = збій блокування пам'яті
|
err_mlock = збій блокування пам'яті
|
||||||
err_null = нульовий індекс
|
err_null = нульовий вказівник
|
||||||
err_pam = невдала pam транзакція
|
err_pam = невдала pam транзакція
|
||||||
err_pam_abort = pam транзакція перервана
|
err_pam_abort = pam транзакція перервана
|
||||||
err_pam_acct_expired = термін дії акаунту вичерпано
|
err_pam_acct_expired = термін дії акаунту вичерпано
|
||||||
|
|
@ -16,11 +16,11 @@ err_pam_authinfo_unavail = не вдалося отримати дані кор
|
||||||
err_pam_authok_reqd = термін дії токена вичерпано
|
err_pam_authok_reqd = термін дії токена вичерпано
|
||||||
err_pam_buf = помилка буферу пам'яті
|
err_pam_buf = помилка буферу пам'яті
|
||||||
err_pam_cred_err = не вдалося змінити облікові дані
|
err_pam_cred_err = не вдалося змінити облікові дані
|
||||||
err_pam_cred_expired = облікові дані вичерпано
|
err_pam_cred_expired = термін дії повноважень вичерпано
|
||||||
err_pam_cred_insufficient = недостатньо облікових даних
|
err_pam_cred_insufficient = недостатньо облікових даних
|
||||||
err_pam_cred_unavail = не вдалося отримати облікові дані
|
err_pam_cred_unavail = не вдалося отримати облікові дані
|
||||||
err_pam_maxtries = вичерпано ліміт спроб
|
err_pam_maxtries = вичерпано ліміт спроб
|
||||||
err_pam_perm_denied = доступ обмежено
|
err_pam_perm_denied = відмовлено у доступі
|
||||||
err_pam_session = помилка сесії
|
err_pam_session = помилка сесії
|
||||||
err_pam_sys = системна помилка
|
err_pam_sys = системна помилка
|
||||||
err_pam_user_unknown = невідомий користувач
|
err_pam_user_unknown = невідомий користувач
|
||||||
|
|
@ -32,14 +32,14 @@ err_pwnam = не вдалося отримати дані користувача
|
||||||
err_user_gid = не вдалося змінити GID користувача
|
err_user_gid = не вдалося змінити GID користувача
|
||||||
err_user_init = не вдалося ініціалізувати користувача
|
err_user_init = не вдалося ініціалізувати користувача
|
||||||
err_user_uid = не вдалося змінити UID користувача
|
err_user_uid = не вдалося змінити UID користувача
|
||||||
err_xsessions_dir = не вдалося знайти теку сесій
|
err_xsessions_dir = не вдалося знайти каталог сесій
|
||||||
err_xsessions_open = не вдалося відкрити теку сесій
|
err_xsessions_open = не вдалося відкрити каталог сесій
|
||||||
f1 = F1 вимкнути
|
|
||||||
f2 = F2 перезавантажити
|
|
||||||
login = логін
|
login = логін
|
||||||
logout = вийти
|
logout = вийти
|
||||||
numlock = numlock
|
numlock = numlock
|
||||||
password = пароль
|
password = пароль
|
||||||
|
restart = перезавантажити
|
||||||
shell = оболонка
|
shell = оболонка
|
||||||
|
shutdown = вимкнути
|
||||||
wayland = wayland
|
wayland = wayland
|
||||||
xinitrc = xinitrc
|
xinitrc = xinitrc
|
||||||
|
|
@ -8,7 +8,5 @@ fi
|
||||||
BAUD_RATE=38400
|
BAUD_RATE=38400
|
||||||
TERM_NAME=linux
|
TERM_NAME=linux
|
||||||
|
|
||||||
StandardInput=tty
|
auxtty=$(/bin/cat /etc/ly/config.ini 2>/dev/null 1| /bin/sed -n 's/\(^[[:space:]]*tty[[:space:]]*=[[:space:]]*\)\([[:digit:]][[:digit:]]*\)\(.*\)/\2/p')
|
||||||
TTYPath=/dev/tty2
|
TTY=tty${auxtty:-2}
|
||||||
TTYReset=yes
|
|
||||||
TTYVHangup=yes
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
tty=${PWD##*-}
|
[ -r conf ] && . ./conf
|
||||||
exec utmpset -w $tty
|
|
||||||
|
exec utmpset -w ${TTY}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
tty=${PWD##*-}
|
|
||||||
|
|
||||||
[ -r conf ] && . ./conf
|
[ -r conf ] && . ./conf
|
||||||
|
|
||||||
if [ -x /sbin/getty -o -x /bin/getty ]; then
|
if [ -x /sbin/getty -o -x /bin/getty ]; then
|
||||||
|
|
@ -12,4 +10,4 @@ elif [ -x /sbin/agetty -o -x /bin/agetty ]; then
|
||||||
GETTY=agetty
|
GETTY=agetty
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec setsid ${GETTY} ${GETTY_ARGS} -nl /usr/bin/ly tty2 "${BAUD_RATE}" "${TERM_NAME}"
|
exec setsid ${GETTY} ${GETTY_ARGS} -nl /usr/bin/ly "${TTY}" "${BAUD_RATE}" "${TERM_NAME}"
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,4 @@ case $SHELL in
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# See https://github.com/fairyglade/ly/issues/433#issuecomment-1245306438
|
exec "$@"
|
||||||
export XDG_RUNTIME_DIR="/run/user/$UID"
|
|
||||||
exec $@
|
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ elif [ -f /etc/X11/Xresources ]; then
|
||||||
xrdb -merge /etc/X11/Xresources
|
xrdb -merge /etc/X11/Xresources
|
||||||
fi
|
fi
|
||||||
[ -f $HOME/.Xresources ] && xrdb -merge $HOME/.Xresources
|
[ -f $HOME/.Xresources ] && xrdb -merge $HOME/.Xresources
|
||||||
|
[ -f $XDG_CONFIG_HOME/X11/Xresources ] && xrdb -merge $XDG_CONFIG_HOME/X11/Xresources
|
||||||
|
|
||||||
if [ -f "$USERXSESSION" ]; then
|
if [ -f "$USERXSESSION" ]; then
|
||||||
. "$USERXSESSION"
|
. "$USERXSESSION"
|
||||||
|
|
|
||||||
216
src/animations.c
216
src/animations.c
|
|
@ -56,6 +56,38 @@ static const void* ANIM_FREES[] = {
|
||||||
#define DOOM_STEPS 13
|
#define DOOM_STEPS 13
|
||||||
|
|
||||||
|
|
||||||
|
static void doom_init(struct term_buf* buf)
|
||||||
|
{
|
||||||
|
buf->init_width = buf->width;
|
||||||
|
buf->init_height = buf->height;
|
||||||
|
buf->astate = (struct doom_state*)malloc(sizeof(struct doom_state));
|
||||||
|
|
||||||
|
if (buf->astate == NULL)
|
||||||
|
{
|
||||||
|
dgn_throw(DGN_ALLOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t tmp_len = buf->width * buf->height;
|
||||||
|
// cast the doom state to a pointer to the structure
|
||||||
|
struct doom_state* d = (struct doom_state*)buf->astate;
|
||||||
|
d->buf = malloc(tmp_len);
|
||||||
|
tmp_len -= buf->width;
|
||||||
|
|
||||||
|
if (d->buf == NULL)
|
||||||
|
{
|
||||||
|
dgn_throw(DGN_ALLOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(d->buf, 0, tmp_len);
|
||||||
|
memset(d->buf + tmp_len, DOOM_STEPS - 1, buf->width);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void doom_free(struct term_buf* buf)
|
||||||
|
{
|
||||||
|
struct doom_state* d = (struct doom_state*)buf->astate;
|
||||||
|
free(d->buf);
|
||||||
|
free(d);
|
||||||
|
}
|
||||||
|
|
||||||
// Adapted from cmatrix
|
// Adapted from cmatrix
|
||||||
static void matrix_init(struct term_buf* buf)
|
static void matrix_init(struct term_buf* buf)
|
||||||
|
|
@ -63,8 +95,7 @@ static void matrix_init(struct term_buf* buf)
|
||||||
buf->init_width = buf->width;
|
buf->init_width = buf->width;
|
||||||
buf->init_height = buf->height;
|
buf->init_height = buf->height;
|
||||||
buf->astate = (struct matrix_state*)malloc(sizeof(struct matrix_state));
|
buf->astate = (struct matrix_state*)malloc(sizeof(struct matrix_state));
|
||||||
// cast state to matrix_state pointer
|
struct matrix_state* s = buf->astate;
|
||||||
struct matrix_state* s = (struct matrix_state*)buf->astate;
|
|
||||||
|
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
{
|
{
|
||||||
|
|
@ -138,13 +169,76 @@ static void matrix_init(struct term_buf* buf)
|
||||||
|
|
||||||
static void matrix_free(struct term_buf* buf)
|
static void matrix_free(struct term_buf* buf)
|
||||||
{
|
{
|
||||||
// casting state to matrix_state pointer
|
struct matrix_state* matrix = buf->astate;
|
||||||
free(((struct matrix_state*)buf->astate)->grid[0]);
|
free(matrix->grid[0]);
|
||||||
free(((struct matrix_state*)buf->astate)->grid);
|
free(matrix->grid);
|
||||||
free(((struct matrix_state*)buf->astate)->length);
|
free(matrix->length);
|
||||||
free(((struct matrix_state*)buf->astate)->spaces);
|
free(matrix->spaces);
|
||||||
free(((struct matrix_state*)buf->astate)->updates);
|
free(matrix->updates);
|
||||||
free(((struct matrix_state*)buf->astate));
|
free(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void doom(struct term_buf* term_buf)
|
||||||
|
{
|
||||||
|
static struct tb_cell fire[DOOM_STEPS] =
|
||||||
|
{
|
||||||
|
{' ', 9, 0}, // default
|
||||||
|
{0x2591, 2, 0}, // red
|
||||||
|
{0x2592, 2, 0}, // red
|
||||||
|
{0x2593, 2, 0}, // red
|
||||||
|
{0x2588, 2, 0}, // red
|
||||||
|
{0x2591, 4, 2}, // yellow
|
||||||
|
{0x2592, 4, 2}, // yellow
|
||||||
|
{0x2593, 4, 2}, // yellow
|
||||||
|
{0x2588, 4, 2}, // yellow
|
||||||
|
{0x2591, 8, 4}, // white
|
||||||
|
{0x2592, 8, 4}, // white
|
||||||
|
{0x2593, 8, 4}, // white
|
||||||
|
{0x2588, 8, 4}, // white
|
||||||
|
};
|
||||||
|
|
||||||
|
uint16_t src;
|
||||||
|
uint16_t random;
|
||||||
|
uint16_t dst;
|
||||||
|
|
||||||
|
uint16_t w = term_buf->init_width;
|
||||||
|
uint8_t* tmp = ((struct doom_state*)term_buf->astate)->buf;
|
||||||
|
|
||||||
|
if ((term_buf->width != term_buf->init_width) || (term_buf->height != term_buf->init_height))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct tb_cell* buf = tb_cell_buffer();
|
||||||
|
|
||||||
|
for (uint16_t x = 0; x < w; ++x)
|
||||||
|
{
|
||||||
|
for (uint16_t y = 1; y < term_buf->init_height; ++y)
|
||||||
|
{
|
||||||
|
src = y * w + x;
|
||||||
|
random = ((rand() % 7) & 3);
|
||||||
|
dst = src - random + 1;
|
||||||
|
|
||||||
|
if (w > dst)
|
||||||
|
{
|
||||||
|
dst = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dst -= w;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp[dst] = tmp[src] - (random & 1);
|
||||||
|
|
||||||
|
if (tmp[dst] > 12)
|
||||||
|
{
|
||||||
|
tmp[dst] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[dst] = fire[tmp[dst]];
|
||||||
|
buf[src] = fire[tmp[src]];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adapted from cmatrix
|
// Adapted from cmatrix
|
||||||
|
|
@ -154,7 +248,7 @@ static void matrix(struct term_buf* buf)
|
||||||
const int frame_delay = 8;
|
const int frame_delay = 8;
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
bool first_col;
|
bool first_col;
|
||||||
struct matrix_state* s = ((struct matrix_state*)buf->astate);
|
struct matrix_state* s = buf->astate;
|
||||||
|
|
||||||
// Allowed codepoints
|
// Allowed codepoints
|
||||||
const int randmin = 33;
|
const int randmin = 33;
|
||||||
|
|
@ -168,7 +262,8 @@ static void matrix(struct term_buf* buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
count += 1;
|
count += 1;
|
||||||
if (count > frame_delay) {
|
if (count > frame_delay)
|
||||||
|
{
|
||||||
frame += 1;
|
frame += 1;
|
||||||
if (frame > 4) frame = 1;
|
if (frame > 4) frame = 1;
|
||||||
count = 0;
|
count = 0;
|
||||||
|
|
@ -243,7 +338,8 @@ static void matrix(struct term_buf* buf)
|
||||||
uint32_t blank;
|
uint32_t blank;
|
||||||
utf8_char_to_unicode(&blank, " ");
|
utf8_char_to_unicode(&blank, " ");
|
||||||
|
|
||||||
for (int j = 0; j < buf->width; j += 2) {
|
for (int j = 0; j < buf->width; j += 2)
|
||||||
|
{
|
||||||
for (int i = 1; i <= buf->height; ++i)
|
for (int i = 1; i <= buf->height; ++i)
|
||||||
{
|
{
|
||||||
uint32_t c;
|
uint32_t c;
|
||||||
|
|
@ -271,102 +367,6 @@ static void matrix(struct term_buf* buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// doom functions
|
|
||||||
static void doom_init(struct term_buf* buf)
|
|
||||||
{
|
|
||||||
buf->init_width = buf->width;
|
|
||||||
buf->init_height = buf->height;
|
|
||||||
buf->astate = (struct doom_state*)malloc(sizeof(struct doom_state));
|
|
||||||
|
|
||||||
if (buf->astate == NULL)
|
|
||||||
{
|
|
||||||
dgn_throw(DGN_ALLOC);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t tmp_len = buf->width * buf->height;
|
|
||||||
// cast state to doom_state pointer
|
|
||||||
struct doom_state* d = (struct doom_state*)buf->astate;
|
|
||||||
d->buf = malloc(tmp_len);
|
|
||||||
tmp_len -= buf->width;
|
|
||||||
|
|
||||||
if (((struct doom_state*)buf->astate)->buf == NULL)
|
|
||||||
{
|
|
||||||
dgn_throw(DGN_ALLOC);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(d->buf, 0, tmp_len);
|
|
||||||
memset(d->buf + tmp_len, DOOM_STEPS - 1, buf->width);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void doom_free(struct term_buf* buf)
|
|
||||||
{
|
|
||||||
// cast state to doom_state pointer
|
|
||||||
free(((struct doom_state*)buf->astate)->buf);
|
|
||||||
free(((struct doom_state*)buf->astate));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void doom(struct term_buf* term_buf)
|
|
||||||
{
|
|
||||||
static struct tb_cell fire[DOOM_STEPS] =
|
|
||||||
{
|
|
||||||
{' ', 9, 0}, // default
|
|
||||||
{0x2591, 2, 0}, // red
|
|
||||||
{0x2592, 2, 0}, // red
|
|
||||||
{0x2593, 2, 0}, // red
|
|
||||||
{0x2588, 2, 0}, // red
|
|
||||||
{0x2591, 4, 2}, // yellow
|
|
||||||
{0x2592, 4, 2}, // yellow
|
|
||||||
{0x2593, 4, 2}, // yellow
|
|
||||||
{0x2588, 4, 2}, // yellow
|
|
||||||
{0x2591, 8, 4}, // white
|
|
||||||
{0x2592, 8, 4}, // white
|
|
||||||
{0x2593, 8, 4}, // white
|
|
||||||
{0x2588, 8, 4}, // white
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t src;
|
|
||||||
uint16_t random;
|
|
||||||
uint16_t dst;
|
|
||||||
|
|
||||||
uint16_t w = term_buf->init_width;
|
|
||||||
uint8_t* tmp = ((struct doom_state*)term_buf->astate)->buf;
|
|
||||||
|
|
||||||
if ((term_buf->width != term_buf->init_width) || (term_buf->height != term_buf->init_height))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct tb_cell* buf = tb_cell_buffer();
|
|
||||||
|
|
||||||
for (uint16_t x = 0; x < w; ++x)
|
|
||||||
{
|
|
||||||
for (uint16_t y = 1; y < term_buf->init_height; ++y)
|
|
||||||
{
|
|
||||||
src = y * w + x;
|
|
||||||
random = ((rand() % 7) & 3);
|
|
||||||
dst = src - random + 1;
|
|
||||||
|
|
||||||
if (w > dst)
|
|
||||||
{
|
|
||||||
dst = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dst -= w;
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp[dst] = tmp[src] - (random & 1);
|
|
||||||
|
|
||||||
if (tmp[dst] > 12)
|
|
||||||
{
|
|
||||||
tmp[dst] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[dst] = fire[tmp[dst]];
|
|
||||||
buf[src] = fire[tmp[src]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,146 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define CLOCK_W 5
|
||||||
|
#define CLOCK_H 5
|
||||||
|
|
||||||
|
#if defined(__linux__) || defined(__FreeBSD__)
|
||||||
|
#define X 0x2593
|
||||||
|
#define _ 0x0000
|
||||||
|
#else
|
||||||
|
#define X '#'
|
||||||
|
#define _ 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CLOCK_W == 5 && CLOCK_H == 5
|
||||||
|
|
||||||
|
uint32_t CLOCK_0[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,X,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_1[] = {
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_2[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,_,_,
|
||||||
|
X,X,X,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_3[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
X,X,X,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
X,X,X,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_4[] = {
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,X,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_5[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,_,_,
|
||||||
|
X,X,X,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
X,X,X,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_6[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,_,_,
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,X,X,X,
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_7[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
_,_,_,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_8[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,X,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_9[] = {
|
||||||
|
X,X,X,X,X,
|
||||||
|
X,X,_,X,X,
|
||||||
|
X,X,X,X,X,
|
||||||
|
_,_,_,X,X,
|
||||||
|
X,X,X,X,X
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_S[] = {
|
||||||
|
_,_,_,_,_,
|
||||||
|
_,_,X,_,_,
|
||||||
|
_,_,_,_,_,
|
||||||
|
_,_,X,_,_,
|
||||||
|
_,_,_,_,_
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t CLOCK_E[] = {
|
||||||
|
_,_,_,_,_,
|
||||||
|
_,_,_,_,_,
|
||||||
|
_,_,_,_,_,
|
||||||
|
_,_,_,_,_,
|
||||||
|
_,_,_,_,_
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef X
|
||||||
|
#undef _
|
||||||
|
|
||||||
|
static inline uint32_t* CLOCK_N(char c)
|
||||||
|
{
|
||||||
|
switch(c)
|
||||||
|
{
|
||||||
|
case '0':
|
||||||
|
return CLOCK_0;
|
||||||
|
case '1':
|
||||||
|
return CLOCK_1;
|
||||||
|
case '2':
|
||||||
|
return CLOCK_2;
|
||||||
|
case '3':
|
||||||
|
return CLOCK_3;
|
||||||
|
case '4':
|
||||||
|
return CLOCK_4;
|
||||||
|
case '5':
|
||||||
|
return CLOCK_5;
|
||||||
|
case '6':
|
||||||
|
return CLOCK_6;
|
||||||
|
case '7':
|
||||||
|
return CLOCK_7;
|
||||||
|
case '8':
|
||||||
|
return CLOCK_8;
|
||||||
|
case '9':
|
||||||
|
return CLOCK_9;
|
||||||
|
case ':':
|
||||||
|
return CLOCK_S;
|
||||||
|
default:
|
||||||
|
return CLOCK_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
28
src/config.c
28
src/config.c
|
|
@ -113,13 +113,13 @@ void lang_load()
|
||||||
{"err_user_uid", &lang.err_user_uid, lang_handle},
|
{"err_user_uid", &lang.err_user_uid, lang_handle},
|
||||||
{"err_xsessions_dir", &lang.err_xsessions_dir, lang_handle},
|
{"err_xsessions_dir", &lang.err_xsessions_dir, lang_handle},
|
||||||
{"err_xsessions_open", &lang.err_xsessions_open, lang_handle},
|
{"err_xsessions_open", &lang.err_xsessions_open, lang_handle},
|
||||||
{"f1", &lang.f1, lang_handle},
|
|
||||||
{"f2", &lang.f2, lang_handle},
|
|
||||||
{"login", &lang.login, lang_handle},
|
{"login", &lang.login, lang_handle},
|
||||||
{"logout", &lang.logout, lang_handle},
|
{"logout", &lang.logout, lang_handle},
|
||||||
{"numlock", &lang.numlock, lang_handle},
|
{"numlock", &lang.numlock, lang_handle},
|
||||||
{"password", &lang.password, lang_handle},
|
{"password", &lang.password, lang_handle},
|
||||||
|
{"restart", &lang.restart, lang_handle},
|
||||||
{"shell", &lang.shell, lang_handle},
|
{"shell", &lang.shell, lang_handle},
|
||||||
|
{"shutdown", &lang.shutdown, lang_handle},
|
||||||
{"wayland", &lang.wayland, lang_handle},
|
{"wayland", &lang.wayland, lang_handle},
|
||||||
{"xinitrc", &lang.xinitrc, lang_handle},
|
{"xinitrc", &lang.xinitrc, lang_handle},
|
||||||
};
|
};
|
||||||
|
|
@ -161,13 +161,15 @@ void config_load(const char *cfg_path)
|
||||||
{"animation", &config.animation, config_handle_u8},
|
{"animation", &config.animation, config_handle_u8},
|
||||||
{"asterisk", &config.asterisk, config_handle_char},
|
{"asterisk", &config.asterisk, config_handle_char},
|
||||||
{"bg", &config.bg, config_handle_u8},
|
{"bg", &config.bg, config_handle_u8},
|
||||||
|
{"bigclock", &config.bigclock, config_handle_bool},
|
||||||
{"blank_box", &config.blank_box, config_handle_bool},
|
{"blank_box", &config.blank_box, config_handle_bool},
|
||||||
{"blank_password", &config.blank_password, config_handle_bool},
|
{"blank_password", &config.blank_password, config_handle_bool},
|
||||||
|
{"clock", &config.clock, config_handle_str},
|
||||||
{"console_dev", &config.console_dev, config_handle_str},
|
{"console_dev", &config.console_dev, config_handle_str},
|
||||||
{"default_input", &config.default_input, config_handle_u8},
|
{"default_input", &config.default_input, config_handle_u8},
|
||||||
{"fg", &config.fg, config_handle_u8},
|
{"fg", &config.fg, config_handle_u8},
|
||||||
{"hide_borders", &config.hide_borders, config_handle_bool},
|
{"hide_borders", &config.hide_borders, config_handle_bool},
|
||||||
{"hide_f1_commands", &config.hide_f1_commands, config_handle_bool},
|
{"hide_key_hints", &config.hide_key_hints, config_handle_bool},
|
||||||
{"input_len", &config.input_len, config_handle_u8},
|
{"input_len", &config.input_len, config_handle_u8},
|
||||||
{"lang", &config.lang, config_handle_str},
|
{"lang", &config.lang, config_handle_str},
|
||||||
{"load", &config.load, config_handle_bool},
|
{"load", &config.load, config_handle_bool},
|
||||||
|
|
@ -180,10 +182,12 @@ void config_load(const char *cfg_path)
|
||||||
{"min_refresh_delta", &config.min_refresh_delta, config_handle_u16},
|
{"min_refresh_delta", &config.min_refresh_delta, config_handle_u16},
|
||||||
{"path", &config.path, config_handle_str},
|
{"path", &config.path, config_handle_str},
|
||||||
{"restart_cmd", &config.restart_cmd, config_handle_str},
|
{"restart_cmd", &config.restart_cmd, config_handle_str},
|
||||||
|
{"restart_key", &config.restart_key, config_handle_str},
|
||||||
{"save", &config.save, config_handle_bool},
|
{"save", &config.save, config_handle_bool},
|
||||||
{"save_file", &config.save_file, config_handle_str},
|
{"save_file", &config.save_file, config_handle_str},
|
||||||
{"service_name", &config.service_name, config_handle_str},
|
{"service_name", &config.service_name, config_handle_str},
|
||||||
{"shutdown_cmd", &config.shutdown_cmd, config_handle_str},
|
{"shutdown_cmd", &config.shutdown_cmd, config_handle_str},
|
||||||
|
{"shutdown_key", &config.shutdown_key, config_handle_str},
|
||||||
{"term_reset_cmd", &config.term_reset_cmd, config_handle_str},
|
{"term_reset_cmd", &config.term_reset_cmd, config_handle_str},
|
||||||
{"tty", &config.tty, config_handle_u8},
|
{"tty", &config.tty, config_handle_u8},
|
||||||
{"wayland_cmd", &config.wayland_cmd, config_handle_str},
|
{"wayland_cmd", &config.wayland_cmd, config_handle_str},
|
||||||
|
|
@ -196,7 +200,7 @@ void config_load(const char *cfg_path)
|
||||||
{"xsessions", &config.xsessions, config_handle_str},
|
{"xsessions", &config.xsessions, config_handle_str},
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t map_len[] = {34};
|
uint16_t map_len[] = {41};
|
||||||
struct configator_param* map[] =
|
struct configator_param* map[] =
|
||||||
{
|
{
|
||||||
map_no_section,
|
map_no_section,
|
||||||
|
|
@ -252,13 +256,13 @@ void lang_defaults()
|
||||||
lang.err_user_uid = strdup("failed to set user UID");
|
lang.err_user_uid = strdup("failed to set user UID");
|
||||||
lang.err_xsessions_dir = strdup("failed to find sessions folder");
|
lang.err_xsessions_dir = strdup("failed to find sessions folder");
|
||||||
lang.err_xsessions_open = strdup("failed to open sessions folder");
|
lang.err_xsessions_open = strdup("failed to open sessions folder");
|
||||||
lang.f1 = strdup("F1 shutdown");
|
|
||||||
lang.f2 = strdup("F2 reboot");
|
|
||||||
lang.login = strdup("login:");
|
lang.login = strdup("login:");
|
||||||
lang.logout = strdup("logged out");
|
lang.logout = strdup("logged out");
|
||||||
lang.numlock = strdup("numlock");
|
lang.numlock = strdup("numlock");
|
||||||
lang.password = strdup("password:");
|
lang.password = strdup("password:");
|
||||||
|
lang.restart = strdup("reboot");
|
||||||
lang.shell = strdup("shell");
|
lang.shell = strdup("shell");
|
||||||
|
lang.shutdown = strdup("shutdown");
|
||||||
lang.wayland = strdup("wayland");
|
lang.wayland = strdup("wayland");
|
||||||
lang.xinitrc = strdup("xinitrc");
|
lang.xinitrc = strdup("xinitrc");
|
||||||
}
|
}
|
||||||
|
|
@ -269,12 +273,15 @@ void config_defaults()
|
||||||
config.animation = 0;
|
config.animation = 0;
|
||||||
config.asterisk = '*';
|
config.asterisk = '*';
|
||||||
config.bg = 0;
|
config.bg = 0;
|
||||||
|
config.bigclock = false;
|
||||||
config.blank_box = true;
|
config.blank_box = true;
|
||||||
config.blank_password = false;
|
config.blank_password = false;
|
||||||
|
config.clock = NULL;
|
||||||
config.console_dev = strdup("/dev/console");
|
config.console_dev = strdup("/dev/console");
|
||||||
config.default_input = LOGIN_INPUT;
|
config.default_input = LOGIN_INPUT;
|
||||||
config.fg = 9;
|
config.fg = 9;
|
||||||
config.hide_borders = false;
|
config.hide_borders = false;
|
||||||
|
config.hide_key_hints = false;
|
||||||
config.input_len = 34;
|
config.input_len = 34;
|
||||||
config.lang = strdup("en");
|
config.lang = strdup("en");
|
||||||
config.load = true;
|
config.load = true;
|
||||||
|
|
@ -287,10 +294,12 @@ void config_defaults()
|
||||||
config.min_refresh_delta = 5;
|
config.min_refresh_delta = 5;
|
||||||
config.path = strdup("/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin");
|
config.path = strdup("/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin");
|
||||||
config.restart_cmd = strdup("/sbin/shutdown -r now");
|
config.restart_cmd = strdup("/sbin/shutdown -r now");
|
||||||
|
config.restart_key = strdup("F2");
|
||||||
config.save = true;
|
config.save = true;
|
||||||
config.save_file = strdup("/etc/ly/save");
|
config.save_file = strdup("/etc/ly/save");
|
||||||
config.service_name = strdup("ly");
|
config.service_name = strdup("ly");
|
||||||
config.shutdown_cmd = strdup("/sbin/shutdown -a now");
|
config.shutdown_cmd = strdup("/sbin/shutdown -a now");
|
||||||
|
config.shutdown_key = strdup("F1");
|
||||||
config.term_reset_cmd = strdup("/usr/bin/tput reset");
|
config.term_reset_cmd = strdup("/usr/bin/tput reset");
|
||||||
config.tty = 2;
|
config.tty = 2;
|
||||||
config.wayland_cmd = strdup(DATADIR "/wsetup.sh");
|
config.wayland_cmd = strdup(DATADIR "/wsetup.sh");
|
||||||
|
|
@ -341,27 +350,30 @@ void lang_free()
|
||||||
free(lang.err_user_uid);
|
free(lang.err_user_uid);
|
||||||
free(lang.err_xsessions_dir);
|
free(lang.err_xsessions_dir);
|
||||||
free(lang.err_xsessions_open);
|
free(lang.err_xsessions_open);
|
||||||
free(lang.f1);
|
|
||||||
free(lang.f2);
|
|
||||||
free(lang.login);
|
free(lang.login);
|
||||||
free(lang.logout);
|
free(lang.logout);
|
||||||
free(lang.numlock);
|
free(lang.numlock);
|
||||||
free(lang.password);
|
free(lang.password);
|
||||||
|
free(lang.restart);
|
||||||
free(lang.shell);
|
free(lang.shell);
|
||||||
|
free(lang.shutdown);
|
||||||
free(lang.wayland);
|
free(lang.wayland);
|
||||||
free(lang.xinitrc);
|
free(lang.xinitrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void config_free()
|
void config_free()
|
||||||
{
|
{
|
||||||
|
free(config.clock);
|
||||||
free(config.console_dev);
|
free(config.console_dev);
|
||||||
free(config.lang);
|
free(config.lang);
|
||||||
free(config.mcookie_cmd);
|
free(config.mcookie_cmd);
|
||||||
free(config.path);
|
free(config.path);
|
||||||
free(config.restart_cmd);
|
free(config.restart_cmd);
|
||||||
|
free(config.restart_key);
|
||||||
free(config.save_file);
|
free(config.save_file);
|
||||||
free(config.service_name);
|
free(config.service_name);
|
||||||
free(config.shutdown_cmd);
|
free(config.shutdown_cmd);
|
||||||
|
free(config.shutdown_key);
|
||||||
free(config.term_reset_cmd);
|
free(config.term_reset_cmd);
|
||||||
free(config.wayland_cmd);
|
free(config.wayland_cmd);
|
||||||
free(config.waylandsessions);
|
free(config.waylandsessions);
|
||||||
|
|
|
||||||
10
src/config.h
10
src/config.h
|
|
@ -48,13 +48,13 @@ struct lang
|
||||||
char* err_user_uid;
|
char* err_user_uid;
|
||||||
char* err_xsessions_dir;
|
char* err_xsessions_dir;
|
||||||
char* err_xsessions_open;
|
char* err_xsessions_open;
|
||||||
char* f1;
|
|
||||||
char* f2;
|
|
||||||
char* login;
|
char* login;
|
||||||
char* logout;
|
char* logout;
|
||||||
char* numlock;
|
char* numlock;
|
||||||
char* password;
|
char* password;
|
||||||
|
char* restart;
|
||||||
char* shell;
|
char* shell;
|
||||||
|
char* shutdown;
|
||||||
char* wayland;
|
char* wayland;
|
||||||
char* xinitrc;
|
char* xinitrc;
|
||||||
};
|
};
|
||||||
|
|
@ -65,13 +65,15 @@ struct config
|
||||||
uint8_t animation;
|
uint8_t animation;
|
||||||
char asterisk;
|
char asterisk;
|
||||||
uint8_t bg;
|
uint8_t bg;
|
||||||
|
bool bigclock;
|
||||||
bool blank_box;
|
bool blank_box;
|
||||||
bool blank_password;
|
bool blank_password;
|
||||||
|
char* clock;
|
||||||
char* console_dev;
|
char* console_dev;
|
||||||
uint8_t default_input;
|
uint8_t default_input;
|
||||||
uint8_t fg;
|
uint8_t fg;
|
||||||
bool hide_borders;
|
bool hide_borders;
|
||||||
bool hide_f1_commands;
|
bool hide_key_hints;
|
||||||
uint8_t input_len;
|
uint8_t input_len;
|
||||||
char* lang;
|
char* lang;
|
||||||
bool load;
|
bool load;
|
||||||
|
|
@ -84,10 +86,12 @@ struct config
|
||||||
uint16_t min_refresh_delta;
|
uint16_t min_refresh_delta;
|
||||||
char* path;
|
char* path;
|
||||||
char* restart_cmd;
|
char* restart_cmd;
|
||||||
|
char* restart_key;
|
||||||
bool save;
|
bool save;
|
||||||
char* save_file;
|
char* save_file;
|
||||||
char* service_name;
|
char* service_name;
|
||||||
char* shutdown_cmd;
|
char* shutdown_cmd;
|
||||||
|
char* shutdown_key;
|
||||||
char* term_reset_cmd;
|
char* term_reset_cmd;
|
||||||
uint8_t tty;
|
uint8_t tty;
|
||||||
char* wayland_cmd;
|
char* wayland_cmd;
|
||||||
|
|
|
||||||
154
src/draw.c
154
src/draw.c
|
|
@ -5,6 +5,7 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "draw.h"
|
#include "draw.h"
|
||||||
|
#include "bigclock.h"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
@ -14,7 +15,9 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#if defined(__DragonFly__) || defined(__FreeBSD__)
|
#if defined(__DragonFly__) || defined(__FreeBSD__)
|
||||||
#include <sys/kbio.h>
|
#include <sys/kbio.h>
|
||||||
|
|
@ -156,6 +159,105 @@ void draw_box(struct term_buf* buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* time_str(char* fmt, int maxlen)
|
||||||
|
{
|
||||||
|
time_t timer;
|
||||||
|
char* buffer = malloc(maxlen);
|
||||||
|
struct tm* tm_info;
|
||||||
|
|
||||||
|
timer = time(NULL);
|
||||||
|
tm_info = localtime(&timer);
|
||||||
|
|
||||||
|
if (strftime(buffer, maxlen, fmt, tm_info) == 0)
|
||||||
|
{
|
||||||
|
buffer[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern inline uint32_t* CLOCK_N(char c);
|
||||||
|
|
||||||
|
struct tb_cell* clock_cell(char c)
|
||||||
|
{
|
||||||
|
struct tb_cell* cells = malloc(sizeof(struct tb_cell) * CLOCK_W * CLOCK_H);
|
||||||
|
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
if (config.animate && c == ':' && tv.tv_usec / 500000)
|
||||||
|
{
|
||||||
|
c = ' ';
|
||||||
|
}
|
||||||
|
uint32_t* clockchars = CLOCK_N(c);
|
||||||
|
|
||||||
|
for (int i = 0; i < CLOCK_W * CLOCK_H; i++)
|
||||||
|
{
|
||||||
|
cells[i].ch = clockchars[i];
|
||||||
|
cells[i].fg = config.fg;
|
||||||
|
cells[i].bg = config.bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cells;
|
||||||
|
}
|
||||||
|
|
||||||
|
void alpha_blit(struct tb_cell* buf, uint16_t x, uint16_t y, uint16_t w, uint16_t h, struct tb_cell* cells)
|
||||||
|
{
|
||||||
|
if (x + w >= tb_width() || y + h >= tb_height())
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int i = 0; i < h; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < w; j++)
|
||||||
|
{
|
||||||
|
struct tb_cell cell = cells[i * w + j];
|
||||||
|
if (cell.ch)
|
||||||
|
{
|
||||||
|
buf[(y + i) * tb_width() + (x + j)] = cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_bigclock(struct term_buf* buf)
|
||||||
|
{
|
||||||
|
if (!config.bigclock)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int xo = buf->width / 2 - (5 * (CLOCK_W + 1)) / 2;
|
||||||
|
int yo = (buf->height - buf->box_height) / 2 - CLOCK_H - 2;
|
||||||
|
|
||||||
|
char* clockstr = time_str("%H:%M", 6);
|
||||||
|
struct tb_cell* clockcell;
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
{
|
||||||
|
clockcell = clock_cell(clockstr[i]);
|
||||||
|
alpha_blit(tb_cell_buffer(), xo + i * (CLOCK_W + 1), yo, CLOCK_W, CLOCK_H, clockcell);
|
||||||
|
free(clockcell);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(clockstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_clock(struct term_buf* buf)
|
||||||
|
{
|
||||||
|
if (config.clock == NULL || strlen(config.clock) == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* clockstr = time_str(config.clock, 32);
|
||||||
|
int clockstrlen = strlen(clockstr);
|
||||||
|
|
||||||
|
struct tb_cell* cells = strn_cell(clockstr, clockstrlen);
|
||||||
|
tb_blit(buf->width - clockstrlen, 0, clockstrlen, 1, cells);
|
||||||
|
|
||||||
|
free(clockstr);
|
||||||
|
free(cells);
|
||||||
|
}
|
||||||
|
|
||||||
struct tb_cell* strn_cell(char* s, uint16_t len) // throws
|
struct tb_cell* strn_cell(char* s, uint16_t len) // throws
|
||||||
{
|
{
|
||||||
struct tb_cell* cells = malloc((sizeof (struct tb_cell)) * len);
|
struct tb_cell* cells = malloc((sizeof (struct tb_cell)) * len);
|
||||||
|
|
@ -251,30 +353,54 @@ void draw_labels(struct term_buf* buf) // throws
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_f_commands()
|
void draw_key_hints()
|
||||||
{
|
{
|
||||||
struct tb_cell* f1 = str_cell(lang.f1);
|
struct tb_cell* shutdown_key = str_cell(config.shutdown_key);
|
||||||
|
int len = strlen(config.shutdown_key);
|
||||||
if (dgn_catch())
|
if (dgn_catch())
|
||||||
{
|
{
|
||||||
dgn_reset();
|
dgn_reset();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tb_blit(0, 0, strlen(lang.f1), 1, f1);
|
tb_blit(0, 0, len, 1, shutdown_key);
|
||||||
free(f1);
|
free(shutdown_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct tb_cell* f2 = str_cell(lang.f2);
|
struct tb_cell* shutdown = str_cell(lang.shutdown);
|
||||||
|
len += 1;
|
||||||
if (dgn_catch())
|
if (dgn_catch())
|
||||||
{
|
{
|
||||||
dgn_reset();
|
dgn_reset();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tb_blit(strlen(lang.f1) + 1, 0, strlen(lang.f2), 1, f2);
|
tb_blit(len, 0, strlen(lang.shutdown), 1, shutdown);
|
||||||
free(f2);
|
free(shutdown);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct tb_cell* restart_key = str_cell(config.restart_key);
|
||||||
|
len += strlen(lang.shutdown) + 1;
|
||||||
|
if (dgn_catch())
|
||||||
|
{
|
||||||
|
dgn_reset();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tb_blit(len, 0, strlen(config.restart_key), 1, restart_key);
|
||||||
|
free(restart_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct tb_cell* restart = str_cell(lang.restart);
|
||||||
|
len += strlen(config.restart_key) + 1;
|
||||||
|
if (dgn_catch())
|
||||||
|
{
|
||||||
|
dgn_reset();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tb_blit(len, 0, strlen(lang.restart), 1, restart);
|
||||||
|
free(restart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -308,6 +434,11 @@ void draw_lock_state(struct term_buf* buf)
|
||||||
|
|
||||||
// print text
|
// print text
|
||||||
uint16_t pos_x = buf->width - strlen(lang.numlock);
|
uint16_t pos_x = buf->width - strlen(lang.numlock);
|
||||||
|
uint16_t pos_y = 1;
|
||||||
|
if (config.clock == NULL || strlen(config.clock) == 0)
|
||||||
|
{
|
||||||
|
pos_y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (numlock_on)
|
if (numlock_on)
|
||||||
{
|
{
|
||||||
|
|
@ -319,7 +450,7 @@ void draw_lock_state(struct term_buf* buf)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tb_blit(pos_x, 0, strlen(lang.numlock), 1, numlock);
|
tb_blit(pos_x, pos_y, strlen(lang.numlock), 1, numlock);
|
||||||
free(numlock);
|
free(numlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -336,7 +467,7 @@ void draw_lock_state(struct term_buf* buf)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tb_blit(pos_x, 0, strlen(lang.capslock), 1, capslock);
|
tb_blit(pos_x, pos_y, strlen(lang.capslock), 1, capslock);
|
||||||
free(capslock);
|
free(capslock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -468,7 +599,6 @@ void position_input(
|
||||||
password->visible_len = len;
|
password->visible_len = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool cascade(struct term_buf* term_buf, uint8_t* fails)
|
bool cascade(struct term_buf* term_buf, uint8_t* fails)
|
||||||
{
|
{
|
||||||
uint16_t width = term_buf->width;
|
uint16_t width = term_buf->width;
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ struct tb_cell* strn_cell(char* s, uint16_t len);
|
||||||
struct tb_cell* str_cell(char* s);
|
struct tb_cell* str_cell(char* s);
|
||||||
|
|
||||||
void draw_labels(struct term_buf* buf);
|
void draw_labels(struct term_buf* buf);
|
||||||
void draw_f_commands();
|
void draw_key_hints();
|
||||||
void draw_lock_state(struct term_buf* buf);
|
void draw_lock_state(struct term_buf* buf);
|
||||||
void draw_desktop(struct desktop* target);
|
void draw_desktop(struct desktop* target);
|
||||||
void draw_input(struct text* input);
|
void draw_input(struct text* input);
|
||||||
|
|
@ -62,4 +62,7 @@ void position_input(
|
||||||
|
|
||||||
bool cascade(struct term_buf* buf, uint8_t* fails);
|
bool cascade(struct term_buf* buf, uint8_t* fails);
|
||||||
|
|
||||||
|
void draw_bigclock(struct term_buf *buf);
|
||||||
|
void draw_clock(struct term_buf *buf);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,11 @@ void handle_desktop(void* input_struct, struct tb_event* event)
|
||||||
|
|
||||||
if ((event != NULL) && (event->type == TB_EVENT_KEY))
|
if ((event != NULL) && (event->type == TB_EVENT_KEY))
|
||||||
{
|
{
|
||||||
if (event->key == TB_KEY_ARROW_LEFT)
|
if (event->key == TB_KEY_ARROW_LEFT || (event->key == TB_KEY_CTRL_H))
|
||||||
{
|
{
|
||||||
input_desktop_right(target);
|
input_desktop_right(target);
|
||||||
}
|
}
|
||||||
else if (event->key == TB_KEY_ARROW_RIGHT)
|
else if (event->key == TB_KEY_ARROW_RIGHT || (event->key == TB_KEY_CTRL_L))
|
||||||
{
|
{
|
||||||
input_desktop_left(target);
|
input_desktop_left(target);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
88
src/main.c
88
src/main.c
|
|
@ -15,12 +15,15 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define ARG_COUNT 7
|
#define ARG_COUNT 7
|
||||||
// things you can define:
|
|
||||||
// GIT_VERSION_STRING
|
#ifndef LY_VERSION
|
||||||
|
#define LY_VERSION "0.6.0"
|
||||||
|
#endif
|
||||||
|
|
||||||
// global
|
// global
|
||||||
struct lang lang;
|
struct lang lang;
|
||||||
|
|
@ -30,15 +33,13 @@ struct config config;
|
||||||
void arg_help(void* data, char** pars, const int pars_count)
|
void arg_help(void* data, char** pars, const int pars_count)
|
||||||
{
|
{
|
||||||
printf("If you want to configure Ly, please check the config file, usually located at /etc/ly/config.ini.\n");
|
printf("If you want to configure Ly, please check the config file, usually located at /etc/ly/config.ini.\n");
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arg_version(void* data, char** pars, const int pars_count)
|
void arg_version(void* data, char** pars, const int pars_count)
|
||||||
{
|
{
|
||||||
#ifdef GIT_VERSION_STRING
|
printf("Ly version %s\n", LY_VERSION);
|
||||||
printf("Ly version %s\n", GIT_VERSION_STRING);
|
exit(0);
|
||||||
#else
|
|
||||||
printf("Ly version unknown\n");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// low-level error messages
|
// low-level error messages
|
||||||
|
|
@ -189,10 +190,12 @@ int main(int argc, char** argv)
|
||||||
(*input_handles[active_input])(input_structs[active_input], NULL);
|
(*input_handles[active_input])(input_structs[active_input], NULL);
|
||||||
tb_clear();
|
tb_clear();
|
||||||
animate(&buf);
|
animate(&buf);
|
||||||
|
draw_bigclock(&buf);
|
||||||
draw_box(&buf);
|
draw_box(&buf);
|
||||||
|
draw_clock(&buf);
|
||||||
draw_labels(&buf);
|
draw_labels(&buf);
|
||||||
if(!config.hide_f1_commands)
|
if(!config.hide_key_hints)
|
||||||
draw_f_commands();
|
draw_key_hints();
|
||||||
draw_lock_state(&buf);
|
draw_lock_state(&buf);
|
||||||
position_input(&buf, &desktop, &login, &password);
|
position_input(&buf, &desktop, &login, &password);
|
||||||
draw_desktop(&desktop);
|
draw_desktop(&desktop);
|
||||||
|
|
@ -209,11 +212,30 @@ int main(int argc, char** argv)
|
||||||
tb_present();
|
tb_present();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.animate) {
|
int timeout = -1;
|
||||||
error = tb_peek_event(&event, config.min_refresh_delta);
|
|
||||||
} else {
|
if (config.animate)
|
||||||
error = tb_poll_event(&event);
|
{
|
||||||
|
timeout = config.min_refresh_delta;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
if (config.bigclock)
|
||||||
|
timeout = (60 - tv.tv_sec % 60) * 1000 - tv.tv_usec / 1000 + 1;
|
||||||
|
if (config.clock)
|
||||||
|
timeout = 1000 - tv.tv_usec / 1000 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeout == -1)
|
||||||
|
{
|
||||||
|
error = tb_poll_event(&event);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error = tb_peek_event(&event, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
{
|
{
|
||||||
|
|
@ -222,15 +244,40 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
if (event.type == TB_EVENT_KEY)
|
if (event.type == TB_EVENT_KEY)
|
||||||
{
|
{
|
||||||
|
char shutdown_key[4];
|
||||||
|
memset(shutdown_key, '\0', sizeof(shutdown_key));
|
||||||
|
strcpy(shutdown_key, config.shutdown_key);
|
||||||
|
memcpy(shutdown_key, "0", 1);
|
||||||
|
|
||||||
|
char restart_key[4];
|
||||||
|
memset(restart_key, '\0', sizeof(restart_key));
|
||||||
|
strcpy(restart_key, config.restart_key);
|
||||||
|
memcpy(restart_key, "0", 1);
|
||||||
|
|
||||||
switch (event.key)
|
switch (event.key)
|
||||||
{
|
{
|
||||||
case TB_KEY_F1:
|
case TB_KEY_F1:
|
||||||
shutdown = true;
|
|
||||||
run = false;
|
|
||||||
break;
|
|
||||||
case TB_KEY_F2:
|
case TB_KEY_F2:
|
||||||
reboot = true;
|
case TB_KEY_F3:
|
||||||
run = false;
|
case TB_KEY_F4:
|
||||||
|
case TB_KEY_F5:
|
||||||
|
case TB_KEY_F6:
|
||||||
|
case TB_KEY_F7:
|
||||||
|
case TB_KEY_F8:
|
||||||
|
case TB_KEY_F9:
|
||||||
|
case TB_KEY_F10:
|
||||||
|
case TB_KEY_F11:
|
||||||
|
case TB_KEY_F12:
|
||||||
|
if( 0xFFFF - event.key + 1 == atoi(shutdown_key) )
|
||||||
|
{
|
||||||
|
shutdown = true;
|
||||||
|
run = false;
|
||||||
|
}
|
||||||
|
if( 0xFFFF - event.key + 1 == atoi(restart_key) )
|
||||||
|
{
|
||||||
|
reboot = true;
|
||||||
|
run = false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case TB_KEY_CTRL_C:
|
case TB_KEY_CTRL_C:
|
||||||
run = false;
|
run = false;
|
||||||
|
|
@ -242,6 +289,7 @@ int main(int argc, char** argv)
|
||||||
update = true;
|
update = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TB_KEY_CTRL_K:
|
||||||
case TB_KEY_ARROW_UP:
|
case TB_KEY_ARROW_UP:
|
||||||
if (active_input > 0)
|
if (active_input > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -249,6 +297,7 @@ int main(int argc, char** argv)
|
||||||
update = true;
|
update = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TB_KEY_CTRL_J:
|
||||||
case TB_KEY_ARROW_DOWN:
|
case TB_KEY_ARROW_DOWN:
|
||||||
if (active_input < 2)
|
if (active_input < 2)
|
||||||
{
|
{
|
||||||
|
|
@ -323,8 +372,7 @@ int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
execl("/bin/sh", "sh", "-c", config.shutdown_cmd, NULL);
|
execl("/bin/sh", "sh", "-c", config.shutdown_cmd, NULL);
|
||||||
}
|
}
|
||||||
|
else if (reboot)
|
||||||
if (reboot)
|
|
||||||
{
|
{
|
||||||
execl("/bin/sh", "sh", "-c", config.restart_cmd, NULL);
|
execl("/bin/sh", "sh", "-c", config.restart_cmd, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue