using ctags or cscope(without interactive mode) from commandline - ctags

I am using a custom editor for an embedded systems project. For source code I would like to get ctags working from command line and give me search results on commandline. Other option is to work with cscope in non interactive mode so I can include it in my editor at a later date. I did some initial web search but couldn't find anything relevant to accomplish this.
Does anyone know how to use either of these tools from command line?? Any tutorial?
Thanks.
Have a great day.

Using readtags.c shipped as part of ctags implementation, you can search a tag from given tags file.
Let me show an example:
$ ctags -R main
$ readtags -t tags kindDefinition
kindDefinition main/types.h /^typedef struct sKindDefinition kindDefinition;$/
$ readtags -t tags -e kindDefinition
kindDefinition main/types.h /^typedef struct sKindDefinition kindDefinition;$/;" kind:t typeref:struct:sKindDefinition

Related

Are there any cscope or ctags APIs that can be used programmatically?

I have been using ctags and cscope for sometime now. I wanted to know if there exist any APIs so as to grab output of "cscope -d". Or maybe if we can use cscope.out and tags database to extract readable information.
libreadtags is a library for reading a "tags" file generated by ctags.
If --sort=yes is specified as the command line of ctags invocation, libreadtags can do binary-search.

ctags error "format error in tags file"

I work on c code base in Linux. I use perforce as source code repository. I had been using ctags and it was working fine. But recently when press ctrl ] in some symbol then I get below error. I removed tags file and recreated the tags file but the problem didn't solve. Any idea on how to resolve this issue?
E431: Format error in tags file "tags"
Before byte 53035586
If you are just using the ctags -R then try specifying the c language in the command like below. I had the same problem and when I specified the c language while generating the tags, the problem got resolved.
ctags -R --languages=C
There may be tags with large names in your repo. If you can live without those included in your ctags file, you can avoid this error and use rest of the ctags.
To avoid the files/folders, use this syntax
**ctags -R -V --exclude=#/path/to/ctags_ignore_file ./ **
ctags_ignore_file has the list of Folders to be excluded. You can use wildcard entries too.
This solved my problem.
TLDR; add export CSCOPE_EDITOR=vim to ~/.bashrc and close your terminal window.
In my case, setting vim as the default editor for cscope fixed the issue:
echo "export CSCOPE_EDITOR=vim" >> ~/.bashrc # Append to .bashrc
source ~/.bashrc # Load .bashrc into the current shell
After this, you may also use the following commands in your project directory for a quick reconfiguration of cscope and ctags:
ctags -R
cscope -R

ARFF file extension to csv binary executable

Thanks in advance for the help.
I'm looking for a binary executable to convert an .arff into a .csv in a bash script. Ideally something that I could run along the lines of
#! /bin/sh
... some stuff....
converstionFunc input.arff output.csv
... some more stuff ...
Looking into writing this myself I found that weka provides a library that I could utilize that would allow me to do this. However, as much as I looked for it, I could not find it. I have weka installed on my mac and after looking around for the library I still was unable to find it.
Does anyone know where I may find such an executable, or able to point me where I could get a hold of the weka java library that would let me write it myself?
Clone this github repository. It contains an arff2csv tool in the "tools" subdirectory.
arff2csv is designed to run in pipes of unix commandline tools.
https://github.com/jeroenjanssens/data-science-at-the-command-line
arff2csv is a one-line shell-script that calls another shell script that calls weka.jar,
so it needs java installed on your machine; and note that arff2csv needs Weka version 3.6. (According to my experiments the newer v3.7 does not work.)
The script wants this environment variable set:
export WEKAPATH=/path/to/wekajar-dirname
and then you can do
cat /opt/smallapps/weka-stable/data/breast-cancer.arff | arff2csv > breast-cancer.arff.csv
Large arffs need some time to get processed.
You can read J.Janssen's book (see repo-README) for a bit more info.
Try an web search for arff2csv. It looks like there are lots of utilities out there.

pandoc version 1.12.3 or higher is required and was not found (R shiny)

I have a problem generating a pdf report from my app shiny which is hosted on a server.
the app works fine but when I press the button to download the report, I get this error :
pandoc version 1.12.3 or higher is required and was not found.
The proble is that if I type pandoc -v I get:
pandoc 1.12.3.3
Compiled with texmath 0.6.6, highlighting-kate 0.5.6.1.
Syntax highlighting is supported for the following languages:
actionscript, ada, apache, asn1, asp, awk, bash, bibtex, boo, c, changelog,
clojure, cmake, coffee, coldfusion, commonlisp, cpp, cs, css, curry, d,
diff, djangotemplate, doxygen, doxygenlua, dtd, eiffel, email, erlang,
fortran, fsharp, gnuassembler, go, haskell, haxe, html, ini, java, javadoc,
javascript, json, jsp, julia, latex, lex, literatecurry, literatehaskell,
lua, makefile, mandoc, markdown, matlab, maxima, metafont, mips, modelines,
modula2, modula3, monobasic, nasm, noweb, objectivec, objectivecpp, ocaml,
octave, pascal, perl, php, pike, postscript, prolog, python, r,
relaxngcompact, restructuredtext, rhtml, roff, ruby, rust, scala, scheme,
sci, sed, sgml, sql, sqlmysql, sqlpostgresql, tcl, texinfo, verilog, vhdl,
xml, xorg, xslt, xul, yacc, yaml
Default user data directory: /home/daniele/.pandoc
Copyright (C) 2006-2013 John MacFarlane
Web: http://johnmacfarlane.net/pandoc
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.
So I suppose I have the right version for that. TexLive is also installed and the path is in $PATH.
Server.R
library(shiny)
library(drsmooth)
library(shinyBS)
library(knitr)
library(xtable)
library(rmarkdown)
shinyServer(function(input, output,session) {
output$downloadReport <- downloadHandler(
filename = function() {
paste('report', sep = '.','pdf')
},
content = function(file) {
src <- normalizePath('report.Rmd')
# temporarily switch to the temp dir, in case you do not have write
# permission to the current working directory
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'report.Rmd')
library(rmarkdown)
out <- render('report.Rmd')
file.rename(out, file)
})
output$tb <- renderUI({
p(h4("Report")),
"Dowload a the report of your analysis in a pdf format",
tags$br(),downloadButton('downloadReport',label="Download report"),
tags$em("This option will be available soon")
})
})
* report.Rmd* does not contain any sort of calculation, it's only text.
The pdf generation works fine on my local version (MacOS) but not on the server.
I'm here to give other information if needed.
Go into RStudio and find the system environment variable for RSTUDIO_PANDOC
Sys.getenv("RSTUDIO_PANDOC")
Then put that in your R script prior to calling the render command.
Sys.setenv(RSTUDIO_PANDOC="--- insert directory here ---")
This worked for me after I'd been struggling to find how rmarkdown finds pandoc. I had to check github to look at the source.
Another option so that this works for all your R scripts is to define this variable globally.
On Debian/Ubuntu, add the following line to your .bashrc file:
export RSTUDIO_PANDOC=/usr/lib/rstudio/bin/pandoc
On macOS, add the following to your .bash_profile file:
export RSTUDIO_PANDOC=/Applications/RStudio.app/Contents/MacOS/pandoc
On Windows (using Git Bash), add the following to your .bashrc file:
export RSTUDIO_PANDOC="/c/Program Files/RStudio/bin/pandoc/"
The easiest way I solved this issue is to pass the Sys.setenv(..) command inside the crontab command prior to calling the RMarkdown::render. You need to separate the two commands with a semicolon:
R -e "Sys.setenv(RSTUDIO_PANDOC='/usr/lib/rstudio-server/bin/pandoc'); rmarkdown::render('File.Rmd', output_file='output.html')"
(Remember that the rstudio-server path differs from the non-server version)
For those not using RStudio, you may just need to install pandoc on your system. For me it was
sudo pacman -S pandoc
and it worked (Arch Linux).
I'm using Arch Linux, and RStudio as well..
the only thing that worked for me was:
sudo pacman -S pandoc
:)
If anyone is having this issue and also use anaconda, its possible they were having my issue. The rstudio shell does not load the .bashrc file when it starts up meaning if your version of pandoc is installed within anaconda Rstudio will not find it. Installing pandoc separately with a command like sudo pacman -S pandoc worked for me!
I had a similar problem with pandoc on Debian 10 while building a bookdown document. In the Makefile what I did was:
# use rstudio pandoc
# this rule sets the PANDOC environment variable from the shell
build_book1:
export RSTUDIO_PANDOC="/usr/lib/rstudio/bin/pandoc";\
Rscript -e 'bookdown::render_book("index.Rmd", "bookdown::gitbook")'
# use rstudio pandoc
# this rule sets the environment variable from R using multilines
build_book2:
Rscript -e "\
Sys.setenv(RSTUDIO_PANDOC='/usr/lib/rstudio/bin/pandoc');\
bookdown::render_book('index.Rmd', 'bookdown::gitbook')"
These two rules are equivalent and knit the book successfully.
I just didn't like the long Rscript command:
Rscript -e "Sys.setenv(RSTUDIO_PANDOC='/usr/lib/rstudio/bin/pandoc'); bookdown::render_book('index.Rmd', 'bookdown::gitbook')"
Hey I just beat this error. I solved this by deleting the 2 pandoc files, "pandoc" and "pandoc-citeproc" from the shiny-server folder. I then created a link for each of these files from the rstudio-server folder. It worked like a charm. This was an issue for me when I was trying to embed leaflet in the rmarkdown documents from running a shiny-server on a linux machine. I found it odd that when I ran it in rstudio on the same linux machine it worked fine, but not when I ran it using shiny-server. So the shiny-server install of pandoc is old/outdated.
Cheers
For Windows 10, RStudio 2022.12.0
Pandoc is installed with RStudio, so I prefer to use the already-installed pandoc.exe. As far as I can tell where it is installed changes from time to time. In the last couple of years, I've seen it in the below locations (the top one is where it is with my current verison of RStudio).
January 2023-
"C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools"
August 2022-
"C:/Program Files/RStudio/bin/quarto/bin/tools"
"C:/Program Files/RStudio/bin/quarto/bin"
"C:/Program Files/RStudio/bin/pandoc"
Once you know where the pre-installed pandoc is you can include this line in your .R file as the top answer from Chris/Yihui indicate and it works for me.
Sys.setenv(RSTUDIO_PANDOC = "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools")
If you are trying to run a script from the command line on Windows you just need to have the directory path in the PATH variable*. You can also create a separate User variable named RSTUDIO_PANDOC and give this variable the directory*. Then close and reopen any terminals to refresh the system paths.**
*Experiment with a trailing / if you are having issues.
**I was unable to point to a UNC path. The // at the beginning of the path hosed the rmarkdown package pandoc functions. If you are using a UNC path, you must map it to a drive and reference the drive letter. There are ways to do this dynamically. I use a DOS/batch script which I found via Google.
I was facing a similar issue in IntelliJ R plugin. I solved it by copying the pandoc file in ~/.IntelliJIdea2019.3/config/plugins/rplugin/pandoc
On Windows, and without RStudio, you can install pandoc with choco install pandoc or via the pandoc website, https://pandoc.org/.
Make sure to restart your IDE to ensure it picks up the new install.

How do I print the source code of a bash script (on paper)?

I need to print some Bash script on paper. Any recommendations on how to get a nice output with syntax highlighting and all that?
I've tried TextMate, but the output had huge fonts (and no syntax highlighting, no colors).
You can use gvim to convert the script to colorized html. (Open script in gvim then select 'Syntax' menu then 'Convert to html'). Then you can print that html using firefox.
I use enscript. It's a command line tool for formatting text for printing. It includes support for bash syntax highlighting. It is easy to configure for line numbering and row highlighting.
Generally I tell it to print to a file so I can look at it in Preview and tweak any options.
You can pull it out of MacPorts if you don't have it already.
I ended up using Bundles > TextMate > Create HTML in TextMate and then printing the HTML.
I usually prefer enscript, and these are my favorite options:
enscript -2rG -Ebash <filename> -P<printername>
-2 -> print two pages per sheet
-r -> rotate 90ยบ
-G -> fancy headers
-Ebash -> syntax highlight per bash
If you are tired of writing this all the time, you can write an alias or put it in a makefile.
Komodo Edit is free, works in Linux, OSX and Windows, does great job highlighting many different formats.

Resources