Compare commits
6 Commits
91730ebf42
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6285840eb2 | ||
|
|
a840972375 | ||
|
|
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"]
|
||||
|
||||
|
||||
145
README.md
145
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 |
|
||||
@@ -200,6 +337,14 @@ MD_to_print/
|
||||
├── 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)
|
||||
|
||||
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=sh -c 'DISPLAY="${DISPLAY:-:0}" 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
|
||||
126
docker_run.sh
126
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
|
||||
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,11 +85,31 @@ if ! command -v docker &> /dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier que le fichier existe
|
||||
# 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"
|
||||
|
||||
# Vérifier si l'image Docker existe
|
||||
if ! docker images md-to-print:latest --format "{{.Repository}}:{{.Tag}}" | grep -q "md-to-print:latest"; then
|
||||
echo -e "${YELLOW}Image Docker non trouvée. Construction de l'image...${NC}"
|
||||
cd "$SCRIPT_DIR"
|
||||
docker build -t md-to-print:latest .
|
||||
fi
|
||||
|
||||
# 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")"
|
||||
@@ -72,21 +125,36 @@ if [[ ! "$MD_DIR" =~ ^"$SCRIPT_DIR"/documents ]]; then
|
||||
MD_NAME="$MD_REL_PATH"
|
||||
fi
|
||||
|
||||
# Créer les répertoires nécessaires
|
||||
mkdir -p "$SCRIPT_DIR/documents" "$SCRIPT_DIR/output" "$SCRIPT_DIR/logs"
|
||||
# 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
|
||||
|
||||
# Vérifier si l'image Docker existe
|
||||
if ! docker images md-to-print:latest --format "{{.Repository}}:{{.Tag}}" | grep -q "md-to-print:latest"; then
|
||||
echo -e "${YELLOW}Image Docker non trouvée. Construction de l'image...${NC}"
|
||||
cd "$SCRIPT_DIR"
|
||||
docker build -t md-to-print:latest .
|
||||
# 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
|
||||
-it
|
||||
)
|
||||
|
||||
# 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"
|
||||
@@ -108,23 +176,43 @@ fi
|
||||
|
||||
DOCKER_CMD+=(md-to-print:latest)
|
||||
|
||||
# Ajouter le fichier markdown et les options
|
||||
# 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 restantes
|
||||
shift
|
||||
for arg in "$@"; do
|
||||
DOCKER_CMD+=("$arg")
|
||||
# Ajouter les options
|
||||
for opt in "${FILE_OPTIONS[@]}"; do
|
||||
DOCKER_CMD+=("$opt")
|
||||
done
|
||||
|
||||
# Exécuter
|
||||
echo -e "${GREEN}Exécution dans Docker...${NC}"
|
||||
echo -e "${BLUE}Commande: ${DOCKER_CMD[*]}${NC}"
|
||||
echo ""
|
||||
|
||||
exec "${DOCKER_CMD[@]}"
|
||||
if ! "${DOCKER_CMD[@]}"; then
|
||||
echo -e "${RED}Erreur lors du traitement de $MD_FILE${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# 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
|
||||
|
||||
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"
|
||||
@@ -528,8 +535,11 @@ fi
|
||||
|
||||
PANDOC_OPTS=(
|
||||
"$MD_FILE"
|
||||
--from=markdown # Format d'entrée explicite (Markdown)
|
||||
--to=pdf # Format de sortie explicite (PDF)
|
||||
-o "$PDF_FILE"
|
||||
--pdf-engine="$PDF_ENGINE"
|
||||
--standalone # Document complet avec métadonnées
|
||||
-V geometry:margin=2cm
|
||||
-V fontsize=11pt
|
||||
-V documentclass=article
|
||||
@@ -544,9 +554,11 @@ if [ "$PDF_ENGINE" = "xelatex" ]; then
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "$ORIENTATION" = "landscape" ]; then
|
||||
PANDOC_OPTS+=(-V geometry:landscape)
|
||||
fi
|
||||
# Ne pas forcer l'orientation dans le PDF - laisser CUPS gérer l'orientation lors de l'impression
|
||||
# Cela évite les conflits de mise en page
|
||||
# if [ "$ORIENTATION" = "landscape" ]; then
|
||||
# PANDOC_OPTS+=(-V geometry:landscape)
|
||||
# fi
|
||||
|
||||
log DEBUG "Exécution: pandoc ${PANDOC_OPTS[*]}"
|
||||
|
||||
@@ -593,12 +605,17 @@ if [ -n "$PAGES" ]; then
|
||||
LP_OPTS+=(-o page-ranges="$PAGES")
|
||||
fi
|
||||
|
||||
# Appliquer l'orientation via CUPS (le PDF reste en portrait)
|
||||
# Utiliser les valeurs standard IPP pour l'orientation
|
||||
if [ "$ORIENTATION" = "landscape" ]; then
|
||||
LP_OPTS+=(-o orientation-requested=4)
|
||||
fi
|
||||
|
||||
LP_OPTS+=(-o media="$SIZE")
|
||||
|
||||
# Ne pas utiliser fit-to-page car cela peut causer des problèmes de mise en page
|
||||
# Le PDF est déjà correctement dimensionné
|
||||
|
||||
case "$QUALITY" in
|
||||
draft)
|
||||
LP_OPTS+=(-o print-quality=3)
|
||||
@@ -629,7 +646,8 @@ case "$DUPLEX" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# Impression
|
||||
# Impression (sauf si --convert-only)
|
||||
if [ "$CONVERT_ONLY" = false ]; then
|
||||
log INFO "=== Impression ==="
|
||||
log INFO "Options:"
|
||||
log INFO " - Copies: $COPIES"
|
||||
@@ -650,6 +668,9 @@ if ! lp "${LP_OPTS[@]}" "$PDF_FILE" 2>&1 | while IFS= read -r line; do log DEBUG
|
||||
fi
|
||||
|
||||
log INFO "Impression lancée avec succès!"
|
||||
else
|
||||
log INFO "Mode conversion uniquement (pas d'impression)"
|
||||
fi
|
||||
|
||||
# Gestion du fichier PDF
|
||||
if [ "$KEEP_PDF" = false ]; then
|
||||
|
||||
@@ -66,37 +66,60 @@ show_print_options() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# Dialogue zenity avec formulaire
|
||||
local result=$(zenity --forms --title "Options d'impression MD_to_Print" \
|
||||
# Dialogue zenity avec formulaire (forcer DISPLAY et mode synchrone)
|
||||
echo "DEBUG show_print_options: Tentative d'affichage avec DISPLAY=${DISPLAY}" >> /tmp/md_to_print_debug.log
|
||||
|
||||
local result
|
||||
# Utiliser dbus-launch si nécessaire pour les applications GUI depuis un contexte non-GUI
|
||||
if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ] && command -v dbus-launch &> /dev/null; then
|
||||
eval $(dbus-launch --sh-syntax)
|
||||
fi
|
||||
|
||||
result=$(DISPLAY="${DISPLAY}" zenity --forms \
|
||||
--title "Options d'impression MD_to_Print" \
|
||||
--text "Configurez les options d'impression" \
|
||||
--add-combo "Imprimante" \
|
||||
--combo-values "$printers" \
|
||||
--set-value "Par défaut" \
|
||||
--add-combo "Recto-verso" \
|
||||
--combo-values "none|simplex|duplex" \
|
||||
--set-value "none" \
|
||||
--add-entry "Nombre de copies (1-10)" \
|
||||
--set-value "1" \
|
||||
--add-combo "Couleur" \
|
||||
--combo-values "Non|Oui" \
|
||||
--set-value "Non" \
|
||||
--add-combo "Qualité" \
|
||||
--combo-values "draft|normal|high" \
|
||||
--set-value "normal" \
|
||||
--add-combo "Orientation" \
|
||||
--combo-values "portrait|landscape" \
|
||||
--set-value "portrait" \
|
||||
2>/dev/null)
|
||||
2>&1)
|
||||
|
||||
if [ $? -ne 0 ] || [ -z "$result" ]; then
|
||||
return 1 # Utilisateur a annulé
|
||||
local zenity_exit=$?
|
||||
echo "DEBUG show_print_options: zenity_exit=$zenity_exit, result=$result" >> /tmp/md_to_print_debug.log
|
||||
|
||||
# Code 1 = utilisateur a annulé (normal)
|
||||
# Code 0 = OK
|
||||
# Autre = erreur
|
||||
if [ $zenity_exit -eq 1 ]; then
|
||||
# Utilisateur a annulé
|
||||
echo "DEBUG: Utilisateur a annulé le dialogue" >> /tmp/md_to_print_debug.log
|
||||
return 1
|
||||
elif [ $zenity_exit -ne 0 ]; then
|
||||
# Erreur d'exécution
|
||||
echo "Erreur zenity (code $zenity_exit): $result" >> /tmp/md_to_print_zenity_error.log
|
||||
echo "DEBUG: Erreur zenity (code $zenity_exit): $result" >> /tmp/md_to_print_debug.log
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -z "$result" ]; then
|
||||
echo "DEBUG: Résultat vide" >> /tmp/md_to_print_debug.log
|
||||
return 1 # Pas de résultat
|
||||
fi
|
||||
|
||||
echo "DEBUG: Dialogue réussi, résultat: $result" >> /tmp/md_to_print_debug.log
|
||||
|
||||
# Parser les résultats (zenity forms retourne les valeurs séparées par |)
|
||||
IFS='|' read -r selected_printer duplex_mode copies color quality orientation <<< "$result"
|
||||
|
||||
# Valider et formater les options
|
||||
PRINT_OPTS=()
|
||||
# Valider et formater les options (déclarer comme globale)
|
||||
declare -ga PRINT_OPTS=()
|
||||
|
||||
if [ -n "$selected_printer" ] && [ "$selected_printer" != "Par défaut" ] && [ "$selected_printer" != "" ]; then
|
||||
PRINT_OPTS+=(--printer "$selected_printer")
|
||||
@@ -291,6 +314,45 @@ if [ ${#MD_FILES[@]} -gt 1 ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Afficher le dialogue d'options d'impression AVANT le traitement si action print et un seul fichier
|
||||
# (doit être fait depuis l'hôte, pas dans Docker)
|
||||
PRINT_OPTS=()
|
||||
|
||||
# S'assurer que DISPLAY est défini (nécessaire quand appelé depuis Caja Actions)
|
||||
if [ -z "${DISPLAY:-}" ]; then
|
||||
# Essayer de trouver DISPLAY depuis l'environnement utilisateur
|
||||
if [ -f "$HOME/.Xauthority" ] && [ -S "/tmp/.X11-unix/X0" ]; then
|
||||
export DISPLAY=":0"
|
||||
elif [ -S "/tmp/.X11-unix/X0" ]; then
|
||||
export DISPLAY=":0"
|
||||
fi
|
||||
# Dernière tentative : utiliser la valeur par défaut
|
||||
if [ -z "${DISPLAY:-}" ]; then
|
||||
export DISPLAY=":0"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Logs de débogage
|
||||
echo "DEBUG: ACTION=$ACTION" >> /tmp/md_to_print_debug.log
|
||||
echo "DEBUG: DISPLAY=${DISPLAY:-}" >> /tmp/md_to_print_debug.log
|
||||
echo "DEBUG: zenity disponible: $(command -v zenity 2>&1)" >> /tmp/md_to_print_debug.log
|
||||
echo "DEBUG: Nombre de fichiers: ${#MD_FILES[@]}" >> /tmp/md_to_print_debug.log
|
||||
|
||||
# Afficher le dialogue d'options pour print ET preview (si un seul fichier)
|
||||
if [ \( "$ACTION" = "print" -o "$ACTION" = "preview" \) ] && command -v zenity &> /dev/null && [ ${#MD_FILES[@]} -eq 1 ]; then
|
||||
echo "DEBUG: Conditions remplies, tentative d'affichage du dialogue" >> /tmp/md_to_print_debug.log
|
||||
# Toujours essayer d'afficher le dialogue pour print et preview
|
||||
if show_print_options; then
|
||||
echo "DEBUG: Dialogue OK, options: ${PRINT_OPTS[*]}" >> /tmp/md_to_print_debug.log
|
||||
notify info "Options sélectionnées: ${PRINT_OPTS[*]}"
|
||||
else
|
||||
echo "DEBUG: Dialogue échoué ou annulé" >> /tmp/md_to_print_debug.log
|
||||
notify info "Utilisation des options par défaut"
|
||||
fi
|
||||
else
|
||||
echo "DEBUG: Conditions non remplies - ACTION=$ACTION, zenity=$(command -v zenity), fichiers=${#MD_FILES[@]}" >> /tmp/md_to_print_debug.log
|
||||
fi
|
||||
|
||||
# Notification de début
|
||||
notify info "Traitement de ${#MD_FILES[@]} fichier(s)..."
|
||||
|
||||
@@ -315,18 +377,15 @@ for file in "${MD_FILES[@]}"; do
|
||||
if [ "$ACTION" = "convert" ]; then
|
||||
docker_args+=(--convert-only)
|
||||
elif [ "$ACTION" = "preview" ]; then
|
||||
# Pour "preview", utiliser les options déjà récupérées avant la boucle
|
||||
if [ ${#PRINT_OPTS[@]} -gt 0 ]; then
|
||||
docker_args+=("${PRINT_OPTS[@]}")
|
||||
fi
|
||||
docker_args+=(--preview --keep-pdf)
|
||||
else
|
||||
# Pour "print", afficher le dialogue d'options si disponible
|
||||
if command -v zenity &> /dev/null && [ ${#MD_FILES[@]} -eq 1 ]; then
|
||||
# Afficher le dialogue d'options pour un seul fichier
|
||||
if show_print_options; then
|
||||
# Pour "print", utiliser les options déjà récupérées avant la boucle
|
||||
if [ ${#PRINT_OPTS[@]} -gt 0 ]; then
|
||||
docker_args+=("${PRINT_OPTS[@]}")
|
||||
notify info "Options: ${PRINT_OPTS[*]}"
|
||||
else
|
||||
# Utiliser les valeurs par défaut si l'utilisateur annule
|
||||
notify info "Utilisation des options par défaut"
|
||||
fi
|
||||
fi
|
||||
# On garde le PDF après impression
|
||||
docker_args+=(--keep-pdf)
|
||||
@@ -344,6 +403,21 @@ for file in "${MD_FILES[@]}"; do
|
||||
"${docker_args[@]}" \
|
||||
> /tmp/md_to_print_docker.log 2>&1; then
|
||||
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
|
||||
|
||||
# Pour preview, ouvrir le PDF depuis l'hôte après conversion
|
||||
if [ "$ACTION" = "preview" ]; then
|
||||
pdf_file="$output_dir/${file_base%.*}.pdf"
|
||||
if [ -f "$pdf_file" ]; then
|
||||
if command -v evince &> /dev/null; then
|
||||
evince "$pdf_file" 2>/dev/null &
|
||||
elif command -v xdg-open &> /dev/null; then
|
||||
xdg-open "$pdf_file" 2>/dev/null &
|
||||
else
|
||||
notify warn "Aucun visualiseur PDF trouvé pour prévisualisation"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
notify success "✓ $file_name traité"
|
||||
else
|
||||
ERROR_COUNT=$((ERROR_COUNT + 1))
|
||||
@@ -363,16 +437,9 @@ for file in "${MD_FILES[@]}"; do
|
||||
|
||||
case "$ACTION" in
|
||||
print)
|
||||
# Pour print, afficher le dialogue d'options si disponible
|
||||
if command -v zenity &> /dev/null && [ ${#MD_FILES[@]} -eq 1 ]; then
|
||||
# Afficher le dialogue d'options pour un seul fichier
|
||||
if show_print_options; then
|
||||
# Pour print, utiliser les options déjà récupérées avant la boucle
|
||||
if [ ${#PRINT_OPTS[@]} -gt 0 ]; then
|
||||
cmd_args+=("${PRINT_OPTS[@]}")
|
||||
notify info "Options: ${PRINT_OPTS[*]}"
|
||||
else
|
||||
# Utiliser les valeurs par défaut si l'utilisateur annule
|
||||
notify info "Utilisation des options par défaut"
|
||||
fi
|
||||
fi
|
||||
# On garde le PDF après impression
|
||||
cmd_args+=(--keep-pdf)
|
||||
@@ -382,12 +449,40 @@ for file in "${MD_FILES[@]}"; do
|
||||
cmd_args+=(--convert-only)
|
||||
;;
|
||||
preview)
|
||||
# Pour preview, utiliser les options déjà récupérées avant la boucle
|
||||
if [ ${#PRINT_OPTS[@]} -gt 0 ]; then
|
||||
cmd_args+=("${PRINT_OPTS[@]}")
|
||||
fi
|
||||
cmd_args+=(--preview --keep-pdf)
|
||||
;;
|
||||
esac
|
||||
|
||||
if "$script_path" "${cmd_args[@]}" > /tmp/md_to_print.log 2>&1; then
|
||||
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
|
||||
|
||||
# Pour preview, ouvrir le PDF depuis l'hôte après conversion
|
||||
if [ "$ACTION" = "preview" ]; then
|
||||
# Chercher le PDF dans le répertoire de sortie
|
||||
pdf_file=""
|
||||
if [ -f "${file%.*}.pdf" ]; then
|
||||
pdf_file="${file%.*}.pdf"
|
||||
elif [ -f "$HOME/MD_to_print_output/$(basename "${file%.*}.pdf")" ]; then
|
||||
pdf_file="$HOME/MD_to_print_output/$(basename "${file%.*}.pdf")"
|
||||
elif [ -f "./output/$(basename "${file%.*}.pdf")" ]; then
|
||||
pdf_file="./output/$(basename "${file%.*}.pdf")"
|
||||
fi
|
||||
|
||||
if [ -n "$pdf_file" ] && [ -f "$pdf_file" ]; then
|
||||
if command -v evince &> /dev/null; then
|
||||
evince "$pdf_file" 2>/dev/null &
|
||||
elif command -v xdg-open &> /dev/null; then
|
||||
xdg-open "$pdf_file" 2>/dev/null &
|
||||
else
|
||||
notify warn "Aucun visualiseur PDF trouvé pour prévisualisation"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
notify success "✓ $file_name traité"
|
||||
else
|
||||
ERROR_COUNT=$((ERROR_COUNT + 1))
|
||||
|
||||
46
scripts/md_to_print_notify.sh
Executable file
46
scripts/md_to_print_notify.sh
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script utilitaire pour les notifications MD_to_Print
|
||||
# Usage: md_to_print_notify.sh [level] [message]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
LEVEL="${1:-info}"
|
||||
MESSAGE="${2:-}"
|
||||
ICON=""
|
||||
URGENCY="normal"
|
||||
|
||||
case "$LEVEL" in
|
||||
info|INFO)
|
||||
ICON="dialog-information"
|
||||
URGENCY="low"
|
||||
;;
|
||||
success|SUCCESS)
|
||||
ICON="dialog-information"
|
||||
URGENCY="normal"
|
||||
;;
|
||||
warning|WARN)
|
||||
ICON="dialog-warning"
|
||||
URGENCY="normal"
|
||||
;;
|
||||
error|ERROR)
|
||||
ICON="dialog-error"
|
||||
URGENCY="critical"
|
||||
;;
|
||||
*)
|
||||
ICON="dialog-information"
|
||||
URGENCY="normal"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$MESSAGE" ]; then
|
||||
echo "Usage: $0 [level] [message]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if command -v notify-send &> /dev/null; then
|
||||
notify-send -u "$URGENCY" -i "$ICON" "MD_to_Print" "$MESSAGE" 2>/dev/null || true
|
||||
else
|
||||
echo "[$LEVEL] $MESSAGE" >&2
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user