Några frågor om Emacs [LÖST]

Här diskuteras programmering och utveckling
Användarvisningsbild
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]

Inlägg av Johnny Rosenberg »

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.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
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

Inlägg av mcNisse »

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.
Användarvisningsbild
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

Inlägg av Johnny Rosenberg »

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).
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
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

Inlägg av mcNisse »

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 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.

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.
Användarvisningsbild
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

Inlägg av Johnny Rosenberg »

mcNisse skrev:
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 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.
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)…

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.
:)
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
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

Inlägg av mcNisse »

Kod: Markera allt

(defun simple-compile ()
  "test"
  (interactive)
  (compile (concat "g++ " (buffer-file-name)))
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.

Ä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.
Användarvisningsbild
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

Inlägg av Johnny Rosenberg »

mcNisse skrev:

Kod: Markera allt

(defun simple-compile ()
  "test"
  (interactive)
  (compile (concat "g++ " (buffer-file-name)))
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.

Ä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.
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:

Kod: Markera allt

(defun simple-compile ()
  "test"
  (interactive)
  (compile (concat "g++ " (buffer-file-name))))
Och nu fungerade det ju kanon! Tack så mycket. Till och med bättre än det jag hade tänkt mig… ;D
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
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]

Inlägg av Johnny Rosenberg »

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.

Kod: Markera allt

(defun simple-c++-compile ()
  "test"
  (interactive)
  (compile (concat "g++ -o " (substring (buffer-file-name) 0 -4) " " (buffer-file-name))))
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!
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
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]

Inlägg av mcNisse »

Jag får väl också passa på att tacka. Utan din fråga hade jag inte fått testa elisp igen :)
Användarvisningsbild
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]

Inlägg av Johnny Rosenberg »

mcNisse skrev:Jag får väl också passa på att tacka. Utan din fråga hade jag inte fått testa elisp igen :)
En földfråga bara:

Kod: Markera allt

(defun simple-c++-compile ()
  "test"
  (interactive)
  (compile (concat "g++ -o " (substring (buffer-file-name) 0 -4) " " (buffer-file-name))))
Vad gör ”test” där? Har den någon funktion att fylla?
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
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]

Inlägg av mcNisse »

Det är bara en sträng. Den ska beskriva vad funktionen gör. Jag var lite fantasilös ;)
Skriv svar

Återgå till "Programmering och webbdesign"