Carregando

Assim que uma função auxiliar crescer, mova-a para um pequeno ficheiro de biblioteca. Isso mantém o plug-in focado e torna o auxiliar reutilizável em vários plug-ins.

Faça uma função de biblioteca

Podemos pegar a função enviar mensagem e criar um novo ficheiro com ela como conteúdo. Salve o ficheiro na pasta repo, não na parte de plugins, talvez próximo ao nível superior;

/home/your-username/code/
 ├── scheme/
 ├── library/
 │ └── send-message.scm
 └── plug-ins/
 └── hello-world/
 └── hello-world.scm
  • scheme/: Este é o diretório principal para armazenar o código do Scheme.
  • library/: É aqui que funcionam funções compartilhadas como send-message.scm.
  • plug-ins/: É aqui que os plug-ins individuais são armazenados.
  • hello-world/: Pasta para o plug-in específico “Hello World!”.
  • hello-world.scm: Ficheiro de script do plug-in.

Exemplo de função de biblioteca send-message.scm

;; Função para tratar a saída de mensagens para vários destinos
(define (send-message message output)
 (cond
 ;; Enviar para a consola de mensagens
 ((eq? output 'error-console)
 ;; Definir o manipulador para consola de mensagens
 (lumi-message-set-handler 2)
 (lumi-message message))

 ;; Enviar para a caixa de diálogo GUI
 ((eq? output 'gui)
 ;; Definir o manipulador para o diálogo GUI
 (lumi-message-set-handler 0)
 (lumi-message message))

 ;; Enviar para a janela do terminal
 ((eq? output 'terminal)
 ;; A saída do terminal é tratada com display
 (display message)))

 ;; Restaurar o manipulador de mensagens padrão para a consola de mensagens
 (lumi-message-set-handler 2))

Carregar a função da biblioteca

Podemos carregar essa função de biblioteca com o comando Scheme load;

Carregando um ficheiro de biblioteca:

#!/usr/bin/env lumi-scheme-interpreter-0.1

(load "/home/mark/code/github/script-plugins/funky-library/send-message.scm")

(define (scheme-hello-world)
 (let ((message "Hello world!\n"))
 (send-message message 'gui)
 (send-message message 'error-console)
 (send-message message 'terminal)))

(scheme-register-procedure "scheme-hello-world"
 "Hello world!"
 "A Scheme procedure plug-in refactored"
 "Mark Sweeney"
 "Under GNU GENERAL PUBLIC LICENSE Version 3"
 "2024")

(scheme-menu-register
 "scheme-hello-world"
 "<Image>/Funky")

Ei! Agora temos algo mais simples e curto de ler, que se descreve sem comentários. Esta é a conclusão satisfatória da refatoração.