• MacTech Network:
  • Tech Support
  • |
  • MacForge.net
  • |
  • Apple News
  • |
  • Register Domains
  • |
  • SSL Certificates
  • |
  • iPod Deals
  • |
  • Mac Deals
  • |
  • Mac Book Shelf

MAC TECH

  • Home
  • Magazine
    • About MacTech in Print
    • Issue Table of Contents
    • Subscribe
    • Risk Free Sample
    • Back Issues
    • MacTech DVD
  • Archives
    • MacTech Print Archives
    • MacMod
    • MacTutor
    • FrameWorks
    • develop
  • Forums
  • News
    • MacTech News
    • MacTech Blog
    • MacTech Reviews and KoolTools
    • Whitepapers, Screencasts, Videos and Books
    • News Scanner
    • Rumors Scanner
    • Documentation Scanner
    • Submit News or PR
    • MacTech News List
  • Store
  • Apple Expo
    • by Category
    • by Company
    • by Product
  • Job Board
  • Editorial
    • Submit News or PR
    • Writer's Kit
    • Editorial Staff
    • Editorial Calendar
  • Advertising
    • Benefits of MacTech
    • Mechanicals and Submission
    • Dates and Deadlines
    • Submit Apple Expo Entry
  • User
    • Register for Ongoing Raffles
    • Register new user
    • Edit User Settings
    • Logout
  • Contact
    • Customer Service
    • Webmaster Feedback
    • Submit News or PR
    • Suggest an article
  • Connect Tools
    • MacTech Live Podcast
    • RSS Feeds
    • Twitter

ADVERTISEMENT

Volume Number: 15 (1999)
Issue Number: 1
Column Tag: Tips & Tidbits

Jan 99 Tips

by Jeff Clites <online@mactech.com>

Autocompletion in MPW

One very useful feature of many Unix shells is that you only need to type the beginning of a command, hit tab, and it fills in the complete command. I was really missing this on MPW, especially with long command names such as UnobsoleteNameRevisions.

So here's a script that attempts to provide this feature in MPW, as well as possible. Bind it to Command-Tab (or whatever you want), then type "nam", hit Command-Tab, and watch it fill in "NameRevisions" for you.

Note: if nothing is selected, it will try to complete the last word on the current line. If you want to complete a word in the middle of a line, you'll have to select it.

If ":" is in your {Commands} variable, it will also consider all files in the current directory, as I have found no way to figure out whether a file is an MPW script or not. Actually, this may even be useful.

# get the current selection
Set CurrentSelection "'Catenate "{Active}".§'"

If "{CurrentSelection}" == ""
   # select the entire line we're on
   Find !0 "{Active}"
   # put the insertion point at the beginning of this line
   Find Δ§:Δ§ "{Active}"
   # remember line number, so we can restore it later
   Set CurrentLine 'Position -l "{Active}"'

   # select the last word on this line
   Find /[¬ ∂t∂n]+[ ∂t]*∞/ "{Active}" || (Beep; Exit 0)

   # if it isn't really on our current line, exit
   If 'Position -l "{Active}"' != {CurrentLine}
      Find {CurrentLine} "{Active}"
      Beep
      Exit 0
   End

   Set CurrentSelection "'Catenate "{Active}".§'"
   # strip spaces from the end, if any
   If "{CurrentSelection}" =~ /([¬ ∂t]+)®1[ ∂t]*/
      Set CurrentSelection "{®1}"
   End

   # can this happen at this point?
   If "{CurrentSelection}" == ""
      Beep
      Exit 0
   End
End

# a list of matching command names
Set CommandList ""
# the number of matches found
Set Matches 0

# first see if it's one of the built-in commands
# (we really have to list them all here, sigh...)
For i In ∂
      AddMenu AddPane Adjust Alert Alias Align AuthorInfo ∂
      Beep Begin Break Browser Catenate CheckIn CheckOut ∂
      CheckOutDir Clear Close Confirm Continue Copy Cut Date ∂
      Delete DeleteMenu DeleteNames DeletePane ∂
      DeleteRevisions Directory Duplicate ∂
      DuplicateNameRevisions Echo Eject Equal Erase Evaluate ∂
      Execute Exists Exit Export Files Find Flush ∂
      FlushAllVolumes For Format Help HideWindows If ∂
      LockNameRevisions Loop Mark Markers ModifyReadOnly ∂
      Monitors Mount MountProject Move MoveWindow ∂
      NameRevisions New Newer NewFolder NewProject ∂
      ObsoleteNameRevisions ObsoleteProjectorFile Open ∂
      Parameters Paste PlaySound Position Project ProjectInfo ∂
      Quit Quote Redo Rename RenameProjectorFile Replace ∂
      Request ResolveAlias Revert RotatePanes RotateWindows ∂
      RProj RShell Save SaveOnClose Set SetFile SetKey Shift ∂
      ShowSelection ShowWindows Shutdown SizeWindow ∂
      StackWindows Target TickCount TileWindows Unalias Undo ∂
      Unexport UnlockNameRevisions Unmark Unmount ∂
      UnmountProject UnobsoleteNameRevisions ∂
      UnObsoleteProjectorFile Unset UnsetKey ∂
      UpdateProjectorDatabase Version Volumes Which Windows ∂
      ZoomWindow
   If "{i}" =~ /{CurrentSelection}≈/
      Set CommandList "{CommandList} {i}"
      Evaluate Matches += 1

   End
End

# now process every folder in the current {Commands} list
For Folder in 'Which'
   For File In 'Files "{Folder}" -s'

      # append all matching names to our list of command names
      If "{File}" =~ /{CurrentSelection}≈/
         Set CommandList "{{CommandList}} '{File}'"
         Evaluate Matches += 1

      End
   End
End

# no matching names found
If {Matches} == 0
   Find /∞/ "{Active}"
   Exit 0
End

# if more than one name was found, present a list
# to choose from
If {Matches} > 1
   Set CommandList "'GetListItem -sort -s -c {CommandList}'"
   Exit 0 If "{CommandList}" == ""
Else If "{CommandList}" =~ / (≈)®1/

   # if only one name was found, it has a space at the
   # beginning; strip it.  And remove any unnecessary
   # quoting.
   Set CommandList "'Quote {®1}'"
End

# replace the selection with the found (or chosen) name
Echo -n "{CommandList} " > "{Active}".§
Find §Δ "{Active}"

Stefan Haller
stk@snafu.de

 
MacTech Only Search:
Community Search:

 
 
 

 
 
 
 
 
  • SPREAD THE WORD:
  • Slashdot
  • Digg
  • Del.icio.us
  • Reddit
  • Newsvine
  • Generate a short URL for this page:



MacTech Magazine. www.mactech.com
Toll Free 877-MACTECH, Outside US/Canada: 805-494-9797
MacTech is a registered trademark of Xplain Corporation. Xplain, "The journal of Apple technology", Apple Expo, Explain It, MacDev, MacDev-1, THINK Reference, NetProfessional, Apple Expo, MacTech Central, MacTech Domains, MacNews, MacForge, and the MacTutorMan are trademarks or service marks of Xplain Corporation. Sprocket is a registered trademark of eSprocket Corporation. Other trademarks and copyrights appearing in this printing or software remain the property of their respective holders.
All contents are Copyright 1984-2010 by Xplain Corporation. All rights reserved. Theme designed by Icreon.
 
Nov. 20: Take Control of Syncing Data in Sow Leopard' released
Nov. 19: Cocktail 4.5 (Leopard Edition) released
Nov. 19: macProVideo offers new Cubase tutorials
Nov. 18: S Stardom anounces Safe Capsule, a companion piece for Apple's
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live