/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
flyspell i Emacs
Fra : Martin Ehmsen


Dato : 30-05-02 15:55

Hej...

Jeg har et lidt underligt i Emacs 21.1
Jeg vil gerne loade flyspell som minor-mode når jeg skal skriv
tex-filer, så jeg tilføjer følgende til min .emacs fil:
(add-hook 'tex-mode-hook (setq flyspell-mode t))
Genstarter Emacs og åbner en .tex fil, og alt ser ud til at være
lykkeligt, for nederst angiver emacs at LaTeX-major mode er loaded samt
Fly-minor og Fill-minor er loaded.
Men når jeg så prøver at skrive noget vrøvl for at tjekke det, så virker
det ikke?? Underligt!
Selv hvis jeg prøver: C-h m (Describe Buffer Modes), så siger Emacs at
flyspell er loaded som minor-mode.

Hvis jeg nu prøver: M-x flyspell-mode
så slås flyspell rigtigt nok fra, og hvis jeg så prøver M-x
flyspell-mode igen, så lodeds flyspell ind igen, men nu virker det.
Meget underligt.

Hvad gør jeg (eller Emacs) galt??

Martin
--
Young man, in mathematics you don't understand things, you just get used
to them.
   von Neumann

 
 
Jacob Bunk Nielsen (30-05-2002)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 30-05-02 16:15

Martin Ehmsen <ehmsen@imada.sdu.dk> writes:

> Jeg vil gerne loade flyspell som minor-mode når jeg skal skriv
> tex-filer, så jeg tilføjer følgende til min .emacs fil:

Nu bruger jeg ikke flyspell, så jeg gætter bare her.

> (add-hook 'tex-mode-hook (setq flyspell-mode t))

Har du prøvet:

(add-hook 'tex-mode-hook 'flyspell-mode)

?

Hvad står der evt. i flyspells dokumentation?

--
Jacob - www.bunk.cc
Never underestimate the power of human stupidity.

Martin Ehmsen (30-05-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 30-05-02 16:57

Jacob Bunk Nielsen <spam@bunk.cc> wrote:
>> (add-hook 'tex-mode-hook (setq flyspell-mode t))
> Har du prøvet:
> (add-hook 'tex-mode-hook 'flyspell-mode)

Det virker...!
Jeg undre mig så bare over hvad forskellen skulle være.

Tak for hjælpen.

Martin
--
Young man, in mathematics you don't understand things, you just get used
to them.
   von Neumann

Dennis Haney (30-05-2002)
Kommentar
Fra : Dennis Haney


Dato : 30-05-02 18:06

Martin Ehmsen <ehmsen@imada.sdu.dk> writes:

> Jacob Bunk Nielsen <spam@bunk.cc> wrote:
> >> (add-hook 'tex-mode-hook (setq flyspell-mode t))
> > Har du prøvet:
> > (add-hook 'tex-mode-hook 'flyspell-mode)
>
> Det virker...!
> Jeg undre mig så bare over hvad forskellen skulle være.

(add-hook 'tex-mode-hook (setq flyspell-mode t))

kører (setq flyspell-mode t) og propper resultatet af det som hook på
tex-mode...

(add-hook 'tex-mode-hook 'flyspell-mode)

tilføjer et kald til flyspell-mode ved start af tex-mode


--
Dennis
I have always thought explanations were overkill when correcting
mistakes. A simple "that's wrong" must suffice. I mean, people are
always aware why they are wrong. They just make mistakes to annoy you.

Jacob Bunk Nielsen (30-05-2002)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 30-05-02 17:23

Martin Ehmsen <ehmsen@imada.sdu.dk> writes:

>>> (add-hook 'tex-mode-hook (setq flyspell-mode t))
>> Har du prøvet:
>> (add-hook 'tex-mode-hook 'flyspell-mode)
>
> Jeg undre mig så bare over hvad forskellen skulle være.

Nu er jeg ikke LISP-haj, så jeg håber at en af Emacs-LISP-eksperterne
lige retter mig, hvis jeg tager fejl.

(add-hook 'tex-mode-hook (setq flyspell-mode t))

Kalder en funktion add-hook med argumenterne 'tex-mode-hook, og det
der kommer ud af at evaluere (setq flyspell-mode t), altså at
variablen flyspell-mode bliver sat til t. Det returnerer t, så når den
møder din hook, så kalder den t. Det sker der sikkert ikke det store
ved.

(add-hook 'tex-mode-hook 'flyspell-mode)

Kalder funktionen add-hook med argumenterne 'tex-mode-hook og
'flyspell-mode, hvilket får den til at kalde funktionen flyspell-mode
(samme som M-x flyspell-mode) når den kalder funktioen (eller hvad
hooks nu engang er internt, det er jeg ikke blevet helt klog på endnu)
tex-mode-hook.

Prøv at læse lidt i
<http://mirrors.sunsite.dk/gnu/emacs/emacs-lisp-intro-2.04.tar.gz>.
Jeg er ikke selv nået så langt i den, som jeg gerne ville, men det
kommer nok en dag

--
Jacob - www.bunk.cc
Suggest you just sit there and wait till life gets easier.

Jesper Harder (31-05-2002)
Kommentar
Fra : Jesper Harder


Dato : 31-05-02 03:02

Jacob Bunk Nielsen <spam@bunk.cc> writes:

> Martin Ehmsen <ehmsen@imada.sdu.dk> writes:
>
>> Jeg undre mig så bare over hvad forskellen skulle være.
>
> Nu er jeg ikke LISP-haj, så jeg håber at en af Emacs-LISP-eksperterne
> lige retter mig, hvis jeg tager fejl.
>
> (add-hook 'tex-mode-hook (setq flyspell-mode t))
>
> Kalder en funktion add-hook med argumenterne 'tex-mode-hook, og det
> der kommer ud af at evaluere (setq flyspell-mode t), altså at
> variablen flyspell-mode bliver sat til t. Det returnerer t, så når den
> møder din hook, så kalder den t. Det sker der sikkert ikke det store
> ved.
>
> (add-hook 'tex-mode-hook 'flyspell-mode)

Hvis man ikke er opmærksom på det, kan det nok også virke forvirrende at
et symbol i Lisp (som `flyspell-mode') både kan henvise til en værdi
*og* en funktion.

I det første eksempel er det symbolværdien man henviser til; I det andet
er det (indirekte) symbolets funktion, som bliver brugt.

Adam Sjøgren (31-05-2002)
Kommentar
Fra : Adam Sjøgren


Dato : 31-05-02 18:28

On Fri, 31 May 2002 04:02:11 +0200, Jesper Harder wrote:

> Hvis man ikke er opmærksom på det, kan det nok også virke
> forvirrende at et symbol i Lisp (som `flyspell-mode') både kan
> henvise til en værdi *og* en funktion.

> I det første eksempel er det symbolværdien man henviser til; I det
> andet er det (indirekte) symbolets funktion, som bliver brugt.

Der er da et ' til forskel, ikke?

Hvordan skulle man ellers angive en funktion, hvis ikke ved dens navn?


Mvh.

--
"Haven't you heard the emancipation declaration?" Adam Sjøgren
"No, I don't listen to hip-hop!" asjo@koldfront.dk

Jacob Bunk Nielsen (01-06-2002)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 01-06-02 00:29

spamtrap@koldfront.dk (Adam Sjøgren) writes:

>> I det første eksempel er det symbolværdien man henviser til; I det
>> andet er det (indirekte) symbolets funktion, som bliver brugt.
>
> Der er da et ' til forskel, ikke?

Jo. Den gør at funktionen ikke bliver afviklet og man derved bruger
resultatet af at afvikle funktionen som argument, men i stedet bruger
navnet på funktionen som argument.

.... men på en eller anden måde har jeg en fornemmelse af at du godt
vidste det i forvejen

> Hvordan skulle man ellers angive en funktion, hvis ikke ved dens navn?

Det er bare fordi

(foo 'bar)

kalder funktionen foo med argumentet 'bar, mens

(foo (bar))

kalder funktionen foo med hvad det nu resulterer i at evaluerer bar
som argument.

I et andet C-lignende sprog kunne de to ovenstående funktionskald fx
svare til:

foo("bar");

og

foo(bar());

(... at man så i foo("bar") nok ofte vil bruge en pointer til
funktionen bar() i stedet for en tekststreng med funktionens navn er
en detalje jeg lige er sprunget let hen over.)

--
Jacob (stadig ikke LISP-haj) - www.bunk.cc
Xerox does it again and again and again and ...

Jesper Harder (01-06-2002)
Kommentar
Fra : Jesper Harder


Dato : 01-06-02 00:58

spamtrap@koldfront.dk (Adam Sjøgren) writes:

> On Fri, 31 May 2002 04:02:11 +0200, Jesper Harder wrote:
>
>> Hvis man ikke er opmærksom på det, kan det nok også virke
>> forvirrende at et symbol i Lisp (som `flyspell-mode') både kan
>> henvise til en værdi *og* en funktion.
>
>> I det første eksempel er det symbolværdien man henviser til; I det
>> andet er det (indirekte) symbolets funktion, som bliver brugt.
>
> Der er da et ' til forskel, ikke?

Jo. Men på sin vis er der ikke, for

(setq flyspell-mode t)

svarer til:

(set 'flyspell-mode t)

Navnet "setq" kommer fra "set quoted". Så ' er bare "gemt" i q'et i
setq.

> Hvordan skulle man ellers angive en funktion, hvis ikke ved dens navn?

Som en anonym funktion, fx

(add-hook 'tex-mode-hook (lambda () (setq flyspell-mode t)))

Det udtryk gør at `flyspell-mode' bliver sat til t, når man starter
tex-mode.

Den egentlige grund til at Martins forslag ikke virker

(add-hook 'tex-mode-hook (setq flyspell-mode t))

er at man starter flyspell-mode ved at kalde funktionen `flyspell-mode'
ikke ved at sætte symbolværdien af `flyspell-mode' til t.¹

Martins udtryk sætter jo faktisk værdien af `flyspell-mode' -- og det
var derfor han så, at `C-h m' fejlagtigt fortalte at flyspell-mode *var*
loadet.


¹ Faktisk er det lidt i strid med Emacs konventionerne, at det ikke er
tilstrækkeligt bare at sætte variablen. Fra manualen:

,----
| In addition, there are several conventions that are specific to
| minor modes.
|
| * Make a variable whose name ends in `-mode' to control the minor
| mode. We call this the "mode variable". The minor mode command
| should set this variable (`nil' to disable; anything else to
| enable).
|
| If possible, implement the mode so that setting the variable
| automatically enables or disables the mode. Then the minor mode
| command does not need to do anything except set the variable. [..]
|
| * Define a command whose name is the same as the mode variable. Its
| job is to enable and disable the mode by setting the variable.
`----

Adam Sjøgren (01-06-2002)
Kommentar
Fra : Adam Sjøgren


Dato : 01-06-02 15:32

On Sat, 01 Jun 2002 01:28:44 +0200, Jacob Bunk Nielsen wrote:

> ... men på en eller anden måde har jeg en fornemmelse af at du godt
> vidste det i forvejen

Det var ihvertfald hvad jeg gættede på.

>> Hvordan skulle man ellers angive en funktion, hvis ikke ved dens
>> navn?

> Det er bare fordi

> (foo 'bar)

> kalder funktionen foo med argumentet 'bar, mens

> (foo (bar))

> kalder funktionen foo med hvad det nu resulterer i at evaluerer bar
> som argument.

Ja, men det besvarer ikke spørgsmålet

> I et andet C-lignende sprog kunne de to ovenstående funktionskald fx
> svare til:

> foo("bar");

> og

> foo(bar());

> (... at man så i foo("bar") nok ofte vil bruge en pointer til
> funktionen bar() i stedet for en tekststreng med funktionens navn er
> en detalje jeg lige er sprunget let hen over.)

(Dvs. du "burde" have skrevet foo(bar); (eller foo(&bar);) første
gang?


Mvh.

--
"Haven't you heard the emancipation declaration?" Adam Sjøgren
"No, I don't listen to hip-hop!" asjo@koldfront.dk

Adam Sjøgren (01-06-2002)
Kommentar
Fra : Adam Sjøgren


Dato : 01-06-02 15:39

On Sat, 01 Jun 2002 01:58:20 +0200, Jesper Harder wrote:

>>> I det første eksempel er det symbolværdien man henviser til; I det
>>> andet er det (indirekte) symbolets funktion, som bliver brugt.

>> Der er da et ' til forskel, ikke?

> Jo. Men på sin vis er der ikke, for

> (setq flyspell-mode t)

> svarer til:

> (set 'flyspell-mode t)

Men 'flyspell-mode er ikke det samme som (setq flyspell-mode t), vel?

> Navnet "setq" kommer fra "set quoted". Så ' er bare "gemt" i q'et i
> setq.

Om ' er et ' eller et q kommer vel ud på et?

>> Hvordan skulle man ellers angive en funktion, hvis ikke ved dens
>> navn?

> Som en anonym funktion, fx

Nå ja, det var implicit i spørgsmålet at omtalte funktion var
navngivet, da der refereredes til navnet.

> Den egentlige grund til at Martins forslag ikke virker

> (add-hook 'tex-mode-hook (setq flyspell-mode t))

> er at man starter flyspell-mode ved at kalde funktionen
> `flyspell-mode' ikke ved at sætte symbolværdien af `flyspell-mode'
> til t.¹

Bliver fluspell-mode ikke sat til t når add-hook ovenfor kaldes,
og ikke når tex-mode-hook kaldes?

(Jeg er absolut ikke inde i (e)lisp, så spørgsmålet er helt straight


> ,---- | In addition, there are several conventions that are specific
> to | minor modes.
> |

(Sidespørgsmål: Hvad hedder den der slags citat-indsætning? Jeg
antager at det ikke er noget folk laver i hånden )


Mvh.

--
"Haven't you heard the emancipation declaration?" Adam Sjøgren
"No, I don't listen to hip-hop!" asjo@koldfront.dk

Jesper Harder (01-06-2002)
Kommentar
Fra : Jesper Harder


Dato : 01-06-02 17:41

spamtrap@koldfront.dk (Adam Sjøgren) writes:

> On Sat, 01 Jun 2002 01:58:20 +0200, Jesper Harder wrote:
>
> Men 'flyspell-mode er ikke det samme som (setq flyspell-mode t), vel?

Nej.

>> Navnet "setq" kommer fra "set quoted". Så ' er bare "gemt" i q'et i
>> setq.
>
> Om ' er et ' eller et q kommer vel ud på et?

Ja, (setq a 1) er fuldstændig det samme som (set 'a 1).

>> Den egentlige grund til at Martins forslag ikke virker
>
>> (add-hook 'tex-mode-hook (setq flyspell-mode t))
>
>> er at man starter flyspell-mode ved at kalde funktionen
>> `flyspell-mode' ikke ved at sætte symbolværdien af `flyspell-mode'
>> til t.¹
>
> Bliver fluspell-mode ikke sat til t når add-hook ovenfor kaldes,
> og ikke når tex-mode-hook kaldes?

Netop. Så der er to grunde til, at det ikke virkede efter hensigten.

> (Sidespørgsmål: Hvad hedder den der slags citat-indsætning? Jeg
> antager at det ikke er noget folk laver i hånden )

Det er boxquote.el fra <http://www.davep.org/emacs/>.

Adam Sjøgren (01-06-2002)
Kommentar
Fra : Adam Sjøgren


Dato : 01-06-02 19:10

On Sat, 01 Jun 2002 18:40:56 +0200, Jesper Harder wrote:

> Det er boxquote.el fra <http://www.davep.org/emacs/>.

Cool - tak!


Mvh.

--
"I know not about horses but i know that there is Adam Sjøgren
a hors type called a Hoppe" asjo@koldfront.dk

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408885
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste