- Ingemar Ragnemalm
- Medlem ●
- Linköping
Förr har det gått att både hämta och sätta filpositioner genom att fråga File Manager efter Finder-info, som innehåller "location" som är filens position relativt sitt fönster.
Idag försökte jag göra det under 10.6, men det gick inte alls. Jag får bara ut en massa nollor. Jag gör ungefär som de gör här:
dvs tar fram en FSRef, anropar FSGetCatalogInfo med kFSCatInfoFinderInfo och lyfter ut FinderInfo ur den. Där finns typ och creator (4 tecken var) men resten är noll! Jag har även provat med de gamla anropen, en FSSpec och FSpGetFInfo, och det gick inte heller.
Under 10.4 får jag ut informationen för en del filer, men inte alla.
I och med att jag får ut type och creator så ser jag inget skäl att tro att det är något fel på min kod. Kan man inte inspektera och påverka Finderpositioner längre? Eller finns det något annat sätt? (Googla ger inget användbart, bara samma saker som jag redan använder.)
Antar att "fulhacket" nedan är ointressant:
1. Nytt dokument i Textredigeraren
2. Format "Gör om till ren textfil"
3. Drag n droppa önskad fil i textdokumentet.
Om det är ointressant beror på vad det åstadkommer, men vad gör det för nytta i det här sammanhanget? Allt jag får är sökvägen, och det var inte det jag menade. (Sökvägen får jag lätt ut.) Jag talade om vilken position filikonen har i Finder-fönstret.
Aaah. Fel av mig då. Hade aldrig hört ordet filposition tidigare och trodde det var sökvägen du var ute efter.
"Position i Finder" snarare, men jag förstår, det kan betyda lite olika saker. "Location" i FileInfo är det i alla fall - eller var det förut. Det vore väldigt trist om vi inte har tillgång till den informationen längre, speciellt som att Apple inte hanterar den speciellt bra heller. Fast det kanske är kopplat.
Jag kanske har lösningen själv, fast den är inte så kul. Man kan parsa DS_Store-filer, och hitta positioner där. Hur man får Finder att ta ändringen och inte skriva över med egna data är en annan sak... Jäkla Apple som gör buggiga program som tappar bort data för mig och sluta stödja bra sätt att fixa det.
Om filen ligger på skrivbordet kan tu ta ut den med AS:
tell application "Finder" get desktop position of file (choose file) end tell
Där ser man. Men kan man inte göra det för andra fönster? Skrivbordet är ju som vilket annat fönster som helst egentligen. Vad får man om man ber om "desktop position" för andra filer? Kan man sätta positionen också?
Och om Applescript kan det så måste det ju finnas underliggande APIer som kan.
Där ser man. Men kan man inte göra det för andra fönster? Skrivbordet är ju som vilket annat fönster som helst egentligen. Vad får man om man ber om "desktop position" för andra filer? Kan man sätta positionen också?
Och om Applescript kan det så måste det ju finnas underliggande APIer som kan.
Om du har ett Finderfönster öppet:
tell application "Finder"
set daWindow to Finder window 1
tell daWindow
set daItem to its item 1
get its position
end tell
end tell
Fungerar på Lion. Jag har för mig att jag läst någon stans att det fanns en bugg i SL, men jag vet inte om det var i början!
Vänligen, Ylan
Där ser man. Men kan man inte göra det för andra fönster? Skrivbordet är ju som vilket annat fönster som helst egentligen. Vad får man om man ber om "desktop position" för andra filer? Kan man sätta positionen också?
Och om Applescript kan det så måste det ju finnas underliggande APIer som kan.
Allt Applescript kan göra är numer lätt åtkomligt via Coco-API:er.!
Vänligen, Ylan
Allt Applescript kan göra är numer lätt åtkomligt via Coco-API:er.!
Vänligen, Ylan
Ja, det skall det ju vara. (Mer eller mindre "lätt" men det är en annan sak.) Men just det här fanns i Carbon men verkar inte finnas i Cocoa.
Men vad sägs om detta då?
tell application "Finder" activate set daWindow to make new Finder window set target of daWindow to path to home folder set current view of daWindow to icon view set daItem to item 5 of daWindow set daPosition to get position of daItem end tell
Vänligen, Ylan
Men vad sägs om detta då?
tell application "Finder" activate set daWindow to make new Finder window set target of daWindow to path to home folder set current view of daWindow to icon view set daItem to item 5 of daWindow set daPosition to get position of daItem end tell
Vänligen, Ylan
Just det:
tell application "Finder" if current view of window 1 is icon view then set S to selection set P to position of item 1 of S else display dialog "Funkar bara i ikonläge." end if end tell
Men vad sägs om detta då?
tell application "Finder" activate set daWindow to make new Finder window set target of daWindow to path to home folder set current view of daWindow to icon view set daItem to item 5 of daWindow set daPosition to get position of daItem end tell
Vänligen, Ylan
Det var andra saker det. Det får jag prova. Det är ju märkligt om det finns AS-anrop men inga Carbon- eller Cocoa-anrop som fungerar, men det där borde jag kunna göra någonting med. Kanon!
Du menar att "set position of..." inte funkar? Det vore bra synd.
Jo, det funkar (10.6.8) men kanske inte exakt som man vill.
Koden
set position of item 1 of S to {x, y}
flyttar symbolen men avrundar till närmaste "grid". Ju mindre grid man valt i mappens visningsalternativ, ju exaktare kan man placera markerad fil. Dessutom verkar det som om man måste uppdatera Finder-fönstret för att ändringen ska synas i Finder.
edit: Jag drog lite för snabba slutsatser. Det verkar gå att flytta ganska exakt oberoende av grid size, men bara om det inte ligger andra filer i vägen. Ligger andra filer i vägen flyttar Finder dem automatiskt till närmaste lediga plats i nätet, och även den fil man flyttar verkar då rätta sig efter aktuell grid. Går kanske att komma runt, men icon view i OS X blir nog aldrig lika mindmapping-vänlig som i OS 9.
Konstigt. Har du provat att uppdatera finderfönstret genom att t.ex. backa/gå framåt el klicka på list view och sen tillbaka till icon view?
Konstigt. Har du provat att uppdatera finderfönstret genom att t.ex. backa/gå framåt el klicka på list view och sen tillbaka till icon view?
Om jag skulle köra med "hårda" versionen, peta i DS_Store, då skulle man definitivt få göra så, provocera Finder att ta ändringen. Nej, jag har inte försökt det än.