Några frågor om Emacs [LÖST]
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Några frågor om Emacs [LÖST]
Jag använde Emacs en hel del under andra halvan av 1980-talet, då jag gick på en högskola, men de senaste decennierna har det mesta fallit i glömska, förutom att Emacs uppdaterats en hel del sedan dess.
Jag har nu använt Emacs lite till och från de senaste månaderna, men långt ifrån varje dag. Mest testat att skriva lite övningsexempel i C++ än så länge.
En sak som slagit mig, är att när man ska kompilera inifrån Emacs, så måste man första gången ange sitt filnamn manuellt, om man exempelvis vill kompilera med kommandot g++ MinFilMedEttNästanLöjligtLångtNamn.c++. Emacs startade jag genom att skriva emacs MinFilMedEttNästanLöjligtLångtNamn.c++, därav att man tycker att man skulle slippa mata in skiten ännu en gång när man kompilerar.
Det som slår mig är ju att TAB-tangenten inte verkar fungera som den sedvanliga komplettera-knapp den är när man skriver filnamn i exempelvis BASH. Finns det något smart sätt att slippa knappa in sitt lång krångliga filnamn? Visst, när man sedan kompilerar igen, eftersom man fick en massa felmeddelanden första gången som man nu korrigerat, så behöver man ju inte knappa in filnamnet alls, men jag vill inte behöva göra det första gången heller.
I och med att jag har installerat Happy Emacs (eller vad det heter) behöver jag i alla fall inte knappa in META+x compile, eftersom F8 gör det lilla jobbet åt mig. Dock får jag inga menyer när jag installerat detta. Går menyerna att återställa på något sätt?
Sen skulle jag önska att, när jag öppnar Emacs med ett filnamn som argument, och denna fil saknas, Emacs lägger dit de vanliga raderna automatiskt åt mig, om jag angett filändelsen c++, men jag antar att man kan fixa det med Emacs Lisp. Håller på lite med att försöka lära mig det, så det kommer när det kommer.
Jag har nu använt Emacs lite till och från de senaste månaderna, men långt ifrån varje dag. Mest testat att skriva lite övningsexempel i C++ än så länge.
En sak som slagit mig, är att när man ska kompilera inifrån Emacs, så måste man första gången ange sitt filnamn manuellt, om man exempelvis vill kompilera med kommandot g++ MinFilMedEttNästanLöjligtLångtNamn.c++. Emacs startade jag genom att skriva emacs MinFilMedEttNästanLöjligtLångtNamn.c++, därav att man tycker att man skulle slippa mata in skiten ännu en gång när man kompilerar.
Det som slår mig är ju att TAB-tangenten inte verkar fungera som den sedvanliga komplettera-knapp den är när man skriver filnamn i exempelvis BASH. Finns det något smart sätt att slippa knappa in sitt lång krångliga filnamn? Visst, när man sedan kompilerar igen, eftersom man fick en massa felmeddelanden första gången som man nu korrigerat, så behöver man ju inte knappa in filnamnet alls, men jag vill inte behöva göra det första gången heller.
I och med att jag har installerat Happy Emacs (eller vad det heter) behöver jag i alla fall inte knappa in META+x compile, eftersom F8 gör det lilla jobbet åt mig. Dock får jag inga menyer när jag installerat detta. Går menyerna att återställa på något sätt?
Sen skulle jag önska att, när jag öppnar Emacs med ett filnamn som argument, och denna fil saknas, Emacs lägger dit de vanliga raderna automatiskt åt mig, om jag angett filändelsen c++, men jag antar att man kan fixa det med Emacs Lisp. Håller på lite med att försöka lära mig det, så det kommer när det kommer.
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Några frågor om Emacs
Kompilera med emacs:
Skapa en Makefile så kan du bygga med samma kommando hela tiden. För enkla saker kan du skapa ett enkelt skript som genererar Makefilen.
Har du filnamnet i en buffer i emacs kan du använda dabbrev-expand för att få fram namnet. Default bindningen är M-/. Dock är det inte vanligt att filnamn finns i en buffer.
Menyerna är säkert bara avstängda. Emacs har mycket stora möjligheter till anpassning. Så mycket att jag inte kommer ihåg vad saker och ting heter. Men det går att leta fram mha M-X customize. Du kan hitta parametern för menynerna där. Eller så tittar du i din ~/.emacs. Menyerna är säkert bortkonfigurerade där.
Att lägga till rader i en ny fil så lägger du till kod i en hook. Tror att du ska in i file-open-hook. Det måste finnas sådana på nätet.
Skapa en Makefile så kan du bygga med samma kommando hela tiden. För enkla saker kan du skapa ett enkelt skript som genererar Makefilen.
Har du filnamnet i en buffer i emacs kan du använda dabbrev-expand för att få fram namnet. Default bindningen är M-/. Dock är det inte vanligt att filnamn finns i en buffer.
Menyerna är säkert bara avstängda. Emacs har mycket stora möjligheter till anpassning. Så mycket att jag inte kommer ihåg vad saker och ting heter. Men det går att leta fram mha M-X customize. Du kan hitta parametern för menynerna där. Eller så tittar du i din ~/.emacs. Menyerna är säkert bortkonfigurerade där.
Att lägga till rader i en ny fil så lägger du till kod i en hook. Tror att du ska in i file-open-hook. Det måste finnas sådana på nätet.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Några frågor om Emacs
När jag börjar programmera på allvar kommer jag säkert att arbeta med make-filer, men som det är just nu så är jag på inlärningsstadiet, så vad jag gör är att jag skriver lite övningsexempel och liknande och sedan går jag vidare till nästa och nästa, och så vidare.
Kan inte se att det blir mindre att skriva genom att skapa en make-fil än att göra som jag gör nu. META+/ verkar fungera, men det verkar vara som du säger, det finns inget att hitta, så i mitt fall fungerar det inte.
Jag förstår ändå inte varför det ska behöva vara som det är. Om jag ska kompilera något, är det väl högst troligt att jag vill kompilera det jag arbetar med. Varför fattar inte emacs det? Det tycker i alla fall jag är, om inte en bugg, så i alla fall ganska osmart. Kanske borde föreslå detta för utvecklarna.
Ska se om jag kan återfå menyerna genom ditt tips, nästa gång jag känner att jag behöver dem. Jag försöker ju att klara mig så långt det går med enbart tangentbordet genom att tvinga mig själv till att lära mig alla kortkommandon (i alla fall de jag behöver).
Kan inte se att det blir mindre att skriva genom att skapa en make-fil än att göra som jag gör nu. META+/ verkar fungera, men det verkar vara som du säger, det finns inget att hitta, så i mitt fall fungerar det inte.
Jag förstår ändå inte varför det ska behöva vara som det är. Om jag ska kompilera något, är det väl högst troligt att jag vill kompilera det jag arbetar med. Varför fattar inte emacs det? Det tycker i alla fall jag är, om inte en bugg, så i alla fall ganska osmart. Kanske borde föreslå detta för utvecklarna.
Ska se om jag kan återfå menyerna genom ditt tips, nästa gång jag känner att jag behöver dem. Jag försöker ju att klara mig så långt det går med enbart tangentbordet genom att tvinga mig själv till att lära mig alla kortkommandon (i alla fall de jag behöver).
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Några frågor om Emacs
Det är relativt ovanligt att man bygger ett program som enbart består av endast en fil. Därför tror jag att det är som det är, dvs de flesta bygger med ett och samma kommando.Johnny Rosenberg skrev:Jag förstår ändå inte varför det ska behöva vara som det är. Om jag ska kompilera något, är det väl högst troligt att jag vill kompilera det jag arbetar med. Varför fattar inte emacs det? Det tycker i alla fall jag är, om inte en bugg, så i alla fall ganska osmart. Kanske borde föreslå detta för utvecklarna.
Det borde vara relativt enkelt att göra ett kommando som du kan binda till en tangentbordskombination... Jag har en gång gjort en egen save hook. Ska se om jag kan få fram något åt dig.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Några frågor om Emacs
Jo, men om TAB-tangenten fungerade som den gör i exempelvis Bash, får man ju rätt bra hjälp med att fylla i sitt löjligt långa filnamn, om man nu, som jag, är en hängiven förespråkare av långa filnamn (inom visa gränser förstås; det får ju inte bli dumt)…mcNisse skrev:Det är relativt ovanligt att man bygger ett program som enbart består av endast en fil. Därför tror jag att det är som det är, dvs de flesta bygger med ett och samma kommando.Johnny Rosenberg skrev:Jag förstår ändå inte varför det ska behöva vara som det är. Om jag ska kompilera något, är det väl högst troligt att jag vill kompilera det jag arbetar med. Varför fattar inte emacs det? Det tycker i alla fall jag är, om inte en bugg, så i alla fall ganska osmart. Kanske borde föreslå detta för utvecklarna.
Det är väl likadant med det mesta annars. Jag tycker inte att man ska behöva mata in samma sak mer än en gång i något sammanhang. Om jag exempelvis har ett CD-projekt, ska jag inte behöva mata in låttitlar på fler än ett ställe, sedan ska det hänga med överallt: Filnamn, taggar, låtlista på ilägg och så vidare. Eller som sagt, när man programmerar: Filen har ett namn, det ska man inte behöva knappa in mer än en enda gång.
mcNisse skrev:Det borde vara relativt enkelt att göra ett kommando som du kan binda till en tangentbordskombination... Jag har en gång gjort en egen save hook. Ska se om jag kan få fram något åt dig.

- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Några frågor om Emacs
Kod: Markera allt
(defun simple-compile ()
"test"
(interactive)
(compile (concat "g++ " (buffer-file-name)))
Är du nöjd med simple-compile kan du lägga binda den till F8. Kopiera in koden i din ~/.emacs och bind om F8 till den.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Några frågor om Emacs
Fick det inte att fungera först. M-x eval-buffer gav bara något i stil med ”…end of file during parsing”, men så såg jag att det saknades en parentes. Det skulle visst vara så här:mcNisse skrev:För att testa funktionen (om du ty6ker att den är något att ha) kan du testa den genom att ladda in den i en buffer, och köra M-x eval-buffer. Sedan kan du byta till din c++ fil och testa M-X simple-compile.Kod: Markera allt
(defun simple-compile () "test" (interactive) (compile (concat "g++ " (buffer-file-name)))
Är du nöjd med simple-compile kan du lägga binda den till F8. Kopiera in koden i din ~/.emacs och bind om F8 till den.
Kod: Markera allt
(defun simple-compile ()
"test"
(interactive)
(compile (concat "g++ " (buffer-file-name))))

- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Några frågor om Emacs [LÖST]
Skulle bara tillägga att jag nu gjort lite efterforskningar på nätet och utvecklat lösningen ett litet steg. Har testat och det verkar fungera.
Så nu, när jag kompilerar min fil som heter EnKulLitenFIlMedEttLöjligtLångtNamn.c++ så kommer den körbara filen att heta EnKulLitenFIlMedEttLöjligtLångtNamn istället för a.out, under förutsättning att filändelsen är 4 tecken lång, vilket den ju är om man räknar med punkten i .c++.
Nu funderar jag på hur man kan få det att fungera med alla filändelser, trots att det är totalt irrelevant då till och med namnet på funktionen avslöjar att detta enbart är avsett för C++-kompilering…
Jag tackar så mycket för inspirationen och hjälpen!
Kod: Markera allt
(defun simple-c++-compile ()
"test"
(interactive)
(compile (concat "g++ -o " (substring (buffer-file-name) 0 -4) " " (buffer-file-name))))
Nu funderar jag på hur man kan få det att fungera med alla filändelser, trots att det är totalt irrelevant då till och med namnet på funktionen avslöjar att detta enbart är avsett för C++-kompilering…
Jag tackar så mycket för inspirationen och hjälpen!
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Några frågor om Emacs [LÖST]
Jag får väl också passa på att tacka. Utan din fråga hade jag inte fått testa elisp igen 

- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Några frågor om Emacs [LÖST]
En földfråga bara:mcNisse skrev:Jag får väl också passa på att tacka. Utan din fråga hade jag inte fått testa elisp igen
Kod: Markera allt
(defun simple-c++-compile ()
"test"
(interactive)
(compile (concat "g++ -o " (substring (buffer-file-name) 0 -4) " " (buffer-file-name))))
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
Re: Några frågor om Emacs [LÖST]
Det är bara en sträng. Den ska beskriva vad funktionen gör. Jag var lite fantasilös 
