So far, the functions we've written have been very simple. Essentially, they all just rearrange their arguments and then call a single other function to do the real work. Let's look at an example now where more programming is required.
In UNIX, a symbolic link, or symlink, is a file that refers to another file by name. When you ask for the contents of a symlink, you actually get the contents of the real file named by the symlink.
Suppose you visit a file in Emacs that is really a symlink to some other file. You make some changes and press C-x C-s to save the buffer. What should Emacs do?
Replace the symbolic link with the edited version of the file, breaking the link but leaving the original link target alone.
Overwrite the file pointed to by the symbolic link.
Prompt you to choose one of the above actions.
Something else altogether.
Different editors handle the symlink situation in different ways, so a user who has grown accustomed to one editor's behavior may be unpleasantly surprised by another's. Plus, I believe that the right answer changes depending on the situation, and that the user should be forced to think about what's right each time this comes up.
Here's what I do: when I visit a file that's really a symlink, I have Emacs automatically make the buffer read-only. This causes a "Buffer is read-only" error as soon as I try to change anything in the buffer. The error acts as a reminder, alerting me to the possibility that I'm visiting a symlink. Then I ...