Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions rust_src/src/buffers.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
//! Functions operating on buffers.

use libc::{c_uchar, ptrdiff_t};
use libc::{c_void, c_uchar, ptrdiff_t};

use lisp::{LispObject, ExternalPtr};
use remacs_sys::{Lisp_Buffer, Lisp_Type, Vbuffer_alist, current_thread, make_lisp_ptr};
use remacs_sys::{Lisp_Buffer, Lisp_Type, Vbuffer_alist, make_lisp_ptr};
use strings::string_equal;
use lists::{car, cdr};
use threads::ThreadState;

use remacs_macros::lisp_fn;

Expand Down Expand Up @@ -107,8 +108,11 @@ pub fn get_buffer(buffer_or_name: LispObject) -> LispObject {
/// Return the current buffer as a Lisp object.
#[lisp_fn]
pub fn current_buffer() -> LispObject {
let buffer_ref = ThreadState::current_buffer();
unsafe {
let buffer_ref = (*current_thread).m_current_buffer;
LispObject::from_raw(make_lisp_ptr(buffer_ref, Lisp_Type::Lisp_Vectorlike))
LispObject::from_raw(make_lisp_ptr(
buffer_ref.as_ptr() as *mut c_void,
Lisp_Type::Lisp_Vectorlike,
))
}
}
1 change: 1 addition & 0 deletions rust_src/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ mod windows;
mod interactive;
mod process;
mod fonts;
mod threads;

#[cfg(all(not(test), target_os = "macos"))]
use alloc_unexecmacosx::OsxUnexecAlloc;
Expand Down
11 changes: 11 additions & 0 deletions rust_src/src/threads.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use std::mem;
use remacs_sys::current_thread;
use buffers::LispBufferRef;

pub struct ThreadState {}

impl ThreadState {
pub fn current_buffer() -> LispBufferRef {
unsafe { mem::transmute((*current_thread).m_current_buffer) }
}
}