help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why didn't setq work here?


From: Deniz Dogan
Subject: Re: Why didn't setq work here?
Date: Fri, 7 Jan 2011 04:40:14 +0100

2011/1/7 Eric Lilja <mindcooler@gmail.com>:
> Hello, I'm running "GNU Emacs 24.0.50.1 (i386-mingw-nt6.1.7600) of
> 2011-01-03 on 3249CTO" (a build provided by Mr Sean Sieger) under Windows 7
> x64.
>
> I don't really know how to configure emacs so please excuse any stupidity
> found below and improper use terminology.
>
> For LaTeX buffers, I wanted to turn on the minor mode auto-fill-mode, with a
> fill-column of 76.
>
> After a bit of investigating, I found that I could run "commands" (if that's
> what they're called) when major mode latex is loaded/activated for a buffer
> by using hooks, like this:
>
> (defun my-latex-hook ()
>  (message "Running my-latex-hook")
> )
> (add-hook 'latex-mode-hook 'my-latex-hook)
>
> I added the statement above and launched emacs like this:
> $ emacs foo.tex&
> and I could see from the message output that my hook was indeed working.
> Good. Just what I wanted.
>
> So now I just need to turn on the minor mode auto-fill-mode with fill-column
> set to 76 when this hook is "executed".
>
> In my naivety, I tried this:
>
> (defun my-latex-hook ()
>  (message "Running my-latex-hook")
>  (setq auto-fill-mode 1)
>  (setq fill-column 76)
> )
> (add-hook 'latex-mode-hook 'my-latex-hook)
>
> I saw a warning when I byte-compiled my .emacs:
> In my-latex-hook:
> .emacs:42:9:Warning: assignment to free variable `auto-fill-mode'
>
> but tried anyway. Closed emacs and restarted as I did above ($ emacs
> foo.tex&)
>
> I noticed straight away that the minor mode auto-fill-mode had not been
> turned on.
> However, C-h v fill-column showed that my fill-column had been set though
> since its value was now the desired 76 instead of the default 70.
>
> In order to solve the problem of auto-fill-mode not being turned on and
> getting rid of the byte compiler warning, I rewrote my hook like this:
>
> (defun my-latex-hook ()
>  (message "Running my-latex-hook")
>  (auto-fill-mode 1)
>  (set-fill-column 76)
> )
> (add-hook 'latex-mode-hook 'my-latex-hook)
>
> Now auto-fill-mode is indeed turned on and I don't get a warning by the byte
> compiler when I set fill column. Ok, so I am happy. Problem solved! :)
>
> But here's my question: Why didn't setq work as I thought it would? By not
> work I meant I the minor mode auto-fill-mode was not turned on and even
> though the fill column was set as I desired, the statement produced a
> warning as I showed above.
>
> Thanks for any replies! :)
>
> - EL
>
>
>

`setq' only sets the value of a variable. The variable you tried to
set, auto-fill-mode, has not been defined -- it doesn't "exist" yet.
The warning about a "free variable" in this context means that the
variable is not defined in the current scope.

The correct way to turn auto-fill-mode on or off is to call the
function with the same name, which you figured out later. The
_variable_ auto-fill-mode doesn't exist in this case, though in many
other modes there is a variable named identically to the function to
turn it on or off. In some modes where that is the case, setting the
variable has effect. In some other modes, it doesn't.

By the way, in Emacs a function is a function and a "command" is a
function that can be called interactively, i.e. using e.g. M-x.

I hope that makes things a bit clearer.

--
Deniz Dogan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]