From 210700e4dfed274a7ae911c8544d549e876a8b4e Mon Sep 17 00:00:00 2001 From: syoul Date: Thu, 25 Dec 2025 16:38:42 +0100 Subject: [PATCH] =?UTF-8?q?Int=C3=A9gration=20bureau=20MATE/Caja=20avec=20?= =?UTF-8?q?actions=20contextuelles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fichiers .desktop pour actions: Imprimer, Convertir, Prévisualiser - Script install-desktop.sh pour installation automatique - Support sélection multiple de fichiers - Compatible Caja Actions (MATE Desktop) --- desktop/fix-caja-actions.sh | 61 ++++++++ desktop/install-desktop.sh | 229 ++++++++++++++++++++++++++++ desktop/md-to-print-convert.desktop | 17 +++ desktop/md-to-print-preview.desktop | 17 +++ desktop/md-to-print-print.desktop | 17 +++ 5 files changed, 341 insertions(+) create mode 100755 desktop/fix-caja-actions.sh create mode 100755 desktop/install-desktop.sh create mode 100644 desktop/md-to-print-convert.desktop create mode 100644 desktop/md-to-print-preview.desktop create mode 100644 desktop/md-to-print-print.desktop diff --git a/desktop/fix-caja-actions.sh b/desktop/fix-caja-actions.sh new file mode 100755 index 0000000..bae57c4 --- /dev/null +++ b/desktop/fix-caja-actions.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Script pour forcer le rechargement des actions Caja + +echo "=== Diagnostic et correction des actions Caja ===" +echo "" + +# Vérifier que les fichiers existent +echo "1. Vérification des fichiers .desktop..." +if ls ~/.local/share/caja/actions/md-to-print-*.desktop > /dev/null 2>&1; then + echo " ✓ Fichiers .desktop trouvés" + ls -1 ~/.local/share/caja/actions/md-to-print-*.desktop +else + echo " ✗ Aucun fichier .desktop trouvé" + exit 1 +fi + +echo "" +echo "2. Vérification du format..." +for file in ~/.local/share/caja/actions/md-to-print-*.desktop; do + if grep -q "X-Action-Profile" "$file" && grep -q "Enabled=true" "$file"; then + echo " ✓ $(basename $file) - Format correct" + else + echo " ✗ $(basename $file) - Format incorrect" + fi +done + +echo "" +echo "3. Vérification des scripts..." +if command -v md_to_print_gui.sh > /dev/null; then + echo " ✓ md_to_print_gui.sh trouvé: $(which md_to_print_gui.sh)" +else + echo " ✗ md_to_print_gui.sh non trouvé dans PATH" + echo " Installation nécessaire: ./desktop/install-desktop.sh" +fi + +echo "" +echo "4. Redémarrage de Caja..." +killall caja 2>/dev/null +sleep 2 +caja > /dev/null 2>&1 & +sleep 2 +echo " ✓ Caja redémarré" + +echo "" +echo "=== Instructions ===" +echo "" +echo "1. Ouvrez caja-actions-config-tool:" +echo " caja-actions-config-tool" +echo "" +echo "2. Dans l'outil, vérifiez que les actions MD_to_Print sont présentes" +echo " Si elles ne sont pas là, utilisez Fichier > Importer > Desktop files" +echo " et sélectionnez: ~/.local/share/caja/actions/md-to-print-*.desktop" +echo "" +echo "3. Assurez-vous que les actions sont activées (cochez la case 'Enabled')" +echo "" +echo "4. Dans Édition > Préférences > Préférences d'exécution:" +echo " Désactivez 'Créer un menu racine Caja-Actions'" +echo "" +echo "5. Testez avec un clic droit sur un fichier .md" + diff --git a/desktop/install-desktop.sh b/desktop/install-desktop.sh new file mode 100755 index 0000000..6ffc4a9 --- /dev/null +++ b/desktop/install-desktop.sh @@ -0,0 +1,229 @@ +#!/bin/bash + +# Script d'installation pour l'intégration bureau MD_to_Print +# Usage: ./install-desktop.sh [--uninstall] + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(dirname "$SCRIPT_DIR")" +CAJA_ACTIONS_DIR="$HOME/.local/share/caja/actions" +LOCAL_BIN_DIR="$HOME/.local/bin" +SYSTEM_BIN_DIR="/usr/local/bin" + +# Couleurs +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# Fonction d'aide +show_help() { + cat << EOF +Installation de l'intégration bureau MD_to_Print + +Usage: $0 [OPTIONS] + +OPTIONS: + --uninstall Désinstaller l'intégration bureau + --system Installer dans /usr/local/bin (nécessite sudo) + --help Afficher cette aide + +Par défaut, installe dans ~/.local/bin (pas besoin de sudo) +EOF +} + +# Fonction de notification +notify() { + local level="$1" + shift + local message="$*" + + if command -v notify-send &> /dev/null; then + case "$level" in + info) notify-send -i "dialog-information" "MD_to_Print" "$message" 2>/dev/null || true ;; + success) notify-send -i "dialog-information" "MD_to_Print" "$message" 2>/dev/null || true ;; + error) notify-send -i "dialog-error" "MD_to_Print" "$message" 2>/dev/null || true ;; + esac + fi + echo -e "${GREEN}$message${NC}" +} + +# Vérification des dépendances +check_dependencies() { + local missing=() + local critical_missing=() + + # Dépendance critique : caja-actions + if ! command -v caja-actions-config-tool &> /dev/null && ! dpkg -l | grep -q "caja-actions"; then + critical_missing+=("caja-actions") + fi + + if ! command -v notify-send &> /dev/null; then + missing+=("libnotify-bin") + fi + + if ! command -v zenity &> /dev/null && ! command -v yad &> /dev/null; then + missing+=("zenity") + fi + + if [ ${#critical_missing[@]} -gt 0 ]; then + echo -e "${RED}Dépendance CRITIQUE manquante: ${critical_missing[*]}${NC}" + echo -e "${YELLOW}Sans caja-actions, les actions ne pourront pas apparaître dans le menu contextuel.${NC}" + echo -e "${BLUE}Installation: sudo apt-get install caja-actions${NC}" + echo "" + read -p "Installer caja-actions maintenant? (o/N): " -n 1 -r + echo + if [[ $REPLY =~ ^[Oo]$ ]]; then + if sudo apt-get install -y caja-actions; then + echo -e "${GREEN}caja-actions installé avec succès${NC}" + else + echo -e "${RED}Échec de l'installation de caja-actions${NC}" + return 1 + fi + else + echo -e "${YELLOW}Installation de caja-actions annulée. Les actions ne fonctionneront pas.${NC}" + return 1 + fi + fi + + if [ ${#missing[@]} -gt 0 ]; then + echo -e "${YELLOW}Dépendances optionnelles manquantes: ${missing[*]}${NC}" + echo -e "${BLUE}Installation: sudo apt-get install ${missing[*]}${NC}" + return 1 + fi + + return 0 +} + +# Installation +install() { + local INSTALL_BIN_DIR="$LOCAL_BIN_DIR" + local USE_SUDO=false + + # Vérifier option --system + if [ "${1:-}" = "--system" ]; then + INSTALL_BIN_DIR="$SYSTEM_BIN_DIR" + USE_SUDO=true + + if [ "$EUID" -ne 0 ] && ! sudo -n true 2>/dev/null; then + echo -e "${RED}Erreur: --system nécessite les privilèges sudo${NC}" + exit 1 + fi + fi + + echo -e "${BLUE}=== Installation de l'intégration bureau MD_to_Print ===${NC}" + + # Vérifier les dépendances + if ! check_dependencies; then + if ! command -v caja-actions-config-tool &> /dev/null && ! dpkg -l | grep -q "caja-actions"; then + echo -e "${RED}Installation annulée: caja-actions est requis${NC}" + exit 1 + fi + echo -e "${YELLOW}Certaines dépendances optionnelles sont manquantes, mais l'installation continue...${NC}" + fi + + # Créer les répertoires nécessaires + mkdir -p "$CAJA_ACTIONS_DIR" + mkdir -p "$INSTALL_BIN_DIR" + + # Copier les fichiers .desktop + echo -e "${BLUE}Installation des actions Caja...${NC}" + cp "$SCRIPT_DIR"/*.desktop "$CAJA_ACTIONS_DIR/" 2>/dev/null || { + echo -e "${RED}Erreur: Impossible de copier les fichiers .desktop${NC}" + exit 1 + } + + # Installer les scripts + echo -e "${BLUE}Installation des scripts...${NC}" + + if [ "$USE_SUDO" = true ]; then + sudo cp "$PROJECT_DIR/scripts/md_to_print_gui.sh" "$INSTALL_BIN_DIR/" + sudo cp "$PROJECT_DIR/scripts/md_to_print_notify.sh" "$INSTALL_BIN_DIR/" + sudo chmod +x "$INSTALL_BIN_DIR/md_to_print_gui.sh" + sudo chmod +x "$INSTALL_BIN_DIR/md_to_print_notify.sh" + else + cp "$PROJECT_DIR/scripts/md_to_print_gui.sh" "$INSTALL_BIN_DIR/" + cp "$PROJECT_DIR/scripts/md_to_print_notify.sh" "$INSTALL_BIN_DIR/" + chmod +x "$INSTALL_BIN_DIR/md_to_print_gui.sh" + chmod +x "$INSTALL_BIN_DIR/md_to_print_notify.sh" + fi + + # Vérifier que les scripts sont dans le PATH + if [[ ":$PATH:" != *":$INSTALL_BIN_DIR:"* ]] && [ "$INSTALL_BIN_DIR" = "$LOCAL_BIN_DIR" ]; then + echo -e "${YELLOW}Attention: $INSTALL_BIN_DIR n'est pas dans votre PATH${NC}" + echo -e "${BLUE}Ajoutez cette ligne à votre ~/.bashrc ou ~/.profile:${NC}" + echo -e "${GREEN}export PATH=\"\$HOME/.local/bin:\$PATH\"${NC}" + fi + + # Vérifier que md_to_print.sh est accessible + if ! command -v md_to_print.sh &> /dev/null && [ ! -f "$PROJECT_DIR/md_to_print.sh" ]; then + echo -e "${YELLOW}Attention: md_to_print.sh non trouvé${NC}" + echo -e "${BLUE}Assurez-vous que md_to_print.sh est installé ou que Docker est configuré${NC}" + fi + + notify success "Installation terminée avec succès!" + echo -e "${GREEN}=== Installation terminée ===${NC}" + echo "" + echo -e "${BLUE}IMPORTANT: Configuration Caja Actions${NC}" + echo -e "${YELLOW}1. Ouvrez l'outil de configuration:${NC}" + echo -e "${GREEN} caja-actions-config-tool${NC}" + echo "" + echo -e "${YELLOW}2. Dans les préférences (Édition > Préférences), désactivez:${NC}" + echo -e "${GREEN} 'Créer un menu racine Caja-Actions'${NC}" + echo -e "${YELLOW} (pour que les actions apparaissent directement dans le menu)${NC}" + echo "" + echo -e "${BLUE}3. Redémarrez Caja:${NC}" + echo -e "${GREEN} caja -q${NC}" + echo "" + echo -e "${BLUE}Les actions suivantes sont maintenant disponibles:${NC}" + echo -e " - Imprimer avec MD_to_Print" + echo -e " - Convertir en PDF (MD_to_Print)" + echo -e " - Prévisualiser avant impression" +} + +# Désinstallation +uninstall() { + echo -e "${BLUE}=== Désinstallation de l'intégration bureau MD_to_Print ===${NC}" + + # Supprimer les fichiers .desktop + if [ -d "$CAJA_ACTIONS_DIR" ]; then + echo -e "${BLUE}Suppression des actions Caja...${NC}" + rm -f "$CAJA_ACTIONS_DIR"/md-to-print-*.desktop + fi + + # Supprimer les scripts + echo -e "${BLUE}Suppression des scripts...${NC}" + + if [ -f "$LOCAL_BIN_DIR/md_to_print_gui.sh" ]; then + rm -f "$LOCAL_BIN_DIR/md_to_print_gui.sh" + fi + + if [ -f "$LOCAL_BIN_DIR/md_to_print_notify.sh" ]; then + rm -f "$LOCAL_BIN_DIR/md_to_print_notify.sh" + fi + + if [ -f "$SYSTEM_BIN_DIR/md_to_print_gui.sh" ]; then + if [ "$EUID" -eq 0 ] || sudo -n true 2>/dev/null; then + sudo rm -f "$SYSTEM_BIN_DIR/md_to_print_gui.sh" + sudo rm -f "$SYSTEM_BIN_DIR/md_to_print_notify.sh" + else + echo -e "${YELLOW}Les scripts système nécessitent sudo pour être supprimés${NC}" + fi + fi + + notify success "Désinstallation terminée" + echo -e "${GREEN}=== Désinstallation terminée ===${NC}" + echo -e "${BLUE}Redémarrez Caja: caja -q${NC}" +} + +# Parsing des arguments +if [ "${1:-}" = "--uninstall" ]; then + uninstall +elif [ "${1:-}" = "--help" ] || [ "${1:-}" = "-h" ]; then + show_help +else + install "$@" +fi + diff --git a/desktop/md-to-print-convert.desktop b/desktop/md-to-print-convert.desktop new file mode 100644 index 0000000..035fb1a --- /dev/null +++ b/desktop/md-to-print-convert.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Action +Icon=application-pdf +ToolbarLabel=Convertir en PDF (MD_to_Print) +ToolbarLabel[fr]=Convertir en PDF (MD_to_Print) +Name=Convertir en PDF (MD_to_Print) +Name[fr]=Convertir en PDF (MD_to_Print) +Profiles=profile-zero; +TargetContext=true +Enabled=true + +[X-Action-Profile profile-zero] +Exec=md_to_print_gui.sh --convert %F +MimeTypes=text/markdown;text/x-markdown; +MatchPattern=*.md;*.markdown;*.mkd; +Name=Default profile +Name[fr]=Profil par défaut diff --git a/desktop/md-to-print-preview.desktop b/desktop/md-to-print-preview.desktop new file mode 100644 index 0000000..b4b38a2 --- /dev/null +++ b/desktop/md-to-print-preview.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Action +Icon=document-preview +ToolbarLabel=Prévisualiser avant impression +ToolbarLabel[fr]=Prévisualiser avant impression +Name=Prévisualiser avant impression +Name[fr]=Prévisualiser avant impression +Profiles=profile-zero; +TargetContext=true +Enabled=true + +[X-Action-Profile profile-zero] +Exec=md_to_print_gui.sh --preview %F +MimeTypes=text/markdown;text/x-markdown; +MatchPattern=*.md;*.markdown;*.mkd; +Name=Default profile +Name[fr]=Profil par défaut diff --git a/desktop/md-to-print-print.desktop b/desktop/md-to-print-print.desktop new file mode 100644 index 0000000..42fa766 --- /dev/null +++ b/desktop/md-to-print-print.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Action +Icon=printer +ToolbarLabel=Imprimer avec MD_to_Print +ToolbarLabel[fr]=Imprimer avec MD_to_Print +Name=Imprimer avec MD_to_Print +Name[fr]=Imprimer avec MD_to_Print +Profiles=profile-zero; +TargetContext=true +Enabled=true + +[X-Action-Profile profile-zero] +Exec=md_to_print_gui.sh --print %F +MimeTypes=text/markdown;text/x-markdown; +MatchPattern=*.md;*.markdown;*.mkd; +Name=Default profile +Name[fr]=Profil par défaut