From 402d8946f61de3f74e45ddba338b6863c806b7ec Mon Sep 17 00:00:00 2001 From: Thomas Briffard Date: Sun, 11 Jul 2021 11:12:31 +0200 Subject: [PATCH] tentative pour tilix, tout ne semble pas encore fonctionnel, mais l'application se lance... --- Dockerfile_centos7_base | 5 +- Makefile | 4 + README.md | 1 + docker-compose.yml | 16 ++ ...omogeneous-parameter-for-title-stack.patch | 25 +++ tilix/Dockerfile_centos7_tilix | 49 +++++ tilix/tilix.desktop | 203 ++++++++++++++++++ tilix/tilix.png | Bin 0 -> 8919 bytes tilix/tilix_pre_step.sh | 12 ++ 9 files changed, 313 insertions(+), 2 deletions(-) create mode 100644 tilix/0001-Set-hhomogeneous-parameter-for-title-stack.patch create mode 100644 tilix/Dockerfile_centos7_tilix create mode 100644 tilix/tilix.desktop create mode 100644 tilix/tilix.png create mode 100755 tilix/tilix_pre_step.sh diff --git a/Dockerfile_centos7_base b/Dockerfile_centos7_base index afe48e0..21ba34e 100644 --- a/Dockerfile_centos7_base +++ b/Dockerfile_centos7_base @@ -48,8 +48,9 @@ xorg-x11-apps && \ wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage && \ wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage && \ wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage && \ -chmod +x linuxdeploy-x86_64.AppImage appimagetool-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage && \ -mv linuxdeploy-x86_64.AppImage appimagetool-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage /usr/bin/ && \ +wget https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh && \ +chmod +x linuxdeploy-x86_64.AppImage appimagetool-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage linuxdeploy-plugin-gtk.sh && \ +mv linuxdeploy-x86_64.AppImage appimagetool-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage linuxdeploy-plugin-gtk.sh /usr/bin/ && \ yum clean all && python3 -m pip install --upgrade pip && pip3 install six # on fixe le fuseau horaire dans le conteneur, diff --git a/Makefile b/Makefile index 89bcbc1..bbf562b 100644 --- a/Makefile +++ b/Makefile @@ -31,3 +31,7 @@ valgrind: init_env build_base kdiff3: init_env build_base_qt docker-compose build kdiff3 docker-compose run --rm kdiff3 + +tilix: init_env build_base + docker-compose build tilix + docker-compose run --rm tilix diff --git a/README.md b/README.md index 8e71a89..21d775a 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Les applications suivantes: - qgit - qtcreator - qcachegrind + - tilix (en cours) sont compilées dans un conteneur CentOS7 (glibc 2.17) puis livrées au format [AppImage](https://appimage.org/) via les outils [linuxdeploy](https://github.com/linuxdeploy/linuxdeploy) et [appimagetool](https://github.com/AppImage/AppImageKit). diff --git a/docker-compose.yml b/docker-compose.yml index 12270d5..d5e4e22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -121,3 +121,19 @@ services: - NOM_APPIMAGE=kdiff_3_1.9.2 command : ["bash", "-c","/template.sh /usr/local/bin/kdiff3 /build"] + tilix: + build: + context: ./tilix + dockerfile: ./Dockerfile_centos7_tilix + image: cos7_tilix + container_name: docker_cos7_tilix + privileged: true + volumes: + - ./tilix:/build + - ./template.sh:/template.sh + env_file: + - ./.env + environment: + - CUSTOM_STEP_PRE_DEPLOY=/build/tilix_pre_step.sh + - NOM_APPIMAGE=tilix_1.9.4 + command : ["bash", "-c","/template.sh /usr/bin/tilix /build"] diff --git a/tilix/0001-Set-hhomogeneous-parameter-for-title-stack.patch b/tilix/0001-Set-hhomogeneous-parameter-for-title-stack.patch new file mode 100644 index 0000000..3763ad0 --- /dev/null +++ b/tilix/0001-Set-hhomogeneous-parameter-for-title-stack.patch @@ -0,0 +1,25 @@ +From 8e9ba0fe9343da3d57d9c3eae490e594a3586ad4 Mon Sep 17 00:00:00 2001 +From: Briffou +Date: Sat, 12 Oct 2019 22:42:29 -0400 +Subject: [PATCH 1/2] Set hhomogeneous parameter for title stack + +should fix https://github.com/gnunn1/tilix/issues/1691 +--- + source/gx/tilix/appwindow.d | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/source/gx/tilix/appwindow.d b/source/gx/tilix/appwindow.d +index 485ddb3d..e46aad97 100644 +--- a/source/gx/tilix/appwindow.d ++++ b/source/gx/tilix/appwindow.d +@@ -2119,6 +2119,7 @@ public: + add(afNotifications); + + stTitle = new Stack(); ++ stTitle.setHhomogeneous(false); + + lblText = new Label(text); + lblText.setEllipsize(PangoEllipsizeMode.START); +-- +2.31.1 + diff --git a/tilix/Dockerfile_centos7_tilix b/tilix/Dockerfile_centos7_tilix new file mode 100644 index 0000000..f73ac47 --- /dev/null +++ b/tilix/Dockerfile_centos7_tilix @@ -0,0 +1,49 @@ +# Eh beh, une sacrée tannée à compiler ce logiciel... +# voir le README de GtkD pour avoir tous les bons numéros de version des libs +FROM cos7_base + +ARG TILIX_VER=1.9.4 + +# patch pour corriger la longueur des onglets (en mode "onglets" donc), cf https://github.com/gnunn1/tilix/issues/1691 +ARG PATCH=0001-Set-hhomogeneous-parameter-for-title-stack.patch +COPY $PATCH $PATCH + +RUN yum install -y meson libffi-devel curl-devel libxml2-devel libyaml-devel lmdb-devel gobject-introspection-devel libstemmer-devel gperf libxslt gtk-doc openssl-devel vala intltool glibc-devel libmount-devel libsecret-devel desktop-file-utils ldc po4a gtk3-devel gettext-devel meson xdg-utils gdk-pixbuf2-devel librsvg2-devel vte291-devel libunwind-devel && \ + curl -fsS https://dlang.org/install.sh | bash -s ldc && source ~/dlang/ldc-1.26.0/activate && ln -s /usr/bin/cmake3 /usr/bin/cmake + +# vte +RUN git clone https://github.com/GNOME/vte.git && cd vte && \ + export LD_LIBRARY_PATH="/lib64" && git checkout 0.52.4 && \ + ./autogen.sh && make && make install && cd / && rm -rf /vte + +# Glib +RUN git clone https://github.com/GNOME/glib.git && cd glib && \ + git checkout 2.56.0 && meson _build && \ + export LC_CTYPE=en_US.UTF-8 && \ + ninja -C _build && ninja -C _build install && cd / && rm -rf /glib + +# curl +RUN git clone https://github.com/curl/curl.git && cd curl && \ + autoreconf -fi && ./configure --with-openssl && make && make install && cd / && rm -rf /curl + +# Appstreamcli +RUN export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/:/usr/local/lib/pkgconfig/ && \ + git clone https://github.com/ximion/appstream.git && \ + cd appstream && git checkout v0.12.9 && \ + meson _build && ninja -C _build && ninja -C _build install && \ + export LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH && cd / && rm -rf appstream + +# GtkD +RUN git clone https://github.com/gtkd-developers/GtkD.git && cd GtkD && \ + source ~/dlang/ldc-1.26.0/activate && \ + git checkout v3.8.5 && make -i -j20 && make -j20 install && cd / && rm -rf GtkD + +# tilix, enfin !!! +RUN source ~/dlang/ldc-1.26.0/activate && export LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH && \ + git clone https://github.com/gnunn1/tilix.git && \ + cd tilix && git apply /$PATCH && \ + export PKG_CONFIG_PATH=/usr/local/share/pkgconfig:$PKG_CONFIG_PATH && \ + meson _build --buildtype=release --prefix=/usr && ninja -C _build && ninja -C _build install + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/tilix/tilix.desktop b/tilix/tilix.desktop new file mode 100644 index 0000000..9f3ff0d --- /dev/null +++ b/tilix/tilix.desktop @@ -0,0 +1,203 @@ +[Desktop Entry] +Version=1.0 +Name[ar]=تِلِكس +Name[bg]=Tilix +Name[ca]=Tilix +Name[cs]=Tilix +Name[de]=Tilix +Name[en_GB]=Tilix +Name[eo]=Tilix +Name[es]=Tilix +Name[eu]=Tilix +Name[fi]=Tilix +Name[fr]=Tilix +Name[gl]=Tilix +Name[he]=Tilix +Name[hr]=Tilix +Name[hu]=Tilix +Name[id]=Tilix +Name[it]=Tilix +Name[ja]=Tilix +Name[ko]=Tilix +Name[nb_NO]=Tilix +Name[nl]=Tilix +Name[pl]=Tilix +Name[pt_BR]=Tilix +Name[pt_PT]=Tilix +Name[ro]=Tilix +Name[ru]=Tilix +Name[sr]=Тајликс +Name[sv]=Tilix +Name[tr]=Tilix +Name[uk]=Tilix +Name[zh_CN]=Tilix +Name[zh_TW]=Tilix +Name=Tilix +Comment[ca]=Un mosaic de terminals per a Gnome +Comment[cs]=Dlaždicový terminál pro Gnome +Comment[de]=Ein Terminal für GNOME mit Kacheldarstellung +Comment[en_GB]=A tiling terminal for Gnome +Comment[eo]=Kaheliga terminalo por GNOME +Comment[es]=Una terminal divisible para Gnome +Comment[fi]=Laatoittava pääte Gnomelle +Comment[fr]=Un terminal scindable pour Gnome +Comment[he]=מסוף בריצוף עבור GNOME +Comment[hr]=Pločasti terminal za GNOME +Comment[it]=Un terminale a riquadri per Gnome +Comment[ko]=그놈을 위한 타일링 터미널 +Comment[nl]=Een terminal voor Gnome met tegelmogelijkheid +Comment[pl]=Emuluje działanie terminala w środowisku GNOME wykorzystując interfejs kafli +Comment[pt_BR]=Um terminal em mosaico para o GNOME +Comment[pt_PT]=Um terminal em mosaico para o GNOME +Comment[ro]=Un terminal fără suprapunere pentru Gnome +Comment[ru]=Тайлинговый терминал для Gnome +Comment[sr]=Плочасти терминал за Гном +Comment[sv]=En sida-vid-sida-terminal för GNOME +Comment[tr]=Gnome için döşeyen bir terminal +Comment[uk]=Мозаїчний термінал для Gnome +Comment[zh_CN]=GNOME 的平铺终端模拟器 +Comment=A tiling terminal for Gnome +Keywords[ar]=shell;prompt;command;commandline;cmd; +Keywords[ca]=intèrpret d'ordres;indicador;ordre;línia d'ordres; +Keywords[cs]=shell;terminál;příkaz;příkazový řádek;cmd; +Keywords[de]=Shell;Prompt;Befehl;Befehlszeile;command;commandline;cmd; +Keywords[en_GB]=shell;prompt;command;commandline;cmd; +Keywords[eo]=ŝelo;komando;komandlinio;terminalo;terminalimitilo; +Keywords[es]=intérprete;shell;indicador;prompt;orden;línea de órdenes;cmd; +Keywords[fi]=shell;prompt;command;commandline;cmd;komentorivi;pääte; +Keywords[fr]=shell;prompt;commande;ligne de commande;cmd; +Keywords[he]=מעטפת;של;פרומפט;מסוף;טרמינל;שורת פקודה;חלון שחור;פקודה;פקודות; +Keywords[hr]=ljuska;upit;naredba;naredbeni redak;cmd; +Keywords[id]=shell;prompt;perintah;baris perintah;cmd; +Keywords[it]=shell;prompt;comando;linea di comando;cmd; +Keywords[nl]=shell;prompt;opdracht;opdrachtprompt;cmd; +Keywords[oc]=shell;prompt;comanda;linha de comanda; +Keywords[pl]=powłoka;terminal;polecenie;wiersz poleceń;cmd;konsola; +Keywords[pt_BR]=shell;prompt;comando;linha de comando;cmd; +Keywords[pt_PT]=shell;prompt;comando;linha de comando;cmd; +Keywords[ro]=shell;prompt;command;commandline;cmd; +Keywords[ru]=shell;prompt;command;commandline;cmd; +Keywords[sr]=shell;prompt;command;commandline;cmd;terminal;školjka;skoljka;komanda;naredba;linija;šel;терминал;шкољка;команда;наредба;линија;шел; +Keywords[sv]=skal;prompt;kommando;kommandorad;cmd; +Keywords[tr]=shell;prompt;command;commandline;cmd;kabuk;istem;komut;komutsatırı; +Keywords[uk]=shell;prompt;command;commandline;cmd; +Keywords[zh_CN]=shell;prompt;command;commandline;cmd;命令行;提示符; +Keywords[zh_TW]=shell;prompt;command;commandline;cmd;命令列; +Keywords=shell;prompt;command;commandline;cmd; +Exec=tilix +Terminal=false +Type=Application +StartupNotify=true +Categories=System;TerminalEmulator;X-GNOME-Utilities; +Icon=tilix +Actions=new-window;new-session;preferences; + +[Desktop Action new-window] +Name[ar]=نافذة جديدة +Name[bg]=Нов прозорец +Name[ca]=Finestra nova +Name[cs]=Nové okno +Name[de]=Neues Fenster +Name[el]=Νέο παράθυρο +Name[en_GB]=New Window +Name[eo]=Nova Fenestro +Name[es]=Ventana nueva +Name[eu]=Leiho berria +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[gl]=Nova Xanela +Name[he]=חלון חדש +Name[hr]=Novi prozor +Name[hu]=Új ablak +Name[id]=Jendela Baru +Name[it]=Nuova finestra +Name[ja]=新しいウィンドウ +Name[ko]=새 창 +Name[nb_NO]=Nytt vindu +Name[nl]=Nieuw venster +Name[oc]=Fenèstra novèla +Name[pl]=Nowe okno +Name[pt_BR]=Nova janela +Name[pt_PT]=Nova janela +Name[ro]=Fereastră Nouă +Name[ru]=Новое окно +Name[sr]=Нови прозор +Name[sv]=Nytt fönster +Name[tr]=Yeni Pencere +Name[uk]=Створити вікно +Name[zh_CN]=新建窗口 +Name[zh_TW]=新建視窗 +Name=New Window +Exec=tilix --action=app-new-window + +[Desktop Action new-session] +Name[ar]=جلسة جديدة +Name[bg]=Нова сесия +Name[ca]=Sessió nova +Name[cs]=Nové sezení +Name[de]=Neue Sitzung +Name[el]=Νέα συνεδρία +Name[en_GB]=New Session +Name[eo]=Nova Seanco +Name[es]=Sesión nueva +Name[fi]=Uusi istunto +Name[fr]=Nouvelle session +Name[he]=הפעלה חדשה +Name[hr]=Nova sesija +Name[id]=Sesi Baru +Name[it]=Nuova sessione +Name[ja]=新しいセッション +Name[ko]=새 세션 +Name[nb_NO]=Ny økt +Name[nl]=Nieuwe sessie +Name[oc]=Session novèla +Name[pl]=Nowa sesja +Name[pt_BR]=Nova sessão +Name[pt_PT]=Nova sessão +Name[ro]=Nouă Sesiune +Name[ru]=Новый сеанс +Name[sr]=Нова сесија +Name[sv]=Ny session +Name[tr]=Yeni Oturum +Name[uk]=Створити сеанс +Name[zh_CN]=新建会话 +Name[zh_TW]=新建會話 +Name=New Session +Exec=tilix --action=app-new-session + +[Desktop Action preferences] +Name[ar]=التفضيلات +Name[bg]=Настройки +Name[ca]=Preferències +Name[cs]=Předvolby +Name[de]=Einstellungen +Name[en_GB]=Preferences +Name[eo]=Agordoj +Name[es]=Preferencias +Name[eu]=Ezarpenak +Name[fi]=Asetukset +Name[fr]=Préférences +Name[gl]=Preferencias +Name[he]=העדפות +Name[hr]=Postavke +Name[hu]=Beállítások +Name[id]=Preferensi +Name[it]=Preferenze +Name[ja]=設定 +Name[ko]=기본 설정 +Name[nb_NO]=Innstillinger +Name[nl]=Voorkeuren +Name[oc]=Preferéncias +Name[pl]=Preferencje +Name[pt_BR]=Preferências +Name[pt_PT]=Preferências +Name[ro]=Preferințe +Name[ru]=Параметры +Name[sr]=Поставке +Name[sv]=Inställningar +Name[tr]=Tercihler +Name[uk]=Параметри +Name[zh_CN]=首选项 +Name[zh_TW]=偏好 +Name=Preferences +Exec=tilix --preferences diff --git a/tilix/tilix.png b/tilix/tilix.png new file mode 100644 index 0000000000000000000000000000000000000000..dde59522dba348a0c12454c8cd1b5b1fd56ea00d GIT binary patch literal 8919 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