2010-11-13 7 views
5

Çoğunlukla Linux'ta F # ile oynuyorum ve herhangi bir eke gerek duymadan tüm GUI kitaplıklarını (Gtk, Gdk, Atk, Glib, Pango, Kahire) varsayılan olarak başvurulan şekilde kullanmak istiyorum: open Gtk;; yazarak. En iyi tahminim şu anda benziyor fsi fırlatma senaryo, modifiye ediyorum:F # etkileşimli olarak varsayılan olarak Gtk # referansı nasıl kullanılır?


    #!/bin/sh 
    exec /usr/bin/mono /usr/local/src/fsharp/bin/fsi.exe [email protected] 

Güncelleme: Stephen öneri olduğu gibi komut dosyasının sürümünü çalışma:


    #!/bin/sh 
    exec /usr/bin/mono /usr/local/src/fsharp/bin/fsi.exe -r "/usr/lib/cli/atk-sharp-2.0/atk-sharp.dll" -r "/usr/lib/cli/glib-sharp-2.0/glib-sharp.dll" -r "/usr/lib/cli/gdk-sharp-2.0/gdk-sharp.dll" -r "/usr/lib/cli/gtk-sharp-2.0/gtk-sharp.dll" -r "/usr/lib/cli/pango-sharp-2.0/pango-sharp.dll" -r "/usr/lib/mono/2.0/Mono.Cairo.dll" [email protected] 

cevap

8

Gtk # öğesini F # Interactive'den kullanmanıza izin veren küçük bir komut dosyası yazdım (aşağıya bakın). Gerekli Gtk # derlemelerine başvurur (yolları değiştirmeniz gerekebilir) ve aynı zamanda F # Etkileşimli olay döngüsünü de yapılandırır, böylece widget'ları (Window gibi) etkileşimli olarak oluşturabilir ve görüntüleyebilirsiniz. otomatik destek almak istiyorsanız

, sen `

[<AutoOpen>] 
module GtkSharp 

// Load some common Gtk# assemblies (from /usr/lib/mono/2.0/../gtk-sharp-2.0) 
#r "../gtk-sharp-2.0/gtk-sharp.dll" 
#r "../gtk-sharp-2.0/gdk-sharp.dll" 
#r "../gtk-sharp-2.0/glib-sharp.dll" 
#r "../gtk-sharp-2.0/atk-sharp.dll" 

open Gtk 

Application.Init() 
fsi.EventLoop <- 
{ new Microsoft.FSharp.Compiler.Interactive.IEventLoop with 
    member x.Run() = Application.Run() |> ignore; false 
    member x.Invoke f = 
    let res = ref None 
    let evt = new System.Threading.AutoResetEvent(false) 
    Application.Invoke(new System.EventHandler(fun _ _ -> 
     res := Some(f()) 
     evt.Set() |> ignore)) 
    evt.WaitOne() |> ignore 
    res.Value.Value 
    member x.ScheduleRestart() =() } 
+0

Senaryoyu değiştirdiğimde dediğim gibi "en iyi tahminim" idi. Bu cevap çok daha iyi bir yaklaşım sunuyor. Teşekkürler Tomas –

3

O olabilir Linux'ta biraz farklı olsa da, Windows'da -r'u kullanarak derlemeleri başlatarak derlemeleri başlatabilirsiniz. Örneğin.

#!/bin/sh 
exec /usr/bin/mono /usr/local/src/fsharp/bin/fsi.exe -r /usr/somedll.dll [email protected] 
+0

kullanabilirsiniz (daha load-gtk.fsx olarak senaryoyu kurtarmak olduğunu varsayarak) başından mono /.../fsi.exe --load:load-gtk.fsx üzerine senaryoyu yüklemek için bir parametre ile fsi.exe çalıştırmak gerekir Bu scripts argümanında yapılan herhangi bir alıntıyı korumak için "$ @". –

2

ben eklemek tahmin ediyorum

-r:/path/to/gtk 

veya belki bazı #r s durumlarda ne içerir

--load:someStartupScript.fs 

. fsi /? ve bunu anlayacaksınız.