I need to edit source code in org-mode.
#+BEGIN_SRC cpp
void elimDups(vector<string> &words)
{
sort(words.begin(), words.end());
auto end_unique = unique(words.begin(), words.end());
words.erase(end_unique, words.end());
}
#+END_SRC
In code blocks, there is no code completion.
Is it possible to use code completion in code blocks in org-mode?
You can do C-c ' to open a new window with the corresponding major mode.
Then you have code completion.
Related
Launch Emacs with emacs -q and write in org-mode:
#+BEGIN_SRC C
/*
* This is a comment line
*/
#+END_SRC
Press TAB inside the block. It becomes:
#+BEGIN_SRC C
/*
,* This is a comment line
,*/
#+END_SRC
Is there any way to get rid of this behevior?
This is a quoting mechanism to make sure that the asterisks are not interpreted as headline markers and throwing off Org mode's parser. See Literal Examples in the manual.
There is no way to turn it off and you shouldn't anyway because Org mode will be very confused otherwise. The commas do not affect the exporting of the document or the evaluation of a source block: they are properly stripped at the appropriate time.
In org-mode I use <s then TAB to insert a code block. This action will insert a code block like
#+BEGIN_SRC
.
.
.
#+END_SRC
but I want to modify this action to insert something like
#+BEGIN_SRC python -n :results output pp replace :exports both
.
.
.
#+END_SRC
I know it's possible to change default behaviour of :result or :exports in emacs init file but I prefer to change this shortcut behaviour, because it makes me able to change the options in line.
Answering my own question based on legoscia's answer.
As mentioned in the Easy Templates section of the org-mode manual, you can modify these templates by customizing the variable org-structure-template-alist. Using M-x customize-option and applying changes will add all easy templates to your init file, if you don't like it you can add just one line to your init file to change a template or add one.
In my case I added this line to my emacs init file to add <p then TAB :
(add-to-list 'org-structure-template-alist '("p" "#+BEGIN_SRC python -n :results output pp replace :exports both\n?\n#+END_SRC"))
ALL CREDITS GOES TO legoscia
As of Org 9.2 the method employed by #shae128 is no longer valid. Instead you'll need to use tempo-define-template, like this:
(tempo-define-template "python-block"
'("#+begin_src python :results raw output"
n n p n n
"#+end_src")
"<p"
"Insert an outputting Python block"
'org-tempo-tags)
n stands for newline, p for where to leave the mark, <p for the command to expand from when hitting tab.
Thanks to Omar's answer here
As mentioned in the Easy Templates section of the org-mode manual, you can modify these templates by customizing the variable org-structure-template-alist. (Use M-x customize-option.)
For <s, the default expansion is "#+BEGIN_SRC ?\n\n#+END_SRC". You can just edit it to include the options you want after BEGIN_SRC. Alternatively, you could add a new template, e.g. <p, that expands to the text you want.
I'm completely new to Emacs and I'm looking for a way to make Emacs automatically write these lines of code for C files
#include <stdio.h>
int main()
{
return 0;
}
I'm sorry for messing up these lines, but I think you've got the point.
Yasnippet is perfect for re-usable snippets .
Have a look at the emacs wiki
Install using: M-x package-install yasnippet, or look on project on github.
Once installed, enable yasnippet-minor-mode with M-x yas-minor-mode-on (when your C file is open, the buffer's major mode is on c-mode and yas-minor-mode adds yas functionality.)
C-c&C-n will open a buffer for a snippet.
Give it a name and copy your code into the body, result should look like:
# key: c
# name: c_include
# --
#include <stdio.h>
int main()
{
return 0;
}
C-cC-c to close and save the buffer.
It will now appear with the name you gave it in the yasnippet menu when you call
C-c&C-s
Yasnippet has a lot more functionality. Read the doc.
Find C templates in AndreaCrotti yasnippet snippets Github repository
I really like the org-babel that enables me to organize my scripts in org-mode, however, i found there are some issues with the org src buffer when i edit the source code in a separate buffer (using keybinding C-c ').
first thing is, even i explicitly run write-file, and then specifies the file path and name to save, the buffer is not saved to that file, but the source code block in the .org file gets updated and the .org -file is saved.
second thing is, whenever i run save-buffer in org src buffer, the buffer screen will automatically scroll down till current mouse position is the last line in the buffer. this is annoying because sometimes i lose tracking my scripts.
i am not so familiar with elisp, and can only do simple work like define-key or add-hook, i hope i can get help from here. thanks
Org-babel is not meant for organizing scripts, but for including source code as part of your document.
You may be interested in tangling, which allows to join and extract source code blocks from your orgmode document into separate files.
The following example will merge 2 source code fragments into the file test.m when tangling (org-babel-tangle, bound to C-c C-v t):
* Tangling example
Set up a vector:
#+begin_src octave :tangle test.m
a = 1:10;
#+end_src
Then find out squares
#+begin_src octave :tangle test.m
b = a.^2
#+end_src
I'm running R code blocks in a session in an org-mode file, and I can usually get them to execute by C-c C-c, as expected.
I think the pertinent PROPERTY lines I've put at the top of my file are
#+PROPERTY: session *R*
#+PROPERTY: cache yes
#+PROPERTY: exports both
#+PROPERTY: tangle yes
Sometimes, nothing happens when I press C-c C-c. AFAICT, that's a seemingly random event; the same code block may work one time and fail another time.
When such a block fails, I do see the results echoed to the minibuffer, but I don't see any results (e.g., a new data frame, as I would have expected in many cases) in the R session.
If I press C-' to edit the code block and then press C-j on each line (or C-r on each region), the code does execute, and the results get echoed appropriately to the org file and show up in the R session.
Here are some sample code block begin lines:
#+begin_src R :results silent :exports code
#+begin_src R :results value :colnames yes :exports both
I tested both just now by doing rm(list=ls()), running the code blocks, and doing ls() in the session to see if the results were there.
The first block is simple:
#+begin_src R :results silent :exports code
require(stringr)
require(ggplot2)
require(scales)
require(arm)
require(YaleToolkit)
require(stinepack)
require(mixtools)
require(lubridate)
source("utilities.R")
pf <- function (x,y) {
z <- sqrt(x * x + y * y)
return(x/z)
}
#+end_src
In two tests, it worked once and failed once, as detected by looking for pf in the R session.
If important, I can try to produce an ECM that fails frequently enough to be useful, but I suspect this may be a common setup or version problem that someone has seen and solved. It seems related to Org-mode code block evaluation, but the solution there seems to have been to :export results. In most cases, I use :exports both, which would seem to cover that case, and, in at least some cases, I care about setting up the environment in the session and not exporting to the org file. I'm never passing data through org-mode; I'm only using the session for that.
BTW, I'm running org-mode 7.8.03 on GNU Emacs 23.3.1 on XP Pro 64.