Try new editor for 3.5.1

This commit is contained in:
Siphonight 2026-07-05 17:15:55 +02:00
parent 1d2bd68cdf
commit 7c03a89335

View File

@ -6,39 +6,99 @@ if [[ -n ${SSH_ORIGINAL_COMMAND} ]]; then
fi fi
function secure_file_editor() { function secure_file_editor() {
File_Path="${*}" local file_path="${*}"
echo -e "\n=====SECURE=FILE=EDITOR=====" local -a lines=()
if [[ -e ${File_Path} ]]; then local cmd rest line_num new_content modified=0
echo "Le fichier selectionne existe et a pour contenu :"
cat "${File_Path}" if [[ -f ${file_path} ]]; then
read -r -p 'Souhaitez vous modifier le contenu du fichier ? (y/n) : ' choice while IFS= read -r line; do
else lines+=("${line}")
echo "Creation d un nouveau fichier \"${File_Path}\"." done < "${file_path}"
touch "${File_Path}"
choice="y"
fi fi
case ${choice} in
"y" | "Y") echo ""
printf '%s\n' " Consignes d'utilisation de cet editeur : - Lorsque l'edition du fichier est achevee, entrez ctrl-d sur une ligne vide pour sortir. - ATTENTION : Copiez les lignes que vous souhaitez garder intactes, le contenu du fichier complet sera ecrase par ce qui suit. - Tout fichier vide sera supprime. :" echo "===== SECURE FILE EDITOR ====="
New_Content+=$(xargs -0) echo "Fichier : ${file_path}"
echo "${New_Content}" >"${File_Path}" echo ""
set +H
while true; do
echo "--- Lignes ${#lines[@]} ---"
if [[ ${#lines[@]} -eq 0 ]]; then
echo "(fichier vide)"
else
for i in "${!lines[@]}"; do
printf '%3d: %s\n' $((i + 1)) "${lines[${i}]}"
done
fi
echo "---------------------------"
echo "e <n> <texte> - Remplacer la ligne n"
echo "i <n> <texte> - Inserer apres la ligne n (0 = debut)"
echo "d <n> - Supprimer la ligne n"
echo "wq - Enregistrer et quitter"
echo "q! - Quitter sans enregistrer"
echo ""
read -r -p "> " input
cmd="${input%% *}"
rest="${input#* }"
case "${cmd}" in
e)
line_num="${rest%% *}"
new_content="${rest#* }"
if [[ ${line_num} =~ ^[0-9]+$ ]] && (( line_num >= 1 && line_num <= ${#lines[@]} )); then
lines[$((line_num - 1))]="${new_content}"
modified=1
else
echo "Ligne invalide (1-${#lines[@]})."
fi
;; ;;
i)
"n" | "N") line_num="${rest%% *}"
echo "Edition du fichier abandonnee." new_content="${rest#* }"
if [[ ${line_num} =~ ^[0-9]+$ ]] && (( line_num >= 0 && line_num <= ${#lines[@]} )); then
lines=("${lines[@]:0:line_num}" "${new_content}" "${lines[@]:line_num}")
modified=1
else
echo "Position invalide (0-${#lines[@]})."
fi
;;
d)
line_num="${rest}"
if [[ ${line_num} =~ ^[0-9]+$ ]] && (( line_num >= 1 && line_num <= ${#lines[@]} )); then
unset 'lines[$((line_num - 1))]'
lines=("${lines[@]}")
modified=1
else
echo "Ligne invalide (1-${#lines[@]})."
fi
;;
wq)
if [[ ${modified} -eq 1 ]] || [[ ! -f ${file_path} ]]; then
printf '%s\n' "${lines[@]}" > "${file_path}"
if [[ ${#lines[@]} -eq 0 ]]; then
rm -f "${file_path}"
echo "Fichier vide, supprime."
else
echo "Fichier enregistre (${#lines[@]} lignes)."
fi
else
echo "Aucune modification."
fi
break
;;
q|'q!')
echo "Abandon."
break
;; ;;
*) *)
clear echo "Commandes : e <n> <txt>, i <n> <txt>, d <n>, wq, q!"
echo "Selection invalide."
;; ;;
esac esac
echo ""
unset New_Content done
unset File_Path echo ""
echo "Modifications appliquées."
echo -e "=====SECURE=FILE=EDITOR=====\n"
} }
function sessions_viewer() { function sessions_viewer() {