OVH Cloud OVH Cloud

produit (final?)

3 réponses
Avatar
Eric Reinbold
Ben voilà, c'est prêt!
Si vous voyez des trucs bizarres...
Pour un premier essai, je trouve ça assez rapide, elips!

(defun create-new-eeec (title numero name1 name2 measure length tempo key use)
"Create new EEEC buffer and file"
(interactive "sTitle of the song: \nsNumero: \nsFirst name: \nsSecond name: \nsMeasure: (default C) \nsLength: (default 1/8) \nsTempo: (ex: 1/4=96) \nsKey: (default C) \nsUse: ")
(global-set-key "\C-cr" 'create-new-eeec)
(set-buffer (get-buffer-create title))

;; Mise en place de l'entête du buffer
(if (not (string-equal use ""))
(progn
(insert "\n\n\n")
(insert-char ?* 80)
(insert "\nUsage: " use)
(insert "\nJour: \nLieu: \n")
(insert-char ?* 80)
(insert "\n\n")))

(insert "X:1\nT:" title)
(if (not (string-equal numero ""))
(insert "\nT:" (replace-regexp-in-string "\\([A-Z]+\\)\\([0-9]+\\)" "\\1 \\2" numero)))
(if (not (string-equal name1 ""))
(insert "\nC:" name1))
(if (not (string-equal name2 ""))
(insert "\nC:" name2))
(insert "\nM:" (if (string-equal measure "") "C" measure))
(insert "\nL:" (if (string-equal length "") "1/8" length))
(if (not (string-equal tempo ""))
(insert "\nQ:" tempo))
(insert "\nK:" (if (string-equal key "") "C" key))
(insert "\n%%staves (1 2)\nV:1\n")

;; Eliminer, dans le titre, tout ce qui ne va pas pour un nom de fichier
(setq title (replace-regexp-in-string "[-!?.,;: ]" "_" title))
(setq title (replace-regexp-in-string "_+" "_" title))
(setq title (replace-regexp-in-string "_$" "" title))

(setq title (replace-regexp-in-string "ç" "c" title))
(setq title (replace-regexp-in-string "[âäà]" "a" title))
(setq title (replace-regexp-in-string "[êëéè]" "e" title))
(setq title (replace-regexp-in-string "[ôö]" "o" title))
(setq title (replace-regexp-in-string "[îï]" "i" title))
(setq title (replace-regexp-in-string "[ûüù]" "u" title))

;; Joindre, s'il y a, le numéro du chant
(if (not (string-equal numero ""))
(setq title (concat title "_" numero)))

;; Revérifier
(setq title (replace-regexp-in-string "-" "_" title))

;; Sauvergarder
(write-file (concat title ".eeec"))

(goto-char (point-min))

(switch-to-buffer (buffer-name)))

3 réponses

Avatar
Florent Georges
Eric Reinbold wrote:

Si vous voyez des trucs bizarres...

Pour un premier essai, je trouve ça assez rapide, elips!



En termes de cycle de developpement ? Assurement !

Quelques suggestions en vrac. Demande si tu n'en comprend pas
certaines.

(defun eeec-prompt-field (prompt &optional default)
"Prompt for a value.
PROMPT is a string to use as the prompt. DEFAULT is the default
value if the uer hits directly RET (even nil)."
(let ((val (read-string prompt)))
(if (equal "" val) default val)))

(defun eeec-prompt-infos ()
"Prompt for all EEEC infos.
TODO: Je ne sais ce qu'est EEEC, et ne peux donc decrire
convenablement cette fonction. --drkm
Return a list of the form:
(TITLE NUM NAME1 NAME2 MEASURE LEN TEMPO KEY USE)
Defaults are:
(nil nil nil nil "C" "1/8" nil "C" nil)"
(list (eeec-prompt-field "Title of the song: ")
(eeec-prompt-field "Numero: ")
(eeec-prompt-field "First name: ")
(eeec-prompt-field "Second name: ")
(eeec-prompt-field "Measure: " "C")
(eeec-prompt-field "Length: " "1/8")
(eeec-prompt-field "Tempo: ")
(eeec-prompt-field "Key: " "C")
(eeec-prompt-field "Use: ")))

;; TODO: Il devrait exister quelque chose de plus sur. --drkm
(defun eeec-title-to-filename (title &optional num)
"Return a valid filename based on an EEEC title."
(concat
(replace-regexp-in-string "[-!?.,;: ]" "_"
(replace-regexp-in-string "_+" "_"
(replace-regexp-in-string "_$" ""
(replace-regexp-in-string "ç" "c"
(replace-regexp-in-string "[âäà]" "a"
(replace-regexp-in-string "[êëéè]" "e"
(replace-regexp-in-string "[ôö]" "o"
(replace-regexp-in-string "[îï]" "i"
(replace-regexp-in-string "[ûüù]" "u" title)))))))))
(or num "")
".eeec"))

(defun eeec-escape-number-from-user (num)
"..."
(replace-regexp-in-string
"([A-Z]+)([0-9]+)"
"1 2"
num))

;; FIXME: Ceci doit aller soit dans .emacs, soit en tant que form
;; top-level dans la bibliotheque EEEC. --drkm
(global-set-key "C-cr" 'create-new-eeec)

(defun create-new-eeec (title numero name1 name2 measure
length tempo key use)
"Create new EEEC buffer and file"
(interactive (eeec-prompt-infos))
(let ((filename (eeec-title-to-filename title numero)))
(find-file filename)
(when use
(insert "nnn")
(insert-char ?* 80)
(insert "nUsage: " use)
(insert "nJour: nLieu: n")
(insert-char ?* 80)
(insert "nn"))
(insert "X:1nT:" title)
(when numero
(insert "nT:" (eeec-escape-number-from-user numero)))
(when name1
(insert "nC:" name1))
(when name2
(insert "nC:" name2))
(insert "nM:" measure)
(insert "nL:" length)
(when tempo
(insert "nQ:" tempo))
(insert "nK:" key)
(insert "n%%staves (1 2)nV:1n")
(goto-char (point-min))))

--drkm
Avatar
Eric Reinbold
"Florent Georges" writes:

En termes de cycle de developpement ? Assurement !



Et pour la correction, encore plus rapide! ;)

J'ai une erreur depuis:
Symbol's function definition is void: eeec-prompt-infos

Si tu veux que je teste ton oeuvre...


;; TODO: Il devrait exister quelque chose de plus sur. --drkm
(defun eeec-title-to-filename (title &optional num)
"Return a valid filename based on an EEEC title."
(concat
(replace-regexp-in-string "[-!?.,;: ]" "_" <--|
(replace-regexp-in-string "_+" "_" <---- Ca concat dans l'autre sens, vaudrait pas mieux inverser?
(replace-regexp-in-string "_$" "" <--|
(replace-regexp-in-string "ç" "c"
(replace-regexp-in-string "[âäà]" "a"
(replace-regexp-in-string "[êëéè]" "e"
(replace-regexp-in-string "[ôö]" "o"
(replace-regexp-in-string "[îï]" "i"
(replace-regexp-in-string "[ûüù]" "u" title)))))))))
(or num "") <---- Je pige pas 'or' dans l'intro, faut que je reprenne calmement...
".eeec"))



;; FIXME: Ceci doit aller soit dans .emacs, soit en tant que form
;; top-level dans la bibliotheque EEEC. --drkm
(global-set-key "C-cr" 'create-new-eeec)



Ca non plus, je pige pas bien encore, à revoir.

En gros, .eeec est un cousin de .abc, le programme c'est abcm2ps.
C'est avec ça que j'écris mes partitions (de musique).
J'en avais en peut plein les bottes de reprendre à chaque fois le début, alors....

Merci en attendant,
Eric
Avatar
Florent Georges
Eric Reinbold wrote:

"Florent Georges" writes:

J'ai une erreur depuis:
Symbol's function definition is void: eeec-prompt-infos



As-tu bien evalue toutes les formes ? Notamment tous les 'defun' ?
Et bien sur, plus precisement, la definition de 'eeec-prompt-infos' ?

> (or num "") <---- Je pige pas 'or' dans l'intro, faut que je rep renne calmement...
> ".eeec"))



'or' est une forme speciale qui retourne le premier de ses argument
qui est non-nil, sans evaluer les arguments suivants. donc dans ce
cas-ci, elle evalue d'abord 'num'. S'il est non-nil, elle "retourne"
la valeur de 'num'. Sinon, elle evalue l'argument suivant, qui est
non-nil puisqu'il s'agit de la chaine "", et retourne donc "".

> ;; FIXME: Ceci doit aller soit dans .emacs, soit en tant que form
> ;; top-level dans la bibliotheque EEEC. --drkm
> (global-set-key "C-cr" 'create-new-eeec)

Ca non plus, je pige pas bien encore, à revoir.



Si tu as un fichier separe pour definir tes fonctions, mais que tu
veux que cette sequence soit definie avant le chargement de ce fichier,
tu inseres l'appel ci-dessus dans ton .emacs, qui lui est lu a chaque
demarrage. Tu ajoutes :

(autoload 'create-new-eeec "eeec")

et Emacs s'occupe de charger le fichier a sa premiere utilisation.

En gros, .eeec est un cousin de .abc, le programme c'est abcm2ps.
C'est avec ça que j'écris mes partitions (de musique).
J'en avais en peut plein les bottes de reprendre à chaque fois le déb ut, alors....



Je ne suis pas certain, mais il semble qu'il te faille un mode
majeur. Ce n'est pas complique a mettre en place, et une fois fait,
c'est plus simple a developper car il y a moins d'interraction avec le
contexte global.

Mais si je me souviens bien j'ai vu justement une 'eeec-mode' passer
il ya peu ici meme. Si tu veux que l'on jette un oeil a ce que tu as
pour l'instant, met ton fichier en ligne.

--drkm