A lightweight & cross-platform IDE supporting the most recent C++ standards

Overview

This project has moved to https://gitlab.com/cppit/jucipp.

juCi++

a lightweight, platform independent C++-IDE with support for C++11, C++14 and C++17 features depending on libclang version.

About

Current IDEs struggle with C++ support due to the complexity of the programming language. juCI++, however, is designed especially towards libclang with speed, stability, and ease of use in mind.

Features

  • Platform independent
  • Fast, responsive and stable (written extensively using C++11/14 features)
  • Syntax highlighting for more than 100 different file types
  • C++ warnings and errors on the fly
  • C++ Fix-its
  • Integrated Clang-Tidy checks possible through clang plugins, for instance (recreating existing build is needed):
    CXX=clang++ CXXFLAGS="-Xclang -add-plugin -Xclang clang-tidy -Xclang -plugin-arg-clang-tidy -Xclang -checks='-*,clang-analyzer-core.*'" juci [project-path]
    
  • Debug integration, both local and remote, through lldb
  • Supports the following build systems:
    • CMake
    • Meson
  • Git support through libgit2
  • Fast C++ autocompletion
  • Tooltips showing type information and doxygen documentation (C++)
  • Rename refactoring across files (C++)
  • Highlighting of similar types (C++)
  • Automated documentation search (C++)
  • Go to declaration, implementation, methods and usages (C++)
  • OpenCL and CUDA files are supported and parsed as C++
  • Other file types:
    • Language server protocol support is enabled if [language identifier]-language-server executable is found. This executable can be a symbolic link to one of your installed language server binaries. See language-server-protocol/specification.md for the currently defined language identifiers.
    • otherwise, only keyword and buffer completion supported
  • Find symbol through Ctags
  • Spell checking depending on file context
  • Run shell commands within juCi++
  • Regex search and replace
  • Smart paste, keys and indentation
  • Multiple cursors
  • Auto-indentation through clang-format or Prettier if installed
  • Source minimap
  • Split view
  • Multiple cursors
  • Full UTF-8 support
  • Wayland supported with GTK+ 3.20 or newer

See enhancements for planned features.

Screenshots

Dependencies

  • boost-filesystem
  • boost-serialization
  • gtkmm-3.0
  • gtksourceviewmm-3.0
  • aspell
  • libclang
  • lldb
  • libgit2
  • libclangmm (downloaded directly with git --recursive, no need to install)
  • tiny-process-library (downloaded directly with git --recursive, no need to install)

Installation

See installation guide.

Documentation

See how to build the API doc.

Comments
  • Indentation cleanup, added smart_brackets and smart_insertions, and more

    Indentation cleanup, added smart_brackets and smart_insertions, and more

    @d3rrial, @zalox and others: I need testing of this PR before merge:

    • Added move one ) instead of insert, which is very nice after autocomplete (#281)
    • Major cleanup of the indenting code, it's actually much faster compared to current master, and additionally more readable (I hope).
    • smart_insertions
    • Various other improvements
    opened by eidheim 62
  • Debug integration

    Debug integration

    • The solution should be stable and flexible
    • For debugging functions that you do not yet find in the menu, use Run Command in the Debug menu.
    • You can add and remove breakpoints also when debugging is running or is stopped
    • Use Go to stop to figure out where the debugger stopped
    • The kill debug menu item is to kill the debug process
    • We will not force buffers to be non-editable when you run debug, so take that into consideration when strange things happen
    opened by eidheim 48
  • Improved Rename and Show Usage

    Improved Rename and Show Usage

    At the moment, files that are to be included in rename and show usage needs to be opened and parsed by libclang. Sadly, libclang is too slow to do a full parse of an entire medium or larger sized project. However, there are other options, like using cscope, that might solve this adequately. Feel free to post your opinions here, or suggest other solutions.

    enhancement solved 
    opened by eidheim 32
  • Add CMake builddir option

    Add CMake builddir option

    Never thought about it before, since I always ignore the CMake-generated files using .gitignore, but there are probably some cmake option that make this doable. Will look into this soon, and most likely add this option in preferences.

    enhancement solved 
    opened by eidheim 31
  • New python plugin implementation

    New python plugin implementation

    Features

    • Write plugins in python using an API-module
    • Configure integration with juCi++ usin JSON configuration
    • Easy expansion of the API using lamba expressions in python_api.cc

    libjuci - Python API for juCi++

    libjuci.

      add_menu_element(str json) // -> (void) Builds a menu configured by 'json'
    
    [
        {
            "label": "_Edit",
            "menu_elements": [
                {
                    "label":"_Snippet",
                    "menu_elements": [
                        {
                            "label":"Insert snippet",
                            "keybinding":"<primary>m",
                            "action":"snippet.insert_snippet"
                        }
                    ]
                }
            ]
        }
    ]
    
    
      get_juci_home() // -> (str) returns the path of the juci home folder
    

    libjuci.terminal

      println(str message) // -> (int) prints 'message' to terminal
    

    libjuci.editor

        erase(int, int); // -> (void) removes the text between the given offsets
        erase_line_range(int, int, int); // -> (void) Removes text on line 'line_number' between 'begin_line_offset' and 'end_line_offset'
        get_file(); // -> (str) Returns the current open file. If no file is open it returns empty a string
        get_highlighted_word(); // -> (str) returns json, empty string on error{'word': 'word','type': '-1'}
        get_line(); // -> (str) returns the line of text the caret is on
        get_line_number(); // -> (int) Returns the line which is being edited, -1 if no file is open or no line is selected
        get_line_offset(); // -> (int) Returns the number of characters the caret currently is positioned from the previous newline, 0 is the first character -1 if no file is open or no line is selected
        get_offset(); // -> (int) Returns the number of characters the caret currently is positioned from start of the file. 0 is the first character. Returns -1 if no lines or files are selected/open
        get_tab_char_and_size(); // -> (str) Returns a key-value json-object with 'tab_char' and 'size' keys
        get_text(); // -> (str) returns the text in the open editor
        get_text_range(int, int); // -> (str) Returns the text between 'begin_offset' and 'end_offset'. Returns emptystring if editor isn't focused on a file
        insert_at(int offset, str text); // -> (void) Inserts text at the given offset, caller is responsible to scroll to the insertion
        insert_at_cursor(str); // -> (void) Inserts text at the cursor
        is_saved(); // -> (bool) Returns true if the current open file is saved
        scroll_to(int line_number); // -> (void) Scrolls cursor to 'char_offset'
    

    Example plugins

    Toolsplugin

    • Open favorite project folder using hotkey
    • Open plugin folder for easy access

    Snippet

    • Insert string templates based on keywords
    if -hotkey-> if () {
    }
    

    Todo

    • [ ] Write documentation for the API
    • [ ] Test on osx @eidheim
    • [ ] Test on arch
    • [ ] Test on debian
    • [ ] Test on msys
    • [ ] Ready for merge
    opened by zalox 31
  • juCi++ now supports gtk-3.0 themes and gtksourceview styles

    juCi++ now supports gtk-3.0 themes and gtksourceview styles

    • place themes in ~/.juci/gtk-themes/(theme_name)/gtk.css
    • place gtk-styles in ~/.juci/styles/(style).xml
    • select themes in config.json
        "theme": {
        "main": "gtk.css",
        "theme": "dark"
        },
    
    opened by zalox 30
  • Autogenerated closing brackets

    Autogenerated closing brackets

    Currently when autocompleting a function/method in juCi++, opening and closing brackets are generated automatically, along with sample content. In other IDEs (Visual Studio / CLion) the automatically generated parentheses are what I'll call unsolid, meaning if test(/* ... */) is generated and my cursor is here: test(/* ... */ꕯ), and I hit the closing bracket on my keyboard ")", the new closing bracket I wrote is ignored / replaces the auto-generated bracket, which allows me to then finish the line with ;↵ and be on my merry way with typing in the next line.

    In juCi++ however the autogenerated closing bracket is solid, so when my cursor is right before the bracket and I hit a closing bracket, a new closing bracket is generated and I now have two. To get around this I either have to hit the delete key to delete the autogenerated bracket, or never manually close the bracket and skip the created one with the right arrow key, both of which force me to leave the regular working set of keys and enter the numpad area.

    I don't know where you handle autogenerated function calls, if you point me in a direction, maybe I can work something out (no promises tho).

    I don't know how much this issue affects others, but I personally find it a jarring break in typeflow.

    opened by insunaa 29
  • Build errors on FreeBSD

    Build errors on FreeBSD

    I'm trying to build juCi++ on FreeBSD 10.3-Release which is my main development box. Unfortunately I'm getting a few build errors:

    First it was not able to find libclang.so. That's because FreeBSD uses a different directory structure in order to allow the user install different compiler versions. So, I made the following changes:

    cmake_modules/FindLibClang.cmake

    find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h
      PATHS ${libclang_llvm_header_search_paths}
      PATH_SUFFIXES LLVM/include llvm33/include llvm34/include llvm35/include llvm36/include llvm37/include llvm38/include #Windows package from http://llvm.org/releases/
      DOC "The path to the directory that contains clang-c/Index.h")
    
    # On Windows with MSVC, the import library uses the ".imp" file extension
    # instead of the comon ".lib"
    if (MSVC)
      find_file(LIBCLANG_LIBRARY libclang.imp
        PATH_SUFFIXES LLVM/lib llvm33/lib llvm34/lib llvm35/lib llvm36/lib llvm37/lib llvm38/lib
        DOC "The file that corresponds to the libclang library.")
    endif()
    
    find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang
      PATHS ${libclang_llvm_lib_search_paths}
      PATH_SUFFIXES LLVM/lib llvm33/lib llvm34/lib llvm35/lib llvm36/lib llvm37/lib llvm38/lib #Windows package from http://llvm.org/releases/
      DOC "The file that corresponds to the libclang library.")
    

    Then cmake was successful:

    -- The C compiler identification is Clang 3.4.1
    -- The CXX compiler identification is Clang 3.4.1
    -- Check for working C compiler using: Ninja
    -- Check for working C compiler using: Ninja -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler using: Ninja
    -- Check for working CXX compiler using: Ninja -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found LibClang: /usr/local/llvm38/lib/libclang.so  
    -- Boost version: 1.55.0
    -- Found the following Boost libraries:
    --   regex
    --   system
    --   filesystem
    -- Found ASPELL: /usr/local/lib/libaspell.so  
    -- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.28") 
    -- Checking for module 'gtkmm-3.0'
    --   Found gtkmm-3.0, version 3.16.0
    -- Checking for module 'gtksourceviewmm-3.0'
    --   Found gtksourceviewmm-3.0, version 3.2.0
    -- Checking for module 'libgit2'
    --   Found libgit2, version 0.24.0
    -- Could NOT find plantuml (missing:  PLANTUML_JARFILE) 
    -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/babaei/Desktop/jucipp/build
    

    Now, I'm getting the following error at the build stage:

    [  9%] Building CXX object src/CMakeFiles/project_shared.dir/git.cc.o
    /home/babaei/Desktop/jucipp/src/git.cc:106:44: error: no member named
          'FILE_MONITOR_WATCH_MOVES' in 'Gio::FileMonitorFlags'; did you mean
          'G_FILE_MONITOR_WATCH_MOVES'?
      ...Gio::FileMonitorFlags::FILE_MONITOR_WATCH_MOVES);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         G_FILE_MONITOR_WATCH_MOVES
    /usr/local/include/glib-2.0/gio/gioenums.h:347:3: note: 
          'G_FILE_MONITOR_WATCH_MOVES' declared here
      G_FILE_MONITOR_WATCH_MOVES      = (1 << 3)
      ^
    /home/babaei/Desktop/jucipp/src/git.cc:106:26: error: no matching member
          function for call to 'monitor_directory'
      monitor=git_directory->monitor_directory(Gio::FileMonitorFlags::FILE_M...
          ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
    /usr/local/include/giomm-2.4/giomm/file.h:2735:29: note: candidate function not
          viable: no known conversion from 'GFileMonitorFlags' to 'const
          Glib::RefPtr<Cancellable>' for 1st argument
      Glib::RefPtr<FileMonitor> monitor_directory(const Glib::RefPtr<Cancell...
                            ^
    /usr/local/include/giomm-2.4/giomm/file.h:2743:29: note: candidate function not
          viable: no known conversion from 'GFileMonitorFlags' to
          'Gio::FileMonitorFlags' for 1st argument
      Glib::RefPtr<FileMonitor> monitor_directory(FileMonitorFlags flags = F...
                            ^
    2 errors generated.
    *** Error code 1
    
    Stop.
    make[2]: stopped in /usr/home/babaei/Desktop/jucipp/build
    *** Error code 1
    
    Stop.
    make[1]: stopped in /usr/home/babaei/Desktop/jucipp/build
    *** Error code 1
    
    Stop.
    make: stopped in /usr/home/babaei/Desktop/jucipp/build
    

    It seems cmake picks up the wrong version of gtkmm library since I do have two different version of it installed at the same time (despite the fact that it says it picked up version 3 of the library):

        $ pkg info | grep gtkmm
        gtkmm24-2.24.4_2               C++ wrapper for Gtk+
        gtkmm30-3.16.0                 C++ wrapper for Gtk+3
    

    I'm really excited about this brand new IDE and like to check it out, or even create a port for it. So, any help would be greatly appreciated.

    opened by NuLL3rr0r 28
  • Major cleanup of clang parsing and autocomplete

    Major cleanup of clang parsing and autocomplete

    We should wait a few days before merging the latest commit (https://github.com/eidheim/jucipp/commit/7b78a6aea9ee5a8ecbf2935b397be50bcae34737) as it needs more testing. Same goes for this commit: https://github.com/eidheim/jucipp/commit/fd4668bfe4f313aeee46cc593daaf1d823a76c67

    opened by eidheim 28
  • completion popup misplaced

    completion popup misplaced

    For me the popup shows up at the top left corner of my screen and not at the cursor position. Tooltips also show up at the left top corner after a completion popped up, but after some time they move to the expected position (which is weird ;)).

    I am using awesomeWM. The issue is not related to window tiling because it also happens with floating windows. I use gtksourceview-3.20.1, gtksourceviewmm-3.18.0, gtk+-3.20.2 and gtkmm-3.18.1.

    solved 
    opened by ff2000 26
  • Crash on Windows when running for instance juci . src/menu.cc src/menu.h

    Crash on Windows when running for instance juci . src/menu.cc src/menu.h

    I think the issue was introduced with a new clang version (3.7), will fix this Today or Tomorrow hopefully.

    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread 2476.0x3fc]
    0x000000000378e664 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    (gdb) backtrace
    #0  0x000000000378e664 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #1  0x0000000002e6a236 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #2  0x0000000002e6c0b7 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #3  0x0000000002c89c28 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #4  0x000000000378e986 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #5  0x000000000378e9e7 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #6  0x000000000378ea48 in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #7  0x0000000002c7a77a in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #8  0x0000000002c8b32e in ?? () from c:\msys64\mingw64\bin\libclang.dll
    #9  0x0000000000472aa1 in clang::TranslationUnit::ReparseTranslationUnit (
        this=0x7c16ab0, Python Exception <type 'exceptions.ValueError'> Cannot find type const std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_Rep_type:
    buffers=std::map with 1 elements, flags=142)
        at C:/msys64/home/olece/jucipp/libclangmm/src/TranslationUnit.cc:70
    #10 0x00000000004223f4 in Source::ClangViewParse::<lambda()>::operator() (
        __closure=0x7c1eb68)
        at C:/msys64/home/olece/jucipp/src/source_clang.cc:148
    #11 std::_Bind_simple<Source::ClangViewParse::init_parse()::<lambda()>()>::_M_invoke<> (this=0x7c1eb68)
        at C:/msys64/mingw64/include/c++/5.2.0/functional:1531
    #12 std::_Bind_simple<Source::ClangViewParse::init_parse()::<lambda()>()>::operator() (this=0x7c1eb68) at C:/msys64/mingw64/include/c++/5.2.0/functional:1520
    #13 std::thread::_Impl<std::_Bind_simple<Source::ClangViewParse::init_parse()::<lambda()>()> >::_M_run(void) (this=0x7c1eb50)
        at C:/msys64/mingw64/include/c++/5.2.0/thread:115
    #14 0x000000006fd06050 in ?? () from c:\msys64\mingw64\bin\libstdc++-6.dll
    #15 0x0000000064944ac4 in ?? () from c:\msys64\mingw64\bin\libwinpthread-1.dll
    #16 0x000007feffcb415f in srand () from C:\Windows\system32\msvcrt.dll
    #17 0x000007feffcb6ebd in msvcrt!_ftime64_s ()
       from C:\Windows\system32\msvcrt.dll
    #18 0x0000000077ab5a4d in KERNEL32!BaseThreadInitThunk ()
       from C:\Windows\system32\kernel32.dll
    #19 0x0000000077beb831 in ntdll!RtlUserThreadStart ()
       from C:\Windows\SYSTEM32\ntdll.dll
    #20 0x0000000000000000 in ?? ()
    Backtrace stopped: previous frame inner to this frame (corrupt stack?)
    
    solved 
    opened by eidheim 26
  • Suggest of reimplementing the CMake support with cmake-server

    Suggest of reimplementing the CMake support with cmake-server

    I was studying the code of jucipp in resent days and noticed that you are implementing cmake support in a hard way. Since cmake3.7 a official server mode was added to cmake to provide semantic information about CMake code it executes to generate. I consider it a much better way of implementing cmake support.

    opened by DWVoid 7
  • select enclosing c/c++ element

    select enclosing c/c++ element

    Hey. Great project!

    I have a proposition for feature i often used in Intellij and Eclipse called in Eclipse: "select enclosing element". For example in code below:

    image

    if you put cursor mark in the center of the word "positions_" and activate shortcut, editor will select one word: image After subsequent calls to the same shortcut it's selecting bigger and bigger fragments of code: image image image image image after that it selects whole function block, whole function, whole namespace and finally whole file.

    This can save user from a lot of troublesome arrow manipulations.

    That is certainly not trivial to get it right for every type of expressions, but maybe with some clang help it would be doable? I think it's a neat feature that might be worth a trouble.

    opened by szymonk211 1
  • Submodules not included in archive tarball

    Submodules not included in archive tarball

    Hi!

    When downloading the juCi++ tarball from GitHub, submodules are not included. It would be nice to have an option to download a release tarball with all the necessary submodules (see https://github.com/DaveDavenport/rofi/releases for an example).

    This is helpful when packaging for other distributions (Guix in my case).

    opened by mbakke 1
  • Supporting C/C++ language server: cquery

    Supporting C/C++ language server: cquery

    There's a new C/C++ language server: cquery, which works quite well with VSCode. Just wondering the compatibility status between jucipp and cquery, or other language servers.

    opened by artisdom 1
  • highlight name clicked on

    highlight name clicked on

    When clicking on a variable (or other), the name gets bold and change size thus causing the rest of the line in the document to move. Visually, this makes it really hard to follow what is going on. Any way to make it go bold without moving the rest of the line ?

    opened by MalcolmMielle 3
Releases(v1.4.4)
  • v1.4.4(Jun 10, 2018)

    Cleanups, bugfixes and other improvements:

    • Fixed compilation in MSYS2 with liblldb
    • Changed type of bool to atomic<bool> to avoid undefined behavior
    • Fixed errorenous iterator usage in libclangmm's clangmm::Tokens::Tokens
    • Similar symbol tagging cleanup
    • Extension is no longer selected when renaming files from directory view
    • package.json files are no longer style formatted on save
    Source code(tar.gz)
    Source code(zip)
  • v1.4.3(May 27, 2018)

    New features:

    • Cut/Copy now cuts/copies line if no text is selected
    • Type tooltip is shown at auto symbol
    • Now adds #pragma once when opening empty C/C++ header
    • Can now undo file reload
    • Added Flow coverage support

    Cleanups, bugfixes and other improvements:

    • Cleanup and minor improvements to cut/copy/paste on various widgets
    • Tooltips are no longer hidden when the cursor is moving towards them
    • Cleanup of styles, and no longer uses deprecated functions related to setting styles
    • Correctly marks JavaScript as a language that uses brackets (bug introduced in last version)
    • Spellcheck context fix for cmake files (bug introduced in gtksourceview language spec)
    • Corrected SelectionDialog window height
    • Fixed various warnings found through different clang-tidy checks
    • Implement Method now includes noexcept specifier
    Source code(tar.gz)
    Source code(zip)
  • v1.4.2(May 1, 2018)

    New features:

    • Multiple cursor support that can be turned on in Preferences
    • Now checks for format files when language protocol is used
    • Python command can be changed in Preferences
    • Text buffers can now be automatically reloaded on file changes if source.auto_reload_changed_files preference item is enabled
    • Now supports format style through Prettier if found

    Cleanups, bugfixes and other improvements:

    • Drag-and-drop for directories reenabled on MacOS
    • Tooltips are moved slightly to the right when reaching top of screen, so that the text cursor is visible
    • Language protocol tag tokens, and open/close buffer functions are now asynchronous
    • Autocomplete is now triggered after " and ' characters when language protocol is used
    • Replacing text in a buffer has been optimized through libgit2's git_diff_buffers
    • Fixed potential crash when using for instance go to declaration before buffer has finished parsing and before autocomplete has been triggered
    • Fixed LLDB::get_value that sometimes crashed when looking up a function/method, and can now receive return values from object methods
    • Better looking tooltips with slightly rounded corners
    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Mar 9, 2018)

    New features:

    • Additional information is stored and used between juCi++ sessions: line offsets of buffers, window size, run arguments, and debug run arguments, including remote debug settings
    • Support for OpenCL source-files

    Cleanups, bugfixes and other improvements:

    • Language protocol:
      • Added support for textDocument/documentHighlight
      • Added support for workspace/symbol
      • Added correct tab size and char on style format
      • Improved Compile and Run for Rust
      • Go to definition through control/command-mouse click
      • Minor improvements of rename, go to usage, hover and completion
      • Added support for textDocument/rangeFormatting
      • Fixed potential crash on hover
    • Fixed spellcheck error fault when ending a string with '
    • Fixed crash on MacOS by disabling drag-and-drop in directories view
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Jan 19, 2018)

    New features:

    • Can now use go to declaration, implementation and find documentation on autocomplete rows
    • Added go to type declaration
    • CUDA files are now supported and parsed as C++
    • Find Documentation for std:: symbols improved through a symbol map to cppreference.com pages
    • Added language server protocol support. To enable this feature, add a symbolic link ([language-identifier]-language-server), in one of your PATH folders, that points to your installed language server executable. For instance, to enable Rust language server:
      ln -s ~/.rustup/toolchains/[nightly-toolchain]/bin/rls ~/.cargo/bin/rust-language-server
      
    • Added project and debug support for Rust

    Cleanups, bugfixes and other improvements:

    • Modernized cmake files
    • Fixed freeze when debugging start failed
    • CMake and Meson parsing now works on files with Windows newlines
    • Various improvements to implement method
    • No longer clears selection of terminal when modifier keys are used while a process is running
    • All headers should now be considered when finding usages of an overridden method
    Source code(tar.gz)
    Source code(zip)
  • v1.3.2(Nov 22, 2017)

    Various bug fixes:

    • Backspace now works at the start of source buffers after spaces or tabs
    • Core dumps at exit when using older glibmm versions have been fixed
    • Additional search path to style scheme paths are now added only once
    • Exit instructions now also runs when juCi++ is closed by the desktop environment
    • Now only updates directory paths that are shown in the directory view. This fixes a crash that could happen after creating a new C/C++ project on some systems.

    Minor improvement:

    • Further cleanup of debug events
    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Nov 9, 2017)

    New features:

    • Function parameter completion that shows possible arguments
    • Autocomplete now show completions after global namespace ::
    • Right margin line can be turned on in preferences

    Improvements and cleanups:

    • Debug event handler cleanups
    • Optimisations to autocomplete
    • Fixes to markdown style formatting
    • Fixed crash when two processes wrote to the same cache file
    • Improved search for clang-format and lldb-server executables ending with version strings
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Sep 16, 2017)

    New features:

    • Go to Usage and Rename fully implemented:
      • Now checks and parses unopened files
      • Files are reparsed if needed
      • Parse result is cached and stored in the build directory
      • Added listing of renamed symbols
      • Various improvements to similar symbol checks
    • Added style formatting for Markdown
    • Implemented environment parsing on string set in Debug Set Run Parameters
    • Added shift+enter shortcut that equals: go to end of line, and enter

    Improvements:

    • Autocomplete cleanup making it easier to implement autocomplete for other languages
    • Spellcheck error fixes
    • Go to Method dialog rows are now more readable
    • Fixed indentation after source code that ends with a comment
    • Terminal links cleanup, and added links for a assert error messages
    • Fixed crash when opening bare git repository
    • Added various workarounds gtk+ crashes on MacOS
    Source code(tar.gz)
    Source code(zip)
  • v1.2.5(Jul 2, 2017)

    New features:

    • Find File
    • Preference option source.format_style_on_save_if_style_file_found

    Improvements:

    • Fixed segmentation fault when running debug command on newer liblldb
    • Icon now set in MacOS
    • Improved executable search in cmake projects
    • Improved symbol count, spellcheck, and indentation
    • Fixed go to header on Arch Linux/Manjaro
    • Removed -Wno-unused-parameter from new c++ projects
    • Various cleanups
    Source code(tar.gz)
    Source code(zip)
  • v1.2.4(May 2, 2017)

    Added features:

    • goto declaration/implementation through control/command-left mouse clicks
    • can now use Go to Declaration on include directive to jump to included file
    • fullscreen and tab visibility toggle
    • can now disable interactive completion by setting completion keybinding

    Minor bugfixes and improvements:

    • should now fully support symbolic links
    • fixed directory/file sorting in directory view on some specific locales
    • fixed incorrect spellcheck error after pressing enter for some programming languages
    • block comment key events will no longer trigger inside a string
    Source code(tar.gz)
    Source code(zip)
  • v1.2.3(Feb 7, 2017)

    Notable improvements and additions:

    • Added support for the Meson Build System
    • Improved search for executables in cmake projects
    • Significantly improved parsing speed of C/C++ header files with manual include guards
    • Added support for C++ operators
    • Much improved right-click menu
    • Implemented menu item Source.Comments.Add Documentation
    • Colour improvements to dark juci styles
    • Processing speed improvements of format style through clang-format. Can now also format selected text only
    • Improvements in editing files with CR+LF endings
    • Added icon created by @adobrich
    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Oct 12, 2016)

    • FreeBSD supported
    • Window GUI changed slightly in preparation for additional debug information
    • Implement method and goto method also includes regular functions
    • Added New Project->C to File menu
    • Added Toggle Comments for various languages to Source menu
    • Added Clear Terminal to Window menu
    • Added Recreate Build to Project menu
    • Can now toggle breakpoints with mouse clicks
    • Added move up/down paragraphs through control-up/down
    • Added smart_brackets and smart_inserts to preferences
    • Improved status bar at bottom, showing file path and branch
    • Added format_style_on_save to preferences
    • Added Cursor History to Source menu
    • Added Reload File to File menu
    • Various cleanups and improvements
    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Jul 11, 2016)

    • Using clang-format no longer change the scroll position of the source window
    • Added find symbol through Ctags
    • Improved go to implementation with Ctags fallback
    • Improved go to declaration
    • Various cleanups related to moving juCi++ source to c++14, and oldest distribution supported is now Debian stable
    • Improved Debug show variables
    • Can now set breakpoints while debug build is compiling
    • MSYS2: system includes should now be passed correctly to libclang
    • libclangmm cleanup
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Jun 29, 2016)

    Major new features:

    • Go to implementation
    • Clickable warning/error links in terminal
    • Split window
    • Remote debugging
    • Git integration in both directory and source views
    • Implement method

    Other notable improvements:

    • Various cleanups, optimisations and smaller bug fixes
    • Various new options in preferences
    • Added Doxygen file
    • Asynchronous diagnostic retrieval
    • Added tests
    • Autocomplete fixes to common stream operators
    • Improved ninja support
    • Added continuous integration through Travis CI and AppVeyor
    • Added info messages
    • Improved rename refactoring of class names and its constructors/destructor
    • Improved Wayland support
    • Close tab with middle mouse click
    • lldb supported on Arch Linux
    Source code(tar.gz)
    Source code(zip)
  • v1.1.3(Apr 27, 2016)

    Minor changes and cleanup:

    • replaced mutex::lock/unlock calls with unique_lock
    • improved javascript support
    • added extra warning flags
    • slightly improved new C++ project
    • improved ninja support: relative include paths in compile_commands.json now works
    • fixed system theme support, and default theme now set to system theme
    • more responsive directories view when working with large folders

    New features:

    • directories view right click menu: added new file/folder
    • added source printing/exporting to pdf
    Source code(tar.gz)
    Source code(zip)
  • v1.1.2(Apr 7, 2016)

    Various bug fixes and cleanups, most notably:

    • Project and build cleanup making it easier to support other build management systems than CMake.
    • Auto indentation through clang-format supports other languages like C#, JavaScript, TypeScript and Java. Indentation while writing has also been improved for these languages.
    • Fixed auto-complete after non-ascii characters
    • Added workaround for TextView::on_key_press_event that sometimes caused segmentation fault, at least on OS X
    • More robust scroll to cursor method that previously could lead to segmentation fault
    • Improved project path search for CMake
    • Made it possible to deprecate preference nodes

    New features:

    • In directory view, added drag-and-drop move, and right-click menu for rename and delete
    • Find/Replace box improved
    • Now reopens last folder and files when starting juci without parameters
    • Terminal font is now monospace, and added preferences option to change the font
    • Terminal now clears before compiling, and added option to turn this on/off in preferences
    • Improved debug tooltips
    • Added file path tooltips to tabs
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Feb 23, 2016)

    This is mostly a cleanup release, but also includes the following:

    • Fixes a crash that sometimes happened when doing show variables in debug
    • Fixes a crash when doing debug and compile at the same time
    • Project title in directory view will now show _ correctly
    • Removed color codes from terminal in Windows
    • Fixed include path for OS X 10.11
    • Added option to save project files on compile/run/start debug in preferences
    • Added run support for markdown, python, javascript and html
    • Made the notebook tabs more pretty
    • MSYS2 can now be installed anywhere and still have correct include paths for libclang
    • Added tree lines to the directory view
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Jan 20, 2016)

    • Debug integration through lldb. Note that lldb is not yet working on Arch Linux and MSYS2, but developers on both distributions are working to fix this.

    Additional changes:

    • Added Set Run Arguments for both default and debug builds
    • Slightly improved autocomplete for C/C++
    • Improved auto indenting for Allman style
    • Various code cleanups and minor fixes
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Dec 22, 2015)

    • out-of-source build system. Note: when going from in-source build (juCi++ v1.0.0) in a project to v1.0.1, you might need to remove CMakeCache.txt to use the new build directory (./build by default, see preferences).
    • updated docs/install.md with respect to the new build system.

    Additional changes:

    • improved parsing of add_executable in cmake files, also tries to guess executable based on active tab source file
    • default make_command changed to "cmake --build ." to support other build tools than make
    • minor utf-8 fix when selecting text after doing search and replace
    • better hiding of tooltips and dialogs when switching between applications/tabs
    • improved autocomplete, for instance if moving cursor while performing autocomplete
    • if a source/project has .clang-format file, this will be used instead of the application wide settings
    Source code(tar.gz)
    Source code(zip)
Lightweight, cross-platform & full-featured shader IDE

SHADERed is a lightweight tool for writing and debugging shaders. It is easy to use, open source, cross-platform (runs on Windows, Linux & Web).

dfranx 3.8k Dec 30, 2022
Cross-platform C++ input library supporting gamepads, keyboard, mouse, touch

This project is archived. It's neither maintained nor developed anymore. Gainput Gainput is the awesome C++ input library for your game: handles your

Johannes Kuhlmann 766 Jan 3, 2023
Vritual Traffic Cabinet - a modern C++ library for virtualization of traffic control cabinet in adherence with NEMA-TS and ATC Standards.

Virtual Traffic Cabinet A modern C++ library (C++20) for the virtualization of traffic cabinet in adherence with NEMA-TS1, NEMA-TS2, 170, Caltrans 232

Wuping Xin 3 Nov 22, 2022
C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more

Archived cquery is no longer under development. clangd and ccls are both good replacements. cquery cquery is a highly-scalable, low-latency language s

Jacob Dufault 2.3k Jan 2, 2023
C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting

ccls ccls, which originates from cquery, is a C/C++/Objective-C language server. code completion (with both signature help and snippets) definition/re

Fangrui Song 3.3k Jan 6, 2023
CAN-BUS sniffing for Volkswagen Golf MK7 (and most likely other MQB platform cars)

MQB-sniffer CAN-BUS sniffing for Volkswagen Golf MK7 (and most likely other MQB platform cars). Currently this is more a work log for future reference

null 22 Dec 23, 2022
FireDog - Open source cross-platform lightweight virus signature detection engine.

FireDog 开源跨平台轻量级病毒特征检测引擎。Open source cross-platform lightweight virus signature detection engine. 语言 Language C++ 11 LICENSE 是你们喜欢的:MIT License. 让我们搞起

null 41 Nov 4, 2022
A cross-platform,lightweight,scalable game server framework written in C++, and support Lua Script

Current building status Moon Moon is a lightweight online game server framework implement with multithread and multi-luaVM. One thread may have 1-N lu

Bruce 467 Dec 29, 2022
A cross-platform,lightweight,scalable game server framework written in C++, and support Lua Script

hive Distributed game server framework based on CPP 17 && LUA 5.4 框架(hive)+逻辑(server) 支持跨平台开发(windows,linux,mac) oop模式的lua开发,支持lua热更新 protobuf协议 pbc修改

toney 82 Jan 1, 2023
A Fingerprint Door Lock using a microprocessor named Arduino UNO and programming through Arduino IDE

INSTRUCTIONS - The codes for the Fingerprint Door lock are present in the Code For Fingerprint Door Lock folder The instructions of how to operate the

Akhil Sahukaru 15 Mar 3, 2022
Some sketches for the VL53L5CX ranging camera for use with the Arduino IDE

VL53L5CX Some examples for the ST's VL53L5CX 8 x 8 pixel ranging camera using Simon Levy's Arduino library and Seth Bonn's multi-byte I2C read and wri

Kris Winer 18 Dec 8, 2022
a work in progress try to make an IDE with the CSFML

EatSleepCode A work in progress for educational purpose. To help better understanding the CSFML lib. Installation clone this repo and do make Use case

Saverio 1 Nov 20, 2022
Common Lisp editor/IDE with high expansibility

Lem is the editor/IDE well-tuned for Common Lisp. After installing lem, you can start developing in Common Lisp at once. You can skip over writing tid

null 1.3k Jan 7, 2023
Tactile-Arcade-Games - Wrote a C program comprised of four separate games that run in a loop using the PSoC 5LP board and Cypress IDE.

Tactile-Arcade-Games - Wrote a C program comprised of four separate games that run in a loop using the PSoC 5LP board and Cypress IDE. Used two potentiometers, two ADCs to convert their voltages to digital values, a PWM to drive two servos, an 8x8 RGB LED matrix, 40 digital output pins and 8 power MOSFETS to control the matrix, and a character LCD display.

null 2 Dec 30, 2022
Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible)

ESP32 BLE Keyboard library This library allows you to make the ESP32 act as a Bluetooth Keyboard and control what it does. You might also be intereste

null 1.5k Jan 8, 2023
ESP-32 CAM implementation of a Bird classifier using Arduino IDE

Bird-Classifier ESP-32 CAM implementation of a Bird classifier using Arduino IDE For the file server to run, you also need to have the ESP32 SD File M

null 3 Mar 28, 2022
The Leap Motion cross-format, cross-platform declarative serialization library

Introduction to LeapSerial LeapSerial is a cross-format, declarative, serialization and deserialization library written and maintained by Leap Motion.

Leap Motion (Ultraleap) 15 Jan 17, 2022
A cross platform shader language with multi-threaded offline compilation or platform shader source code generation

A cross platform shader language with multi-threaded offline compilation or platform shader source code generation. Output json reflection info and c++ header with your shaders structs, fx-like techniques and compile time branch evaluation via (uber-shader) "permutations".

Alex Dixon 286 Dec 14, 2022
Identify I2C devices from a database of the most popular I2C sensors and other devices

I2C Detective Identify I2C devices from a database of the most popular I2C sensors and other devices. For more information see http://www.technoblogy.

David Johnson-Davies 21 Nov 29, 2022