Compare commits
4 Commits
91730ebf42
...
5a67a0998c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a67a0998c | ||
|
|
210700e4df | ||
|
|
fbdb0bfe33 | ||
|
|
8ff8658ba7 |
@@ -47,3 +47,5 @@ docker_run.sh
|
||||
# Fichiers de test
|
||||
documents/test.md
|
||||
|
||||
# Documents sources (pour éviter de les copier dans l'image)
|
||||
documents/*.md
|
||||
|
||||
@@ -12,6 +12,7 @@ ENV DEBIAN_FRONTEND=noninteractive \
|
||||
LC_ALL=fr_FR.UTF-8
|
||||
|
||||
# Installation des dépendances système et locales
|
||||
# Optimisation: combiner toutes les installations en une seule couche
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
locales \
|
||||
@@ -22,17 +23,20 @@ RUN apt-get update && \
|
||||
texlive-latex-base \
|
||||
texlive-xetex \
|
||||
texlive-fonts-recommended \
|
||||
texlive-latex-recommended \
|
||||
texlive-latex-extra \
|
||||
texlive-fonts-extra \
|
||||
texlive-lang-french \
|
||||
fonts-dejavu \
|
||||
lmodern \
|
||||
cups \
|
||||
cups-client \
|
||||
evince \
|
||||
curl \
|
||||
ca-certificates \
|
||||
make \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& apt-get clean
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
# Création d'un utilisateur non-root pour sécurité
|
||||
RUN useradd -m -u 1000 -s /bin/bash mdprint && \
|
||||
@@ -55,4 +59,3 @@ USER mdprint
|
||||
# Point d'entrée
|
||||
ENTRYPOINT ["/usr/local/bin/md_to_print.sh"]
|
||||
CMD ["--help"]
|
||||
|
||||
|
||||
171
README.md
171
README.md
@@ -13,6 +13,7 @@ Application CLI complète pour convertir des fichiers Markdown en PDF et les imp
|
||||
- **Gestion d'erreurs** complète avec codes de retour appropriés
|
||||
- **Système de logging** détaillé avec niveaux (DEBUG, INFO, WARN, ERROR)
|
||||
- **Interface en ligne de commande** avec options complètes
|
||||
- **Intégration bureau** : Menu contextuel MATE/Caja avec sélection multiple
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -42,6 +43,14 @@ make install
|
||||
|
||||
### Installation avec Docker
|
||||
|
||||
**Note importante sur le temps de construction :**
|
||||
La première construction de l'image Docker peut prendre **5-10 minutes** car elle doit télécharger et installer les packages TeX Live (plusieurs centaines de MB). C'est normal et nécessaire pour la conversion PDF. Les constructions suivantes seront beaucoup plus rapides grâce au cache Docker.
|
||||
|
||||
**Pour accélérer la construction :**
|
||||
- Utilisez le cache Docker : ne reconstruisez que si nécessaire
|
||||
- Utilisez `docker build --cache-from md-to-print:latest` pour réutiliser le cache
|
||||
- Une fois construite, l'image est réutilisable indéfiniment
|
||||
|
||||
1. Construire l'image Docker:
|
||||
```bash
|
||||
make build
|
||||
@@ -133,6 +142,134 @@ make shell
|
||||
make clean
|
||||
```
|
||||
|
||||
## Utilisation de bureau (MATE/Caja)
|
||||
|
||||
MD_to_Print peut être intégré dans votre environnement de bureau MATE pour une utilisation via le menu contextuel (clic droit).
|
||||
|
||||
### Installation de l'intégration bureau
|
||||
|
||||
**IMPORTANT :** Caja nécessite l'extension **caja-actions** pour afficher les actions dans le menu contextuel.
|
||||
|
||||
1. **Installer caja-actions** (requis):
|
||||
```bash
|
||||
sudo apt-get install caja-actions
|
||||
```
|
||||
|
||||
2. **Installation automatique** (recommandée):
|
||||
```bash
|
||||
cd MD_to_print
|
||||
./desktop/install-desktop.sh
|
||||
```
|
||||
|
||||
3. **Configuration Caja Actions** (important):
|
||||
```bash
|
||||
# Ouvrir l'outil de configuration
|
||||
caja-actions-config-tool
|
||||
```
|
||||
|
||||
Dans l'outil de configuration :
|
||||
- Allez dans **Édition > Préférences**
|
||||
- Onglet **Préférences d'exécution**
|
||||
- **Désactivez** l'option "Créer un menu racine 'Caja-Actions'"
|
||||
- Cela permet aux actions d'apparaître directement dans le menu contextuel
|
||||
|
||||
4. **Redémarrer Caja** pour voir les nouvelles actions:
|
||||
```bash
|
||||
caja -q
|
||||
```
|
||||
|
||||
### Utilisation depuis le menu contextuel
|
||||
|
||||
Une fois installé, les actions suivantes sont disponibles dans le menu contextuel (clic droit) sur les fichiers `.md`:
|
||||
|
||||
- **"Imprimer avec MD_to_Print"** : Conversion + Impression directe
|
||||
- **"Convertir en PDF (MD_to_Print)"** : Conversion uniquement, sans impression
|
||||
- **"Prévisualiser avant impression"** : Conversion + Prévisualisation + Impression optionnelle
|
||||
|
||||
### Fonctionnalités
|
||||
|
||||
- ✅ **Sélection multiple** : Traitez plusieurs fichiers en une seule fois
|
||||
- ✅ **Notifications de bureau** : Feedback visuel pour chaque étape
|
||||
- ✅ **Détection automatique** : Utilise l'installation locale ou Docker selon disponibilité
|
||||
- ✅ **Gestion d'erreurs** : Messages clairs en cas de problème
|
||||
- ✅ **Confirmation** : Dialogue de confirmation pour traitement multiple
|
||||
|
||||
### Exemples d'utilisation
|
||||
|
||||
**Sélection unique :**
|
||||
1. Clic droit sur `document.md`
|
||||
2. Sélectionner "Imprimer avec MD_to_Print"
|
||||
3. Le fichier est converti et imprimé automatiquement
|
||||
|
||||
**Sélection multiple :**
|
||||
1. Sélectionner plusieurs fichiers `.md` (Ctrl+Clic)
|
||||
2. Clic droit → "Convertir en PDF (MD_to_Print)"
|
||||
3. Confirmer le traitement multiple
|
||||
4. Tous les fichiers sont convertis séquentiellement avec notifications
|
||||
|
||||
### Désinstallation
|
||||
|
||||
Pour désinstaller l'intégration bureau:
|
||||
```bash
|
||||
./desktop/install-desktop.sh --uninstall
|
||||
```
|
||||
|
||||
### Dépendances bureau
|
||||
|
||||
**Critique :**
|
||||
- `caja-actions` : Extension Caja pour les actions personnalisées (REQUIS)
|
||||
|
||||
**Optionnelles :**
|
||||
- `zenity` ou `yad` : Dialogues graphiques
|
||||
- `libnotify-bin` : Notifications (`notify-send`)
|
||||
- `caja` : Gestionnaire de fichiers MATE (déjà installé)
|
||||
|
||||
Installation des dépendances:
|
||||
```bash
|
||||
sudo apt-get install caja-actions zenity libnotify-bin
|
||||
```
|
||||
|
||||
### Dépannage menu contextuel
|
||||
|
||||
**Les actions n'apparaissent pas dans le menu :**
|
||||
```bash
|
||||
# 1. Vérifier que caja-actions est installé (CRITIQUE)
|
||||
dpkg -l | grep caja-actions
|
||||
# Si absent: sudo apt-get install caja-actions
|
||||
|
||||
# 2. Vérifier que les fichiers .desktop sont installés
|
||||
ls ~/.local/share/caja/actions/md-to-print-*.desktop
|
||||
|
||||
# 3. Ouvrir l'outil de configuration Caja Actions
|
||||
caja-actions-config-tool
|
||||
# Vérifier que les actions sont présentes et activées
|
||||
# Dans Préférences: désactiver "Créer un menu racine Caja-Actions"
|
||||
|
||||
# 4. Vérifier que les scripts sont dans le PATH
|
||||
which md_to_print_gui.sh
|
||||
|
||||
# 5. Redémarrer Caja
|
||||
caja -q
|
||||
```
|
||||
|
||||
**Erreur "md_to_print_gui.sh: command not found" :**
|
||||
```bash
|
||||
# Vérifier l'installation
|
||||
./desktop/install-desktop.sh
|
||||
|
||||
# Vérifier que ~/.local/bin est dans le PATH
|
||||
echo $PATH | grep -q ".local/bin" || echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
|
||||
```
|
||||
|
||||
**Notifications ne s'affichent pas :**
|
||||
```bash
|
||||
# Vérifier que libnotify est installé
|
||||
dpkg -l | grep libnotify-bin
|
||||
|
||||
# Tester manuellement
|
||||
notify-send "Test" "Les notifications fonctionnent"
|
||||
```
|
||||
|
||||
## Options disponibles
|
||||
|
||||
| Option | Description | Défaut |
|
||||
@@ -194,19 +331,27 @@ verbose=false
|
||||
|
||||
```
|
||||
MD_to_print/
|
||||
├── md_to_print.sh # Script principal
|
||||
├── config.example.conf # Fichier de configuration exemple
|
||||
├── Dockerfile # Configuration Docker
|
||||
├── docker-compose.yml # Configuration Docker Compose
|
||||
├── docker_run.sh # Wrapper Docker
|
||||
├── Makefile # Commandes Make
|
||||
├── .dockerignore # Fichiers à exclure du build Docker
|
||||
├── .gitignore # Fichiers à ignorer dans Git
|
||||
├── README.md # Documentation (ce fichier)
|
||||
├── CHANGELOG.md # Historique des versions
|
||||
├── documents/ # Fichiers Markdown sources
|
||||
├── output/ # PDFs générés
|
||||
└── logs/ # Fichiers de logs
|
||||
├── md_to_print.sh # Script principal
|
||||
├── config.example.conf # Fichier de configuration exemple
|
||||
├── Dockerfile # Configuration Docker
|
||||
├── docker-compose.yml # Configuration Docker Compose
|
||||
├── docker_run.sh # Wrapper Docker
|
||||
├── Makefile # Commandes Make
|
||||
├── desktop/ # Intégration bureau
|
||||
│ ├── md-to-print-print.desktop # Action "Imprimer"
|
||||
│ ├── md-to-print-convert.desktop # Action "Convertir"
|
||||
│ ├── md-to-print-preview.desktop # Action "Prévisualiser"
|
||||
│ └── install-desktop.sh # Script d'installation
|
||||
├── scripts/ # Scripts utilitaires
|
||||
│ ├── md_to_print_gui.sh # Wrapper GUI
|
||||
│ └── md_to_print_notify.sh # Script notifications
|
||||
├── .dockerignore # Fichiers à exclure du build Docker
|
||||
├── .gitignore # Fichiers à ignorer dans Git
|
||||
├── README.md # Documentation (ce fichier)
|
||||
├── CHANGELOG.md # Historique des versions
|
||||
├── documents/ # Fichiers Markdown sources
|
||||
├── output/ # PDFs générés
|
||||
└── logs/ # Fichiers de logs
|
||||
```
|
||||
|
||||
## Exemples d'utilisation
|
||||
|
||||
61
desktop/fix-caja-actions.sh
Executable file
61
desktop/fix-caja-actions.sh
Executable file
@@ -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"
|
||||
|
||||
229
desktop/install-desktop.sh
Executable file
229
desktop/install-desktop.sh
Executable file
@@ -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
|
||||
|
||||
17
desktop/md-to-print-convert.desktop
Normal file
17
desktop/md-to-print-convert.desktop
Normal file
@@ -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
|
||||
17
desktop/md-to-print-preview.desktop
Normal file
17
desktop/md-to-print-preview.desktop
Normal file
@@ -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
|
||||
17
desktop/md-to-print-print.desktop
Normal file
17
desktop/md-to-print-print.desktop
Normal file
@@ -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
|
||||
218
docker_run.sh
218
docker_run.sh
@@ -2,11 +2,11 @@
|
||||
|
||||
# Wrapper pour exécuter le script MD_to_Print dans Docker
|
||||
# Usage: ./docker_run.sh fichier.md [options...]
|
||||
# ./docker_run.sh fichier1.md fichier2.md [options...]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MD_FILE="${1:-}"
|
||||
|
||||
# Couleurs
|
||||
RED='\033[0;31m'
|
||||
@@ -21,17 +21,20 @@ show_help() {
|
||||
Wrapper Docker pour MD_to_Print
|
||||
|
||||
Usage: $0 fichier.md [options...]
|
||||
$0 fichier1.md fichier2.md [options...]
|
||||
|
||||
Ce script simplifie l'exécution de MD_to_Print dans Docker en gérant:
|
||||
- Les chemins absolus des fichiers
|
||||
- Le montage des volumes
|
||||
- Le passage des arguments
|
||||
- La gestion des erreurs Docker
|
||||
- Le traitement de plusieurs fichiers en boucle
|
||||
|
||||
EXEMPLES:
|
||||
$0 documents/rapport.md --preview
|
||||
$0 documents/rapport.md --printer HP_LaserJet --copies 2
|
||||
$0 documents/rapport.md --config config.conf --verbose
|
||||
$0 documents/*.md --keep-pdf --verbose
|
||||
$0 documents/fichier1.md documents/fichier2.md --keep-pdf
|
||||
|
||||
OPTIONS:
|
||||
Toutes les options de md_to_print.sh sont supportées.
|
||||
@@ -40,10 +43,40 @@ OPTIONS:
|
||||
EOF
|
||||
}
|
||||
|
||||
# Collecter les fichiers markdown et les options
|
||||
MD_FILES=()
|
||||
OPTIONS=()
|
||||
PROCESSING_FILES=true
|
||||
|
||||
for arg in "$@"; do
|
||||
if [ "$PROCESSING_FILES" = true ]; then
|
||||
# Vérifier si c'est une option (commence par -)
|
||||
if [[ "$arg" =~ ^- ]]; then
|
||||
PROCESSING_FILES=false
|
||||
OPTIONS+=("$arg")
|
||||
# Vérifier si c'est un fichier markdown
|
||||
elif [[ "$arg" =~ \.(md|markdown)$ ]] || [ -f "$arg" ]; then
|
||||
MD_FILES+=("$arg")
|
||||
else
|
||||
# Argument ambigu, arrêter la collecte de fichiers
|
||||
PROCESSING_FILES=false
|
||||
OPTIONS+=("$arg")
|
||||
fi
|
||||
else
|
||||
OPTIONS+=("$arg")
|
||||
fi
|
||||
done
|
||||
|
||||
# Vérification des arguments
|
||||
if [ -z "$MD_FILE" ] || [ "$MD_FILE" = "-h" ] || [ "$MD_FILE" = "--help" ]; then
|
||||
show_help
|
||||
exit 0
|
||||
if [ ${#MD_FILES[@]} -eq 0 ]; then
|
||||
if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ] || [ -z "${1:-}" ]; then
|
||||
show_help
|
||||
exit 0
|
||||
else
|
||||
echo -e "${RED}Erreur: Aucun fichier markdown spécifié${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Vérifier que Docker est disponible
|
||||
@@ -52,25 +85,13 @@ if ! command -v docker &> /dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier que le fichier existe
|
||||
if [ ! -f "$MD_FILE" ]; then
|
||||
echo -e "${RED}Erreur: Le fichier '$MD_FILE' n'existe pas${NC}"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Obtenir le chemin absolu du fichier
|
||||
MD_FILE_ABS="$(realpath "$MD_FILE")"
|
||||
MD_DIR="$(dirname "$MD_FILE_ABS")"
|
||||
MD_NAME="$(basename "$MD_FILE_ABS")"
|
||||
|
||||
# Vérifier que le fichier est dans le répertoire documents ou un sous-répertoire
|
||||
if [[ ! "$MD_DIR" =~ ^"$SCRIPT_DIR"/documents ]]; then
|
||||
echo -e "${YELLOW}Attention: Le fichier n'est pas dans le répertoire documents/${NC}"
|
||||
echo -e "${BLUE}Le fichier sera accessible via le montage du répertoire parent${NC}"
|
||||
MD_REL_PATH="$(realpath --relative-to="$SCRIPT_DIR" "$MD_FILE_ABS")"
|
||||
MD_DIR="$SCRIPT_DIR"
|
||||
MD_NAME="$MD_REL_PATH"
|
||||
fi
|
||||
# Vérifier que tous les fichiers existent
|
||||
for MD_FILE in "${MD_FILES[@]}"; do
|
||||
if [ ! -f "$MD_FILE" ]; then
|
||||
echo -e "${RED}Erreur: Le fichier '$MD_FILE' n'existe pas${NC}"
|
||||
exit 2
|
||||
fi
|
||||
done
|
||||
|
||||
# Créer les répertoires nécessaires
|
||||
mkdir -p "$SCRIPT_DIR/documents" "$SCRIPT_DIR/output" "$SCRIPT_DIR/logs"
|
||||
@@ -82,49 +103,116 @@ if ! docker images md-to-print:latest --format "{{.Repository}}:{{.Tag}}" | grep
|
||||
docker build -t md-to-print:latest .
|
||||
fi
|
||||
|
||||
# Construire la commande Docker
|
||||
DOCKER_CMD=(
|
||||
docker run
|
||||
--rm
|
||||
-it
|
||||
-v "$SCRIPT_DIR/documents:/workspace/documents:ro"
|
||||
-v "$SCRIPT_DIR/output:/workspace/output"
|
||||
-v "$SCRIPT_DIR/logs:/workspace/logs"
|
||||
--network host
|
||||
)
|
||||
|
||||
# Ajouter le support X11 si DISPLAY est défini (pour prévisualisation)
|
||||
if [ -n "${DISPLAY:-}" ]; then
|
||||
DOCKER_CMD+=(
|
||||
-e DISPLAY="$DISPLAY"
|
||||
-v /tmp/.X11-unix:/tmp/.X11-unix:ro
|
||||
# Fonction pour traiter un fichier
|
||||
process_file() {
|
||||
local MD_FILE="$1"
|
||||
shift
|
||||
local FILE_OPTIONS=("$@")
|
||||
|
||||
echo -e "${GREEN}=== Traitement de: $MD_FILE ===${NC}"
|
||||
|
||||
# Obtenir le chemin absolu du fichier
|
||||
MD_FILE_ABS="$(realpath "$MD_FILE")"
|
||||
MD_DIR="$(dirname "$MD_FILE_ABS")"
|
||||
MD_NAME="$(basename "$MD_FILE_ABS")"
|
||||
|
||||
# Vérifier que le fichier est dans le répertoire documents ou un sous-répertoire
|
||||
if [[ ! "$MD_DIR" =~ ^"$SCRIPT_DIR"/documents ]]; then
|
||||
echo -e "${YELLOW}Attention: Le fichier n'est pas dans le répertoire documents/${NC}"
|
||||
echo -e "${BLUE}Le fichier sera accessible via le montage du répertoire parent${NC}"
|
||||
MD_REL_PATH="$(realpath --relative-to="$SCRIPT_DIR" "$MD_FILE_ABS")"
|
||||
MD_DIR="$SCRIPT_DIR"
|
||||
MD_NAME="$MD_REL_PATH"
|
||||
fi
|
||||
|
||||
# Déterminer si on a besoin d'un TTY interactif (prévisualisation ou un seul fichier)
|
||||
NEED_TTY=false
|
||||
for opt in "${FILE_OPTIONS[@]}"; do
|
||||
if [ "$opt" = "--preview" ] || [ "$opt" = "-p" ]; then
|
||||
NEED_TTY=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Si un seul fichier et TTY disponible, utiliser mode interactif
|
||||
if [ ${#MD_FILES[@]} -eq 1 ] && [ -t 0 ] && [ "$NEED_TTY" = true ]; then
|
||||
DOCKER_TTY_FLAGS="-it"
|
||||
elif [ -t 0 ]; then
|
||||
DOCKER_TTY_FLAGS="-i"
|
||||
else
|
||||
DOCKER_TTY_FLAGS=""
|
||||
fi
|
||||
|
||||
# Construire la commande Docker
|
||||
DOCKER_CMD=(
|
||||
docker run
|
||||
--rm
|
||||
)
|
||||
fi
|
||||
|
||||
# Ajouter les flags TTY si nécessaire
|
||||
if [ -n "$DOCKER_TTY_FLAGS" ]; then
|
||||
DOCKER_CMD+=($DOCKER_TTY_FLAGS)
|
||||
fi
|
||||
|
||||
DOCKER_CMD+=(
|
||||
-v "$SCRIPT_DIR/documents:/workspace/documents:ro"
|
||||
-v "$SCRIPT_DIR/output:/workspace/output"
|
||||
-v "$SCRIPT_DIR/logs:/workspace/logs"
|
||||
--network host
|
||||
)
|
||||
|
||||
# Ajouter le support X11 si DISPLAY est défini (pour prévisualisation)
|
||||
if [ -n "${DISPLAY:-}" ]; then
|
||||
DOCKER_CMD+=(
|
||||
-e DISPLAY="$DISPLAY"
|
||||
-v /tmp/.X11-unix:/tmp/.X11-unix:ro
|
||||
)
|
||||
fi
|
||||
|
||||
# Ajouter l'accès CUPS si disponible
|
||||
if [ -d "/var/run/cups" ]; then
|
||||
DOCKER_CMD+=(-v /var/run/cups:/var/run/cups:ro)
|
||||
fi
|
||||
|
||||
DOCKER_CMD+=(md-to-print:latest)
|
||||
|
||||
# Ajouter le fichier markdown
|
||||
if [[ "$MD_DIR" == "$SCRIPT_DIR" ]]; then
|
||||
DOCKER_CMD+=("/workspace/$MD_NAME")
|
||||
else
|
||||
DOCKER_CMD+=("/workspace/documents/$MD_NAME")
|
||||
fi
|
||||
|
||||
# Ajouter les options
|
||||
for opt in "${FILE_OPTIONS[@]}"; do
|
||||
DOCKER_CMD+=("$opt")
|
||||
done
|
||||
|
||||
# Exécuter
|
||||
echo -e "${BLUE}Commande: ${DOCKER_CMD[*]}${NC}"
|
||||
echo ""
|
||||
|
||||
if ! "${DOCKER_CMD[@]}"; then
|
||||
echo -e "${RED}Erreur lors du traitement de $MD_FILE${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Ajouter l'accès CUPS si disponible
|
||||
if [ -d "/var/run/cups" ]; then
|
||||
DOCKER_CMD+=(-v /var/run/cups:/var/run/cups:ro)
|
||||
fi
|
||||
|
||||
DOCKER_CMD+=(md-to-print:latest)
|
||||
|
||||
# Ajouter le fichier markdown et les options
|
||||
if [[ "$MD_DIR" == "$SCRIPT_DIR" ]]; then
|
||||
DOCKER_CMD+=("/workspace/$MD_NAME")
|
||||
else
|
||||
DOCKER_CMD+=("/workspace/documents/$MD_NAME")
|
||||
fi
|
||||
|
||||
# Ajouter les options restantes
|
||||
shift
|
||||
for arg in "$@"; do
|
||||
DOCKER_CMD+=("$arg")
|
||||
# Traiter tous les fichiers
|
||||
EXIT_CODE=0
|
||||
for MD_FILE in "${MD_FILES[@]}"; do
|
||||
if ! process_file "$MD_FILE" "${OPTIONS[@]}"; then
|
||||
EXIT_CODE=1
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
||||
# Exécuter
|
||||
echo -e "${GREEN}Exécution dans Docker...${NC}"
|
||||
echo -e "${BLUE}Commande: ${DOCKER_CMD[*]}${NC}"
|
||||
echo ""
|
||||
|
||||
exec "${DOCKER_CMD[@]}"
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
echo -e "${GREEN}=== Tous les fichiers ont été traités avec succès ===${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}=== Certains fichiers ont échoué ===${NC}"
|
||||
fi
|
||||
|
||||
exit $EXIT_CODE
|
||||
|
||||
@@ -40,6 +40,7 @@ COLOR=false
|
||||
DUPLEX="none"
|
||||
INSTALL_DEPS=false
|
||||
KEEP_PDF=false
|
||||
CONVERT_ONLY=false
|
||||
CONFIG_FILE=""
|
||||
VERBOSE=false
|
||||
LOG_FILE=""
|
||||
@@ -99,6 +100,7 @@ OPTIONS:
|
||||
-d, --duplex MODE Mode recto-verso: none, simplex, duplex (défaut: none)
|
||||
-i, --install-deps Installer les dépendances automatiquement
|
||||
-k, --keep-pdf Conserver le fichier PDF après impression
|
||||
--convert-only, --no-print Conversion uniquement (sans impression)
|
||||
--config FILE Fichier de configuration
|
||||
-v, --verbose Mode verbeux (logging DEBUG)
|
||||
-l, --log FILE Fichier de log
|
||||
@@ -410,6 +412,11 @@ while [[ $# -gt 0 ]]; do
|
||||
KEEP_PDF=true
|
||||
shift
|
||||
;;
|
||||
--convert-only|--no-print)
|
||||
CONVERT_ONLY=true
|
||||
KEEP_PDF=true
|
||||
shift
|
||||
;;
|
||||
--config)
|
||||
if [ -z "${2:-}" ]; then
|
||||
log ERROR "Option --config nécessite un argument"
|
||||
@@ -629,28 +636,32 @@ case "$DUPLEX" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# Impression
|
||||
log INFO "=== Impression ==="
|
||||
log INFO "Options:"
|
||||
log INFO " - Copies: $COPIES"
|
||||
log INFO " - Taille: $SIZE"
|
||||
log INFO " - Orientation: $ORIENTATION"
|
||||
log INFO " - Qualité: $QUALITY"
|
||||
log INFO " - Couleur: $([ "$COLOR" = true ] && echo "Oui" || echo "Non")"
|
||||
log INFO " - Recto-verso: $DUPLEX"
|
||||
[ -n "$PAGES" ] && log INFO " - Pages: $PAGES"
|
||||
[ -n "$PRINTER" ] && log INFO " - Imprimante: $PRINTER"
|
||||
# Impression (sauf si --convert-only)
|
||||
if [ "$CONVERT_ONLY" = false ]; then
|
||||
log INFO "=== Impression ==="
|
||||
log INFO "Options:"
|
||||
log INFO " - Copies: $COPIES"
|
||||
log INFO " - Taille: $SIZE"
|
||||
log INFO " - Orientation: $ORIENTATION"
|
||||
log INFO " - Qualité: $QUALITY"
|
||||
log INFO " - Couleur: $([ "$COLOR" = true ] && echo "Oui" || echo "Non")"
|
||||
log INFO " - Recto-verso: $DUPLEX"
|
||||
[ -n "$PAGES" ] && log INFO " - Pages: $PAGES"
|
||||
[ -n "$PRINTER" ] && log INFO " - Imprimante: $PRINTER"
|
||||
|
||||
log DEBUG "Exécution: lp ${LP_OPTS[*]} $PDF_FILE"
|
||||
log DEBUG "Exécution: lp ${LP_OPTS[*]} $PDF_FILE"
|
||||
|
||||
if ! lp "${LP_OPTS[@]}" "$PDF_FILE" 2>&1 | while IFS= read -r line; do log DEBUG "$line"; done; then
|
||||
log ERROR "Erreur lors de l'impression"
|
||||
log INFO "Le fichier PDF a été conservé: $PDF_FILE"
|
||||
exit $EXIT_PRINT_ERROR
|
||||
if ! lp "${LP_OPTS[@]}" "$PDF_FILE" 2>&1 | while IFS= read -r line; do log DEBUG "$line"; done; then
|
||||
log ERROR "Erreur lors de l'impression"
|
||||
log INFO "Le fichier PDF a été conservé: $PDF_FILE"
|
||||
exit $EXIT_PRINT_ERROR
|
||||
fi
|
||||
|
||||
log INFO "Impression lancée avec succès!"
|
||||
else
|
||||
log INFO "Mode conversion uniquement (pas d'impression)"
|
||||
fi
|
||||
|
||||
log INFO "Impression lancée avec succès!"
|
||||
|
||||
# Gestion du fichier PDF
|
||||
if [ "$KEEP_PDF" = false ]; then
|
||||
read -p "Supprimer le fichier PDF temporaire? (o/N): " -n 1 -r
|
||||
|
||||
Reference in New Issue
Block a user