efax is a small, free, command-line fax program developed under Linux. It compiles with very little tinkering under 10.1, and I have successfully sent and received faxes with it using the internal modem on my Powerbook G4. efax communicates with the modem using POSIX /dev interfaces, so I don't see why it shouldn't work with just about any modem that is supported by OS X.
For now, installing and using it is a bit (OK, very) command-line intensive, but it should be easy to wrap this up in an installer package and add a GUI interface (which I might do if I find the time - but I wouldn't be upset if someone beat me to it). Fax capability is essential for OS X, and FaxSTF X from Smith Micro is a complete disaster (I am one of the fools that sent them my money).
I have written a brief document explaining how I have used efax and ghostscript to send and receive fax documents in pdf format.
[Editor's note: In fact, a free Cocoa front-end to efax has just been released, called Cocoa eFax. It includes the efax UNIX program along with the Cocoa front end, but I have not tested the program so I can't vouch for it one way or the other. I also haven't tested FaxSTF, so I can't comment on that package, either.]
Type cvs -v in the terminal to see which version you have. More than likely you'll see Concurrent Versions System (CVS) 1.10 `Halibut' (client/server)
Here's how to compile version 1.11.1p1. These instructions will replace the existing Apple-supplied CVS files including the html documentation. By default, 'make' wants to install texi info files for the docs, but we're going to trash those and create html versions instead, as with Apple's distribution. Also we change the other default UNIX installation directories to use Mac OS X specific ones.
Read the rest of the article for the step-by-step instructions.
In other *nix prompts, you can do history searches for partial commands. For instance, if you find yourself typing "telnet 192.168.1.12" repeatedly, you can type "tel and hit Page Up to search for the last command you typed that began with "tel" You can hit Page Up repeatedly to find the previous command that began the same way. You can also hit Page Down to go forward in the search if you hit Page Up too many times and missed the command you wanted.
Terminal uses Page Up and Page Down for scrolling, which is great for new users, but seriously slows power users down. Other unices use Shift-Page Up and Shift-PageDown for scrolling.
To restore command completion from history (in bash), you can use (mind the quotes!):
This binds Option-E to the reverse search (Page Up on Linux) and Option-R to a forward search (Page Down on Linux). To use this, the "Option (alt) key acts as meta key" item under Emulation in Terminal preferences must be on.
I put these commands in my .profile so that my terminal would always be configured to my tates. I'm sure there's an analogous command in tcsh.
On a side note, if you want a more powerful history search, you can hit Control-R to do a full interactive history search under bash. You hit Control-R at the prompt and type some text. Each letter you type will make the search more detailed. For example, if you want to find the last command that you executed with 192.168.1.12 as a parameter, you can hit Control-R and begin typing the IP. When you type the "1" the last command with a "1" in it will be displayed. When you type "9" the last command with a "19" in it will be displayed, and so on. Hitting Control-R again tries to find another command that matches.
Since I installed OS X, I've wanted to be able to pop up Terminal windows that have a specified title and are running a specified application. I'm about 90% there, and thought I'd share what I've written with the MacOSXhints gang.
Note that this is a Unix shell script that you'll want to copy onto your system, save with some name ('newterm'), then use chmod +x newterm or similar to ensure that it's executable.
Then you can start up a new Terminal window with the title "my terminal" and the core shell of /usr/bin/vi (for example), with:
newterm "Edit Window" "/usr/bin/vi"
Pretty cool, eh?
Read the rest of the article for the "new term" shell script.
This tip is stolen from instructions in the Bash Prompt HOWTO. It's not terribly innovative, and most Unix distributions (MacOS X included) come with a tolerably decent default prompt; consequently, even many very experienced Unix users don't know a lot about prompt configuration (I certainly didn't). But if you compile and install bash on MacOS X, you'll find that you are left with a very unsatisfactory default prompt. It was this problem that led me to sniff this information out.
This tip solves the dilemma of whether to use \W (current directory without path) or \w (complete path to current directory) in the prompt. On the one hand, \W doesn't contain the path (am I in /etc or /usr/local/etc?), but \w (which contains the path) can monopolize the command line. The solution: Include only the last x characters of the current working directory.
This tip will work swimmingly with bash, and maybe someone can explain how to do the same thing with tcsh in the replies (I'm a bash partisan myself, and I heartily recommend it to anyone who has to use the shell regularly). Read the rest of this article for instructions on creating a fixed-length bash shell prompt.
This tip is a shell setup technique that I have stolen from Mandrake Linux. It is only good for people that have heavilly customized their /etc/profile file, so the instructions assume a good deal of terminal knowledge. Instead of having one, monolithic profile file that is littered with different commands and environment settings, you can modularize it into a bunch of tidy, discrete items. You can do this as follows:
su to root and cd to the /etc directory.
Create a directory in /etc called profile.d.
Use your favorite console text editor to add the following lines to the beginning of your profile file:
for PROFILE_SCRIPT in $( ls /etc/profile.d/*.sh ); do . $PROFILE_SCRIPT done
Convert all of the commands in your profile file to individual shell scripts, and save them in /etc/profile.d (make sure they end in .sh), and delete them from /etc/profile.
Voila! Instead of having one, confusing, hard to navigate profile file, you have tidy, individual scripts. For example, my alias for ll (I use bash, so that ll is not built in) is in /etc/profile.d/alias_ll.sh, and my prompt code is in /etc/profile.d/prompt.sh.
lpd is the standard Unix printing system, so others who come from the Unix community (as I did; a longtime Linux and NeXT user) might be interested in sharing their printers to their other Unix machines.
See, not having lpd as the printing system in OS X was a big bummer to me, because it meant that I could no longer print with my NeXT and other Unix computers, because my printer is now hooked to my G4 Cube (permanently assigned to OS X 10.1). With this little hacked up lpd, I can now do that again. :)
Read the rest of the article for the how-to.
[Editor's note: I have not done this on my machine as of yet, but 'eagle' vouches that it works but only on PostScript printers! Any errors in the following article are a result of my formatting work; please let me know if you see any troublesome lines!]
This one is for you hacking nuts that do absolutely everything possible to optimize your OS X machine.
If you are on a broadband network, then you can slightly optimize your internet access by installing bind, the Berkeley Internet Name Domain server name server as a caching server.
Using this caching nameserver setup should give you instant dns lookups on (pretty much) any hostname that has been used by any application on your machine at any time since the last reboot. Thus, if you access ftp.xyz.com using Fetch, the nameserver will look up the hostname and store it, so that tomorrow when you access it with Internet Explorer the caching nameserver will return the lookup information instantly.
If you'd like to set this up on your machine, read the rest of the article.
[Editor's note: I have not tried this myself yet, and it's a relatively complex hint. I believe I didn't lose anything in the formatting process, but please post if you notice any errors.]