Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tuer vim proprement (?)

34 réponses
Avatar
moi-meme
dans un script je veux tuer vim appelé par
xterm -e vim <fichier> &

Je lui envoie un kill -3 %1
(et pas un-9 je suis gentil ...)
ça tue vim (et xterm ...) mais ce "bâtard de sa mère" laisse le fichier
swap, ce que je comprends.

pas trouvé de signal qui lui dise de fermer normalement.

Ya moyen se faire autrement qu'en effaçant (très gorettement) le fichier
swap ?

ou alors en appelant un autre éditeur qui accepte cela ?

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: https://lists.debian.org/53d2cd05$0$2275$426a74cc@news.free.fr

4 réponses

1 2 3 4
Avatar
Francois Lafont
Le 28/07/2014 13:55, moi-meme a écrit :

j'ai fait un gros "snip". Ce que tu me dis est intyéressant : je suis
peut-être parti sur du compliqué.



Je pense oui, ça arrive à tout le monde.

:w | !bash %



Le problème du !bash c'est les variables :
Exemple de script :

#film_4_fin
convert $entree -level 0%,50% -sharpen 0x1.12 -colorspace gray -rotate
-1.2 -crop 1117x676+25+67 /tmp/xx.jpg
./autowhite /tmp/xx.jpg $sortie

(autowhite est un programme que j'ai mis en local venant de http://
www.fmwconcepts.com/imagemagick/ )



Ah mais je pensais que le fichier que tu éditais était
« autonome ». En fait, si je comprends bien il utilise
des variables définies dans le script bash initial,
c'est ça ? Et en l'état, celles-ci sont vides lorsque tu
lances la commandes, c'est ça ?
(Parce que dire que « le problème c'est les variables »
c'est un peu vague hein...)

on fait comment avec les variables externes ($entree, $sortie) sachant
qu'elles sont utilisées ailleurs pour la modification de toutes les
images ?



Si j'ai bien compris ton problème, alors il faut que,
dans le script bash initial, tu « exportes » les variables
qui te servent ensuite dans le fichier que tu édites dans
vim à la main. Par exemple, juste après avoir définie la
variable "entree" :

entree="..."
export entree

Et tu fais de même pour chacune des variables qui se
retrouvent dans le fichier vim à éditer. À partir de
là, quand tu lanceras dans vim :

:w | !bash %

les variables seront bien définies avec les valeurs
qu'elles avaient juste avant la ligne « vim <le-fichier> ».

--
François Lafont

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/lr5uhi$go4$
Avatar
moi-meme
------------snip-------------

Si j'ai bien compris ton problème, alors il faut que, dans le script
bash initial, tu « exportes » les variables qui te servent ensuite dans
le fichier que tu édites dans vim à la main. Par exemple, juste après
avoir définie la variable "entree" :

entree="..."
export entree

Et tu fais de même pour chacune des variables qui se retrouvent dans le
fichier vim à éditer. À partir de là, quand tu lanceras dans vim :

:w | !bash %

les variables seront bien définies avec les valeurs qu'elles avaient
juste avant la ligne « vim <le-fichier> ».

--
François Lafont



Cette proposition m'intéresse.
Jean Jachues m'a envoyé un mail me disant d'utiliser vim dan la même
console et de le fermer à chaque fois. Ensuite j'exécute la boucle.

Je te mets le bout de script concernant la boucle. Je ne peux pas le
faire à partir de vim avec : ":w | !bash %"

J'édite le fichier select/$film/action.
Mais dans la boucle je ne fais pas que l'exécuter : je réaffiche l'image

Je te montre la boucle pour information (toujours du rustique)

#choix de la photo
sortie=/tmp/action.jpg
entree=$image
#met l'image
feh --geometry 600x400+10+10 $image &
#visualise sortie
to_do=$(cat selection/$film/action)
eval "$to_do"
#visualise photo
eog $sortie &

#feh --geometry 100x100+0+0 $image &
#traitement action
echo "traitements images par action"
#boucle de revisualisation
while [ ! $a ] ; do
#traite fichier selection
vim selection/$film/action
pkill eog
#traitement de l'image
to_do=$(cat selection/$film/action)
eval "$to_do"
#visualise photo
eog $sortie &
read a
echo $a
done
#arrete feh
kill -SIGTERM %1 #-- -$(jobs -p)
pkill eog

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/53d8055f$0$2268$
Avatar
Francois Lafont
Le 29/07/2014 22:34, moi-meme a écrit :

Et tu fais de même pour chacune des variables qui se retrouvent dans le
fichier vim à éditer. À partir de là, quand tu lanceras dans vim :

:w | !bash %

les variables seront bien définies avec les valeurs qu'elles avaient
juste avant la ligne « vim <le-fichier> ».




Cette proposition m'intéresse.
Jean Jachues m'a envoyé un mail me disant d'utiliser vim dan la même
console et de le fermer à chaque fois. Ensuite j'exécute la boucle.



Ben oui, en gros on dit un peu tous la même
chose : ouvrir vim normalement et le fermer
normalement avec « :w ».

Je te mets le bout de script concernant la boucle. Je ne peux pas le
faire à partir de vim avec : ":w | !bash %"

J'édite le fichier select/$film/action.



"selection/$film/action" plutôt, d'après le
code ci-dessous.

Mais dans la boucle je ne fais pas que l'exécuter : je réaffiche l'image



Et bien mets également la partie du code qui
affiche l'image dans le fichier que tu édites
avec vim. Ce fichier est bien généré
automatiquement par le script « global » de
toute façon, non ?

Autre possibilité : tu n'es pas obligé dans
vim de lancer le fichier courant lui-même dans
avec « : !bash % », tu peux aussi te créer un
exécutable dans /usr/local/bin/ qui s'appellerait
tester_image.sh (par exemple) et qui ferait un
truc du genre ça :

-----------------------------------------
#!/bin/bash

# Du code...

# Inclusion du fichier donné au argument
# avec la commande « point ».
. "$1"

# Encore un peu de code...
-----------------------------------------

De sorte que l'appel :

tester_image.sh selection/film21/action

revienne à exécuter le code ci-dessus où
tu remplaces la ligne « . "$1" » par le
contenu du fichier "selection/film21/action".
Du coup, dans vim, tu pourrais faire un
truc du genre :

:w | tester_image.sh "%"

ainsi dans, vim, tu pourrais te limiter
uniquement à la partie que tu dois modifier
manuellement (par tâtonnements).

Je te montre la boucle pour information (toujours du rustique)

#choix de la photo
sortie=/tmp/action.jpg
entree=$image
#met l'image
feh --geometry 600x400+10+10 $image &
#visualise sortie
to_do=$(cat selection/$film/action)
eval "$to_do"
#visualise photo
eog $sortie &

#feh --geometry 100x100+0+0 $image &
#traitement action
echo "traitements images par action"
#boucle de revisualisation
while [ ! $a ] ; do
#traite fichier selection
vim selection/$film/action
pkill eog
#traitement de l'image
to_do=$(cat selection/$film/action)
eval "$to_do"
#visualise photo
eog $sortie &
read a
echo $a
done
#arrete feh
kill -SIGTERM %1 #-- -$(jobs -p)
pkill eog



En voyant ça vite fait, je reste sur l'idée
que tu peux te contenter d'un simple :

vim <le-fichier>

dans ton script global qui pourra continuer
son travail après la fermeture de vim par tes
soins via un simple « :q » (ce qui équivaudra
à une validation de ta part de l'itération N
pour passer à l'itération N+1). Une fois dans
vim, les solutions ne manquent pas en utilisant
entre autres :

- l'exportation des variables qui peuvent servir
dans les programmes qui seront exécutés à partir
de vim.
- la création (éventuelle) d'un exécutable dans
/usr/local/bin/ qui sera appelé dans vim et qui
utilisera le fichier vim justement (donné en
argument lors de l'appel).

Après, forcément, il y aura un peu de travail
de ta part pour modifier et réadapter le code,
sachant que ce tu as à y gagner c'est surtout
la gestion d'un seul terminal (avec quand même
aussi une fenêtre pour la visualisation du
rendu des images, mais celle-là tu ne peux pas
y couper à priori). J'ai cru comprendre que
tu avais pas mal d'itérations à te taper, à
toi de voir si ça vaut le coup de te lancer
dans une modification/restructuration de
tes scripts. Voir aussi si c'est un « one-shot »
ou si c'est un travail que tu auras à faire
à plusieurs reprise etc. etc.

Bon courage. ;)

--
François Lafont

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/lragdh$9nv$
Avatar
Francois Lafont
Juste une remarque sur un détail :

Le 29/07/2014 22:34, moi-meme a écrit :

to_do=$(cat selection/$film/action)
eval "$to_do"



En gros, ces deux lignes reviennent à faire un
« include » du fichier "action" ce qui se fait
naturellement avec la commande « . ». Donc il
vaut mieux écrire plus simplement :

. "selection/$film/action"

et éviter le eval qui peut être piégeux.

--
François Lafont

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: https://lists.debian.org/lrbok5$5ta$
1 2 3 4