Как я могу установить собственные StartupPreferences для определенного образа Pharo?

Я хочу, чтобы определенное изображение запускалось с определенными настройками во время запуска, как указано здесь.

StartupPreferencesLoader default executeAtomicItems: { (StartupAction
             name: 'Start Literate Server'
             code: [
                 | class |
                 class := Smalltalk at: #LiterateServer ifAbsent: [
                              Metacello new
                                  baseline: 'LiterateSmalltalk';
                                  repository: 'github://jingtaozf/literate-smalltalk';
                                  onConflict: [ :ex | ex allow ];
                                  load.
                              Smalltalk at: #LiterateServer ].
                 class ifNotNil: [ LiterateServer start ] ]
             runOnce: false) }

Есть ли какой-нибудь способ добиться этого?

Вы хотите настроить параметры для своего приложения или настроить параметры, которые уже доступны в pharo?

tukan 03.07.2024 19:34

@tukan Это пользовательская настройка для конкретного изображения, которая позволяет редактировать и выполнять код Pharo с помощью Emacs. Я нашел несколько советов и руководство по этому процессу, которое мне еще предстоит попробовать.

vfclists 05.07.2024 17:37
Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
2
2
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что вам, возможно, лучше создать раскладку клавиш Emacs. Я не играл с этим, поэтому не знаю, насколько это должно быть сложно.

Вот быстрый способ создать новые пользовательские настройки в Pharo:

Сначала создайте класс для вашего приложения:

Object subclass: #VfclistsApplication
    instanceVariableNames: ''
    classVariableNames: 'emacsSetting'
    package: 'VfclistPackage'

Сначала создайте метод установки и получения для вашей переменной.

Сеттер с ленивой инициализацией. Это сделано для того, чтобы настройка не была nil. Ваша настройка никогда не должна быть nil!

VfclistsApplication class>>emacsSetting
emacsSetting ifNil: [ emacsSetting := false ].
    ^ emacsSetting

геттер:

VfclistsApplication class>>emacsSetting: aValue
    emacsSetting := aValue

В классе VfclistsApplication создайте метод emacsSettingSettingsOn:, который определяет настройку вашего приложения:

VfclistsApplication class>>emacsSettingSettingsOn: aBuilder
    <systemsettings>
    (aBuilder setting: #emacsSetting)
        target: VfclistsApplication;
        label: 'Emacs setting' translated;
        description: 'A setting needed for the use of Emacs';
        parent: nil.

Является ли переменная aBuilder экземпляром какого-то класса Builder?

vfclists 08.07.2024 21:00

@vfclists Я в отпуске. Builder — это экземпляр UI Builder.

tukan 13.07.2024 17:15
Ответ принят как подходящий

Я нашел старое руководство, в котором объясняются шаги Буклет с советами и подсказками от 2017 года

Он включает в себя создание некоторых StartupActions, которые выполняются при загрузке изображения.

Мне нужны настройки запуска, которые специфичны для конкретного образа и, следовательно, сохраняются в файле в каталоге образа, а не в каталоге общих настроек для Pharo в целом или в общем каталоге версий виртуальной машины.

| items |
items := OrderedCollection new.
items add: (StartupAction
              name: 'Start Literate Server'
              code: [
                 | class |
                 class := Smalltalk at: #LiterateServer ifAbsent: [
                              Metacello new
                                  baseline: 'LiterateSmalltalk';
                                  repository: 'github://jingtaozf/literate-smalltalk';
                                  onConflict: [ :ex | ex allow ];
                                  load.
                              Smalltalk at: #LiterateServer ].
                 class ifNotNil: [ LiterateServer start ] ]
              runOnce: false).

StartupPreferencesLoader default
  addAtStartupInImageDirectory: items.

В результате появился файл startup.st со следующим содержимым.

StartupPreferencesLoader default executeAtomicItems: {
    StartupAction name: 'Start Literate Server' code: [ 
                 | class |
                 class := Smalltalk at: #LiterateServer ifAbsent: [ 
                              Metacello new
                                  baseline: 'LiterateSmalltalk';
                                  repository: 'github://jingtaozf/literate-smalltalk';
                                  onConflict: [ :ex | ex allow ];
                                  load.
                              Smalltalk at: #LiterateServer ].
                 class ifNotNil: [ LiterateServer start ] ].
}.

Другие вопросы по теме