2010-11-13 21 views
5

मैं ज्यादातर लिनक्स पर एफ # के साथ खेल रहा हूं और डिफ़ॉल्ट रूप से संदर्भित करने के लिए सभी आवश्यक जीयूआई पुस्तकालयों (जीटीके, जीडीके, एटीके, ग्लिब, पेंगो, काहिरा) को प्राप्त करना चाहता हूं ताकि मैं आसानी से उपयोग कर सकूं: open Gtk;; बिना किसी अतिरिक्त के टाइपिंग। मेरे सर्वोत्तम अनुमान FSI शुभारंभ स्क्रिप्ट, जो इस समय है कि तरह लग रहा है को संशोधित होगा:डिफ़ॉल्ट रूप से Gtk # संदर्भित करने के लिए F # इंटरैक्टिव को कैसे बाध्य करें?


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

अद्यतन: स्टीफन के सुझाव में के रूप में काम स्क्रिप्ट के संस्करण:


    #!/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] 

उत्तर

8

मैंने एक छोटी सी लिपि लिखी है जो आपको F # इंटरएक्टिव से नीचे Gtk # का उपयोग करने की अनुमति देती है (नीचे देखें)। यह जरूरी जीटीके # असेंबली का संदर्भ देता है (आपको पथ को संशोधित करने की आवश्यकता हो सकती है) और यह एफ # इंटरएक्टिव इवेंट लूप को भी कॉन्फ़िगर करता है, ताकि आप विजेट बना सकें और प्रदर्शित कर सकें (जैसे Window) इंटरैक्टिव रूप से।

आप स्वचालित रूप से समर्थन प्राप्त करना चाहते हैं, तो आप (यह मानते हुए कि आप load-gtk.fsx के रूप में स्क्रिप्ट को बचाने)

[<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

जैसा कि मैंने स्क्रिप्ट को संशोधित करने में सवाल में कहा था "मेरा सबसे अच्छा अनुमान" था। यह उत्तर एक बेहतर दृष्टिकोण प्रस्तुत करता है। धन्यवाद टॉमस –

3

यह हो सकता है लिनक्स में थोड़ा अलग है, लेकिन विंडोज़ में आप -r का उपयोग करके एफएसआई स्टार्टअप पर असेंबली का संदर्भ दे सकते हैं। जैसे

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

आप का उपयोग करना चाहिए 'शुरू mono /.../fsi.exe --load:load-gtk.fsx पर स्क्रिप्ट लोड करने के लिए एक पैरामीटर के साथ fsi.exe चलाने की आवश्यकता होगी इस स्क्रिप्ट्स तर्कों पर किए गए किसी भी उद्धरण को संरक्षित करने के लिए "$ @" '। –

2

मैं जोड़ने अनुमान लगा रहा हूँ

-r:/path/to/gtk 

या

--load:someStartupScript.fs 

जो शायद कुछ #r रों या whatnot भी शामिल है। fsi /? और आप इसे समझ लेंगे।

संबंधित मुद्दे

 संबंधित मुद्दे