Giter Club home page Giter Club logo

telega.el's Introduction

CI test DOCKER image build Telegram chat TDLib MELPA MELPA Stable GNU Guix Open Collective

Backers

logo telega.el

See Telega Manual for comprehensive documentation.

Latest telega.el release can be found in the https://github.com/zevlg/telega.el/tree/release-0.8.0 branch, it is compatible with the latest TDLib major release 1.8.0


telega.el is full featured unofficial client for Telegram platform for GNU Emacs.

telega.el is actively developed, for this reason, some features are not implemented, or they are present just as skeleton for future implementation. However, the core parts are mature enough so that it is possible to use telega.el for basic chat.

Features

telega.el implements most of the features official Telegram clients has. The only major feature telega.el lacks is full support for voice/video chats.

Unique features

And much more.

Screenshots

Root buffer screen:

screen31

Chat in @emacs_en group:

screen11

Dashboard with Emacs Stories and important chats:

dashboard

Starting with telega.el

See Telega Manual for comprehensive documentation.

How to contribute

Join our Telegram group to discuss the development of telega.el.

Submitting issues is exceptionally helpful.

Support telega.el by donating to:

TON
TON: UQDLQ-q6Yob4zB7KVpk2xKCPHBwfFrc5JmGCF74NPyB1ViIN
USDT TRC20
USDT TRC20: TJ9ekHtD1dnZsCAKJoc7Yx1emNmdLwFbzP
BTC
BTC: 1PeqqU1dGEqXy52yk3XEySaHXREsrtDvCc

Donating makes you telega patron forever and you get telega cat eyars if you wish.

License

telega.el is licensed under GNU GPL version 3.

FAQ

Q: I have this error while installing telega

Cannot open load file: No such file or directory, visual-fill-column

A: telega.el depends on the visual-fill-column package, please install it first. This package is available from MELPA

Q: I have this error while running telega

(error "Invalid image type ‘svg’")

and/or

(error "Invalid image type ‘imagemagick’")

A: The appropriate behavior is adjusted based on what version of Emacs you use. If you are using 26.3 or older you need to ensure that your Emacs was configured with SVG and ImageMagick support. SVG support is provided using the librsvg library, and ImageMagick is provided by libmagickcore and libmagickwand development libraries.

If you are using Emacs 27.1+ the ImageMagick support was deprecated as it posed a significant security issue, but telega now relies on the in-built (and faster) image-transforms for those versions.

Q: Does telega have proxy support?

A: Yes, use telega-proxies custom variable, for example:

(setq telega-proxies
      (list
       '(:server "1.2.3.4" :port 8080 :enable :false
                 :type (:@type "proxyTypeSocks5"
                               :username "rkn" :password "jopa"))
       '(:server "2.3.4.5" :port 8088 :enable t
                 :type (:@type "proxyTypeSocks5"
                               :username "rkn" :password "jopa"))
       ))

See C-h v telega-proxies RET for full range of proxy types.

Q: Stickers are not shown.

A: If you are using Emacs 26.3 or older, ensure you it was configured with ImageMagick support. Next, install the webp package.

Q: There are no glyphs for some unicode characters.

A: Please either install fonts-symbola package, or run guix package -i font-gnu-{freefont,unifont} on GNU Guix

If using fonts-symbola, add this to your init.el:

(set-fontset-font t 'unicode "Symbola" nil 'append)

Q: There is some formatting issues when some unicode characters are used.

A: Yes, partly. If character has full width of multiple ordinary chars you can tweak char-width-table. Add code like this to your init.el:

(setq telega-symbol-unread "🄌")

(defun my-telega-load ()
  ;; 🄌 occupies two full chars, but (string-width "🄌") returns 1
  ;; so we install custom widths to `char-width-table'
  (telega-symbol-set-width telega-symbol-unread 2)

  ;; ... other code
  )

(add-hook 'telega-load-hook 'my-telega-load)

There is also telega-symbol-widths custom variable, you might want to modify it.

Q: Is there erc-like chats tracking functionality?

A: Yes, set telega-use-tracking-for to non-nil

Tracking is done only for opened chats, i.e. chats having corresponding chat buffer.

Its value is a Chat Filter.

For example, to enable tracking for chats with enabled notifications or for chats where you have unread mention, use:

(setq telega-use-tracking-for '(or unmuted mention))

Q: Is it possible to use telega in tty-only Emacs (aka emacs-nox)?

A: Yes, set telega-use-images to nil before starting telega

Q: Is it possible to add markup to messages?

A: Yes, use C-u RET to send a message with markup

See Sending ordinary messages for details

You may also find telega-mnz.el from the contrib directory to be complimentary.

Q: I've enabled telega-notifications-mode, but notifications does not show

A: Make sure your time is correct

Eval (telega-time-seconds) to get UTC time in your Emacs, it should be more or less the same as on https://www.unixtimestamp.com/

telega.el's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

telega.el's Issues

Header in telega-root accumulates qualifiers

Every time I press return on the various filter names on the header of telega-root, the descriptor in the parentheses in the dashed line gets that qualifier appended. For instance, with all:

2019-01-31 10 48 21

Support for image view

Currently an image preview is shown in the telega buffer. I would like to be able to press Enter (or "C-c C-o" or some other keybinding) when the cursor is above the image and then download the entire image into an emacs buffer.

Improve support for RTL languages

Currently when inputting text in an RTL language (e.g. Hebrew) the input base direction is fixed at LTR. This should be changed to determine the input direction from the line input. A typical heuristic is to determine it from the first "strong character" in the unicode bidirectional algorithm sense. The paragraph direction should then be changed through a call to current-bidi-paragraph-direction according to the text direction.

Use ewoc.el to format contents of root/chat buffers

ewoc.el already implements huge part of code needed to render root/chat buffers. Also inserters instead of formatters would simplify and enhance formatting code, because inserts does have context, for example current column is known

It might also fix the #3

Disable output of special messages.

I'd like to have a defcustom that would allow me to disable display of telega-msg-special-p messages (user joined/leaved etc) in chat buffer.

build system instead of pure makefile

Motivation: when a distribution does not provide a library, I like to install the library to a non standard location (libtdjson.so in my case), so that I can easily remove the whole bunch of files in case of trouble. Or when I find a proper binary distribution, I could easily do the swap. Now telega is built with a simple makefile, expecting libtdjson to be available in /usr/local/lib, and the header files available in the standard /usr/include location. So that I could build the telega-server with libtdjson at a nonstandard location, I needed to modify the makefile, setting rpath and include path properly. It worked, but little inconvenient from users perspective.

Long story short, it would be great if the project could be built with some build system, for example cmake. The cmake project could contain proper detection for libtdjson, and let users specify the install path. Another bonus would be: as telega being cmake project, it would be very easy to build libtdjson as a submodule until distributions pick up libtd (this is what balabit/syslog-ng does with some dependencies: like ivykis).

I would happily do the contribution including updating the readme (except design.txt, my russian is a little bit rusty). But first I wanted to ask your opinion @zevlg about it, as choosing a build system is a heavy decision for a project. Do like the idea? Does cmake sound good? Or do you prefer autotools?

Support Proxies

Thanks a lot for this great package! I'm looking forward to using it!

I'm behind a corporate proxy, and right now, when I start telega for the first time and enter in my number, the screen only shows me that it's connecting.

I have the http_proxy and https_proxy and the capitalized counterparts set to the right value, and also have the url-proxy-services variable customized.

Thanks!

Customizable inserters

After moving from formatters to inserters (see #33) make them customizable, so user can choose how exactly something is inserted. So for example user could chose to display photo in web_page before title or after, etc.

let user configure limits to network traffic

each time I start telega, it just downloads the new stuff, which is good.
however, I'm often at locations where I would not want to automatically download larger media files when I open telega. rather, I'd like to be able to instruct telega what to do at startup.

  • I guess most users would want to just download every attachment.
  • if you only have an expensive connection, you may want to ignore larger attachments, according to a threshold.
  • when you have an expensive connection, but can go to a nearby library, you may want to be asked what to do.

maybe you want to add two configuration items, something like:

  • threshold: ignore / respect / ask
  • threshold value in Mbytes

(telega-completing-titles) fails after getting info about a user.

telega-completing-titles fails after pressing [i] on any chat in root buffer. That happens because i puts something incorrect in telega--full-info variable

Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
  substring(nil 8)
  (downcase (substring (plist-get (plist-get user :type) :@type) 8))
  (intern (downcase (substring (plist-get (plist-get user :type) :@type) 8)))
  telega-user--type((:@type "userFullInfo" :is_blocked :json-false :can_be_called :json-false :has_private_calls t :bio "" :share_text "" :group_in_common_count 5 :@extra 4))
  (eq (telega-user--type user) 'deleted)
  (if (eq (telega-user--type user) 'deleted) (format "DeletedUser-%d" (plist-get user :id)) (let ((fmt-type (or fmt-type 'full)) (name "")) (if (memq fmt-type '(full short)) (progn (let ((un (plist-get user :username))) (if (string-empty-p un) (if (eq fmt-type ...) (progn ...)) (setq name (concat "@" un)))))) (if (or (memq fmt-type '(full name)) (string-empty-p name)) (progn (let ((ln (plist-get user :last_name))) (if (string-empty-p ln) nil (setq name (concat ln ... name)))))) (if (or (memq fmt-type '(full name)) (string-empty-p name)) (progn (let ((fn (plist-get user :first_name))) (if (string-empty-p fn) nil (setq name (concat fn ... name)))))) name))
  telega-user--name((:@type "userFullInfo" :is_blocked :json-false :can_be_called :json-false :has_private_calls t :bio "" :share_text "" :group_in_common_count 5 :@extra 4))
  (let* ((va (telega-user--name user))) (if (cl-member va result :test #'string=) result (cons va result)))
  (setq result (let* ((va (telega-user--name user))) (if (cl-member va result :test #'string=) result (cons va result))))
  (setq result (setq result (let* ((va (telega-user--name user))) (if (cl-member va result :test #'string=) result (cons va result)))))
  (while --dolist-tail-- (setq user (car --dolist-tail--)) (setq result (setq result (let* ((va (telega-user--name user))) (if (cl-member va result :test #'string=) result (cons va result))))) (setq --dolist-tail-- (cdr --dolist-tail--)))
  (let ((--dolist-tail-- (hash-table-values (cdr (assq 'user telega--full-info)))) user) (while --dolist-tail-- (setq user (car --dolist-tail--)) (setq result (setq result (let* ((va (telega-user--name user))) (if (cl-member va result :test #'string=) result (cons va result))))) (setq --dolist-tail-- (cdr --dolist-tail--))))
  (let ((result)) (let ((--dolist-tail-- (telega-filter-chats 'all)) chat) (while --dolist-tail-- (setq chat (car --dolist-tail--)) (setq result (setq result (let* ((va ...)) (if (cl-member va result :test ...) result (cons va result))))) (setq --dolist-tail-- (cdr --dolist-tail--)))) (let ((--dolist-tail-- (hash-table-values (cdr (assq 'user telega--full-info)))) user) (while --dolist-tail-- (setq user (car --dolist-tail--)) (setq result (setq result (let* ((va ...)) (if (cl-member va result :test ...) result (cons va result))))) (setq --dolist-tail-- (cdr --dolist-tail--)))) (nreverse result))
  telega-completing-titles()
  eval((telega-completing-titles) nil)
  #f(compiled-function (exp &optional insert-value no-truncate char-print-limit) "Evaluate EXP and print value in the echo area.\nWhen called interactively, read an Emacs Lisp expression and\nevaluate it.  Value is also consed on to front of the variable\n`values'.  Optional argument INSERT-VALUE non-nil (interactively,\nwith a non `-' prefix argument) means insert the result into the\ncurrent buffer instead of printing it in the echo area.\n\nNormally, this function truncates long output according to the\nvalue of the variables `eval-expression-print-length' and\n`eval-expression-print-level'.  When NO-TRUNCATE is\nnon-nil (interactively, with a prefix argument of zero), however,\nthere is no such truncation.\n\nIf the resulting value is an integer, and CHAR-PRINT-LIMIT is\nnon-nil (interactively, unless given a positive prefix argument)\nit will be printed in several additional formats (octal,\nhexadecimal, and character).  The character format is only used\nif the value is below CHAR-PRINT-LIMIT (interactively, if the\nprefix argument is -1 or the value is below\n`eval-expression-print-maximum-character').\n\nRuns the hook `eval-expression-minibuffer-setup-hook' on entering the\nminibuffer.\n\nIf `eval-expression-debug-on-error' is non-nil, which is the default,\nthis command arranges for all errors to enter the debugger." (interactive #f(compiled-function () #<bytecode 0x291da6d>)) #<bytecode 0x24d949>)((telega-completing-titles) nil nil 127)
  apply(#f(compiled-function (exp &optional insert-value no-truncate char-print-limit) "Evaluate EXP and print value in the echo area.\nWhen called interactively, read an Emacs Lisp expression and\nevaluate it.  Value is also consed on to front of the variable\n`values'.  Optional argument INSERT-VALUE non-nil (interactively,\nwith a non `-' prefix argument) means insert the result into the\ncurrent buffer instead of printing it in the echo area.\n\nNormally, this function truncates long output according to the\nvalue of the variables `eval-expression-print-length' and\n`eval-expression-print-level'.  When NO-TRUNCATE is\nnon-nil (interactively, with a prefix argument of zero), however,\nthere is no such truncation.\n\nIf the resulting value is an integer, and CHAR-PRINT-LIMIT is\nnon-nil (interactively, unless given a positive prefix argument)\nit will be printed in several additional formats (octal,\nhexadecimal, and character).  The character format is only used\nif the value is below CHAR-PRINT-LIMIT (interactively, if the\nprefix argument is -1 or the value is below\n`eval-expression-print-maximum-character').\n\nRuns the hook `eval-expression-minibuffer-setup-hook' on entering the\nminibuffer.\n\nIf `eval-expression-debug-on-error' is non-nil, which is the default,\nthis command arranges for all errors to enter the debugger." (interactive #f(compiled-function () #<bytecode 0x31e2575>)) #<bytecode 0x24d949>) ((telega-completing-titles) nil nil 127))
  eval-expression((telega-completing-titles) nil nil 127)
  funcall-interactively(eval-expression (telega-completing-titles) nil nil 127)
  call-interactively(eval-expression nil nil)
  command-execute(eval-expression)

Images not shown after some period of time

In case some image washes out from Emacs images cache and at the same time tdlib cleanups downloaded files, then Emacs won't show image correctly, only squares are shown.

Possible solution is to use: pre-redisplay-functions to check visible messages and redisplay them if necessary.

Failed to start server ./telega-server: error while loading shared libraries: libtdjson.so: cannot open shared object file: Error 40

Hello, I cloned your repo and tried to make the telega-server but I failed to start it with error message

./telega-server: error while loading shared libraries: libtdjson.so: cannot open shared object file: Error 40

Here are some message maybe useful for you

chino@archlinux / % find / -name libtdjson.so 2>/dev/null
/usr/local/lib/libtdjson.so
/usr/lib/libtdjson.so
/home/chino/gitrepos/td/build/libtdjson.so
1 chino@archlinux / % echo $PATH                                                           :(
/home/chino/.pyenv/shims:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/chino/.local/bin:/home/chino/.antigen/bundles/zsh-users/zsh-autosuggestions:/home/chino/.antigen/bundles/zdharma/fast-syntax-highlighting:/home/chino/.antigen/bundles/zsh-users/zsh-history-substring-search:/home/chino/.antigen/bundles/hlissner/zsh-autopair
chino@archlinux / % echo $LD_LIBRARY_PATH
/usr/lib64/nvidia/:/usr/lib32/nvidia:/usr/lib:
chino@archlinux / % ldd ~/.telega/telega-server 
	linux-vdso.so.1 (0x00007fff839f3000)
	libtdjson.so => not found
	libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f8b9bd0d000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007f8b9bb49000)
	/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f8b9bd72000)

OS: Archlinux
Emacs Ver: 26.1
telega ver: Commit e4d10f1

Markdown formatting breaks emoji.

When I try to send emoji in markdown mode I get error "Strings must be encoded in UTF-8"
In the log you can see that despite tdlib returns formatted text unchanged - encoding breaks when OUTPUTting the string to emacs.

[telega-server] INPUT: {"@type":"parseTextEntities","text":"👍","parse_mode":{"@type":"textParseModeMarkdown"},"@extra":479}
[ 3][t 3][1563348019.556011200][Td.cpp:3285][#1][!Td][&td_requests]	Receive request 952: parseTextEntities {
  text = "👍"	
  parse_mode = textParseModeMarkdown {
  }
}
[ 3][t 3][1563348019.556089163][Td.cpp:3392][#1][!Td][&td_requests]	Receive static request: parseTextEntities {
  text = "👍"
  parse_mode = textParseModeMarkdown {
  }
}
[ 3][t 3][1563348019.556115150][Td.cpp:3399][#1][!Td][&td_requests]	Sending result for static request: formattedText {
  text = "👍"
  entities = vector[0] {
  }
}
[ 3][t 3][1563348019.556137085][Td.cpp:4395][#1][!Td][&td_requests]	Sending result for request 952: formattedText {
  text = "👍"
  entities = vector[0] {
  }
}
[ 3][t 0][1563348019.556245089][Client.cpp:273][&td_requests]	End to wait for updates, returning object 952 0x7fef6c11fef0
[telega-server] OUTPUT event: (:@type "formattedText" :text "\ud83d\udc4d" :entities [] :@extra 479)
[ 3][t 0][1563348019.556378126][Client.cpp:267][&td_requests]	Begin to wait for updates with timeout 0.500000
[telega-server] INPUT: {"@type":"sendMessage","chat_id":92357428,"disable_notification":false,"input_message_content":{"@type":"inputMessageText","text":{"@type":"formattedText","text":"������","entities":[],"@extra":479},"clear_draft":true},"@extra":480}
[ 3][t 3][1563348019.557411194][Td.cpp:3285][#1][!Td][&td_requests]	Receive request 953: sendMessage {
  chat_id = 92357428
  reply_to_message_id = 0
  disable_notification = false
  from_background = false
  reply_markup = null
  input_message_content = inputMessageText {
    text = formattedText {
      text = "������"
      entities = vector[0] {
      }
    }
    disable_web_page_preview = false
    clear_draft = true
  }
}
[ 3][t 3][1563348019.557492971][MessagesManager.cpp:15847][#1][!Td]	Begin to send message to chat 92357428 in reply to invalid message 0
[ 3][t 3][1563348019.557518244][MessageContent.cpp:1795][#1][!Td]	Get input message content from inputMessageText {
  text = formattedText {
    text = "������"
    entities = vector[0] {
    }
  }
  disable_web_page_preview = false
  clear_draft = true
}
[ 3][t 3][1563348019.557542086][MessageContent.cpp:1461][#1][!Td]	Create InputMessageContent with file 0(0) and thumbnail 0(0)
[ 3][t 3][1563348019.557574034][Td.cpp:4410][#1][!Td][&td_requests]	Sending error for request 953: error { code = 400 message = "Strings must be encoded in UTF-8" }

Messages forwarding

Message forwarding is important part of the client, so we need to implement this feature

Should be done after #6 , because forming list of chats you can post is essential

Messages not marked as read

If chat's buffer is current and new message arrives in this chat it does not marks as read, until you hide/show the buffer.

Chats you are not subscribed to

Sometimes root buffer shows chats you are not subscribed to.

This is because telega-chat--get unconditionally adds chat to the chat list

FR: Ability to filter messages in groups

Feature request: it would be uber-cool to be able to filter messages by some ruleset. For example, ignore somebody's messages in public groups, or messages matching a regex. Official client is missing this feature and it's a pity.

lagging wen writing chat message in text-mode Emacs

When writing messages in text-mode Emacs, it seems something's blocking. Keypresses are echoed back after some time, with a relevant delay, which makes it difficult to contineu typing, for me at least. :)
I wasn't able to figure the UI enough to understand if it worked - since I am totally new to Emacs, and infact I installed it to try out telega.el :)
It will be very very nice for me it telega continues working even in text-mode Emacs.

`Debugger entered--Lisp error: (cl-assertion-failed (button "Telega status button is gone"))`

GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30) of 2018-05-28

Telega.el latest as of 868abe7 commit

Using Doom Emacs latest develop branch as of today's date.
yaourt -S --noconfirm telegram-tdlib
cd ~/.emacs.d/.local/packages/quelpa/build/telega/
make && make install

~/.doom.d/config.el

(def-package! telega
  :load-path  "~/telega.el"
  :commands (telega)
~/.doom.d/packages.el

(package! telega :recipe (:fetcher github :repo "zevlg/telega.el"))

Address AUTH_KEY_DUPLICATED

Let's say one copies ~/.telega to a new computer and starts it there. In this scenario two instances of telega would share same session auth key and telegram server would response with error AUTH_KEY_DUPLICATED (406). In root buffer you'll see Updating... constantly running and the only way to find the reason is to look into logs for the error.

Feature request: detect AUTH_KEY_DUPLICATED and recreate user session.

Add markdown authoring support

Currently when authoring a message with markdown, it is not encoded properly when send to the server, and the raw input is sent.

This may be tested by the following input and comparing with the GUI client:

    This is `verbatim`.
    This is **bold**.
    This is __italics__.
    ```
    This is multi
    line 
    verbatim
    ```

(I think these are all the markups supported in Telegram).

Cant register

Hi,

After successful receiving confirmation code, I receive an error after code input:
error in process filter: Assertion failed: registered-p

I'm using GNU Emacs 26.1 at Manjaro GNU/Linux.
tdlib 1.2.1

telega.el from git master.

How to fix this?

Decrease default verbosity for telega-server

Maybe it would be better to set a lower default value for verbosity, maybe distinguishing a release and a dev build.
After minutes I had 2 megabytes of logging... But yes, I know this has pros and cons, consider it an opinion more than an "issue" report.

Incorrect `textEntity` offset/length if surrogate pairs are used in message

telega.el decodes surrogate pairs when json is parsed. But textEntity attribute specifies offset/length in string with surrogate pairs. So we get incorrect textEntity regions. To make them correct, need to apply textEntity attributes and only then decode surrogate pairs.

This is hard to fix problem

error while executing telega command

When I execute the telega command the following message will be shown:

let: Symbol’s function definition is void: telega--root-genbuffer

Is the source code incomplete?

td/telegram/tdjson_export.h: No such file or directory

On Ubuntu 18.04

I am failing to build telega-server using the instructions provided.

/usr/bin/make -C server telega-server                                                                                                                                                                              
make[1]: Entering directory '/home/stephan/Dropbox/emacs/ext/telega.el/server'                                                                                                                                     
cc -I/usr/local/include -I. -Wall -g -pthread -o telega-server telega-server.c telega-dat.c -L/usr/local/lib -ltdjson                                                                                              
In file included from telega-server.c:10:0:                                                                                                                                                                        
./td/telegram/td_json_client.h:50:10: fatal error: td/telegram/tdjson_export.h: No such file or directory                                                                                                          
 #include "td/telegram/tdjson_export.h"                                                                                                                                                                            
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                                                                                                            
compilation terminated.                                                                                                                                                                                            
Makefile:8: recipe for target 'telega-server' failed                                                                                                                                                               
make[1]: *** [telega-server] Error 1                                                                                                                                                                               
make[1]: Leaving directory '/home/stephan/Dropbox/emacs/ext/telega.el/server'                                                                                                                                      
Makefile:6: recipe for target 'telega-server' failed                                                                                                                                                               
make: *** [telega-server] Error 2 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.